private void TestParseTypeRenameDeclarationInternal(Func <string, NativeXTypeRenameDeclaration> parser) { Action <NativeXTypeRenameDeclaration> vd1 = d => { Assert.AreEqual("IntList", d.Name); NativeXInstanciatedType t = (NativeXInstanciatedType)d.Type; Assert.AreEqual("List", t.ElementType.ReferencedName); Assert.AreEqual(1, t.GenericArguments.Count); Assert.AreEqual("int", ((NativeXReferenceType)t.GenericArguments[0]).ReferencedName); }; string d1 = "type IntList = List<int>;"; { NativeXTypeRenameDeclaration d = parser(d1); vd1(d); } { NativeXTypeRenameDeclaration d = parser(g1 + d1); vg1(d); vd1(d); } { NativeXTypeRenameDeclaration d = parser(g2 + d1); vg2(d); vd1(d); } { NativeXTypeRenameDeclaration d = parser(g3 + d1); vg3(d); vd1(d); } }
private void TestParseVariableStatementInternal(Func <string, NativeXVariableStatement> parser) { { NativeXVariableStatement s = parser("variable function int(double) converter;"); Assert.AreEqual("converter", s.Name); Assert.IsNull(s.Initializer); NativeXFunctionType t = (NativeXFunctionType)s.Type; Assert.AreEqual("int", ((NativeXReferenceType)t.ReturnType).ReferencedName); Assert.AreEqual(1, t.Parameters.Count); Assert.AreEqual("double", ((NativeXReferenceType)t.Parameters[0]).ReferencedName); } { NativeXVariableStatement s = parser("variable vector<string> list = null;"); Assert.AreEqual("list", s.Name); Assert.AreEqual("null", ((NativeXPrimitiveExpression)s.Initializer).Code); NativeXInstanciatedType t = (NativeXInstanciatedType)s.Type; Assert.AreEqual("vector", ((NativeXReferenceType)t.ElementType).ReferencedName); Assert.AreEqual(1, t.GenericArguments.Count); Assert.AreEqual("string", ((NativeXReferenceType)t.GenericArguments[0]).ReferencedName); } }
private void TestInstanciatedTypeInternal(Func <string, NativeXInstanciatedType> parser) { { NativeXInstanciatedType t = parser("void<>"); Assert.AreEqual("void", ((NativeXReferenceType)t.ElementType).ReferencedName); Assert.AreEqual(0, t.GenericArguments.Count); } { NativeXInstanciatedType t = parser("int<double*>"); Assert.AreEqual("int", ((NativeXReferenceType)t.ElementType).ReferencedName); Assert.AreEqual(1, t.GenericArguments.Count); Assert.AreEqual("double", ((NativeXReferenceType)((NativeXPointerType)t.GenericArguments[0]).ElementType).ReferencedName); } { NativeXInstanciatedType t = parser("int<double*,string[1]>"); Assert.AreEqual("int", ((NativeXReferenceType)t.ElementType).ReferencedName); Assert.AreEqual(2, t.GenericArguments.Count); Assert.AreEqual("double", ((NativeXReferenceType)((NativeXPointerType)t.GenericArguments[0]).ElementType).ReferencedName); Assert.AreEqual("string", ((NativeXReferenceType)((NativeXArrayType)t.GenericArguments[1]).ElementType).ReferencedName); } }
private void TestParseVariableDeclarationInternal(Func <string, NativeXVariableDeclaration> parser) { Action <NativeXVariableDeclaration> vd_common = d => { Assert.AreEqual("a", d.Name); NativeXInstanciatedType t = (NativeXInstanciatedType)d.Type; Assert.AreEqual("List", t.ElementType.ReferencedName); Assert.AreEqual(1, t.GenericArguments.Count); Assert.AreEqual("int", ((NativeXReferenceType)t.GenericArguments[0]).ReferencedName); }; Action <NativeXVariableDeclaration> vd1 = d => { Assert.IsNull(d.Initializer); Assert.IsNull(d.Linking); }; Action <NativeXVariableDeclaration> vd2 = d => { Assert.IsNull(d.Initializer); Assert.AreEqual("Utility", d.Linking.LinkingAssembly); Assert.AreEqual("Sum", d.Linking.LinkingSymbol); }; Action <NativeXVariableDeclaration> vd3 = d => { Assert.IsNull(d.Linking); NativeXBinaryExpression e = (NativeXBinaryExpression)d.Initializer; Assert.AreEqual("1", ((NativeXPrimitiveExpression)e.LeftOperand).Code); Assert.AreEqual("2", ((NativeXPrimitiveExpression)e.RightOperand).Code); }; string d1 = "variable List<int> a;"; string d2 = "variable List<int> a alias Utility.Sum;"; string d3 = "variable List<int> a = 1+2;"; { NativeXVariableDeclaration d = parser(d1); vd_common(d); vd1(d); } { NativeXVariableDeclaration d = parser(d2); vd_common(d); vd2(d); } { NativeXVariableDeclaration d = parser(d3); vd_common(d); vd3(d); } { NativeXVariableDeclaration d = parser(g1 + d1); vg1(d); vd_common(d); vd1(d); } { NativeXVariableDeclaration d = parser(g2 + d2); vg2(d); vd_common(d); vd2(d); } { NativeXVariableDeclaration d = parser(g3 + d3); vg3(d); vd_common(d); vd3(d); } }