aboutsummaryrefslogtreecommitdiff
path: root/lib/object.nom
diff options
context:
space:
mode:
Diffstat (limited to 'lib/object.nom')
-rw-r--r--lib/object.nom41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/object.nom b/lib/object.nom
index 48e602a..e78eb14 100644
--- a/lib/object.nom
+++ b/lib/object.nom
@@ -4,6 +4,47 @@
use "core"
+test:
+ object "Dog":
+ (class Dog).genus = "Canus"
+ method [initialize %] (%.barks or= 0)
+ method [bark, woof]:
+ %barks = ("Bark!" for % in 1 to (me).barks)
+ return (%barks joined with " ")
+
+ method [get pissed off] ((me).barks += 1)
+
+ %d = (new Dog {barks:2})
+ as %d:
+ assume ((me) == %d)
+ assume ((me).barks == 2)
+ assume ((bark) == "Bark! Bark!")
+ assume ((woof) == "Bark! Bark!")
+ get pissed off
+ assume ((me).barks == 3)
+ assume ((bark) == "Bark! Bark! Bark!")
+ assume ((me).genus == "Canus")
+
+ assume ("\(%d.class)" == "Dog")
+ assume (%d.genus == "Canus")
+ assume (%d.barks == 3)
+ as (new Dog) (assume ((me).barks == 0) or barf "Default initializer failed")
+ as (new Dog {barks:1}) (assume ((bark) == "Bark!"))
+ action [foo] (as (new Dog {barks:23}) (return (me).barks))
+ assume ((foo) == 23) or barf "Oops, \(foo) != 23"
+ as (new Dog {barks:101}):
+ try (as (new Dog {barks:8}) (barf)) and if it succeeds (barf)
+ assume ((me).barks == 101) or barf ".."
+ Error in nested 'as % %' failed to properly reset 'self'
+
+ object "Corgi" extends (class Dog) (method [sploot] "splooted")
+ %corg = (new Corgi)
+ assume (%corg.barks == 0)
+ as (new Corgi {barks:1}):
+ assume ((sploot) == "splooted") or barf "subclass method failed"
+ assume ((bark) == "Bark!") or barf "inheritance failed"
+ assume ((woof) == "Bark!")
+
compile [@, me] to (Lua value "self")
compile [method %actions %body] to:
%lua = (compile as (action %actions %body))