summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/examplefiles/example_file.fy112
-rw-r--r--tests/test_examplefiles.py2
2 files changed, 114 insertions, 0 deletions
diff --git a/tests/examplefiles/example_file.fy b/tests/examplefiles/example_file.fy
new file mode 100644
index 00000000..12b3d969
--- /dev/null
+++ b/tests/examplefiles/example_file.fy
@@ -0,0 +1,112 @@
+class Person {
+ def initialize: @name age: @age {
+ """
+ This is a docstring for the Person constructor method.
+ Docstrings usually are multi-line, like this one.
+ """
+ }
+
+ def to_s {
+ # return is optional in this case, but we use it nontheless
+ return "Person with name: #{@name inspect} and age: #{@age}"
+ }
+}
+
+class PersonWithCity : Person {
+ def initialize: @name age: @age city: @city {
+ }
+
+ def to_s {
+ super to_s ++ " living in: #{@city inspect}"
+ }
+}
+
+p1 = Person new: "Johnny Jackson" age: 42
+p1 println # prints: Person with name: "Johnny Jackson" and age: 42
+
+p2 = PersonWithCity new: "John Appleseed" age: 55 city: "New York"
+p2 println # prints: Person with name: "John Appleseed" age: 55 living in: "New York"
+
+array = [1,2,3, "foo", 'bar]
+hash = <['foo => "bar", 'bar => 42]>
+tuple = (1,2,"hello","world")
+block = |x, y| {
+ x + y println
+}
+block call: [4,2]
+
+0b010101 & 0b00101 to_s: 2 . println
+0xFF & 0xAB to_s: 16 . println
+0o77 > 0o76 println
+123.123 + 0.222 println
+
+x = 0
+try {
+ 10 / x println
+} catch ZeroDivisionError => e {
+ x = 3
+ retry
+} finally {
+ "Finally, done!" println
+}
+
+def a_method: arg1 with_default_arg: arg2 (42) {
+ arg1 * arg2 println
+}
+
+a_method: 42
+a_method: 42 with_default_arg: 85
+
+class ClassWithClassMethod {
+ def self class_method1 {
+ 'works
+ }
+
+ def ClassWithClassMethod class_method2 {
+ 'this_as_well
+ }
+}
+
+ClassWithClassMethod class_method1 println
+ClassWithClassMethod class_method2 println
+
+def another_method: block {
+ 1 upto: 10 . map: block
+}
+
+# local returns
+another_method: |x| { return_local x * 2 } . inspect println
+
+
+# pattern matching:
+class PatternMatching {
+ def match_it: obj {
+ match obj {
+ case String -> "It's a String!" println
+ case Fixnum -> "It's a Number!" println
+ case _ -> "Aything else!" println
+ }
+ }
+
+ def match_with_extract: str {
+ match str {
+ # m holds the MatchData object, m1 & m2 the first and second matches
+ case /^(.*) : (.*)$/ -> |m, m1, m2|
+ "First match: #{m1}" println
+ "Second match: #{m2}" println
+ }
+ }
+}
+
+pm = PatternMatching new
+pm match_it: "foo"
+pm match_it: 42
+pm match_it: 'foo
+
+pm match_with_extract: "Hello : World!"
+
+
+# calling ruby methods:
+[3, 2, 1] reverse() each() |a| { puts(a) }
+"Hello" sub("ll", "y") println
+[3, 2, 1] map() |a| { a * 2 } inject(0) |s i| { s + i } println
diff --git a/tests/test_examplefiles.py b/tests/test_examplefiles.py
index 877cbecf..5c5e22eb 100644
--- a/tests/test_examplefiles.py
+++ b/tests/test_examplefiles.py
@@ -64,6 +64,8 @@ def check_lexer(lx, absfn, outfn):
(lx, absfn)
tokens.append((type, val))
if u''.join(ntext) != text:
+ print '\n'.join(difflib.unified_diff(u''.join(ntext).splitlines(),
+ text.splitlines()))
raise AssertionError('round trip failed for ' + absfn)
# check output against previous run if enabled