123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- using Mono.Cecil;
- namespace PixiEditor.Api.CGlueMSBuild.Tests;
- public class CApiGeneratorTests
- {
- [Fact]
- public void TestThatLoadAssemblies()
- {
- CApiGenerator apiGenerator = new CApiGenerator("", "", "", (message) => { });
- AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("TestAssets/CGlueTestLib.dll");
- var assemblies = apiGenerator.LoadAssemblies(assembly, "TestAssets");
- Assert.Equal(2, assemblies.Count);
- }
- [Fact]
- public void TestThatImportedMethodsAreExtractedCorrectly()
- {
- CApiGenerator apiGenerator = new CApiGenerator("", "", "", (message) => { });
- AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("TestAssets/CGlueTestLib.dll");
- var assemblies = apiGenerator.LoadAssemblies(assembly, "TestAssets");
- var importedMethods = CApiGenerator.GetImportedMethods(assemblies.SelectMany(a => a.MainModule.Types).ToArray());
- Assert.True(importedMethods.Length > 0);
- }
- [Fact]
- public void TestThatGenerateImportsGeneratesCorrectImports()
- {
- CApiGenerator apiGenerator = new CApiGenerator("", "", "", (message) => { });
- AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("TestAssets/CGlueTestLib.dll");
- var assemblies = apiGenerator.LoadAssemblies(assembly, "TestAssets");
- var importedMethods = CApiGenerator.GetImportedMethods(assemblies.SelectMany(a => a.MainModule.Types).ToArray());
- string imports = apiGenerator.GenerateImports(importedMethods);
- string sanitizedImports = imports.Replace("\n", "").Replace("\r", "");
- Assert.Contains("__attribute__((import_name(\"subscribe_to_event\")))", sanitizedImports);
- Assert.Contains("void subscribe_to_event(int32_t internalControlId, char* eventName, int32_t eventNameLength);", sanitizedImports);
- }
-
- [Fact]
- public void TestThatGenerateImportsForStringReturnTypeGeneratesConversionCorrectly()
- {
- CApiGenerator apiGenerator = new CApiGenerator("", "", "", (message) => { });
- AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("TestAssets/CGlueTestLib.dll");
- var assemblies = apiGenerator.LoadAssemblies(assembly, "TestAssets");
- var importedMethods = CApiGenerator.GetImportedMethods(assemblies.SelectMany(a => a.MainModule.Types).ToArray());
- string imports = apiGenerator.GenerateImports([importedMethods.First(x => x.Name == "string_return_method")]);
- string sanitizedImports = imports.Replace("\n", "").Replace("\r", "");
- Assert.Contains("__attribute__((import_name(\"string_return_method\")))", sanitizedImports);
- Assert.Contains("char* string_return_method();", sanitizedImports);
- Assert.Contains("MonoString* internal_string_return_method(){", sanitizedImports);
- Assert.Contains("char* result = string_return_method();", sanitizedImports);
- Assert.Contains("MonoString* mono_result = mono_string_new(mono_domain_get(), result)", sanitizedImports);
- Assert.Contains("return mono_result;", sanitizedImports);
- }
- [Fact]
- public void TestThatGenerateExportsGeneratesCorrectExports()
- {
- CApiGenerator apiGenerator = new CApiGenerator("", "", "", (message) => { });
- AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("TestAssets/CGlueTestLib.dll");
- var assemblies = apiGenerator.LoadAssemblies(assembly, "TestAssets");
- var exportedMethods = CApiGenerator.GetExportedMethods(assemblies.SelectMany(a => a.MainModule.Types).ToArray());
- string exports = apiGenerator.GenerateExports(exportedMethods);
- string sanitizedExports = exports.Replace("\n", "").Replace("\r", "");
- Assert.Contains("__attribute__((export_name(\"raise_element_event\")))", sanitizedExports);
- Assert.Contains("void raise_element_event(int32_t internalControlId, char* eventName)", sanitizedExports);
- Assert.Contains("MonoMethod* method = lookup_interop_method(\"EventRaised\");", sanitizedExports);
- Assert.Contains("MonoString* mono_eventName = mono_string_new(mono_domain_get(), eventName);", sanitizedExports);
- Assert.Contains("void* args[] = {&internalControlId, mono_eventName};", sanitizedExports);
- Assert.Contains("invoke_interop_method(method, args);", sanitizedExports);
- Assert.Contains("free(method);", sanitizedExports);
- }
- [Fact]
- public void TestThatAttachImportFunctionsGenerateProperly()
- {
- CApiGenerator apiGenerator = new CApiGenerator("", "", "", (message) => { });
- AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("TestAssets/CGlueTestLib.dll");
- var assemblies = apiGenerator.LoadAssemblies(assembly, "TestAssets");
- var importedMethods = CApiGenerator.GetImportedMethods(assemblies.SelectMany(a => a.MainModule.Types).ToArray());
- string attachCode = apiGenerator.GenerateAttachImportedFunctions(importedMethods);
- string sanitizedImports = attachCode.Replace("\n", "").Replace("\r", "");
- Assert.Contains("void attach_imported_functions()", sanitizedImports);
- Assert.Contains("mono_add_internal_call(\"PixiEditor.Extensions.Sdk.Bridge.Native::subscribe_to_event\", internal_subscribe_to_event);", sanitizedImports);
- }
- }
|