예제 #1
0
        public void AsyncModuleWithReferencesWorks()
        {
            var asm = CreateMockAssembly();
            var t1  = CreateMockType("SomeNamespace.InnerNamespace.Type1", asm);
            var t2  = CreateMockType("SomeNamespace.InnerNamespace.Type2", asm);
            var t3  = CreateMockType("SomeNamespace.Type3", asm);
            var t4  = CreateMockType("Type4", asm);
            var md  = new MockScriptSharpMetadataImporter {
                GetModuleName = t => t.Name == "Type1" || t.Name == "Type3" ? "module1" : (t.Name == "Type2" ? "module2" : "module3"), IsAsyncModule = true
            };

            var actual = Process(new JsStatement[] {
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t1), "a"), JsExpression.Member(new JsTypeReferenceExpression(t2), "b"))),
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t3), "c"), JsExpression.Member(new JsTypeReferenceExpression(t4), "d"))),
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t1), "e"), JsExpression.Member(new JsTypeReferenceExpression(t4), "f"))),
            }, metadata: md);

            AssertCorrect(actual,
                          @"define(['mscorlib', 'module1', 'module2', 'module3'], function($_, $module1, $module2, $module3) {
	var exports = {};
	$module1.SomeNamespace.InnerNamespace.Type1.a + $module2.SomeNamespace.InnerNamespace.Type2.b;
	$module1.SomeNamespace.Type3.c + $module3.Type4.d;
	$module1.SomeNamespace.InnerNamespace.Type1.e + $module3.Type4.f;
	return exports;
});
");
        }
예제 #2
0
        public void ImportingTypesFromModulesWorks()
        {
            var asm = CreateMockAssembly();
            var t1  = CreateMockType("SomeNamespace.InnerNamespace.Type1", asm);
            var t2  = CreateMockType("SomeNamespace.InnerNamespace.Type2", asm);
            var t3  = CreateMockType("SomeNamespace.Type3", asm);
            var t4  = CreateMockType("Type4", asm);
            var md  = new MockScriptSharpMetadataImporter {
                GetModuleName = t => t.Name == "Type1" || t.Name == "Type3" ? "module1" : (t.Name == "Type2" ? "module2" : "module3")
            };

            var actual = Process(new JsStatement[] {
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t1), "a"), JsExpression.Member(new JsTypeReferenceExpression(t2), "b"))),
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t3), "c"), JsExpression.Member(new JsTypeReferenceExpression(t4), "d"))),
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t1), "e"), JsExpression.Member(new JsTypeReferenceExpression(t4), "f"))),
            }, metadata: md);

            AssertCorrect(actual,
                          @"require('mscorlib');
var $module1 = require('module1');
var $module2 = require('module2');
var $module3 = require('module3');
$module1.SomeNamespace.InnerNamespace.Type1.a + $module2.SomeNamespace.InnerNamespace.Type2.b;
$module1.SomeNamespace.Type3.c + $module3.Type4.d;
$module1.SomeNamespace.InnerNamespace.Type1.e + $module3.Type4.f;
");
        }
예제 #3
0
        public void GeneratedModuleAliasesAreValidAndDoNotClashWithEachOtherOrUsedSymbols()
        {
            var asm = CreateMockAssembly();
            var t1  = CreateMockType("Type1", asm);
            var t2  = CreateMockType("Type2", asm);
            var t3  = CreateMockType("Type3", asm);
            var t4  = CreateMockType("Type4", asm);
            var t5  = CreateMockType("Type5", asm);
            var md  = new MockScriptSharpMetadataImporter {
                GetModuleName = t => { switch (t.Name)
                                       {
                                       case "Type1": return("mymodule");

                                       case "Type2": return("mymodule+");

                                       case "Type3": return("mymodule-");

                                       case "Type4": return("+");

                                       case "Type5": return("-");

                                       default: throw new InvalidOperationException();
                                       }
                }
            };

            var actual = Process(new JsStatement[] {
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t1), "a")),
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t2), "b")),
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t3), "c")),
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t4), "d")),
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t5), "e")),
                new JsVariableDeclarationStatement("mymodule", null),
            }, metadata: md, namer: new MockNamer(prefixWithDollar: false));

            AssertCorrect(actual,
                          @"require('mscorlib');
var _2 = require('-');
var _ = require('+');
var mymodule2 = require('mymodule');
var mymodule4 = require('mymodule-');
var mymodule3 = require('mymodule+');
mymodule2.Type1.a;
mymodule3.Type2.b;
mymodule4.Type3.c;
_.Type4.d;
_2.Type5.e;
var mymodule;
");
        }
