1 USING: accessors classes.tuple.parser lexer words classes
2 sequences math kernel slots tools.test parser compiler.units
3 arrays classes.tuple eval multiline ;
4 IN: classes.tuple.parser.tests
8 { t } [ test-1 "slots" word-prop empty? ] unit-test
10 TUPLE: test-2 < test-1 ;
12 { t } [ test-2 "slots" word-prop empty? ] unit-test
13 { test-1 } [ test-2 superclass-of ] unit-test
17 { { "a" } } [ test-3 "slots" word-prop [ name>> ] map ] unit-test
19 { object } [ "a" test-3 "slots" word-prop slot-named class>> ] unit-test
21 TUPLE: test-4 < test-3 b ;
23 { { "b" } } [ test-4 "slots" word-prop [ name>> ] map ] unit-test
25 TUPLE: test-5 { a integer } ;
27 { { { "a" integer } } }
29 test-5 "slots" word-prop
30 [ [ name>> ] [ class>> ] bi 2array ] map
33 TUPLE: test-6 < test-5 { b integer } ;
35 { integer } [ "b" test-6 "slots" word-prop slot-named class>> ] unit-test
37 { { { "b" integer } } }
39 test-6 "slots" word-prop
40 [ [ name>> ] [ class>> ] bi 2array ] map
43 TUPLE: test-7 { b integer initial: 3 } ;
45 { 3 } [ "b" test-7 "slots" word-prop slot-named initial>> ] unit-test
47 TUPLE: test-8 { b integer read-only } ;
49 { t } [ "b" test-8 "slots" word-prop slot-named read-only>> ] unit-test
53 [ "IN: classes.tuple.parser.tests TUPLE: foo < test-1 < ;" eval( -- ) ]
54 [ error>> invalid-slot-name? ]
57 [ "IN: classes.tuple.parser.tests TUPLE: foo :" eval( -- ) ]
58 [ error>> invalid-slot-name? ]
61 [ "IN: classes.tuple.parser.tests TUPLE: foo" eval( -- ) ]
62 [ error>> unexpected-eof? ]
66 [ "IN: classes.tuple.parser.tests USE: alien TUPLE: foo { slot dll } ;" eval( -- ) ]
67 [ error>> bad-initial-value? ]
70 [ f ] [ \ foo tuple-class? ] unit-test
74 [ "IN: classes.tuple.parser.tests USE: arrays TUPLE: foo { slot array initial: 5 } ;" eval( -- ) ]
75 [ error>> bad-initial-value? ]
78 [ f ] [ \ foo tuple-class? ] unit-test
81 [ "IN: classes.tuple.parser.tests USE: arrays TUPLE: foo slot { slot array } ;" eval( -- ) ]
82 [ error>> duplicate-slot-names? ]
85 { f } [ \ foo tuple-class? ] unit-test
89 { test-1 test-2 test-3 test-4 test-5 test-6 test-7 test-8 foo }
90 [ dup class? [ forget-class ] [ drop ] if ] each
91 ] with-compilation-unit
94 TUPLE: syntax-test bar baz ;
96 { T{ syntax-test } } [ T{ syntax-test } ] unit-test
97 { T{ syntax-test f { 2 3 } { 4 { 5 } } } }
98 [ T{ syntax-test { bar { 2 3 } } { baz { 4 { 5 } } } } ] unit-test
101 TUPLE: parsing-corner-case x ;
103 { T{ parsing-corner-case f 3 } } [
105 "USE: classes.tuple.parser.tests"
106 "T{ parsing-corner-case"
110 } "\n" join eval( -- tuple )
113 { T{ parsing-corner-case f 3 } } [
115 "USE: classes.tuple.parser.tests"
116 "T{ parsing-corner-case"
119 } "\n" join eval( -- tuple )
122 { T{ parsing-corner-case f 3 } } [
124 "USE: classes.tuple.parser.tests"
125 "T{ parsing-corner-case {"
128 } "\n" join eval( -- tuple )
134 "USE: classes.tuple.parser.tests T{ parsing-corner-case"
136 } "\n" join eval( -- tuple )
137 ] [ error>> unexpected-eof? ] must-fail-with
141 "USE: classes.tuple.parser.tests T{ parsing-corner-case {"
143 } "\n" join eval( -- tuple )
144 ] [ error>> unexpected-eof? ] must-fail-with
146 TUPLE: bad-inheritance-tuple ;
148 "IN: classes.tuple.parser.tests TUPLE: bad-inheritance-tuple < bad-inheritance-tuple ;" eval( -- )
149 ] [ error>> bad-inheritance? ] must-fail-with
151 TUPLE: bad-inheritance-tuple2 ;
152 TUPLE: bad-inheritance-tuple3 < bad-inheritance-tuple2 ;
154 "IN: classes.tuple.parser.tests TUPLE: bad-inheritance-tuple2 < bad-inheritance-tuple3 ;" eval( -- )
155 ] [ error>> bad-inheritance? ] must-fail-with
161 { } [ "IN: classes.tuple.parser.tests TUPLE: u < tup ;" eval( -- ) ] unit-test
163 { t } [ u new tup? ] unit-test