package cz.habarta.typescript.generator; import cz.habarta.typescript.generator.compiler.SymbolTable; import cz.habarta.typescript.generator.yield.KeywordInPackage; import java.util.LinkedHashMap; import org.junit.Assert; import org.junit.Test; public class NamingTest { @Test(expected = SymbolTable.NameConflictException.class) public void testConflictReport() { final Settings settings = TestUtils.settings(); new TypeScriptGenerator(settings).generateTypeScript(Input.from(A.ConflictingClass.class, B.ConflictingClass.class)); } @Test public void testConflictResolved() { final Settings settings = TestUtils.settings(); settings.customTypeNaming = new LinkedHashMap<>(); settings.customTypeNaming.put("cz.habarta.typescript.generator.NamingTest$A$ConflictingClass", "A$ConflictingClass"); settings.customTypeNaming.put("cz.habarta.typescript.generator.NamingTest$B$ConflictingClass", "B$ConflictingClass"); final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(A.ConflictingClass.class, B.ConflictingClass.class)); Assert.assertTrue(output.contains("A$ConflictingClass")); Assert.assertTrue(output.contains("B$ConflictingClass")); } @Test public void testConflictPrevented() { final Settings settings = TestUtils.settings(); settings.mapPackagesToNamespaces = true; final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(A.ConflictingClass.class, B.ConflictingClass.class)); Assert.assertTrue(output.contains("namespace cz.habarta.typescript.generator.NamingTest.A {")); Assert.assertTrue(output.contains("namespace cz.habarta.typescript.generator.NamingTest.B {")); } private static class A { private static class ConflictingClass { public String conflictingProperty; } } private static class B { private static class ConflictingClass { public String conflictingProperty; } } @Test public void testTypeNamingFunction() { final Settings settings = TestUtils.settings(); settings.customTypeNamingFunction = "function(name, simpleName) { if (name.indexOf('cz.') === 0) return 'Test' + simpleName; }"; final SymbolTable symbolTable = new SymbolTable(settings); final String name = symbolTable.getMappedFullName(A.class); Assert.assertEquals("TestA", name); } @Test public void testTypeNamingFunctionReturnsUndefined() { final Settings settings = TestUtils.settings(); settings.customTypeNamingFunction = "function() {}"; final SymbolTable symbolTable = new SymbolTable(settings); final String name = symbolTable.getMappedFullName(A.class); Assert.assertEquals("A", name); } @Test public void testCombinations() { final Settings settings = TestUtils.settings(); settings.customTypeNamingFunction = "function(name, simpleName) { if (name.indexOf('cz.') === 0) return 'Func' + simpleName; }"; settings.addTypeNamePrefix = "Conf"; settings.mapPackagesToNamespaces = true; final SymbolTable symbolTable = new SymbolTable(settings); Assert.assertEquals("FuncA", symbolTable.getMappedFullName(A.class)); Assert.assertEquals("java.lang.ConfObject", symbolTable.getMappedFullName(Object.class)); } @Test public void testTypeScriptKeywords() { final Settings settings = TestUtils.settings(); settings.mapPackagesToNamespaces = true; final SymbolTable symbolTable = new SymbolTable(settings); final String name = symbolTable.getMappedFullName(KeywordInPackage.class); Assert.assertEquals("cz.habarta.typescript.generator._yield.KeywordInPackage", name); } }