Exemple #1
0
        public void TestClassGenericToIntf()
        {
            var rg = new ReflectionGenerator();

            rg.NamingStrategy.InterfacePrefixForClasses = "i";
            rg.GenerateInterface(typeof(PagedAminUser));
            rg.GenerateInterface(typeof(PagedCompany));

            var g = new OutputGenerator();

            g.Generate(rg.GenerationStrategy.TargetModule);
            Assert.AreEqual(
                @"
module GeneratedModule {
    interface iPagedModel<T> {
        TotalCount: number;
        Values: T[];
    }
    interface iPagedAminUser extends iPagedModel<iAdminUser> {
    }
    interface iAdminUser {
        Name: string;
        Login: string;
    }
    interface iPagedCompany extends iPagedModel<iCompanyModel> {
    }
    interface iCompanyModel {
        VAT: string;
        Name: string;
    }
}".Trim(), g.Output.Trim());
        }
Exemple #2
0
        private static Tuple <string, string> runTest(bool sourceClasses, bool destClasses, bool optimize, bool optimizeSource = false)
        {
            var rg = new ReflectionGenerator();

            rg.GenerationStrategy.GenerateClasses       = sourceClasses;
            rg.NamingStrategy.InterfacePrefixForClasses = "";
            rg.NamingStrategy.InterfacePrefix           = "";
            rg.GenerateTypes(new[] { typeof(Test3), typeof(Test3A) });

            var models = rg.Module;

            if (optimizeSource)
            {
                models = Optimizer.RemoveEmptyDeclarations(models);
            }
            var o1 = new OutputGenerator();

            o1.Generate(models);
            var o1Output = o1.Output;

            var ko          = new KnockoutGenerator();
            var observables = new TypescriptModule("Observables");

            ko.GenerateObservableModule(models, observables, !destClasses);

            if (optimize)
            {
                observables = Optimizer.RemoveEmptyDeclarations(observables);
            }

            var o2 = new OutputGenerator();

            o2.Generate(observables);
            return(Tuple.Create(o1.Output, o2.Output));
        }
Exemple #3
0
        public void TestGenerics2()
        {
            var rg = new ReflectionGenerator();

            rg.NamingStrategy.InterfacePrefixForClasses = "i";
            //nonsense?!? rg.GenerateInterface(typeof(Test1<int>));
            rg.GenerateInterface(typeof(Test1 <>));

            var g = new OutputGenerator();

            g.Generate(rg.GenerationStrategy.TargetModule);
            Assert.AreEqual(
                @"
module GeneratedModule {
    interface iTest1<T> {
        T1: iGenList<string>;
        T2: iGenList<number>;
        T3: iGenList<iGenList<boolean>>;
        T4: iGenList<T[]>[];
    }
    interface iGenList<TI> {
        Values: iGenTest<TI>[];
    }
    interface iGenTest<T> {
        Value: T;
    }
}".Trim(), g.Output.Trim());
        }
Exemple #4
0
        public void TestInterfacesToObservableClasses()
        {
            var rg = new ReflectionGenerator();

            rg.GenerationStrategy.GenerateClasses = false;
            rg.GenerateTypes(new[] { typeof(Test1B), typeof(Test1) });
            var o1 = new OutputGenerator();

            o1.Generate(rg.Module);
            Assert.AreEqual(Helper.StringCompare(@"
module GeneratedModule {
    interface ITest1 {
        Prop1: string;
        Prop2: number;
    }
    interface ITest1B extends ITest1 {
        Prop3: boolean;
        Ref: ITest1;
        PropArray: string[];
        SelfArray: ITest1B[];
    }
}
", o1.Output), null);

            var ko          = new KnockoutGenerator();
            var observables = new TypescriptModule("Observables");

            ko.GenerateObservableModule(rg.Module, observables, interfaces: false);

            var o = new OutputGenerator();

            o.Generate(observables);
            Assert.AreEqual(null, Helper.StringCompare(@"
module Observables {
    class test1B implements IObservableTest1 {        
        // implementation of IObservableTest1
        Prop1 = ko.observable<string>();
        Prop2 = ko.observable<number>();
        Prop3 = ko.observable<boolean>();
        Ref = ko.observable<test1>();
        PropArray = ko.observableArray<string>();
        SelfArray = ko.observableArray<test1B>();
    }
    interface IObservableTest1 {
        Prop1: KnockoutObservable<string>;
        Prop2: KnockoutObservable<number>;
    }
    class test1 {
        Prop1 = ko.observable<string>();
        Prop2 = ko.observable<number>();
    }
}
", o.Output));
        }
        private string test(bool classes)
        {
            var rg = new ReflectionGenerator();

            rg.GenerationStrategy.CommentSource   = false;
            rg.GenerationStrategy.GenerateClasses = classes;
            rg.GenerateFromType(typeof(Test3));
            var module = rg.Module;

            module = Optimizer.RemoveEmptyDeclarations(module);
            var o = new OutputGenerator();

            o.Generate(module);
            return(o.Output);
        }
Exemple #6
0
        public void TestClassesToObservableInterfaces()
        {
            var rg = new ReflectionGenerator();

            rg.GenerationStrategy.GenerateClasses = true;
            rg.GenerateTypes(new[] { typeof(Test1B), typeof(Test1) });
            var o1 = new OutputGenerator();

            o1.Generate(rg.Module);
            Assert.AreEqual(@"
module GeneratedModule {
    class Test1 {
        Prop1: string;
        Prop2: number;
    }
    class Test1B extends Test1 {
        Prop3: boolean;
        Ref: Test1;
        PropArray: string[];
        SelfArray: Test1B[];
    }
}
".Trim(), o1.Output.Trim());

            var ko          = new KnockoutGenerator();
            var observables = new TypescriptModule("Observables");

            ko.GenerateObservableModule(rg.Module, observables, true);

            var o = new OutputGenerator();

            o.Generate(observables);
            Assert.AreEqual(@"
module Observables {
    interface iObservableTest1 {
        Prop1: KnockoutObservable<string>;
        Prop2: KnockoutObservable<number>;
    }
    interface iObservableTest1B extends iObservableTest1 {
        Prop3: KnockoutObservable<boolean>;
        Ref: KnockoutObservable<iObservableTest1>;
        PropArray: KnockoutObservableArray<string>;
        SelfArray: KnockoutObservableArray<iObservableTest1B>;
    }
}
".Trim(), o.Output.Trim());
        }
Exemple #7
0
        public void TestGenericsInstance()
        {
            var rg = new ReflectionGenerator();

            rg.NamingStrategy.InterfacePrefixForClasses = "i";
            rg.GenerateInterface(typeof(GenTest <int>));

            var g = new OutputGenerator();

            g.Generate(rg.GenerationStrategy.TargetModule);
            Assert.AreEqual(null, Helper.StringCompare(
                                @"
module GeneratedModule {
    interface iGenTest_Int32 {
        Value: number;
    }
}", g.Output));
        }
        public void TestReflectionInheritanceOptimalization2()
        {
            var rg = new ReflectionGenerator();

            rg.GenerateInterface(typeof(Test3A));

            var module = rg.GenerationStrategy.TargetModule;

            module = Optimizer.RemoveEmptyDeclarations(module);
            var g = new OutputGenerator();

            g.Generate(module);

            Assert.AreEqual(null, Helper.StringCompare(
                                @"module GeneratedModule {
    interface ITest3A {
        Prop1: number;
    }
}", g.Output));
        }
Exemple #9
0
        public void TestSystemTypesGeneration()
        {
            var rg = new ReflectionGenerator();

            rg.GenerationStrategy.GenerateClasses = true;
            rg.GenerateClass(typeof(SystemTypesClass));

            var g = new OutputGenerator();

            g.Generate(rg.GenerationStrategy.TargetModule);
            Assert.AreEqual(@"
module GeneratedModule {
    class SystemTypesClass<T> {
        GenericProperty: SystemTypesClass<any>;
    }
    class SystemTypesClass extends SystemTypesClass<number> {
    }
}
".Trim(), g.Output.Trim());
        }
        public void TestReflectionInheritanceOptimalization1()
        {
            var rg = new ReflectionGenerator();

            rg.GenerateInterface(typeof(ITest3B));

            var g = new OutputGenerator();

            g.Generate(rg.GenerationStrategy.TargetModule);

            Assert.AreEqual(null, Helper.StringCompare(
                                @"module GeneratedModule {
    interface ITest3A {
        Prop1: number;
    }
    interface ITest3B extends ITest3A {
        Prop2: string;
        Prop2b: ITest3A;
    }
}", g.Output));
        }
Exemple #11
0
        public void TestMethods()
        {
            var rg = new ReflectionGenerator();

            rg.NamingStrategy.InterfacePrefixForClasses = "i";
            rg.GenerationStrategy.GenerateMethods       = true;
            rg.GenerateInterface(typeof(TestGenMethods <>));

            var g = new OutputGenerator();

            g.Generate(rg.GenerationStrategy.TargetModule);

            Assert.AreEqual(@"
module GeneratedModule {
    interface iTestGenMethods<T> {
        Test1(input: T): string;
        Test2<T2>(input: T2, withDefault?: string = '42'): boolean;
        Test3(x: number, ...args: string[]): void;
    }
}".Trim(), g.Output.Trim());
        }
Exemple #12
0
        public void TestIntf()
        {
            var rg = new ReflectionGenerator();

            rg.NamingStrategy.InterfacePrefixForClasses = "i";
            rg.GenerateInterface(typeof(TestingClass));

            var g = new OutputGenerator();

            g.GenerateComments = false;
            g.Generate(rg.GenerationStrategy.TargetModule);

            Assert.AreEqual(null, Helper.StringCompare(@"
module GeneratedModule {
    interface IMyInterface {
        Property2: string;
    }
    interface iTestingClassBase extends IMyInterface {
        Property1: number;
        /* Property Property2 skipped, because it is already implemented by interface IMyInterface*/
    }
    interface iTestingClass extends iTestingClassBase {
        Property3: MyEnum;
        Property4?: number;
        Property5: string[];
        Property6: iTestingClass;
        Property7: iTestingClass[];
        Property8: iTestingClass[];
    }
    enum MyEnum {
        Value1 = 0,
        Value2 = 1,
        Value3 = 10,
        Value4 = 11
    }
}", g.Output));
        }
Exemple #13
0
        public void TestInheritanceReordering()
        {
            var rg = new ReflectionGenerator();

            rg.GenerationStrategy.GenerateClasses = true;
            rg.GenerateClass(typeof(C));

            var g = new OutputGenerator();

            g.Generate(rg.GenerationStrategy.TargetModule);
            Assert.AreEqual(@"
module GeneratedModule {
    class A {
        MyProperty: B;
    }
    class B extends A {
        PropertyOnB: number;
    }
    class C extends B {
        PropertyOnC: string;
    }
}
".Trim(), g.Output.Trim());
        }