From 658b6a741b7d2bd01c7e14211b4299f12c0a3ebf Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 14 Apr 2012 02:14:05 -0700 Subject: [PATCH] test: Simulate abstract methods with template modules --- .../module-polymorphism4-files/cat.rs | 14 ++++++++++ .../module-polymorphism4-files/dog.rs | 9 ++++++ .../module-polymorphism4-files/trait.rs | 9 ++++++ src/test/run-pass/module-polymorphism4.rc | 28 +++++++++++++++++++ src/test/run-pass/module-polymorphism4.rs | 14 ++++++++++ 5 files changed, 74 insertions(+) create mode 100644 src/test/run-pass/module-polymorphism4-files/cat.rs create mode 100644 src/test/run-pass/module-polymorphism4-files/dog.rs create mode 100644 src/test/run-pass/module-polymorphism4-files/trait.rs create mode 100644 src/test/run-pass/module-polymorphism4.rc create mode 100644 src/test/run-pass/module-polymorphism4.rs diff --git a/src/test/run-pass/module-polymorphism4-files/cat.rs b/src/test/run-pass/module-polymorphism4-files/cat.rs new file mode 100644 index 00000000000..9bcb03f611c --- /dev/null +++ b/src/test/run-pass/module-polymorphism4-files/cat.rs @@ -0,0 +1,14 @@ +type T = cat; + +enum cat { + howlycat, + meowlycat +} + +fn animal() -> str { "cat" } +fn talk(c: cat) -> str { + alt c { + howlycat { "howl" } + meowlycat { "meow" } + } +} diff --git a/src/test/run-pass/module-polymorphism4-files/dog.rs b/src/test/run-pass/module-polymorphism4-files/dog.rs new file mode 100644 index 00000000000..4826f48b6f3 --- /dev/null +++ b/src/test/run-pass/module-polymorphism4-files/dog.rs @@ -0,0 +1,9 @@ +type T = dog; + +enum dog { + dog +} + +fn animal() -> str { "dog" } +fn talk(_d: dog) -> str { "woof" } + diff --git a/src/test/run-pass/module-polymorphism4-files/trait.rs b/src/test/run-pass/module-polymorphism4-files/trait.rs new file mode 100644 index 00000000000..79296359d77 --- /dev/null +++ b/src/test/run-pass/module-polymorphism4-files/trait.rs @@ -0,0 +1,9 @@ +impl talky for T { + + // 'animal' and 'talk' functions are implemented by the module + // instantiating the talky trait. They are 'abstract' + fn says() -> str { + animal() + " says '" + talk(self) + "'" + } + +} diff --git a/src/test/run-pass/module-polymorphism4.rc b/src/test/run-pass/module-polymorphism4.rc new file mode 100644 index 00000000000..04348ad6dc2 --- /dev/null +++ b/src/test/run-pass/module-polymorphism4.rc @@ -0,0 +1,28 @@ +#[no_core]; + + +#[path = "module-polymorphism4-files"] +mod cat { + + import inst::*; + + #[path = "cat.rs"] + mod inst; + + #[path = "trait.rs"] + mod trait; + +} + +#[path = "module-polymorphism4-files"] +mod dog { + + import inst::*; + + #[path = "dog.rs"] + mod inst; + + #[path = "trait.rs"] + mod trait; + +} diff --git a/src/test/run-pass/module-polymorphism4.rs b/src/test/run-pass/module-polymorphism4.rs new file mode 100644 index 00000000000..074a9272a97 --- /dev/null +++ b/src/test/run-pass/module-polymorphism4.rs @@ -0,0 +1,14 @@ +// This isn't really xfailed; it's used by the +// module-polymorphism.rc test +// xfail-test + +fn main() { + import cat::trait::talky; + import dog::trait::talky; + let cat1 = cat::inst::meowlycat; + let cat2 = cat::inst::howlycat; + let dog = dog::inst::dog; + assert cat1.says() == "cat says 'meow'"; + assert cat2.says() == "cat says 'howl'"; + assert dog.says() == "dog says 'woof'"; +} \ No newline at end of file