Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tests for anonymous enums #194

Merged
merged 1 commit into from
Oct 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ public abstract class EnumDeclarationTest : PInvokeGeneratorTest
[Test]
public Task WithTypeStarOverrideTest() => WithTypeStarOverrideTestImpl();

[Test]
public Task WithAnonymousEnumTest() => WithAnonymousEnumTestImpl();

[Test]
public Task WithReferenceToAnonymousEnumEnumeratorTest() => WithReferenceToAnonymousEnumEnumeratorTestImpl();

protected abstract Task BasicTestImpl();

protected abstract Task BasicValueTestImpl();
Expand All @@ -73,6 +79,7 @@ public abstract class EnumDeclarationTest : PInvokeGeneratorTest

protected abstract Task ExplicitTypedWithNativeTypeNameTestImpl(string nativeType, string expectedManagedType);


protected abstract Task RemapTestImpl();

protected abstract Task WithAttributeTestImpl();
Expand All @@ -96,4 +103,8 @@ public abstract class EnumDeclarationTest : PInvokeGeneratorTest
protected abstract Task WithTypeStarTestImpl();

protected abstract Task WithTypeStarOverrideTestImpl();

protected abstract Task WithAnonymousEnumTestImpl();

protected abstract Task WithReferenceToAnonymousEnumEnumeratorTestImpl();
}
Original file line number Diff line number Diff line change
Expand Up @@ -550,4 +550,61 @@ public enum MyEnum2 : uint
};
return ValidateGeneratedCSharpCompatibleUnixBindingsAsync(inputContents, expectedOutputContents, withTypes: withTypes);
}
protected override Task WithAnonymousEnumTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

enum MyEnum2 : int
{
MyEnum2_Value1 = MyEnum1_Value1,
};
";

var expectedOutputContents = @"using static ClangSharp.Test.Methods;

namespace ClangSharp.Test
{
public enum MyEnum2
{
MyEnum2_Value1 = MyEnum1_Value1,
}

public static partial class Methods
{
public const int MyEnum1_Value1 = 1;
}
}
";

var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpCompatibleUnixBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}

protected override Task WithReferenceToAnonymousEnumEnumeratorTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

const int MyEnum2_Value1 = MyEnum1_Value1 + 1;
";

var expectedOutputContents = @"namespace ClangSharp.Test
{
public static partial class Methods
{
public const int MyEnum1_Value1 = 1;

[NativeTypeName(""const int"")]
public const int MyEnum2_Value1 = (int)(MyEnum1_Value1) + 1;
}
}
";
var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpCompatibleUnixBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -550,4 +550,62 @@ public enum MyEnum2 : uint
};
return ValidateGeneratedCSharpCompatibleWindowsBindingsAsync(inputContents, expectedOutputContents, withTypes: withTypes);
}

protected override Task WithAnonymousEnumTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

enum MyEnum2 : int
{
MyEnum2_Value1 = MyEnum1_Value1,
};
";

var expectedOutputContents = @"using static ClangSharp.Test.Methods;

namespace ClangSharp.Test
{
public enum MyEnum2
{
MyEnum2_Value1 = MyEnum1_Value1,
}

public static partial class Methods
{
public const int MyEnum1_Value1 = 1;
}
}
";

var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpCompatibleWindowsBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}

protected override Task WithReferenceToAnonymousEnumEnumeratorTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

const int MyEnum2_Value1 = MyEnum1_Value1 + 1;
";

var expectedOutputContents = @"namespace ClangSharp.Test
{
public static partial class Methods
{
public const int MyEnum1_Value1 = 1;

[NativeTypeName(""const int"")]
public const int MyEnum2_Value1 = (int)(MyEnum1_Value1) + 1;
}
}
";
var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpCompatibleWindowsBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -550,4 +550,62 @@ public enum MyEnum2 : uint
};
return ValidateGeneratedCSharpLatestUnixBindingsAsync(inputContents, expectedOutputContents, withTypes: withTypes);
}

protected override Task WithAnonymousEnumTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

