Skip to content

Commit

Permalink
Fixed 'declare' modifier (refs #136)
Browse files Browse the repository at this point in the history
  • Loading branch information
vojtechhabarta committed Apr 23, 2017
1 parent e820ec7 commit 68de040
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,15 @@ private void emitNamespace(TsModel model) {
writeIndentedLine("}");
} else {
final boolean exportElements = settings.outputKind == TypeScriptOutputKind.module;
final boolean declareElements = settings.outputKind == TypeScriptOutputKind.global;
final boolean declareElements = settings.outputFileType == TypeScriptFileType.declarationFile && settings.outputKind == TypeScriptOutputKind.global;
emitElements(model, exportElements, declareElements);
}
}

private void emitElements(TsModel model, boolean exportKeyword, boolean declareKeyword) {
exportKeyword = exportKeyword || forceExportKeyword;
emitBeans(model, exportKeyword);
emitTypeAliases(model, exportKeyword);
emitBeans(model, exportKeyword, declareKeyword);
emitTypeAliases(model, exportKeyword, declareKeyword);
emitNumberEnums(model, exportKeyword, declareKeyword);
emitHelpers(model);
for (EmitterExtension emitterExtension : settings.extensions) {
Expand All @@ -115,15 +115,15 @@ private void emitElements(TsModel model, boolean exportKeyword, boolean declareK
}
}

private void emitBeans(TsModel model, boolean exportKeyword) {
private void emitBeans(TsModel model, boolean exportKeyword, boolean declareKeyword) {
for (TsBeanModel bean : model.getBeans()) {
emitFullyQualifiedDeclaration(bean, exportKeyword, false);
emitFullyQualifiedDeclaration(bean, exportKeyword, declareKeyword);
}
}

private void emitTypeAliases(TsModel model, boolean exportKeyword) {
private void emitTypeAliases(TsModel model, boolean exportKeyword, boolean declareKeyword) {
for (TsAliasModel alias : model.getTypeAliases()) {
emitFullyQualifiedDeclaration(alias, exportKeyword, false);
emitFullyQualifiedDeclaration(alias, exportKeyword, declareKeyword);
}
}

Expand All @@ -139,9 +139,10 @@ private void emitNumberEnums(TsModel model, boolean exportKeyword, boolean decla
private void emitFullyQualifiedDeclaration(TsDeclarationModel declaration, boolean exportKeyword, boolean declareKeyword) {
if (declaration.getName().getNamespace() != null) {
writeNewLine();
writeIndentedLine(exportKeyword, "namespace " + declaration.getName().getNamespace() + " {");
final String prefix = declareKeyword ? "declare " : "";
writeIndentedLine(exportKeyword, prefix + "namespace " + declaration.getName().getNamespace() + " {");
indent++;
emitDeclaration(declaration, true, declareKeyword);
emitDeclaration(declaration, true, false);
indent--;
writeNewLine();
writeIndentedLine("}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,32 +13,40 @@ public class ModulesAndNamespacesTest {

@Test
public void testNamespacesAndModules() {
final File outputDir = new File("target/test-ts-modules");
files(new File("target/test-ts-modules"), false);
files(new File("target/test-ts-modules-pkg"), true);
}

public void files(File outputDir, boolean mapPackages) {
outputDir.mkdirs();

file("Test1", null, null, TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn1.d.ts"));
file("Test2", null, "NS2", TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn2.d.ts"));
file("Test3a", "mod3a", null, TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3a.d.ts"));
file("Test3b", null, null, TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3b.d.ts"));
file("Test4a", "mod4a", "NS4a", TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4a.d.ts"));
file("Test4b", null, "NS4b", TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4b.d.ts"));

file("Test5", null, null, TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn5.ts"));
file("Test6", null, "NS6", TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn6.ts"));
file("Test7", null, null, TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn7.ts"));
file("Test8", null, "NS8", TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn8.ts"));
file("Test1", null, null, mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn1.d.ts"));
file("Test2", null, "NS2", mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn2.d.ts"));
file("Test3a", "mod3a", null, mapPackages, TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3a.d.ts"));
file("Test3b", null, null, mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn3b.d.ts"));
file("Test4a", "mod4a", "NS4a", mapPackages, TypeScriptOutputKind.ambientModule, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4a.d.ts"));
file("Test4b", null, "NS4b", mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.declarationFile, new File(outputDir, "test-mn4b.d.ts"));

file("Test5", null, null, mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn5.ts"));
file("Test6", null, "NS6", mapPackages, TypeScriptOutputKind.global, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn6.ts"));
file("Test7", null, null, mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn7.ts"));
file("Test8", null, "NS8", mapPackages, TypeScriptOutputKind.module, TypeScriptFileType.implementationFile, new File(outputDir, "test-mn8.ts"));
}

private static void file(String prefix, String module, String namespace, TypeScriptOutputKind outputKind, TypeScriptFileType outputFileType, File output) {
private static void file(String prefix, String module, String namespace, boolean mapPackagesToNamespaces, TypeScriptOutputKind outputKind, TypeScriptFileType outputFileType, File output) {
final Settings settings = new Settings();
settings.jsonLibrary = JsonLibrary.jackson2;
settings.addTypeNamePrefix = prefix;
settings.module = module;
settings.namespace = namespace;
settings.mapPackagesToNamespaces = mapPackagesToNamespaces;
settings.outputKind = outputKind;
settings.outputFileType = outputFileType;
if (outputFileType == TypeScriptFileType.implementationFile) {
settings.extensions.add(new TestFunctionExtention());
settings.mapClasses = ClassMapping.asClasses;
}
if (outputFileType == TypeScriptFileType.implementationFile && !mapPackagesToNamespaces) {
settings.extensions.add(new TestFunctionExtension());
}
new TypeScriptGenerator(settings).generateTypeScript(Input.from(Data.class, Direction.class, Align.class), Output.to(output));
}
Expand All @@ -59,12 +67,13 @@ enum Align {
Right
}

private static class TestFunctionExtention extends EmitterExtension {
private static class TestFunctionExtension extends EmitterExtension {

@Override
public EmitterExtensionFeatures getFeatures() {
final EmitterExtensionFeatures features = new EmitterExtensionFeatures();
features.generatesRuntimeCode = true;
features.worksWithPackagesMappedToNamespaces = true;
return features;
}

Expand Down
58 changes: 58 additions & 0 deletions typescript-generator-core/src/test/ts/module-usage-pkg.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@

/// <reference path="../../../target/test-ts-modules-pkg/test-mn1.d.ts" />
/// <reference path="../../../target/test-ts-modules-pkg/test-mn2.d.ts" />
/// <reference path="../../../target/test-ts-modules-pkg/test-mn3a.d.ts" />
/// <reference path="../../../target/test-ts-modules-pkg/test-mn4a.d.ts" />
/// <reference path="../../../target/test-ts-modules-pkg/test-mn5.ts" />
/// <reference path="../../../target/test-ts-modules-pkg/test-mn6.ts" />

// declaration files

var a1: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test1Data;
var e1: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test1Direction;
var ne1: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test1Align;

var a2: NS2.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test2Data;
var e2: NS2.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test2Direction;
var ne2: NS2.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test2Align;

import * as mod3a from "mod3a";
var a3a: mod3a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3aData;
var e3a: mod3a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3aDirection;
var ne3a: mod3a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3aAlign;

import * as mod3b from "../../../target/test-ts-modules-pkg/test-mn3b";
var a3b: mod3b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3bData;
var e3b: mod3b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3bDirection;
var ne3b: mod3b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test3bAlign;

import * as mod4a from "mod4a";
var a4a: mod4a.NS4a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4aData;
var e4a: mod4a.NS4a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4aDirection;
var ne4a: mod4a.NS4a.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4aAlign;

import * as mod4b from "../../../target/test-ts-modules-pkg/test-mn4b";
var a4b: mod4b.NS4b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4bData;
var e4b: mod4b.NS4b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4bDirection;
var ne4b: mod4b.NS4b.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test4bAlign;


// implementation files

var a5: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test5Data;
var e5: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test5Direction;
var ne5: cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test5Align;

var a6: NS6.Test6Data;
var e6: NS6.Test6Direction;
var ne6: NS6.Test6Align;

import * as mod7 from "../../../target/test-ts-modules-pkg/test-mn7";
var a7: mod7.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test7Data;
var e7: mod7.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test7Direction;
var ne7: mod7.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test7Align;

import * as mod8 from "../../../target/test-ts-modules-pkg/test-mn8";
var a8: mod8.NS8.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test8Data;
var e8: mod8.NS8.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test8Direction;
var ne8: mod8.NS8.cz.habarta.typescript.generator.ModulesAndNamespacesTest.Test8Align;
31 changes: 21 additions & 10 deletions typescript-generator-core/src/test/ts/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,26 @@
},
"files": [
"module-usage.ts",
"../../../target/test-ts-modules/test-mn1.d.ts",
"../../../target/test-ts-modules/test-mn2.d.ts",
"../../../target/test-ts-modules/test-mn3a.d.ts",
"../../../target/test-ts-modules/test-mn3b.d.ts",
"../../../target/test-ts-modules/test-mn4a.d.ts",
"../../../target/test-ts-modules/test-mn4b.d.ts",
"../../../target/test-ts-modules/test-mn5.ts",
"../../../target/test-ts-modules/test-mn6.ts",
"../../../target/test-ts-modules/test-mn7.ts",
"../../../target/test-ts-modules/test-mn8.ts"
// "../../../target/test-ts-modules/test-mn1.d.ts",
// "../../../target/test-ts-modules/test-mn2.d.ts",
// "../../../target/test-ts-modules/test-mn3a.d.ts",
// "../../../target/test-ts-modules/test-mn3b.d.ts",
// "../../../target/test-ts-modules/test-mn4a.d.ts",
// "../../../target/test-ts-modules/test-mn4b.d.ts",
// "../../../target/test-ts-modules/test-mn5.ts",
// "../../../target/test-ts-modules/test-mn6.ts",
// "../../../target/test-ts-modules/test-mn7.ts",
// "../../../target/test-ts-modules/test-mn8.ts",
"module-usage-pkg.ts"
// "../../../target/test-ts-modules-pkg/test-mn1.d.ts",
// "../../../target/test-ts-modules-pkg/test-mn2.d.ts",
// "../../../target/test-ts-modules-pkg/test-mn3a.d.ts",
// "../../../target/test-ts-modules-pkg/test-mn3b.d.ts",
// "../../../target/test-ts-modules-pkg/test-mn4a.d.ts",
// "../../../target/test-ts-modules-pkg/test-mn4b.d.ts",
// "../../../target/test-ts-modules-pkg/test-mn5.ts",
// "../../../target/test-ts-modules-pkg/test-mn6.ts",
// "../../../target/test-ts-modules-pkg/test-mn7.ts",
// "../../../target/test-ts-modules-pkg/test-mn8.ts"
]
}

0 comments on commit 68de040

Please sign in to comment.