/*
* 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);
}
}