[dotnet] Added one more test to ensure that multiple types in a file work. (#18073)

This commit is contained in:
Steve Hawley 2023-04-14 16:06:51 -04:00 коммит произвёл GitHub
Родитель 7f82266b75
Коммит ae1f03ea2f
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 66 добавлений и 0 удалений

Просмотреть файл

@ -305,5 +305,71 @@ namespace ObjCRuntime {
var cctor = type.Methods.FirstOrDefault (m => m.Name == ".cctor");
Assert.IsNull (cctor, "we had a cctor - oops");
}
const string multiObjectCode = @"
namespace ObjCRuntime {
public class Program {
public static int Main (string[] args) {
var map = new Runtime.MTClassMap [] {
new Runtime.MTClassMap(new IntPtr (42), 0, Runtime.MTTypeFlags.None),
new Runtime.MTClassMap(new IntPtr (43), 1, Runtime.MTTypeFlags.None),
new Runtime.MTClassMap(new IntPtr (44), 2, Runtime.MTTypeFlags.None),
};
unsafe {
fixed (Runtime.MTClassMap* mapPtr = &map [0]) {
Runtime.ClassHandles.InitializeClassHandles (mapPtr);
}
}
var baz = new Baz ();
Console.WriteLine (baz.ClassHandle);
return 0;
}
}
public class Class {
public static NativeHandle GetHandle (string s) {
return NativeHandle.Zero;
}
}
public class Foo {
static NativeHandle class_ptr = Class.GetHandle (""nothing"");
public Foo () { }
public NativeHandle ClassHandle => class_ptr;
}
public class Bar {
static NativeHandle class_ptr = Class.GetHandle (""nothing"");
public Bar () { }
public NativeHandle ClassHandle => class_ptr;
}
public class Baz {
static NativeHandle class_ptr = Class.GetHandle (""nothing"");
public Baz () { }
public NativeHandle ClassHandle => class_ptr;
}
}
";
[Test]
public void MultiObjects ()
{
var testCode = commonCode + multiObjectCode;
var result = Compiler.Compile (testCode);
Assert.That (String.IsNullOrEmpty (result.Error), $"Compile failure: {result.Error}");
var map = new CSToObjCMap () {
["ObjCRuntime.Foo"] = new ObjCNameIndex ("xxx", 0),
["ObjCRuntime.Bar"] = new ObjCNameIndex ("yyy", 1),
["ObjCRuntime.Baz"] = new ObjCNameIndex ("zzz", 2),
};
var rewriter = new Rewriter (map, result.OutputFileName, new string [] { result.OutputFileName });
rewriter.Process ();
var codeOutput = Compiler.Run ("mono", new List<string> () { result.OutputFileName });
Assert.That (codeOutput, Is.EqualTo ("0x2c\n"), "incorrect executable output");
}
}