@kpi4me/golden-layout
Version:
A multi-screen javascript Layout manager https://golden-layout.com
135 lines (110 loc) • 7.11 kB
text/coffeescript
suite 'Operators', ->
setup ->
= new CS.Function [], null
= new CS.Int 0
= new CS.Int 1
@[letter] = new CS.Identifier letter for letter in ['a', 'b', 'c', 'd', 'e', 'f', 'F']
test 'unary prefix operators', ->
eq '++0', generate new CS.PreIncrementOp
eq '--0', generate new CS.PreDecrementOp
eq '+0', generate new CS.UnaryPlusOp
eq '+(+0)', generate new CS.UnaryPlusOp new CS.UnaryPlusOp
eq '-0', generate new CS.UnaryNegateOp
eq '-(-0)', generate new CS.UnaryNegateOp new CS.UnaryNegateOp
eq 'not 0', generate new CS.LogicalNotOp
eq '!!0', generate new CS.LogicalNotOp new CS.LogicalNotOp
eq '!!!0', generate new CS.LogicalNotOp new CS.LogicalNotOp new CS.LogicalNotOp
eq '~0', generate new CS.BitNotOp
eq 'do 0', generate new CS.DoOp
eq 'typeof 0', generate new CS.TypeofOp
eq 'new 0', generate new CS.NewOp , []
test 'unary prefix operators and function literals', ->
eq '+->', generate new CS.UnaryPlusOp
eq 'new ->', generate new CS.NewOp , []
test 'unary prefix operators and function application', ->
eq 'not f 0', generate new CS.LogicalNotOp new CS.FunctionApplication , []
eq 'new F 0', generate new CS.NewOp , []
eq 'new (F 0) 1', generate new CS.NewOp (new CS.FunctionApplication , []), []
test 'unary prefix operators and application of function literals', ->
eq 'new (->) 0, 1', generate new CS.NewOp , [, ]
test 'unary postfix operators', ->
eq '0?', generate new CS.UnaryExistsOp
eq '0++', generate new CS.PostIncrementOp
eq '0--', generate new CS.PostDecrementOp
test 'unary postfix operators and function literals', ->
eq '(->)?', generate new CS.UnaryExistsOp
test 'unary postfix operators and function application', ->
eq '(f 0)?', generate new CS.UnaryExistsOp new CS.FunctionApplication , []
eq 'f()?', generate new CS.UnaryExistsOp new CS.FunctionApplication , []
test 'unary prefix operators and unary postfix operators', ->
eq '+0++', generate new CS.UnaryPlusOp new CS.PostIncrementOp
eq '(+0)++', generate new CS.PostIncrementOp new CS.UnaryPlusOp
eq 'new (F?)', generate new CS.NewOp (new CS.UnaryExistsOp ), []
eq '(new F)?', generate new CS.UnaryExistsOp new CS.NewOp , []
test 'binary operators', ->
eq '0; 1', generate new CS.SeqOp ,
eq '0 or 1', generate new CS.LogicalOrOp ,
eq '0 and 1', generate new CS.LogicalAndOp ,
eq '0 | 1', generate new CS.BitOrOp ,
eq '0 ^ 1', generate new CS.BitXorOp ,
eq '0 & 1', generate new CS.BitAndOp ,
eq '0 is 1', generate new CS.EQOp ,
eq '0 isnt 1', generate new CS.NEQOp ,
eq '0 < 1', generate new CS.LTOp ,
eq '0 <= 1', generate new CS.LTEOp ,
eq '0 > 1', generate new CS.GTOp ,
eq '0 >= 1', generate new CS.GTEOp ,
eq '0 in 1', generate new CS.InOp ,
eq '0 of 1', generate new CS.OfOp ,
eq '0 instanceof 1', generate new CS.InstanceofOp ,
eq '0 << 1', generate new CS.LeftShiftOp ,
eq '0 >> 1', generate new CS.SignedRightShiftOp ,
eq '0 >>> 1', generate new CS.UnsignedRightShiftOp ,
eq '0 + 1', generate new CS.PlusOp ,
eq '0 - 1', generate new CS.SubtractOp ,
eq '0 * 1', generate new CS.MultiplyOp ,
eq '0 / 1', generate new CS.DivideOp ,
eq '0 % 1', generate new CS.RemOp ,
eq 'a = 0', generate new CS.AssignOp ,
test 'negated binary operators', ->
eq '0 not in 1', generate new CS.LogicalNotOp new CS.InOp ,
test 'binary operators and function literals', ->
eq '(->) % 0', generate new CS.RemOp ,
eq '0 % ->', generate new CS.RemOp ,
eq '->; 0', generate new CS.SeqOp ,
eq '0; ->', generate new CS.SeqOp ,
test 'binary operators and function application', ->
eq 'f() % 0', generate new CS.RemOp (new CS.FunctionApplication , []),
eq '(f 0) % 1', generate new CS.RemOp (new CS.FunctionApplication , []),
eq '0 % f 1', generate new CS.RemOp , new CS.FunctionApplication , []
eq 'f 0 % 1', generate new CS.FunctionApplication , [new CS.RemOp , ]
test 'binary operators and unary operators on functions', ->
eq '(do ->) % 0', generate new CS.RemOp (new CS.DoOp ),
test 'compound assignment operators', ->
eq 'a += 0', generate new CS.CompoundAssignOp CS.PlusOp, ,
eq 'a or= 0', generate new CS.CompoundAssignOp CS.LogicalOrOp, ,
eq 'a &= 0', generate new CS.CompoundAssignOp CS.BitAndOp, ,
eq 'a >>>= 0', generate new CS.CompoundAssignOp CS.UnsignedRightShiftOp, ,
test 'static member access operators', ->
eq 'a.b', generate new CS.MemberAccessOp , 'b'
eq 'a.b.c', generate new CS.MemberAccessOp (new CS.MemberAccessOp , 'b'), 'c'
eq 'f()?.a', generate new CS.SoakedMemberAccessOp (new CS.FunctionApplication , []), 'a'
eq '(f 0)::a', generate new CS.ProtoMemberAccessOp (new CS.FunctionApplication , []), 'a'
eq '(->)?::a', generate new CS.SoakedProtoMemberAccessOp , 'a'
eq '(-> 0).a', generate new CS.MemberAccessOp (new CS.Function [], new CS.Block []), 'a'
eq '(new F).b', generate new CS.MemberAccessOp (new CS.NewOp , []), 'b'
eq '(new F 0).b', generate new CS.MemberAccessOp (new CS.NewOp , []), 'b'
test 'dynamic member access operators', ->
eq 'a[0]', generate new CS.DynamicMemberAccessOp ,
eq 'a[0][1]', generate new CS.DynamicMemberAccessOp (new CS.DynamicMemberAccessOp , ),
eq 'a?[\'b\']', generate new CS.SoakedDynamicMemberAccessOp , new CS.String 'b'
eq 'a::[c = 0]', generate new CS.DynamicProtoMemberAccessOp , new CS.AssignOp ,
eq 'a?::[0; 1]', generate new CS.SoakedDynamicProtoMemberAccessOp , new CS.SeqOp ,
eq 'f()[0]', generate new CS.DynamicMemberAccessOp (new CS.FunctionApplication , []),
eq '(f 0)[0]', generate new CS.DynamicMemberAccessOp (new CS.FunctionApplication , []),
eq '(->)[0]', generate new CS.DynamicMemberAccessOp ,
eq '(-> 0)[0]', generate new CS.DynamicMemberAccessOp (new CS.Function [], new CS.Block []),
eq '(new F)[0]', generate new CS.DynamicMemberAccessOp (new CS.NewOp , []),
eq '(new F 0)[1]', generate new CS.DynamicMemberAccessOp (new CS.NewOp , []),
test 'combinations of static/dynamic member access operators', ->
eq 'a.b[c]::d', generate new CS.ProtoMemberAccessOp (new CS.DynamicMemberAccessOp (new CS.MemberAccessOp , 'b'), ), 'd'