public void VariableDeclarationAssignment() { Expression expression = parseStatement("a -> int = 4 + p;"); VariableDeclarationAssignmentExpression a = assertTypeAndCast <VariableDeclarationAssignmentExpression>(expression); Assert.AreEqual("a", a.declaration.name); Assert.AreEqual("int", a.declaration.typeName.name); AdditionExpression b = assertTypeAndCast <AdditionExpression>(a.value); IntegralLiteralExpression c = assertTypeAndCast <IntegralLiteralExpression>(b.left); VariableReferenceExpression d = assertTypeAndCast <VariableReferenceExpression>(b.right); Assert.AreEqual(4, c.value); Assert.AreEqual("p", d.name); }
public void AnonymousFunctionDefinitionAndAssignment() { Expression expression = parseExpression("anon -> Function<int,Banana, Platypus> = (a -> int, b -> Banana) -> Platypus { a + 5; }"); VariableDeclarationAssignmentExpression z = assertTypeAndCast <VariableDeclarationAssignmentExpression>(expression); Assert.AreEqual("anon", z.declaration.name); Assert.AreEqual("Function", z.declaration.typeName.name); GenericTypeName y = assertTypeAndCast <GenericTypeName>(z.declaration.typeName); Assert.AreEqual(3, y.genericTypes.Count); Assert.AreEqual("int", y.genericTypes[0].name); Assert.AreEqual("Banana", y.genericTypes[1].name); Assert.AreEqual("Platypus", y.genericTypes[2].name); AnonymousFunctionExpression a = assertTypeAndCast <AnonymousFunctionExpression>(z.value); Assert.AreEqual("Platypus", a.returnType.name); Assert.IsNotInstanceOfType(a.returnType, typeof(GenericTypeName)); Assert.AreEqual(2, a.arguments.members.Count); Assert.AreEqual(1, a.body.innerExpressions.Count); Assert.AreEqual("a", a.arguments.members[0].name); Assert.AreEqual("int", a.arguments.members[0].typeName.name); Assert.IsNotInstanceOfType(a.arguments.members[0].typeName, typeof(GenericTypeName)); Assert.AreEqual("b", a.arguments.members[1].name); Assert.AreEqual("Banana", a.arguments.members[1].typeName.name); Assert.IsNotInstanceOfType(a.arguments.members[1].typeName, typeof(GenericTypeName)); AdditionExpression d = assertTypeAndCast <AdditionExpression>(a.body.innerExpressions[0]); VariableReferenceExpression e = assertTypeAndCast <VariableReferenceExpression>(d.left); IntegralLiteralExpression f = assertTypeAndCast <IntegralLiteralExpression>(d.right); Assert.AreEqual("a", e.name); Assert.AreEqual(5, f.value); }
public void ClassTest() { Expression expression = parseExpression(@"class Test { jelly -> int; public belly -> Banana<int,int>; p -> String = ""haha""; foopy(a -> int, b -> Banana) -> String { a = 5; } }"); ClassDefinitionExpression a = assertTypeAndCast <ClassDefinitionExpression>(expression); Assert.AreEqual("Test", a.name); Assert.AreEqual(4, a.members.Count); Assert.AreEqual(Visibility.None, a.visibility); VariableDeclarationExpression b = assertTypeAndCast <VariableDeclarationExpression>(a.members[0]); VariableDeclarationExpression c = assertTypeAndCast <VariableDeclarationExpression>(a.members[1]); VariableDeclarationAssignmentExpression d = assertTypeAndCast <VariableDeclarationAssignmentExpression>(a.members[2]); FunctionExpression e = assertTypeAndCast <FunctionExpression>(a.members[3]); Assert.AreEqual("jelly", b.name); Assert.AreEqual("int", b.typeName.name); Assert.IsNotInstanceOfType(b.typeName, typeof(GenericTypeName)); Assert.AreEqual(Visibility.None, b.visibility); Assert.AreEqual("belly", c.name); Assert.AreEqual("Banana", c.typeName.name); Assert.AreEqual(Visibility.Public, c.visibility); GenericTypeName f = assertTypeAndCast <GenericTypeName>(c.typeName); Assert.AreEqual(2, f.genericTypes.Count); Assert.AreEqual("int", f.genericTypes[0].name); Assert.IsNotInstanceOfType(f.genericTypes[0], typeof(GenericTypeName)); Assert.AreEqual("int", f.genericTypes[1].name); Assert.IsNotInstanceOfType(f.genericTypes[1], typeof(GenericTypeName)); Assert.AreEqual("p", d.declaration.name); Assert.AreEqual("String", d.declaration.typeName.name); Assert.IsNotInstanceOfType(d.declaration.typeName, typeof(GenericTypeName)); StringLiteralExpression g = assertTypeAndCast <StringLiteralExpression>(d.value); Assert.AreEqual("haha", g.value); Assert.AreEqual("foopy", e.name); Assert.AreEqual(Visibility.None, e.visibility); Assert.AreEqual("String", e.returnType.name); Assert.IsNotInstanceOfType(e.returnType, typeof(GenericTypeName)); Assert.AreEqual(2, e.arguments.members.Count); Assert.AreEqual(1, e.body.innerExpressions.Count); Assert.AreEqual("a", e.arguments.members[0].name); Assert.AreEqual("int", e.arguments.members[0].typeName.name); Assert.IsNotInstanceOfType(e.arguments.members[0].typeName, typeof(GenericTypeName)); Assert.AreEqual("b", e.arguments.members[1].name); Assert.AreEqual("Banana", e.arguments.members[1].typeName.name); Assert.IsNotInstanceOfType(e.arguments.members[1].typeName, typeof(GenericTypeName)); VariableAssignmentExpression h = assertTypeAndCast <VariableAssignmentExpression>(e.body.innerExpressions[0]); Assert.AreEqual("a", h.name); IntegralLiteralExpression i = assertTypeAndCast <IntegralLiteralExpression>(h.value); Assert.AreEqual(5, i.value); }