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 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; "); }
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; "); }