enum MyEnum2 : int
{
MyEnum2_Value1 = MyEnum1_Value1,
};
";

var expectedOutputContents = @"using static ClangSharp.Test.Methods;

namespace ClangSharp.Test
{
public enum MyEnum2
{
MyEnum2_Value1 = MyEnum1_Value1,
}

public static partial class Methods
{
public const int MyEnum1_Value1 = 1;
}
}
";

var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpLatestUnixBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}

protected override Task WithReferenceToAnonymousEnumEnumeratorTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

const int MyEnum2_Value1 = MyEnum1_Value1 + 1;
";

var expectedOutputContents = @"namespace ClangSharp.Test
{
public static partial class Methods
{
public const int MyEnum1_Value1 = 1;

[NativeTypeName(""const int"")]
public const int MyEnum2_Value1 = (int)(MyEnum1_Value1) + 1;
}
}
";
var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpLatestUnixBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -550,4 +550,61 @@ public enum MyEnum2 : uint
};
return ValidateGeneratedCSharpLatestWindowsBindingsAsync(inputContents, expectedOutputContents, withTypes: withTypes);
}
protected override Task WithAnonymousEnumTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

enum MyEnum2 : int
{
MyEnum2_Value1 = MyEnum1_Value1,
};
";

var expectedOutputContents = @"using static ClangSharp.Test.Methods;

namespace ClangSharp.Test
{
public enum MyEnum2
{
MyEnum2_Value1 = MyEnum1_Value1,
}

public static partial class Methods
{
public const int MyEnum1_Value1 = 1;
}
}
";

var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpLatestWindowsBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}

protected override Task WithReferenceToAnonymousEnumEnumeratorTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

const int MyEnum2_Value1 = MyEnum1_Value1 + 1;
";

var expectedOutputContents = @"namespace ClangSharp.Test
{
public static partial class Methods
{
public const int MyEnum1_Value1 = 1;

[NativeTypeName(""const int"")]
public const int MyEnum2_Value1 = (int)(MyEnum1_Value1) + 1;
}
}
";
var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpLatestWindowsBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ public enum MyEnum2
";

var withAttributes = new Dictionary<string, IReadOnlyList<string>>
{
{
["MyEnum1"] = new List<string>() { "Flags" }
};
return ValidateGeneratedCSharpPreviewUnixBindingsAsync(inputContents, expectedOutputContents, withAttributes: withAttributes);
Expand Down Expand Up @@ -550,4 +550,62 @@ public enum MyEnum2 : uint
};
return ValidateGeneratedCSharpPreviewUnixBindingsAsync(inputContents, expectedOutputContents, withTypes: withTypes);
}

protected override Task WithAnonymousEnumTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

enum MyEnum2 : int
{
MyEnum2_Value1 = MyEnum1_Value1,
};
";

var expectedOutputContents = @"using static ClangSharp.Test.Methods;

namespace ClangSharp.Test
{
public enum MyEnum2
{
MyEnum2_Value1 = MyEnum1_Value1,
}

public static partial class Methods
{
public const int MyEnum1_Value1 = 1;
}
}
";

var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpPreviewUnixBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}

protected override Task WithReferenceToAnonymousEnumEnumeratorTestImpl()
{
var inputContents = @"enum
{
MyEnum1_Value1 = 1,
};

const int MyEnum2_Value1 = MyEnum1_Value1 + 1;
";

var expectedOutputContents = @"namespace ClangSharp.Test
{
public static partial class Methods
{
public const int MyEnum1_Value1 = 1;

[NativeTypeName(""const int"")]
public const int MyEnum2_Value1 = (int)(MyEnum1_Value1) + 1;
}
}
";
var diagnostics = new[] { new Diagnostic(DiagnosticLevel.Info, "Found anonymous enum: __AnonymousEnum_ClangUnsavedFile_L1_C1. Mapping values as constants in: Methods", "Line 1, Column 1 in ClangUnsavedFile.h") };
return ValidateGeneratedCSharpPreviewUnixBindingsAsync(inputContents, expectedOutputContents, expectedDiagnostics: diagnostics);
}
}
Loading