@@ -16,6 +16,52 @@ describe('Binary Operators TypeScript Test', function () {
1616 assert . strictEqual ( parser . evaluate ( '2 + undefined' ) , undefined ) ;
1717 assert . strictEqual ( parser . evaluate ( 'undefined + 2' ) , undefined ) ;
1818 } ) ;
19+ it ( 'should concatenate non-numeric strings' , function ( ) {
20+ const parser = new Parser ( ) ;
21+ assert . strictEqual ( parser . evaluate ( '"hello" + "world"' ) , 'helloworld' ) ;
22+ assert . strictEqual ( parser . evaluate ( '"foo" + "bar"' ) , 'foobar' ) ;
23+ assert . strictEqual ( parser . evaluate ( '"test" + "123"' ) , 'test123' ) ;
24+ } ) ;
25+ it ( 'should add numeric strings as numbers' , function ( ) {
26+ const parser = new Parser ( ) ;
27+ assert . strictEqual ( parser . evaluate ( '"5" + "3"' ) , 8 ) ;
28+ assert . strictEqual ( parser . evaluate ( '"10" + "20"' ) , 30 ) ;
29+ assert . strictEqual ( parser . evaluate ( '"0" + "5"' ) , 5 ) ;
30+ } ) ;
31+ it ( 'should concatenate arrays' , function ( ) {
32+ const parser = new Parser ( ) ;
33+ assert . deepStrictEqual ( parser . evaluate ( '[1, 2] + [3, 4]' ) , [ 1 , 2 , 3 , 4 ] ) ;
34+ assert . deepStrictEqual ( parser . evaluate ( '[1] + [2, 3]' ) , [ 1 , 2 , 3 ] ) ;
35+ assert . deepStrictEqual ( parser . evaluate ( '[] + [1, 2]' ) , [ 1 , 2 ] ) ;
36+ } ) ;
37+ it ( 'should merge objects' , function ( ) {
38+ const parser = new Parser ( ) ;
39+ assert . deepStrictEqual ( parser . evaluate ( '{a: 1} + {b: 2}' ) , { a : 1 , b : 2 } ) ;
40+ assert . deepStrictEqual ( parser . evaluate ( '{x: 10} + {y: 20}' ) , { x : 10 , y : 20 } ) ;
41+ assert . deepStrictEqual ( parser . evaluate ( '{a: 1, b: 2} + {c: 3}' ) , { a : 1 , b : 2 , c : 3 } ) ;
42+ } ) ;
43+ it ( 'should handle object merging with overlapping keys' , function ( ) {
44+ const parser = new Parser ( ) ;
45+ assert . deepStrictEqual ( parser . evaluate ( '{a: 1} + {a: 2}' ) , { a : 2 } ) ;
46+ assert . deepStrictEqual ( parser . evaluate ( '{x: 10, y: 20} + {y: 30}' ) , { x : 10 , y : 30 } ) ;
47+ } ) ;
48+ it ( 'should handle null values correctly' , function ( ) {
49+ const parser = new Parser ( ) ;
50+ assert . deepStrictEqual ( parser . evaluate ( 'null + null' ) , { } ) ;
51+ } ) ;
52+ it ( 'should convert numeric values to numbers before adding' , function ( ) {
53+ const parser = new Parser ( ) ;
54+ assert . strictEqual ( parser . evaluate ( 'true + 1' ) , 2 ) ;
55+ assert . strictEqual ( parser . evaluate ( 'false + 5' ) , 5 ) ;
56+ assert . strictEqual ( parser . evaluate ( '1 + true' ) , 2 ) ;
57+ } ) ;
58+ it ( 'should throw error for incompatible types' , function ( ) {
59+ const parser = new Parser ( ) ;
60+ assert . throws ( ( ) => parser . evaluate ( '5 + [1, 2]' ) , / C a n n o t a d d v a l u e s o f i n c o m p a t i b l e t y p e s / ) ;
61+ assert . throws ( ( ) => parser . evaluate ( '"text" + {a: 1}' ) , / C a n n o t a d d v a l u e s o f i n c o m p a t i b l e t y p e s / ) ;
62+ assert . throws ( ( ) => parser . evaluate ( '[1, 2] + {a: 1}' ) , / C a n n o t a d d v a l u e s o f i n c o m p a t i b l e t y p e s / ) ;
63+ assert . throws ( ( ) => parser . evaluate ( '5 + {x: 1}' ) , / C a n n o t a d d v a l u e s o f i n c o m p a t i b l e t y p e s / ) ;
64+ } ) ;
1965 } ) ;
2066
2167 describe ( '- (subtraction)' , function ( ) {
0 commit comments