Browse Source

Update the tests to compile again.

pull/13/merge
triton 12 years ago
parent
commit
19bba20fd9
  1. 7
      build/Tests.lua
  2. 27
      src/Generator.Tests/HeaderTestFixture.cs
  3. 20
      src/Generator.Tests/Passes/TestPasses.cs
  4. 26
      src/Generator.Tests/TestCLITypePrinter.cs
  5. 15
      src/Generator/Utils/TestsUtils.cs

7
build/Tests.lua

@ -20,10 +20,13 @@ function SetupTestGeneratorProject(name)
files { name .. ".cs" } files { name .. ".cs" }
dependson { name .. ".Native" }
links links
{ {
path.join(depsdir, "cxxi", "build", action, "lib", "Bridge"), "CppSharp.AST",
path.join(depsdir, "cxxi", "build", action, "lib", "Generator"), "CppSharp.Generator",
"CppSharp.Parser",
} }
end end

27
src/Generator.Tests/HeaderTestFixture.cs

@ -1,21 +1,20 @@
using System; using System;
using System.IO; using System.IO;
using CppSharp; using CppSharp;
using CppSharp.Types;
namespace Generator.Tests namespace Generator.Tests
{ {
public class HeaderTestFixture public class HeaderTestFixture
{ {
protected Library library; protected Driver Driver;
protected TypeMapDatabase database; protected DriverOptions Options;
protected Library Library;
private const string TestsDirectory = @"..\..\..\tests\Native"; private const string TestsDirectory = @"..\..\..\tests\Native";
public HeaderTestFixture() public HeaderTestFixture()
{ {
database = new TypeMapDatabase();
database.SetupTypeMaps();
} }
protected void ParseLibrary(string file) protected void ParseLibrary(string file)
@ -25,21 +24,17 @@ namespace Generator.Tests
protected void ParseLibrary(string dir, string file) protected void ParseLibrary(string dir, string file)
{ {
var options = new DriverOptions(); Options = new DriverOptions();
var path = Path.Combine(Directory.GetCurrentDirectory(), dir); var path = Path.Combine(Directory.GetCurrentDirectory(), dir);
options.IncludeDirs.Add(Path.GetFullPath(path)); Options.IncludeDirs.Add(Path.GetFullPath(path));
Options.Headers.Add(file);
var parser = new Parser(options);
var result = parser.ParseHeader(file);
if (result.Kind != ParserResultKind.Success)
throw new Exception("Could not parse file: " + file);
library = result.Library; Driver = new Driver(Options, new TextDiagnosticPrinter());
if (!Driver.ParseCode())
throw new Exception("Error parsing the code");
foreach (var diag in result.Diagnostics) Library = Driver.Library;
Console.WriteLine(diag.Message);
} }
} }
} }

20
src/Generator.Tests/Passes/TestPasses.cs

