Пример #1
0
 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");
 }
Пример #2
0
        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");
        }
Пример #4
0
        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");
        }
Пример #5
0
        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);
        }
Пример #6
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");
 }
Пример #7
0
        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();
            }
        }
Пример #8
0
        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");
        }
Пример #9
0
        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);
            }
        }
Пример #10
0
 public void GetObjCName()
 {
     Assert.That(ObjCGenerator.GetObjCName(mscorlib.GetType("System.Collections.ArrayList")), Is.EqualTo("System_Collections_ArrayList"), "ArrayList");
 }
Пример #11
0
 public void IsVoid()
 {
     Assert.True(ObjCGenerator.IsVoid(mscorlib.GetType("System.Void")), "void");
     Assert.False(ObjCGenerator.IsVoid(mscorlib.GetType("System.Object")), "object");
 }
Пример #12
0
 public void TypeMatchFailure()
 {
     Assert.Throws <NotImplementedException> (() => ObjCGenerator.GetTypeName(mscorlib.GetType("System.DateTime")), "DateTime");
 }
Пример #13
0
        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);
        }