"{ Package: 'exept:regression' }"
"{ NameSpace: RegressionTests }"
TestCase subclass:#JavaScriptTests
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'Languages-JavaScript-Compiling & Parsing'
!
!JavaScriptTests class methodsFor:'documentation'!
documentation
"
documentation to be added.
[author:]
cg (cg@FUSI)
[instance variables:]
[class variables:]
[see also:]
"
!
history
"Created: / 12-04-2005 / 11:54:25 / cg"
! !
!JavaScriptTests methodsFor:'helpers'!
doTestEachFromSpec:spec
spec do:[:triple |
|str checkSelectorOrNil valExpected val expectError|
str := triple first.
checkSelectorOrNil := triple second.
expectError := false.
valExpected := triple third.
valExpected isArray ifTrue:[
valExpected size > 0 ifTrue:[
valExpected first == #eval ifTrue:[
valExpected := Parser evaluate:valExpected second
] ifFalse:[
valExpected first == #error ifTrue:[
expectError := true
].
].
].
].
expectError ifTrue:[
self
should:[ (JavaScriptParser parseExpression:str) evaluate ]
raise:Error
] ifFalse:[
val := (JavaScriptParser parseExpression:str) evaluate.
checkSelectorOrNil notNil ifTrue:[
self assert:(val perform:checkSelectorOrNil).
].
self assert:(val = valExpected).
].
]
!
execute:code for:receiver arguments:arguments expect:expectedResult
|f result|
"/ Transcript showCR:(thisContext sender selector , '...').
f := JavaScriptCompiler
compile:code
forClass:nil
inCategory:nil
notifying:nil.
"/ f inspect.
self assert:(f ~~ #Error).
self assert:(f notNil).
f decompileTo:Transcript.
result := f valueWithReceiver:receiver arguments:arguments.
self assert:(result = expectedResult).
!
execute:code for:receiver arguments:arguments expectError:expectedError
|f|
"/ Transcript showCR:(thisContext sender selector , '...').
f := JavaScriptCompiler
compile:code
forClass:nil
inCategory:nil
notifying:nil.
expectedError == #ParseError ifTrue:[
self assert:(f == #Error).
^ self
].
self assert:(f ~~ #Error).
self assert:(f notNil).
f decompileTo:Transcript.
self
should:[f valueWithReceiver:receiver arguments:arguments]
raise:expectedError
! !
!JavaScriptTests methodsFor:'tests'!
testArray01
self
execute:'test(arr) {
return arr[1];
}'
for:nil
arguments:#( #(10 20 30) )
expect:10
"
self run:#testArray01
self new testArray01
"
!
testArray02
self
execute:'test(arr) {
arr[1];
}'
for:nil
arguments:#( #(10 20 30) )
expect:nil
"
self run:#testArray02
self new testArray02
"
!
testArray03
self
execute:'test(arr, val) {
arr[1] = val;
return arr;
}'
for:nil
arguments:#( #(10 20 30) 99 )
expect:#(99 20 30)
"
self run:#testArray03
self new testArray03
"
!
testConditionalExpression01
self
execute:'max(a, b) {
return (a > b) ? a : b;
}'
for:nil
arguments:#(10 20)
expect:20
"
self run:#testConditionalExpression01
self new testConditionalExpression01
"
!
testConditionalExpression02
self
execute:'max(a, b) {
return (a < b) ? a : b;
}'
for:nil
arguments:#(10 20)
expect:10
"
self run:#testConditionalExpression02
self new testConditionalExpression02
"
!
testFor01
self
execute:'test(arg) {
var n;
for (n = 0; n < 10; n++) {
Transcript.show("hello ");
Transcript.showCR(n);
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testFor01
self new testFor01
"
!
testFor01b
|outStream output|
outStream := '' writeStream.
self
execute:'test(arg, out) {
var n;
for (n = 0; n < arg; n++) {
out.show("hello ");
out.showCR(n);
}
}'
for:nil
arguments:(Array with:4 with:outStream)
expect:nil.
output := outStream contents.
self assert:(output = 'hello 0
hello 1
hello 2
hello 3
').
"
self run:#testFor01b
self new testFor01b
"
!
testFor01c
self
execute:'test(arg) {
var n, m;
for (n = 0, m = 10; n < 10; n++, m--) {
Transcript.show(n);
Transcript.show(" -> ");
Transcript.showCR(m);
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testFor01c
self new testFor01c
"
!
testFor02
|outStream output|
outStream := '' writeStream.
self
execute:'test(arg, out) {
var n;
for (n = 0; n < arg; n++) {
out.show("hello ");
out.showCR(n);
}
}'
for:nil
arguments:(Array with:4 with:outStream)
expect:nil.
output := outStream contents.
self assert:(output = 'hello 0
hello 1
hello 2
hello 3
').
"
self run:#testFor02
self new testFor02
"
!
testFor02b
|outStream output|
outStream := '' writeStream.
self
execute:'test(arg, out) {
var n;
for (n = 0; n < arg; ) {
out.show("hello ");
out.showCR(n++);
}
}'
for:nil
arguments:(Array with:4 with:outStream)
expect:nil.
output := outStream contents.
self assert:(output = 'hello 0
hello 1
hello 2
hello 3
').
"
self run:#testFor02b
self new testFor02b
"
!
testFor03b
|outStream output|
outStream := '' writeStream.
self
execute:'test(arg, out) {
var n = 0;
for (; n < arg; ) {
out.show("hello ");
out.showCR(n++);
}
}'
for:nil
arguments:(Array with:4 with:outStream)
expect:nil.
output := outStream contents.
self assert:(output = 'hello 0
hello 1
hello 2
hello 3
').
"
self run:#testFor03b
self new testFor03b
"
!
testFor04b
|outStream output|
outStream := '' writeStream.
self
execute:'test(arg, out) {
var n = 0;
for (; ; ) {
if (n >= arg) return;
out.show("hello ");
out.showCR(n++);
}
}'
for:nil
arguments:(Array with:4 with:outStream)
expect:nil.
output := outStream contents.
self assert:(output = 'hello 0
hello 1
hello 2
hello 3
').
"
self run:#testFor04b
self new testFor04b
"
!
testFor05
self
execute:'test(arg) {
for (var n = 0; n < arg; n++) {
Transcript.showCR(n);
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testFor05
self new testFor05
"
!
testFor05b
|outStream output|
outStream := '' writeStream.
self
execute:'test(arg, out) {
var n = 0;
for (; ; ) {
if (n >= arg) break;
out.show("hello ");
out.showCR(n++);
}
}'
for:nil
arguments:(Array with:4 with:outStream)
expect:nil.
output := outStream contents.
self assert:(output = 'hello 0
hello 1
hello 2
hello 3
').
"
self run:#testFor05b
self new testFor05b
"
!
testFor05c
self
execute:'test(arg, out) {
var n = 0;
for (; ; ) {
if (n >= arg) break;
out.show("hello ");
out.showCR(n++);
}
}'
for:nil
arguments:(Array with:4 with:Transcript)
expect:nil.
"
self run:#testFor05c
self new testFor05c
"
!
testFor05d
self
execute:'test(arg, out) {
var n = 0;
for (; ; ) {
n++;
if (n >= arg) break;
if (n == 2) continue;
out.show("hello ");
out.showCR(n);
}
}'
for:nil
arguments:(Array with:5 with:Transcript)
expect:nil.
"
self run:#testFor05d
self new testFor05d
"
!
testFor06
self
execute:'test(arg) {
for (var n = 0, var m = 10; n < 10; n++, m--) {
Transcript.show(n);
Transcript.show(" -> ");
Transcript.showCR(m);
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testFor06
self new testFor06
"
!
testIf01
self
execute:'max(a, b) {
if (a > b) return a;
return b;
}'
for:nil
arguments:#(10 20)
expect:20
"
self run:#testIf01
self new testIf01
"
!
testIf02
self
execute:'max(a, b) {
if (a > b) ;
else return b;
return a;
}'
for:nil
arguments:#(10 20)
expect:20
"
self run:#testIf02
self new testIf02
"
!
testIf03
self
execute:'max(a, b) {
if (a > b) return a;
else return b;
}'
for:nil
arguments:#(10 20)
expect:20
"
self run:#testIf03
self new testIf03
"
!
testLiteralReturn01
self
execute:'function f() { return (0); }'
for:nil
arguments:#()
expect:0
"
self run:#testLiteralReturn01
self new testLiteralReturn01
"
!
testLiteralReturn02
self
execute:'function f() { return (0.0); }'
for:nil
arguments:#()
expect:0.0
"
self run:#testLiteralReturn02
self new testLiteralReturn02
"
!
testLiteralReturn03
self
execute:'function f() { return ("foo"); }'
for:nil
arguments:#()
expect:'foo'
"
self run:#testLiteralReturn03
self new testLiteralReturn03
"
!
testLiteralReturn04
self
execute:'function f() { return (true); }'
for:nil
arguments:#()
expect:true
"
self run:#testLiteralReturn04
self new testLiteralReturn04
"
!
testLiteralReturn05
self
execute:'function f() { return (false); }'
for:nil
arguments:#()
expect:false
"
self run:#testLiteralReturn05
self new testLiteralReturn05
"
!
testLiteralReturn06
self
execute:'function f() { return (null); }'
for:nil
arguments:#()
expect:nil
"
self run:#testLiteralReturn06
self new testLiteralReturn06
"
!
testLiteralReturn07
self
execute:'function f() { return (nil); }'
for:nil
arguments:#()
expect:nil
"
self run:#testLiteralReturn07
self new testLiteralReturn07
"
!
testLiteralReturn08
self
execute:'function f() { return ("hello"); }'
for:nil
arguments:#()
expect:'hello'
"
self run:#testLiteralReturn08
self new testLiteralReturn08
"
!
testNew01
self
execute:'test() {
var a;
a = Array.new(5);
return a;
}'
for:nil
arguments:#()
expect:#(nil nil nil nil nil).
"
self run:#testNew01
self new testNew01
"
!
testNew02
self
execute:'test() {
var a;
a = new Array(5);
return a;
}'
for:nil
arguments:#()
expect:#(nil nil nil nil nil).
"
self run:#testNew02
self new testNew02
"
!
testNew03
self
execute:'test() {
var days;
days = new Array(7);
days[1] = "Monday";
days[2] = "Tuesday";
days[3] = "Wednesday";
days[4] = "Thursday";
days[5] = "Friday";
days[6] = "Saturday";
days[7] = "Sunday";
return days;
}'
for:nil
arguments:#()
expect:#('Monday' 'Tuesday' 'Wednesday' 'Thursday' 'Friday' 'Saturday' 'Sunday')
"
self run:#testNew03
self new testNew03
"
!
testNew04
self
execute:'test() {
var days;
days = new Array(7,2);
days[1,1] = "Monday";
days[2,1] = "Tuesday";
days[3,1] = "Wednesday";
days[4,1] = "Thursday";
days[5,1] = "Friday";
days[6,1] = "Saturday";
days[7,1] = "Sunday";
return days;
}'
for:nil
arguments:#()
expect:#('Monday' 'Tuesday' 'Wednesday' 'Thursday' 'Friday' 'Saturday' 'Sunday')
"
self run:#testNew04
self new testNew04
"
!
testOperators01
self
execute:'expr(a, b) {
return (a + 0);
}'
for:nil
arguments:#(10 20)
expect:10
"
self run:#testOperators01
self new testOperators01
"
!
testOperators02
self
execute:'expr(a, b) {
return (a + 1);
}'
for:nil
arguments:#(10 20)
expect:11
"
self run:#testOperators02
self new testOperators02
"
!
testOperators03
self
execute:'expr(a, b) {
return (a - 1);
}'
for:nil
arguments:#(10 20)
expect:9
"
self run:#testOperators03
self new testOperators03
"
!
testOperators04
self
execute:'expr(a, b) {
return (a + a);
}'
for:nil
arguments:#(10 20)
expect:20
"
self run:#testOperators04
self new testOperators04
"
!
testOperators05
self
execute:'expr(a, b) {
return (a * 0);
}'
for:nil
arguments:#(10 20)
expect:0
"
self run:#testOperators05
self new testOperators05
"
!
testOperators06
self
execute:'expr(a, b) {
return (a * 1);
}'
for:nil
arguments:#(10 20)
expect:10
"
self run:#testOperators06
self new testOperators06
"
!
testOperators07
self
execute:'expr(a, b) {
return (a * -1);
}'
for:nil
arguments:#(10 20)
expect:-10
"
self run:#testOperators07
self new testOperators07
"
!
testOperators08
self
execute:'expr(a, b) {
return (a * 10);
}'
for:nil
arguments:#(10 20)
expect:100
"
self run:#testOperators08
self new testOperators08
"
!
testOperators09
self
execute:'expr(a, b) {
return (a * a);
}'
for:nil
arguments:#(10 20)
expect:100
"
self run:#testOperators09
self new testOperators09
"
!
testOperators10
self
execute:'expr(a, b) {
return (a * b);
}'
for:nil
arguments:#(10 20)
expect:200
"
self run:#testOperators10
self new testOperators10
"
!
testOperators11
self
execute:'expr(a, b) {
return (a - b);
}'
for:nil
arguments:#(10 20)
expect:-10
"
self run:#testOperators11
self new testOperators11
"
!
testOperators12
self
execute:'expr(a) {
return (-a);
}'
for:nil
arguments:#(10)
expect:-10
"
self run:#testOperators12
self new testOperators12
"
!
testOperators13
self
execute:'expr(a, b) {
return (a - -b);
}'
for:nil
arguments:#(10 20)
expect:30
"
self run:#testOperators13
self new testOperators13
"
!
testOperators14
self
execute:'expr(a, b) {
return (a * -b);
}'
for:nil
arguments:#(10 1)
expect:-10
"
self run:#testOperators14
self new testOperators14
"
!
testOperators15
self
execute:'expr(a, b) {
return (a / 1.0);
}'
for:nil
arguments:#(10 1)
expect:10.0
"
self run:#testOperators15
self new testOperators15
"
!
testOperators16a
self
execute:'expr(a, b) {
return (a++);
}'
for:nil
arguments:#(10 1)
expectError:#ParseError
"
self run:#testOperators16a
self new testOperators16a
"
!
testOperators16b
self
execute:'expr(a, b) {
var aa = a;
return (aa++);
}'
for:nil
arguments:#(10 1)
expect:10
"
self run:#testOperators16b
self new testOperators16b
"
!
testOperators17a
self
execute:'expr(a, b) {
return (a == b);
}'
for:nil
arguments:#(10 10)
expect:true
"
self run:#testOperators17a
self new testOperators17a
"
!
testOperators17b
self
execute:'expr(a, b) {
return (a == b);
}'
for:nil
arguments:#(10 11)
expect:false
"
self run:#testOperators17b
self new testOperators17b
"
!
testOperators17c
self
execute:'expr(a, b) {
return (a !!= b);
}'
for:nil
arguments:#(10 10)
expect:false
"
self run:#testOperators17c
self new testOperators17c
"
!
testOperators17d
self
execute:'expr(a, b) {
return (a !!= b);
}'
for:nil
arguments:#(10 11)
expect:true
"
self run:#testOperators17d
self new testOperators17d
"
!
testOperators18a
self
execute:'expr(a, b) {
return (a == b);
}'
for:nil
arguments:#(10 10.0)
expect:true
"
self run:#testOperators18a
self new testOperators18a
"
!
testOperators18b
self
execute:'expr(a, b) {
return (a !!= b);
}'
for:nil
arguments:#(10 11.0)
expect:true
"
self run:#testOperators19a
self new testOperators19a
"
!
testOperators19a
self
execute:'expr(a, b) {
return (a === b);
}'
for:nil
arguments:#(10 10)
expect:true
"
self run:#testOperators19a
self new testOperators19a
"
!
testOperators19b
self
execute:'expr(a, b) {
return (a === b);
}'
for:nil
arguments:#(10 10.0)
expect:false
"
self run:#testOperators19b
self new testOperators19b
"
!
testOperators19c
self
execute:'expr(a, b) {
return (a !!== b);
}'
for:nil
arguments:#(10 10)
expect:false
"
self run:#testOperators19c
self new testOperators19c
"
!
testOperators19d
self
execute:'expr(a, b) {
return (a !!== b);
}'
for:nil
arguments:#(10 10.0)
expect:true
"
self run:#testOperators19d
self new testOperators19d
"
!
testOperators20a
self
execute:'expr(a, b) {
return (a == b);
}'
for:nil
arguments:#('foo' 'foo')
expect:true
"
self run:#testOperators20a
self new testOperators20a
"
!
testOperators20b
self
execute:'expr(a, b) {
return (a == b);
}'
for:nil
arguments:#('foo' 'Foo')
expect:false
"
self run:#testOperators20b
self new testOperators20b
"
!
testOperators20c
self
execute:'expr(a, b) {
return (a !!= b);
}'
for:nil
arguments:#('foo' 'Foo')
expect:true
"
self run:#testOperators20c
self new testOperators20c
"
!
testOperators20d
self
execute:'expr(a, b) {
return (a !!= b);
}'
for:nil
arguments:#('foo' 'foo')
expect:false
"
self run:#testOperators20d
self new testOperators20d
"
!
testOperators21a
self
execute:'expr(a) {
return (a !!= 0);
}'
for:nil
arguments:#('foo')
expect:true
"
self run:#testOperators21a
self new testOperators21a
"
!
testOperators21b
self
execute:'expr(a) {
return (a !!= 0);
}'
for:nil
arguments:#(0)
expect:false
"
self run:#testOperators21b
self new testOperators21b
"
!
testOperators22a
self
execute:'expr(a) {
return (a > 0);
}'
for:nil
arguments:#(0)
expect:false
"
self run:#testOperators22a
self new testOperators22a
"
!
testOperators22b
self
execute:'expr(a) {
return (a > 0);
}'
for:nil
arguments:#(1)
expect:true
"
self run:#testOperators22b
self new testOperators22b
"
!
testOperators23
self
execute:'expr(a) {
return (-a);
}'
for:nil
arguments:#(1)
expect:-1
"
self run:#testOperators23
self new testOperators23
"
!
testOperators24a
self
execute:'expr(a) {
return (a / 4);
}'
for:nil
arguments:#(4)
expect:1
"
self run:#testOperators24a
self new testOperators24a
"
!
testOperators24b
self
execute:'expr(a) {
return (a / 4.0);
}'
for:nil
arguments:#(4)
expect:1.0
"
self run:#testOperators24b
self new testOperators24b
"
!
testOperators24c
self
execute:'expr(a) {
return (a / 4);
}'
for:nil
arguments:#(4.0)
expect:1.0
"
self run:#testOperators24c
self new testOperators24c
"
!
testOperators24d
self
execute:'expr(a) {
return (a / 4.0);
}'
for:nil
arguments:#(4.0)
expect:1.0
"
self run:#testOperators24d
self new testOperators24d
"
!
testOperators25a
self
execute:'expr(a) {
return (a % 4);
}'
for:nil
arguments:#(4)
expect:0
"
self run:#testOperators25a
self new testOperators25a
"
!
testOperators25b
self
execute:'expr(a) {
return (a % 4.0);
}'
for:nil
arguments:#(4)
expect:0.0
"
self run:#testOperators25b
self new testOperators25b
"
!
testOperators25c
self
execute:'expr(a) {
return (a % 4);
}'
for:nil
arguments:#(4.0)
expect:0.0
"
self run:#testOperators25c
self new testOperators25c
"
!
testOperators25d
self
execute:'expr(a) {
return (a % 4.0);
}'
for:nil
arguments:#(4.0)
expect:0.0
"
self run:#testOperators25d
self new testOperators25d
"
!
testOperators25e
self
execute:'expr(a) {
return (a % 4);
}'
for:nil
arguments:#(-4)
expect:0
"
self run:#testOperators25e
self new testOperators25e
"
!
testOperators25f
self
execute:'expr(a) {
return (a % 4.0);
}'
for:nil
arguments:#(-4)
expect:0.0
"
self run:#testOperators25f
self new testOperators25f
"
!
testOperators25g
self
execute:'expr(a) {
return (a % 4);
}'
for:nil
arguments:#(-4.0)
expect:0.0
"
self run:#testOperators25g
self new testOperators25g
"
!
testOperators25h
self
execute:'expr(a) {
return (a % 4.0);
}'
for:nil
arguments:#(-4.0)
expect:0.0
"
self run:#testOperators25h
self new testOperators25h
"
!
testOperators26a
self
execute:'expr(a) {
var x = a;
return (x++);
}'
for:nil
arguments:#(1)
expect:1
"
self run:#testOperators26a
self new testOperators26a
"
!
testOperators26b
self
execute:'expr(a) {
var x = a;
return (x--);
}'
for:nil
arguments:#(1)
expect:1
"
self run:#testOperators26b
self new testOperators26b
"
!
testOperators26c
self
execute:'expr(a) {
var x = a;
return (++x);
}'
for:nil
arguments:#(1)
expect:2
"
self run:#testOperators26c
self new testOperators26c
"
!
testOperators26d
self
execute:'expr(a) {
var x = a;
return (--x);
}'
for:nil
arguments:#(1)
expect:0
"
self run:#testOperators26d
self new testOperators26d
"
!
testOperators27a
self
execute:'expr(a) {
var x = a;
x++;
return (x);
}'
for:nil
arguments:#(1)
expect:2
"
self run:#testOperators27a
self new testOperators27a
"
!
testOperators27b
self
execute:'expr(a) {
var x = a;
x--;
return (x);
}'
for:nil
arguments:#(1)
expect:0
"
self run:#testOperators27b
self new testOperators27b
"
!
testOperators27c
self
execute:'expr(a) {
var x = a;
++x;
return (x);
}'
for:nil
arguments:#(1)
expect:2
"
self run:#testOperators27c
self new testOperators27c
"
!
testOperators27d
self
execute:'expr(a) {
var x = a;
--x;
return (x);
}'
for:nil
arguments:#(1)
expect:0
"
self run:#testOperators27d
self new testOperators27d
"
!
testOperators28
self
execute:'expr(a) {
return (!! a);
}'
for:nil
arguments:#(true)
expect:false
"
self run:#testOperators28
self new testOperators28
"
!
testOperators29
self
execute:'expr(a, b, c, d) {
var s = 0;
s += a;
s += b;
s += c;
s += d;
return (s);
}'
for:nil
arguments:#(1 2 3 4)
expect:10
"
self run:#testOperators29
self new testOperators29
"
!
testOperators30
self
execute:'expr(a, b, c, d) {
var s = 1;
s *= a;
s *= b;
s *= c;
s *= d;
return (s);
}'
for:nil
arguments:#(1 2 3 4)
expect:24
"
self run:#testOperators30
self new testOperators30
"
!
testOperators31a
self
execute:'expr(a) {
return (a << 1);
}'
for:nil
arguments:#(1)
expect:2
"
self run:#testOperators31a
self new testOperators31a
"
!
testOperators31b
self
execute:'expr(a) {
return (a << 32);
}'
for:nil
arguments:#(1)
expect:16r100000000
"
self run:#testOperators31b
self new testOperators31b
"
!
testOperators32a
self
execute:'expr(a) {
return (a >> 1);
}'
for:nil
arguments:#(2)
expect:1
"
self run:#testOperators32a
self new testOperators32a
"
!
testOperators33
self
execute:'expr(a, b) {
var s = 0;
s |= a;
s |= b;
return (s);
}'
for:nil
arguments:#(1 4)
expect:5
"
self run:#testOperators33
self new testOperators33
"
!
testOperators34
self
execute:'expr(a, b) {
var s = 0xFFFF;
s &= a;
s &= b;
return (s);
}'
for:nil
arguments:#(3 5)
expect:1
"
self run:#testOperators34
self new testOperators34
"
!
testOperators35a
self
execute:'expr(a) {
var s = 0xFFFF;
s ^= a;
return (s);
}'
for:nil
arguments:#(1)
expect:16rFFFE
"
self run:#testOperators35a
self new testOperators35a
"
!
testOperators35b
self
execute:'expr(a) {
var s = 0xFFFF;
s = s ^ a;
return (s);
}'
for:nil
arguments:#(1)
expect:16rFFFE
"
self run:#testOperators35b
self new testOperators35b
"
!
testPrecidences01
self
execute:'expr(a, b) {
return (a + 4 * 5 + b);
}'
for:nil
arguments:#(10 20)
expect:(10 + (4 * 5) + 20)
"
self run:#testPrecidences01
self new testPrecidences01
"
!
testPrecidences02
self
execute:'expr(a, b) {
return (a * 4 + b * 5);
}'
for:nil
arguments:#(10 20)
expect:140
"
self run:#testPrecidences02
self new testPrecidences02
"
!
testPrecidences03
self
execute:'expr(a, b) {
return -(a + b);
}'
for:nil
arguments:#(10 20)
expect:-30
"
self run:#testPrecidences03
self new testPrecidences03
"
!
testPrecidences04
self
execute:'expr(a, b) {
return -a + b;
}'
for:nil
arguments:#(10 20)
expect:10
"
self run:#testPrecidences04
self new testPrecidences04
"
!
testPrecidences05
self
execute:'expr(a, b) {
return -a + -b;
}'
for:nil
arguments:#(10 20)
expect:-30
"
self run:#testPrecidences05
self new testPrecidences05
"
!
testRecursion01
self
execute:'test(n) {
function factorial(n) {
if (n > 0) {
return n * factorial(n-1);
} else {
return 1;
}
};
return factorial(n);
}'
for:nil
arguments:#(10)
expect:(10 factorial)
"
self run:#testRecursion01
self new testRecursion01
"
"Modified: / 20-04-2005 / 11:55:30 / cg"
!
testScanner01
self
execute:'f() { }'
for:nil
arguments:#()
expect:nil
"
self run:#testScanner01
self new testScanner01
"
!
testScanner02
self
execute:'f(a) { }'
for:nil
arguments:#(1)
expect:nil
"
self run:#testScanner02
self new testScanner02
"
!
testScanner03
self
execute:'f(a, b) { }'
for:nil
arguments:#(1 2)
expect:nil
"
self run:#testScanner03
self new testScanner03
"
!
testScanner04
self
execute:'f(a, b) { return (null); }'
for:nil
arguments:#(1 2)
expect:nil
"
self run:#testScanner04
self new testScanner04
"
!
testScanner05
self
execute:'f(a, b) { return (null); }'
for:nil
arguments:#(1)
expectError:(Method wongNumberOfArgumentsSignal)
"
self run:#testScanner05
self new testScanner05
"
"Modified: / 20-04-2005 / 11:53:20 / cg"
!
testScanner06
self
execute:'f() { /* a comment */ return (null); }'
for:nil
arguments:#()
expect:nil
"
self run:#testScanner06
self new testScanner06
"
!
testScanner07
self
execute:'f() { // an EOL comment
return (null); }'
for:nil
arguments:#()
expect:nil
"
self run:#testScanner07
self new testScanner07
"
!
testScanner08
self
execute:'f() { // a comment in an /* an EOL comment
return (null); }'
for:nil
arguments:#()
expect:nil
"
self run:#testScanner08
self new testScanner08
"
!
testScanner09
self
execute:'f() { // a comment in an /* an EOL */ comment
return (null); }'
for:nil
arguments:#()
expect:nil
"
self run:#testScanner09
self new testScanner09
"
!
testScanner10
self
execute:'f() { /** a comment */
return (null); }'
for:nil
arguments:#()
expect:nil
"
self run:#testScanner10
self new testScanner10
"
!
testScanner11
self
execute:'f() { /**/
return (null); }'
for:nil
arguments:#()
expect:nil
"
self run:#testScanner11
self new testScanner11
"
!
testScanner12
self
execute:'f() { /*/
return (null); }'
for:nil
arguments:#()
expectError:#ParseError
"
self run:#testScanner12
self new testScanner12
"
!
testScanner13
self
execute:'f_1() { /*/
return (null); }'
for:nil
arguments:#()
expectError:#ParseError
"
self run:#testScanner13
self new testScanner13
"
!
testString01
self
execute:'test(str) {
return "foo".size;
}'
for:nil
arguments:#( nil )
expect:3
"
self run:#testString01
self new testString01
"
!
testString02
self
execute:'test(str) {
return str.size();
}'
for:nil
arguments:#( 'hello' )
expect:5
"
self run:#testString02
self new testString02
"
!
testString03
self
execute:'test(str) {
return str.size;
}'
for:nil
arguments:#( 'hello' )
expect:5
"
self run:#testString03
self new testString03
"
!
testVarDeclaration01
self
execute:'expr(a, b) {
var x = 10;
return x;
}'
for:nil
arguments:#(10 20)
expect:10
"
self run:#testVarDeclaration01
self new testVarDeclaration01
"
!
testVarDeclaration02
self
execute:'expr(a, b) {
var x = 10;
return (a + x);
}'
for:nil
arguments:#(10 20)
expect:20
"
self run:#testVarDeclaration02
self new testVarDeclaration02
"
!
testVarDeclaration03
self
execute:'expr(a, b) {
var x = 10;
var y = x+10;
return (y);
}'
for:nil
arguments:#(10 20)
expect:20
"
self run:#testVarDeclaration03
self new testVarDeclaration03
"
!
testVarDeclaration04
self
execute:'expr(a, b) {
var y = x+10;
var x = 10;
return (y);
}'
for:nil
arguments:#(10 20)
expectError:#ParseError
"
self run:#testVarDeclaration04
self new testVarDeclaration04
"
!
testVarDeclaration05
"our JS only allows variables declarations at a blocks top"
self
execute:'expr(a, b) {
var y = 10;
y = y + 10;
var x = 10;
return (y);
}'
for:nil
arguments:#(10 20)
expectError:#ParseError
"
self run:#testVarDeclaration05
self new testVarDeclaration05
"
!
testVarDeclaration06
self
execute:'expr(x) {
var y = x + 20;
return (y);
}'
for:nil
arguments:#(10)
expect:30
"
self run:#testVarDeclaration06
self new testVarDeclaration06
"
!
testVarDeclaration07
self
execute:'expr(x) {
var x = x + 20;
return (x);
}'
for:nil
arguments:#(10)
expectError:Error
"
self run:#testVarDeclaration07
self new testVarDeclaration07
"
!
testWhile01
self
execute:'test(arg) {
var n;
n = arg;
while (n > 0) {
n--;
Transcript.showCR("hello");
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testWhile01
self new testWhile01
"
!
testWhile02
self
execute:'test(arg) {
var n;
n = 1;
while (n <= arg) {
n++;
Transcript.showCR("hello");
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testWhile02
self new testWhile02
"
!
testWhile03
self
execute:'test(arg) {
var n;
n = 1;
while (n <= arg) {
Transcript.showCR(n++);
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testWhile03
self new testWhile03
"
!
testWhile04
self
execute:'test(arg) {
var n;
n = 1;
while (n++ <= arg) {
Transcript.showCR(n);
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testWhile04
self new testWhile04
"
!
testWhile04b
self
execute:'test(arg) {
var n;
n = 1;
while (n++ <= arg) {
Transcript.showCR(n);
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testWhile04b
self new testWhile04b
"
!
testWhile05
self
execute:'test(arg) {
var n;
n = 1;
while (n++ <= arg) {
if (n == 3) continue;
Transcript.showCR(n);
}
}'
for:nil
arguments:#(5)
expect:nil
"
self run:#testWhile05
self new testWhile05
"
!
test_01_parse_literals
|spec|
spec := #(
('1' #isInteger 1)
('0' #isInteger 0)
('-1' #isInteger -1)
('12345678901234567890' #isInteger 12345678901234567890)
('0x0' #isInteger 0)
('0x1' #isInteger 1)
('0xFFFF' #isInteger 16rFFFF)
('0xffff' #isInteger 16rFFFF)
('0xFFFFFFFFFFFFFFFF' #isInteger 16rFFFFFFFFFFFFFFFF)
('0777' #isInteger 8r777)
('1.2345' #isFloat 1.2345)
('-1.2345' #isFloat -1.2345)
('nil' #isNil nil)
('null' #isNil nil)
('true' nil true)
('false' nil false)
('"aString"' #isString 'aString' )
('''anotherString''' #isString 'anotherString' )
('''anoth"er"String''' #isString 'anoth"er"String' )
('"anoth''er''String"' #isString 'anoth''er''String' )
('"hello"' #isString 'hello' )
('"\b"' #isString (#eval 'Character backspace asString') )
('"\f"' #isString (#eval 'Character ff asString') )
('"\t"' #isString (#eval 'Character tab asString') )
('"\r"' #isString (#eval 'Character return asString') )
('"\n"' #isString (#eval 'Character nl asString') )
('[ 1 , 2 , 3]' #isArray #(1 2 3) )
('[1,2,3]' #isArray #(1 2 3) )
('[1,2,3]' #isArray #(1 2 3) )
('["a","b","c"]' #isArray #('a' 'b' 'c') )
('[]' #isArray #() )
('[null]' #isArray #( nil ) )
('[1,[2,[3]]]' #isArray #(1 (2 (3))) )
).
self doTestEachFromSpec:spec.
"
self run:#test_01_parse_literals
self new test_01_parse_literals
"
!
test_02_parse_literals2
|spec|
spec := #(
('"\x01"' #isString (#eval '(Character value:1) asString') )
).
self doTestEachFromSpec:spec.
"
self run:#test_02_parse_literals2
self new test_02_parse_literals2
"
!
test_03_parse_comments
|spec|
spec := #(
('// ignored
1' #isInteger 1 )
('/* ignored */ 2' #isInteger 2 )
('/* ign//ored */ 3' #isInteger 3 )
).
self doTestEachFromSpec:spec.
"
self run:#test_03_parse_comments
self new test_03_parse_comments
"
!
test_10_parse_expression1
|spec|
spec := #(
('1+1' nil 2 )
('1-1' nil 0 )
('2*2' nil 4 )
('1234567890*1234567890' nil 1524157875019052100 )
('4/2' nil 2 )
('5%3' nil 2 )
('1>0' nil true )
('1<0' nil false )
('1<=0' nil false )
('1>=0' nil true )
('1==0' nil false )
('1!!=0' nil true )
('1!!=1' nil false )
).
self doTestEachFromSpec:spec.
"
self run:#test_10_parse_expression1
self new test_10_parse_expression1
"
!
test_11_parse_expression2
|spec|
spec := #(
('1=0' nil ( #error ) )
('"abc"[0]' nil ( #error ) )
('"abc"[1]' nil $a )
).
self doTestEachFromSpec:spec.
"
self run:#test_11_parse_expression2
self new test_11_parse_expression2
"
! !
!JavaScriptTests class methodsFor:'documentation'!
version
^ '$Header$'
! !