aboutsummaryrefslogtreecommitdiff
path: root/tests/object.nom
blob: 795d85e0ae3bdcb01e8d4721b372fa98831cf0fd (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env nomsu -V1
#
    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."