aboutsummaryrefslogtreecommitdiff
path: root/tests/object.nom
blob: 186957d0f6dee02cf2a046ee9fc2181c4315523b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env nomsu -V2.4.4.3
#
    Tests for the object model defined in lib/object.nom

use "core"
use "lib/object.nom"
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!")

say "Object test passed."