/* * Copyright 2010 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.i18n.rebind; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.core.ext.typeinfo.JClassType; import com.google.gwt.core.ext.typeinfo.TypeOracle; import com.google.gwt.dev.javac.TypeOracleTestingUtils; import com.google.gwt.dev.javac.testing.impl.MockJavaResource; import com.google.gwt.dev.shell.FailErrorLogger; import com.google.gwt.i18n.server.GwtLocaleFactoryImpl; import com.google.gwt.i18n.shared.GwtLocale; import com.google.gwt.i18n.shared.GwtLocaleFactory; import junit.framework.TestCase; import java.util.Map; /** * Check that locale aliases are handled properly for Localizable and related * processing. */ public class LocalizableLinkageCreatorTest extends TestCase { private static final MockJavaResource LOCALIZABLE = new MockJavaResource( "com.google.gwt.i18n.client.Localizable") { @Override public CharSequence getContent() { StringBuffer code = new StringBuffer(); code.append("package com.google.gwt.i18n.client;\n"); code.append("public interface Localizable { }\n"); return code; } }; private static final MockJavaResource TEST = new MockJavaResource( "foo.Test") { @Override public CharSequence getContent() { StringBuffer code = new StringBuffer(); code.append("package foo;\n"); code.append("import com.google.gwt.i18n.client.Localizable;\n"); code.append("public class Test implements Localizable { }\n"); return code; } }; private static final MockJavaResource TEST_HE = new MockJavaResource( "foo.Test_he") { @Override public CharSequence getContent() { StringBuffer code = new StringBuffer(); code.append("package foo;\n"); code.append("public class Test_he extends Test { }\n"); return code; } }; private static final MockJavaResource TEST_IW = new MockJavaResource( "foo.Test_iw") { @Override public CharSequence getContent() { StringBuffer code = new StringBuffer(); code.append("package foo;\n"); code.append("public class Test_iw extends Test { }\n"); return code; } }; public void testFindDerivedClasses() throws UnableToCompleteException { TreeLogger logger = new FailErrorLogger(); TypeOracle oracle = TypeOracleTestingUtils.buildStandardTypeOracleWith( logger, LOCALIZABLE, TEST, TEST_IW, TEST_HE); JClassType clazz = oracle.findType("foo.Test"); Map<String, JClassType> derivedClasses = LocalizableLinkageCreator.findDerivedClasses(logger, clazz); assertEquals(3, derivedClasses.size()); assertEquals("foo.Test", derivedClasses.get("default").getQualifiedSourceName()); assertEquals("foo.Test_iw", derivedClasses.get("iw").getQualifiedSourceName()); assertEquals("foo.Test_he", derivedClasses.get("he").getQualifiedSourceName()); } public void testLinkWithImplClass() throws UnableToCompleteException { LocalizableLinkageCreator llc = new LocalizableLinkageCreator(); TreeLogger logger = new FailErrorLogger(); TypeOracle oracle = TypeOracleTestingUtils.buildStandardTypeOracleWith( logger, LOCALIZABLE, TEST, TEST_IW); JClassType test = oracle.findType("foo.Test"); GwtLocaleFactory factory = new GwtLocaleFactoryImpl(); GwtLocale locale = factory.fromString("he"); String implClass = llc.linkWithImplClass(logger, test, locale); assertEquals("foo.Test_iw", implClass); oracle = TypeOracleTestingUtils.buildStandardTypeOracleWith( logger, LOCALIZABLE, TEST, TEST_HE); test = oracle.findType("foo.Test"); locale = factory.fromString("iw"); implClass = llc.linkWithImplClass(logger, test, locale); assertEquals("foo.Test_he", implClass); } }