public void PascalCase() { Assert.Null(ObjCGenerator.PascalCase(null), "null"); Assert.That(ObjCGenerator.PascalCase(String.Empty), Is.EqualTo(""), "length == 0"); Assert.That(ObjCGenerator.PascalCase("s"), Is.EqualTo("S"), "length == 1"); Assert.That(ObjCGenerator.PascalCase("tu"), Is.EqualTo("Tu"), "length == 2"); }
Generator CreateGenerator() { Generator generator = null; switch (Options.GeneratorKind) { case GeneratorKind.C: generator = new CGenerator(Context); break; case GeneratorKind.ObjectiveC: generator = new ObjCGenerator(Context); break; case GeneratorKind.Java: generator = new JavaGenerator(Context); break; case GeneratorKind.Swift: generator = new SwiftGenerator(Context); break; default: throw new NotImplementedException(); } return(generator); }
public void FormatRawValue() { var ts = mscorlib.GetType("System.String"); Assert.That(ObjCGenerator.FormatRawValue(ts, null), Is.EqualTo("nil"), "null"); Assert.That(ObjCGenerator.FormatRawValue(ts, String.Empty), Is.EqualTo("@\"\""), "String Empty"); var tf = mscorlib.GetType("System.Single"); Assert.That(ObjCGenerator.FormatRawValue(tf, Single.NaN), Is.EqualTo("NAN"), "Single NaN"); Assert.That(ObjCGenerator.FormatRawValue(tf, Single.PositiveInfinity), Is.EqualTo("INFINITY"), "Single PositiveInfinity"); Assert.That(ObjCGenerator.FormatRawValue(tf, Single.NegativeInfinity), Is.EqualTo("INFINITY"), "Single NegativeInfinity"); Assert.That(ObjCGenerator.FormatRawValue(tf, (float)Math.E), Is.EqualTo("2.718282f"), "Single E"); var td = mscorlib.GetType("System.Double"); Assert.That(ObjCGenerator.FormatRawValue(td, Double.NaN), Is.EqualTo("NAN"), "Double NaN"); Assert.That(ObjCGenerator.FormatRawValue(td, Double.PositiveInfinity), Is.EqualTo("INFINITY"), "Double PositiveInfinity"); Assert.That(ObjCGenerator.FormatRawValue(td, Double.NegativeInfinity), Is.EqualTo("INFINITY"), "Double NegativeInfinity"); Assert.That(ObjCGenerator.FormatRawValue(td, Math.PI), Is.EqualTo("3.14159265358979d"), "Double PI"); var tint32 = mscorlib.GetType("System.Int32"); Assert.That(ObjCGenerator.FormatRawValue(tint32, 1), Is.EqualTo("1"), "Int32 1"); var tuint32 = mscorlib.GetType("System.UInt32"); Assert.That(ObjCGenerator.FormatRawValue(tuint32, 1), Is.EqualTo("1ul"), "UInt32 1"); var tint64 = mscorlib.GetType("System.Int64"); Assert.That(ObjCGenerator.FormatRawValue(tint64, 1), Is.EqualTo("1ll"), "Int64 1"); var tuint64 = mscorlib.GetType("System.UInt64"); Assert.That(ObjCGenerator.FormatRawValue(tuint64, 1), Is.EqualTo("1ull"), "UInt64 1"); }
public void TypeMatchFailure() { var universe = new Universe(UniverseOptions.None); var asm = universe.Load("mscorlib.dll"); Assert.Throws <NotImplementedException> (() => ObjCGenerator.GetTypeName(asm.GetType("System.DateTime")), "DateTime"); }
public int Generate(List <string> args) { Console.WriteLine("Parsing assemblies..."); var universe = new Universe(UniverseOptions.MetadataOnly); var assemblies = new List <Assembly> (); foreach (var arg in args) { assemblies.Add(universe.LoadFile(arg)); Console.WriteLine($"\tParsed '{arg}'"); } // if not specified then we use the first specified assembly name if (LibraryName == null) { LibraryName = Path.GetFileNameWithoutExtension(args [0]); } Console.WriteLine("Processing assemblies..."); var g = new ObjCGenerator(); g.Process(assemblies); Console.WriteLine("Generating binding code..."); g.Generate(assemblies); g.Write(OutputDirectory); var exe = typeof(Driver).Assembly; foreach (var res in exe.GetManifestResourceNames()) { if (res == "main.c") { // no main is needed for dylib and don't re-write an existing main.c file - it's a template if (CompilationTarget != CompilationTarget.StaticLibrary || File.Exists("main.c")) { continue; } } var path = Path.Combine(OutputDirectory, res); Console.WriteLine($"\tGenerated: {path}"); using (var sw = new StreamWriter(path)) exe.GetManifestResourceStream(res).CopyTo(sw.BaseStream); } return(0); }
public void MonoMatch() { Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Boolean")), Is.EqualTo("bool"), "bool"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Char")), Is.EqualTo("char"), "char"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.SByte")), Is.EqualTo("sbyte"), "sbyte"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Int16")), Is.EqualTo("int16"), "short"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Int32")), Is.EqualTo("int"), "int"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Int64")), Is.EqualTo("long"), "long"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Byte")), Is.EqualTo("byte"), "byte"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.UInt16")), Is.EqualTo("uint16"), "ushort"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.UInt32")), Is.EqualTo("uint"), "uint"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.UInt64")), Is.EqualTo("ulong"), "ulong"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Single")), Is.EqualTo("single"), "float"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Double")), Is.EqualTo("double"), "double"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.String")), Is.EqualTo("string"), "string"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Void")), Is.EqualTo("void"), "void"); Assert.That(ObjCGenerator.GetMonoName(mscorlib.GetType("System.Object")), Is.EqualTo("object"), "object"); }
void Generate() { Output = new ProjectOutput(); Generator generator = null; switch (Options.GeneratorKind) { case GeneratorKind.C: generator = new CGenerator(Context); break; case GeneratorKind.ObjectiveC: generator = new ObjCGenerator(Context); break; case GeneratorKind.Java: generator = new JavaGenerator(Context); break; default: throw new NotImplementedException(); } generator.SetupPasses(); foreach (var unit in Context.ASTContext.TranslationUnits) { var outputs = generator.Generate(new[] { unit }); foreach (var output in outputs) { output.Process(); var text = output.Generate(); Output.WriteOutput(output.FilePath, text); } } if (Options.GenerateSupportFiles) { GenerateSupportFiles(); } }
public void MonoMatch() { var universe = new Universe(UniverseOptions.None); var asm = universe.Load("mscorlib.dll"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.Boolean")), Is.EqualTo("bool"), "bool"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.Char")), Is.EqualTo("char"), "char"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.SByte")), Is.EqualTo("sbyte"), "sbyte"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.Int16")), Is.EqualTo("int16"), "short"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.Int32")), Is.EqualTo("int"), "int"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.Int64")), Is.EqualTo("long"), "long"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.Byte")), Is.EqualTo("byte"), "byte"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.UInt16")), Is.EqualTo("uint16"), "ushort"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.UInt32")), Is.EqualTo("uint"), "uint"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.UInt64")), Is.EqualTo("ulong"), "ulong"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.Single")), Is.EqualTo("single"), "float"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.Double")), Is.EqualTo("double"), "double"); Assert.That(ObjCGenerator.GetMonoName(asm.GetType("System.String")), Is.EqualTo("string"), "string"); }
void Generate() { Output = new ProjectOutput(); Generators.Generator generator = null; switch (Options.Language) { case GeneratorKind.C: generator = new CGenerator(Context, Options); break; case GeneratorKind.ObjectiveC: generator = new ObjCGenerator(Context, Options); break; default: throw new NotImplementedException(); } foreach (var unit in Context.ASTContext.TranslationUnits) { var templates = generator.Generate(unit); foreach (var template in templates) { template.Process(); var text = template.Generate(); var path = string.Format("{0}.{1}", template.Name, template.FileExtension); Output.WriteOutput(path, text); } } if (Options.GenerateSupportFiles) { GenerateSupportFiles(Output); } }
public void GetObjCName() { Assert.That(ObjCGenerator.GetObjCName(mscorlib.GetType("System.Collections.ArrayList")), Is.EqualTo("System_Collections_ArrayList"), "ArrayList"); }
public void IsVoid() { Assert.True(ObjCGenerator.IsVoid(mscorlib.GetType("System.Void")), "void"); Assert.False(ObjCGenerator.IsVoid(mscorlib.GetType("System.Object")), "object"); }
public void TypeMatchFailure() { Assert.Throws <NotImplementedException> (() => ObjCGenerator.GetTypeName(mscorlib.GetType("System.DateTime")), "DateTime"); }
public int Generate(List <string> args) { Console.WriteLine("Parsing assemblies..."); var universe = new Universe(UniverseOptions.MetadataOnly); universe.AssemblyResolve += (object sender, IKVM.Reflection.ResolveEventArgs resolve_args) => { var directories = new List <string> (); directories.Add(PlatformSdkDirectory); directories.Add(Path.Combine(PlatformSdkDirectory, "Facades")); foreach (var asm in Assemblies) { directories.Add(Path.GetDirectoryName(asm.Location)); } AssemblyName an = new AssemblyName(resolve_args.Name); foreach (var dir in directories) { var filename = Path.Combine(dir, an.Name + ".dll"); if (File.Exists(filename)) { return(universe.LoadFile(filename)); } } throw ErrorHelper.CreateError(13, $"Can't find the assembly '{resolve_args.Name}', referenced by '{resolve_args.RequestingAssembly.FullName}'."); }; foreach (var arg in args) { if (!File.Exists(arg)) { throw ErrorHelper.CreateError(11, $"The assembly {arg} does not exist."); } Assemblies.Add(universe.LoadFile(arg)); Console.WriteLine($"\tParsed '{arg}'"); } // if not specified then we use the first specified assembly name if (LibraryName == null) { LibraryName = Path.GetFileNameWithoutExtension(args [0]); } Console.WriteLine("Processing assemblies..."); var g = new ObjCGenerator(); g.Process(Assemblies); Console.WriteLine("Generating binding code..."); g.Generate(); g.Write(OutputDirectory); var exe = typeof(Driver).Assembly; foreach (var res in exe.GetManifestResourceNames()) { if (res == "main.c") { // no main is needed for dylib and don't re-write an existing main.c file - it's a template if (CompilationTarget != CompilationTarget.StaticLibrary || File.Exists("main.c")) { continue; } } var path = Path.Combine(OutputDirectory, res); Console.WriteLine($"\tGenerated: {path}"); using (var sw = new StreamWriter(path)) exe.GetManifestResourceStream(res).CopyTo(sw.BaseStream); } return(0); }