Browse Source

Rework handling of native record creation and add some tests.

pull/970/head
Joao Matos 8 years ago committed by João Matos
parent
commit
37bb60b3da
  1. 2
      src/CppParser/AST.cpp
  2. 12
      src/Generator.Tests/AST/TestAST.cs
  3. 12
      tests/Native/AST.h

2
src/CppParser/AST.cpp

@ -358,7 +358,7 @@ Class* DeclarationContext::FindClass(const std::string& Name, bool IsComplete) @@ -358,7 +358,7 @@ Class* DeclarationContext::FindClass(const std::string& Name, bool IsComplete)
{
auto _class = std::find_if(Classes.begin(), Classes.end(),
[&](Class* klass) { return klass->name == Name &&
(!klass->isIncomplete || !IsComplete); });
(klass->isIncomplete == !IsComplete); });
return _class != Classes.end() ? *_class : nullptr;
}

12
src/Generator.Tests/AST/TestAST.cs

@ -566,9 +566,15 @@ namespace CppSharp.Generator.Tests.AST @@ -566,9 +566,15 @@ namespace CppSharp.Generator.Tests.AST
[Test]
public void TestClassContext()
{
var @class = AstContext.FindClass("ClassA").First();
Assert.That(@class.Classes.Count, Is.EqualTo(0));
Assert.That(@class.Redeclarations.Count, Is.EqualTo(1));
var @classA = AstContext.FindClass("ClassA").First();
Assert.That(@classA.Classes.Count, Is.EqualTo(0));
Assert.That(@classA.Redeclarations.Count, Is.EqualTo(0));
var @classB = AstContext.FindClass("ClassB").First();
Assert.That(@classB.Redeclarations.Count, Is.EqualTo(1));
var @classC = AstContext.FindClass("ClassC").First();
Assert.That(@classC.Redeclarations.Count, Is.EqualTo(2));
}
}
}

12
tests/Native/AST.h

@ -220,6 +220,12 @@ void testInlineAssembly() @@ -220,6 +220,12 @@ void testInlineAssembly()
#endif
}
class ClassA
{
};
// Tests redeclarations
class ClassA {};
class ClassB {};
class ClassB;
class ClassC {};
class ClassC;
class ClassC;

Loading…
Cancel
Save