예제 #4
0
        public void ImportingGlobalMethodsFromModulesWorks()
        {
            var t1 = CreateMockType("Type1", CreateMockAssembly());
            var md = new MockScriptSharpMetadataImporter {
                GetModuleName = t => "mymodule", GetTypeSemantics = t => TypeScriptSemantics.NormalType("")
            };

            var actual = Process(new JsStatement[] {
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t1), "a")),
            }, metadata: md);

            AssertCorrect(actual,
                          @"require('mscorlib');
var $mymodule = require('mymodule');
$mymodule.a;
");
        }
        public void AsyncModuleWithReferencesWorks()
        {
            var asm = CreateMockAssembly();
            var t1 = CreateMockType("SomeNamespace.InnerNamespace.Type1", asm);
            var t2 = CreateMockType("SomeNamespace.InnerNamespace.Type2", asm);
            var t3 = CreateMockType("SomeNamespace.Type3", asm);
            var t4 = CreateMockType("Type4", asm);
            var md = new MockScriptSharpMetadataImporter { GetModuleName = t => t.Name == "Type1" || t.Name == "Type3" ? "module1" : (t.Name == "Type2" ? "module2" : "module3"), IsAsyncModule = true };

            var actual = Process(new JsStatement[] {
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t1), "a"), JsExpression.Member(new JsTypeReferenceExpression(t2), "b"))),
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t3), "c"), JsExpression.Member(new JsTypeReferenceExpression(t4), "d"))),
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t1), "e"), JsExpression.Member(new JsTypeReferenceExpression(t4), "f"))),
            }, metadata: md);

            AssertCorrect(actual,
            @"define(['mscorlib', 'module1', 'module2', 'module3'], function($_, $module1, $module2, $module3) {
            var exports = {};
            $module1.SomeNamespace.InnerNamespace.Type1.a + $module2.SomeNamespace.InnerNamespace.Type2.b;
            $module1.SomeNamespace.Type3.c + $module3.Type4.d;
            $module1.SomeNamespace.InnerNamespace.Type1.e + $module3.Type4.f;
            return exports;
            });
            ");
        }
        public void ImportingTypesFromModulesWorks()
        {
            var asm = CreateMockAssembly();
            var t1 = CreateMockType("SomeNamespace.InnerNamespace.Type1", asm);
            var t2 = CreateMockType("SomeNamespace.InnerNamespace.Type2", asm);
            var t3 = CreateMockType("SomeNamespace.Type3", asm);
            var t4 = CreateMockType("Type4", asm);
            var md = new MockScriptSharpMetadataImporter { GetModuleName = t => t.Name == "Type1" || t.Name == "Type3" ? "module1" : (t.Name == "Type2" ? "module2" : "module3") };

            var actual = Process(new JsStatement[] {
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t1), "a"), JsExpression.Member(new JsTypeReferenceExpression(t2), "b"))),
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t3), "c"), JsExpression.Member(new JsTypeReferenceExpression(t4), "d"))),
                new JsExpressionStatement(JsExpression.Add(JsExpression.Member(new JsTypeReferenceExpression(t1), "e"), JsExpression.Member(new JsTypeReferenceExpression(t4), "f"))),
            }, metadata: md);

            AssertCorrect(actual,
            @"require('mscorlib');
            var $module1 = require('module1');
            var $module2 = require('module2');
            var $module3 = require('module3');
            $module1.SomeNamespace.InnerNamespace.Type1.a + $module2.SomeNamespace.InnerNamespace.Type2.b;
            $module1.SomeNamespace.Type3.c + $module3.Type4.d;
            $module1.SomeNamespace.InnerNamespace.Type1.e + $module3.Type4.f;
            ");
        }
        public void ImportingGlobalMethodsFromModulesWorks()
        {
            var t1 = CreateMockType("Type1", CreateMockAssembly());
            var md = new MockScriptSharpMetadataImporter { GetModuleName = t => "mymodule", GetTypeSemantics = t => TypeScriptSemantics.NormalType("") };

            var actual = Process(new JsStatement[] {
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t1), "a")),
            }, metadata: md);

            AssertCorrect(actual,
            @"require('mscorlib');
            var $mymodule = require('mymodule');
            $mymodule.a;
            ");
        }
        public void GeneratedModuleAliasesAreValidAndDoNotClashWithEachOtherOrUsedSymbols()
        {
            var asm = CreateMockAssembly();
            var t1 = CreateMockType("Type1", asm);
            var t2 = CreateMockType("Type2", asm);
            var t3 = CreateMockType("Type3", asm);
            var t4 = CreateMockType("Type4", asm);
            var t5 = CreateMockType("Type5", asm);
            var md = new MockScriptSharpMetadataImporter { GetModuleName = t => { switch (t.Name) {
                                                                                      case "Type1": return "mymodule";
                                                                                      case "Type2": return "mymodule+";
                                                                                      case "Type3": return "mymodule-";
                                                                                      case "Type4": return "+";
                                                                                      case "Type5": return "-";
                                                                                      default: throw new InvalidOperationException();
                                                                                  } }
                                                         };

            var actual = Process(new JsStatement[] {
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t1), "a")),
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t2), "b")),
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t3), "c")),
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t4), "d")),
                new JsExpressionStatement(JsExpression.Member(new JsTypeReferenceExpression(t5), "e")),
                new JsVariableDeclarationStatement("mymodule", null),
            }, metadata: md, namer: new MockNamer(prefixWithDollar: false));

            AssertCorrect(actual,
            @"require('mscorlib');
            var _2 = require('-');
            var _ = require('+');
            var mymodule2 = require('mymodule');
            var mymodule4 = require('mymodule-');
            var mymodule3 = require('mymodule+');
            mymodule2.Type1.a;
            mymodule3.Type2.b;
            mymodule4.Type3.c;
            _.Type4.d;
            _2.Type5.e;
            var mymodule;
            ");
        }