@ -18,16 +18,16 @@ namespace Generator.Tests.Passes
public void Setup() public void Setup()
{ {
ParseLibrary("Passes.h"); ParseLibrary("Passes.h");
passBuilder = new PassBuilder(library); passBuilder = new PassBuilder(Driver);
} }
[Test] [Test]
public void TestCheckFlagEnumsPass() public void TestCheckFlagEnumsPass()
{ {
var @enum = library.Enum("FlagEnum"); var @enum = Library.Enum("FlagEnum");
Assert.IsFalse(@enum.IsFlags); Assert.IsFalse(@enum.IsFlags);
var @enum2 = library.Enum("FlagEnum2"); var @enum2 = Library.Enum("FlagEnum2");
Assert.IsFalse(@enum2.IsFlags); Assert.IsFalse(@enum2.IsFlags);
passBuilder.CheckFlagEnums(); passBuilder.CheckFlagEnums();
@ -40,7 +40,7 @@ namespace Generator.Tests.Passes
[Test] [Test]
public void TestFunctionToInstancePass() public void TestFunctionToInstancePass()
{ {
var c = library.Class("Foo"); var c = Library.Class("Foo");
Assert.IsNull(c.Method("Start")); Assert.IsNull(c.Method("Start"));
@ -53,22 +53,22 @@ namespace Generator.Tests.Passes
[Test] [Test]
public void TestFunctionToStaticPass() public void TestFunctionToStaticPass()
{ {
var c = library.Class("Foo"); var c = Library.Class("Foo");
Assert.IsFalse(library.Function("FooStart").ExplicityIgnored); Assert.IsFalse(Library.Function("FooStart").ExplicityIgnored);
Assert.IsNull(c.Method("Start")); Assert.IsNull(c.Method("Start"));
passBuilder.FunctionToStaticMethod(); passBuilder.FunctionToStaticMethod();
passBuilder.RunPasses(); passBuilder.RunPasses();
Assert.IsTrue(library.Function("FooStart").ExplicityIgnored); Assert.IsTrue(Library.Function("FooStart").ExplicityIgnored);
Assert.IsNotNull(c.Method("Start")); Assert.IsNotNull(c.Method("Start"));
} }
[Test] [Test]
public void TestCaseRenamePass() public void TestCaseRenamePass()
{ {
var c = library.Class("TestRename"); var c = Library.Class("TestRename");
var method = c.Method("lowerCaseMethod"); var method = c.Method("lowerCaseMethod");
var field = c.Field("lowerCaseField"); var field = c.Field("lowerCaseField");
@ -83,9 +83,9 @@ namespace Generator.Tests.Passes
[Test] [Test]
public void TestCleanEnumItemNames() public void TestCleanEnumItemNames()
{ {
library.GenerateEnumFromMacros("TestEnumItemName", "TEST_ENUM_ITEM_NAME_(.*)"); Library.GenerateEnumFromMacros("TestEnumItemName", "TEST_ENUM_ITEM_NAME_(.*)");
var @enum = library.Enum("TestEnumItemName"); var @enum = Library.Enum("TestEnumItemName");
Assert.IsNotNull(@enum); Assert.IsNotNull(@enum);
passBuilder.RemovePrefix("TEST_ENUM_ITEM_NAME_", RenameTargets.EnumItem); passBuilder.RemovePrefix("TEST_ENUM_ITEM_NAME_", RenameTargets.EnumItem);

26
src/Generator.Tests/TestCLITypePrinter.cs

@ -23,7 +23,7 @@ namespace Generator.Tests
public void Init() public void Init()
{ {
ParseLibrary("CLITypes.h"); ParseLibrary("CLITypes.h");
printer = new CLITypePrinter(database, library); printer = new CLITypePrinter(Driver, new CLITypePrinterContext());
} }
public void CheckType<T>(T decl, string check) where T : ITypedDecl public void CheckType<T>(T decl, string check) where T : ITypedDecl
@ -41,7 +41,7 @@ namespace Generator.Tests
[Test] [Test]
public void TestPrimitive() public void TestPrimitive()
{ {
var p = library.Class("Primitives"); var p = Library.Class("Primitives");
CheckType(p.Field("B"), "bool"); CheckType(p.Field("B"), "bool");
CheckType(p.Field("C"), "char"); CheckType(p.Field("C"), "char");
CheckType(p.Field("UC"), "unsigned char"); CheckType(p.Field("UC"), "unsigned char");
@ -61,7 +61,7 @@ namespace Generator.Tests
[Test] [Test]
public void TestArray() public void TestArray()
{ {
var c = library.Class("Arrays"); var c = Library.Class("Arrays");
CheckType(c.Field("Array"), "cli::array<float>^"); CheckType(c.Field("Array"), "cli::array<float>^");
CheckType(c.Field("Prim"), "cli::array<::Primitives^>^"); CheckType(c.Field("Prim"), "cli::array<::Primitives^>^");
@ -70,35 +70,35 @@ namespace Generator.Tests
[Test] [Test]
public void TestPointers() public void TestPointers()
{ {
var p = library.Class("Pointers"); var p = Library.Class("Pointers");
CheckType(p.Field("pv"), "System::IntPtr"); CheckType(p.Field("pv"), "System::IntPtr");
CheckType(p.Field("pc"), "char"); CheckType(p.Field("pc"), "System::IntPtr");
CheckType(p.Field("puc"), "System::IntPtr"); CheckType(p.Field("puc"), "System::IntPtr");
//CheckType(p.Field("cpc"), "System::String^"); CheckType(p.Field("cpc"), "System::String^");
CheckType(p.Field("pi"), "int"); CheckType(p.Field("pi"), "System::IntPtr");
} }
[Test] [Test]
public void TestFunctionPointers() public void TestFunctionPointers()
{ {
var p = library.Class("FunctionPointers"); var p = Library.Class("FunctionPointers");
CheckType(p.Field("fn"), "::FnPtr^"); CheckType(p.Field("fn"), "::FnPtr^");
CheckType(p.Field("fn2"), "::FnPtr2^"); CheckType(p.Field("fn2"), "::FnPtr2^");
CheckType(p.Field("fn3"), "TypedefFn3"); CheckType(p.Field("fn3"), "::FnPtr3^");
} }
[Test] [Test]
public void TestTypedefs() public void TestTypedefs()
{ {
CheckType(library.Typedef("FnPtr"), "System::Func<int, double>^"); CheckType(Library.Typedef("FnPtr"), "System::Func<int, double>^");
CheckType(library.Typedef("FnPtr2"), "System::Action<char, float>^"); CheckType(Library.Typedef("FnPtr2"), "System::Action<char, float>^");
CheckType(library.Typedef("FnPtr3"), "System::Action^"); CheckType(Library.Typedef("FnPtr3"), "System::Action^");
} }
[Test] [Test]
public void TestTags() public void TestTags()
{ {
var p = library.Class("Tag"); var p = Library.Class("Tag");
CheckType(p.Field("p"), "::Primitives^"); CheckType(p.Field("p"), "::Primitives^");
CheckType(p.Field("e"), "::E"); CheckType(p.Field("e"), "::E");
} }

15
src/Generator/Utils/TestsUtils.cs

@ -8,7 +8,7 @@ namespace CppSharp.Utils
readonly string name; readonly string name;
readonly LanguageGeneratorKind kind; readonly LanguageGeneratorKind kind;
public LibraryTest(string name, LanguageGeneratorKind kind) protected LibraryTest(string name, LanguageGeneratorKind kind)
{ {
this.name = name; this.name = name;
this.kind = kind; this.kind = kind;
@ -17,11 +17,14 @@ namespace CppSharp.Utils
public virtual void Setup(Driver driver) public virtual void Setup(Driver driver)
{ {
var options = driver.Options; var options = driver.Options;
options.LibraryName = name + ".Native"; options.LibraryName = name;
options.GeneratorKind = kind; options.GeneratorKind = kind;
options.OutputDir = "../gen/" + name; options.OutputDir = "../gen/" + name;
options.GenerateLibraryNamespace = false; options.GenerateLibraryNamespace = false;
options.SharedLibraryName = name + ".Native";
options.CheckSymbols = false;
var path = "../../../tests/" + name; var path = "../../../tests/" + name;
options.IncludeDirs.Add(path); options.IncludeDirs.Add(path);
@ -41,13 +44,5 @@ namespace CppSharp.Utils
public virtual void SetupPasses(Driver driver, PassBuilder passes) public virtual void SetupPasses(Driver driver, PassBuilder passes)
{ {
} }
public virtual void GenerateStart(TextTemplate template)
{
}
public virtual void GenerateAfterNamespaces(TextTemplate template)
{
}
} }
} }

Loading…
Cancel
Save