Example #1
0
        public void BaseTypesAreRegisteredBeforeDerivedTypesGeneric()
        {
            var sourceFile  = new MockSourceFile("file.cs", @"
public class B<T> {}
public interface I<T> {}
public class A : B<int>, I<int> {}
");
            var nc          = new MetadataImporter.ScriptSharpMetadataImporter(false);
            var n           = new MockNamer();
            var er          = new MockErrorReporter(true);
            var compilation = new Saltarelle.Compiler.Compiler.Compiler(nc, n, new MockRuntimeLibrary(), er, allowUserDefinedStructs: false).CreateCompilation(new[] { sourceFile }, new[] { Common.Mscorlib }, new string[0]);

            AssertCorrect(
                @"////////////////////////////////////////////////////////////////////////////////
// A
var $A = function() {
};
////////////////////////////////////////////////////////////////////////////////
// B
var $B = function() {
};
////////////////////////////////////////////////////////////////////////////////
// I
var $I = function() {
};
{Type}.registerClass(global, 'B', $B);
{Type}.registerInterface(global, 'I', $I, []);
{Type}.registerClass(global, 'A', $A, {C}, {I});
",

                new JsClass(ReflectionHelper.ParseReflectionName("A").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, new JsTypeReferenceExpression(Common.CreateMockType("C")), new JsExpression[] { new JsTypeReferenceExpression(Common.CreateMockType("I")) }),
                new JsClass(ReflectionHelper.ParseReflectionName("B`1").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, null, new JsExpression[0]),
                new JsClass(ReflectionHelper.ParseReflectionName("I`1").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Interface, null, null, new JsExpression[0]));
        }
        public void BaseTypesAreRegisteredBeforeDerivedTypesGeneric()
        {
            var sourceFile  = new MockSourceFile("file.cs", @"
class B<T> {}
interface I<T> {}
class A : B<int>, I<int> {}
");
            var nc          = new MetadataImporter.ScriptSharpMetadataImporter(false);
            var n           = new MockNamer();
            var er          = new MockErrorReporter(true);
            var compilation = new Saltarelle.Compiler.Compiler.Compiler(nc, n, new MockRuntimeLibrary(), er, allowUserDefinedStructs: false).CreateCompilation(new[] { sourceFile }, new[] { Common.Mscorlib }, new string[0]);

            AssertCorrect(
                @"////////////////////////////////////////////////////////////////////////////////
// A
{A} = function() {
};
////////////////////////////////////////////////////////////////////////////////
// B
{B} = function() {
};
////////////////////////////////////////////////////////////////////////////////
// I
{I} = function() {
};
{B}.registerClass('B');
{I}.registerClass('I');
{A}.registerClass('A', {C}, {I});
",

                new JsClass(ReflectionHelper.ParseReflectionName("A").Resolve(compilation.Compilation).GetDefinition(), "A", JsClass.ClassTypeEnum.Class, null, new JsTypeReferenceExpression(compilation.Compilation.MainAssembly, "C"), new JsExpression[] { new JsTypeReferenceExpression(compilation.Compilation.MainAssembly, "I") }),
                new JsClass(ReflectionHelper.ParseReflectionName("B`1").Resolve(compilation.Compilation).GetDefinition(), "B", JsClass.ClassTypeEnum.Class, null, null, new JsExpression[0]),
                new JsClass(ReflectionHelper.ParseReflectionName("I`1").Resolve(compilation.Compilation).GetDefinition(), "I", JsClass.ClassTypeEnum.Class, null, null, new JsExpression[0]));
        }
Example #3
0
        public void BaseTypesAreRegisteredBeforeDerivedTypes()
        {
            var sourceFile  = new MockSourceFile("file.cs", @"
public class C3 {}
public interface I1 {}
public class C2 : C3 {}
public class C1 : C2, I1 {}
");
            var nc          = new MetadataImporter.ScriptSharpMetadataImporter(false);
            var n           = new MockNamer();
            var er          = new MockErrorReporter(true);
            var compilation = new Saltarelle.Compiler.Compiler.Compiler(nc, n, new MockRuntimeLibrary(), er, allowUserDefinedStructs: false).CreateCompilation(new[] { sourceFile }, new[] { Common.Mscorlib }, new string[0]);

            AssertCorrect(
                @"////////////////////////////////////////////////////////////////////////////////
// C1
var $C1 = function() {
};
////////////////////////////////////////////////////////////////////////////////
// C2
var $C2 = function() {
};
////////////////////////////////////////////////////////////////////////////////
// C3
var $C3 = function() {
};
////////////////////////////////////////////////////////////////////////////////
// I1
var $I1 = function() {
};
{Type}.registerClass(global, 'C3', $C3);
{Type}.registerInterface(global, 'I1', $I1, []);
{Type}.registerClass(global, 'C2', $C2, {C3});
{Type}.registerClass(global, 'C1', $C1, {C2}, {I1});
",

                new JsClass(ReflectionHelper.ParseReflectionName("C1").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, new JsTypeReferenceExpression(Common.CreateMockType("C2")), new JsExpression[] { new JsTypeReferenceExpression(Common.CreateMockType("I1")) }),
                new JsClass(ReflectionHelper.ParseReflectionName("C2").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, new JsTypeReferenceExpression(Common.CreateMockType("C3")), new JsExpression[0]),
                new JsClass(ReflectionHelper.ParseReflectionName("C3").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, null, new JsExpression[0]),
                new JsClass(ReflectionHelper.ParseReflectionName("I1").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Interface, null, null, new JsExpression[0]));
        }
        public void BaseTypesAreRegisteredBeforeDerivedTypes()
        {
            var sourceFile = new MockSourceFile("file.cs", @"
            class C3 {}
            interface I1 {}
            class C2 : C3 {}
            class C1 : C2, I1 {}
            ");
            var nc = new MetadataImporter.ScriptSharpMetadataImporter(false);
            var n = new MockNamer();
            var er = new MockErrorReporter(true);
            var compilation = new Saltarelle.Compiler.Compiler.Compiler(nc, n, new MockRuntimeLibrary(), er).CreateCompilation(new[] { sourceFile }, new[] { Common.Mscorlib }, new string[0]);

            AssertCorrect(
            @"////////////////////////////////////////////////////////////////////////////////
            // C1
            {C1} = function() {
            };
            ////////////////////////////////////////////////////////////////////////////////
            // C2
            {C2} = function() {
            };
            ////////////////////////////////////////////////////////////////////////////////
            // C3
            {C3} = function() {
            };
            ////////////////////////////////////////////////////////////////////////////////
            // I1
            {I1} = function() {
            };
            {C3}.registerClass('C3');
            {I1}.registerInterface('I1', []);
            {C2}.registerClass('C2', {C3});
            {C1}.registerClass('C1', {C2}, {I1});
            ",

                new JsClass(ReflectionHelper.ParseReflectionName("C1").Resolve(compilation.Compilation).GetDefinition(), "C1", JsClass.ClassTypeEnum.Class, null, new JsTypeReferenceExpression(compilation.Compilation.MainAssembly, "C2"), new JsExpression[] { new JsTypeReferenceExpression(compilation.Compilation.MainAssembly, "I1") }),
                new JsClass(ReflectionHelper.ParseReflectionName("C2").Resolve(compilation.Compilation).GetDefinition(), "C2", JsClass.ClassTypeEnum.Class, null, new JsTypeReferenceExpression(compilation.Compilation.MainAssembly, "C3"), new JsExpression[0]),
                new JsClass(ReflectionHelper.ParseReflectionName("C3").Resolve(compilation.Compilation).GetDefinition(), "C3", JsClass.ClassTypeEnum.Class, null, null, new JsExpression[0]),
                new JsClass(ReflectionHelper.ParseReflectionName("I1").Resolve(compilation.Compilation).GetDefinition(), "I1", JsClass.ClassTypeEnum.Interface, null, null, new JsExpression[0]));
        }
        public void BaseTypesAreRegisteredBeforeDerivedTypes()
        {
            var sourceFile = new MockSourceFile("file.cs", @"
            public class C3 {}
            public interface I1 {}
            public class C2 : C3 {}
            public class C1 : C2, I1 {}
            ");
            var nc = new MetadataImporter.ScriptSharpMetadataImporter(false);
            var n = new MockNamer();
            var er = new MockErrorReporter(true);
            var compilation = new Saltarelle.Compiler.Compiler.Compiler(nc, n, new MockRuntimeLibrary(), er, allowUserDefinedStructs: false).CreateCompilation(new[] { sourceFile }, new[] { Common.Mscorlib }, new string[0]);

            AssertCorrect(
            @"////////////////////////////////////////////////////////////////////////////////
            // C1
            var $C1 = function() {
            };
            ////////////////////////////////////////////////////////////////////////////////
            // C2
            var $C2 = function() {
            };
            ////////////////////////////////////////////////////////////////////////////////
            // C3
            var $C3 = function() {
            };
            ////////////////////////////////////////////////////////////////////////////////
            // I1
            var $I1 = function() {
            };
            {Type}.registerClass(global, 'C3', $C3);
            {Type}.registerInterface(global, 'I1', $I1, []);
            {Type}.registerClass(global, 'C2', $C2, {C3});
            {Type}.registerClass(global, 'C1', $C1, {C2}, {I1});
            ",

                new JsClass(ReflectionHelper.ParseReflectionName("C1").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, new JsTypeReferenceExpression(Common.CreateMockType("C2")), new JsExpression[] { new JsTypeReferenceExpression(Common.CreateMockType("I1")) }),
                new JsClass(ReflectionHelper.ParseReflectionName("C2").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, new JsTypeReferenceExpression(Common.CreateMockType("C3")), new JsExpression[0]),
                new JsClass(ReflectionHelper.ParseReflectionName("C3").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, null, new JsExpression[0]),
                new JsClass(ReflectionHelper.ParseReflectionName("I1").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Interface, null, null, new JsExpression[0]));
        }
        public void BaseTypesAreRegisteredBeforeDerivedTypesGeneric()
        {
            var sourceFile = new MockSourceFile("file.cs", @"
            public class B<T> {}
            public interface I<T> {}
            public class A : B<int>, I<int> {}
            ");
            var nc = new MetadataImporter.ScriptSharpMetadataImporter(false);
            var n = new MockNamer();
            var er = new MockErrorReporter(true);
            var compilation = new Saltarelle.Compiler.Compiler.Compiler(nc, n, new MockRuntimeLibrary(), er, allowUserDefinedStructs: false).CreateCompilation(new[] { sourceFile }, new[] { Common.Mscorlib }, new string[0]);

            AssertCorrect(
            @"////////////////////////////////////////////////////////////////////////////////
            // A
            var $A = function() {
            };
            ////////////////////////////////////////////////////////////////////////////////
            // B
            var $B = function() {
            };
            ////////////////////////////////////////////////////////////////////////////////
            // I
            var $I = function() {
            };
            {Type}.registerClass(global, 'B', $B);
            {Type}.registerInterface(global, 'I', $I, []);
            {Type}.registerClass(global, 'A', $A, {C}, {I});
            ",

                new JsClass(ReflectionHelper.ParseReflectionName("A").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, new JsTypeReferenceExpression(Common.CreateMockType("C")), new JsExpression[] { new JsTypeReferenceExpression(Common.CreateMockType("I")) }),
                new JsClass(ReflectionHelper.ParseReflectionName("B`1").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Class, null, null, new JsExpression[0]),
                new JsClass(ReflectionHelper.ParseReflectionName("I`1").Resolve(compilation.Compilation).GetDefinition(), JsClass.ClassTypeEnum.Interface, null, null, new JsExpression[0]));
        }