blob: 205f2df0cbe10cc16bc7a98d75a2e386deb237b3 [file] [log] [blame]
/*
* Copyright 2011 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.uibinder.rebind;
import com.google.gwt.codegen.server.AbortablePrintWriter;
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.CompilerContext;
import com.google.gwt.dev.javac.CompilationState;
import com.google.gwt.dev.javac.CompilationStateBuilder;
import com.google.gwt.dev.javac.testing.impl.MockJavaResource;
import com.google.gwt.dev.javac.testing.impl.MockResourceOracle;
import com.google.gwt.dev.resource.Resource;
import com.google.gwt.dev.resource.ResourceOracle;
import com.google.gwt.dev.util.collect.HashSet;
import com.google.gwt.dev.util.log.PrintWriterTreeLogger;
import com.google.gwt.resources.rg.GssResourceGenerator.AutoConversionMode;
import com.google.gwt.resources.rg.GssResourceGenerator.GssOptions;
import com.google.gwt.uibinder.attributeparsers.AttributeParsers;
import com.google.gwt.uibinder.rebind.messages.MessagesWriter;
import com.google.gwt.uibinder.test.UiJavaResources;
import junit.framework.TestCase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXParseException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.Set;
/**
* Base class for tests that exercise {@link UiBinderWriter}.
*/
public abstract class AbstractUiBinderWriterTest extends TestCase {
public static final MockJavaResource CLIENT_BUNDLE = new MockJavaResource(
"com.google.gwt.resources.client.ClientBundle") {
@Override
public CharSequence getContent() {
StringBuffer code = new StringBuffer();
code.append("package com.google.gwt.resources.client;\n");
code.append("public interface ClientBundle {");
code.append("}");
return code;
}
};
public static final MockJavaResource DIV_ELEMENT = new MockJavaResource(
"com.google.gwt.dom.client.DivElement") {
@Override
public CharSequence getContent() {
StringBuffer code = new StringBuffer();
code.append("package com.google.gwt.dom.client;\n");
code.append("public class DivElement extends Element {");
code.append("}");
return code;
}
};
public static final MockJavaResource FOO = new MockJavaResource("foo.Foo") {
@Override
public CharSequence getContent() {
StringBuffer code = new StringBuffer();
code.append("package foo;");
code.append("public class Foo {");
code.append("}");
return code;
}
};
public static final MockJavaResource RENDERABLE_PANEL = new MockJavaResource(
"com.google.gwt.user.client.ui.RenderablePanel") {
@Override
public CharSequence getContent() {
StringBuffer code = new StringBuffer();
code.append("package com.google.gwt.user.client.ui;\n");
code.append("public class RenderablePanel {");
code.append("}");
return code;
}
};
public static final MockJavaResource SPAN_ELEMENT = new MockJavaResource(
"com.google.gwt.dom.client.SpanElement") {
@Override
public CharSequence getContent() {
StringBuffer code = new StringBuffer();
code.append("package com.google.gwt.dom.client;\n");
code.append("public class SpanElement extends Element {");
code.append("}");
return code;
}
};
public static final MockJavaResource UI_STYLE = new MockJavaResource("foo.UiStyle") {
@Override
public CharSequence getContent() {
StringBuffer code = new StringBuffer();
code.append("package foo;");
code.append("public interface UiStyle {");
code.append("}");
return code;
}
};
protected static final String BINDER_URI = "urn:ui:com.google.gwt.uibinder";
protected static final W3cDomHelper docHelper = new W3cDomHelper(TreeLogger.NULL,
new MockResourceOracle());
protected static final String RENDERER_BASE_CLASS_NAME = "renderer.OwnerClass.Renderer";
protected static final String RENDERER_OWNER_CLASS_NAME = "renderer.OwnerClass";
private static TreeLogger createCompileLogger() {
PrintWriterTreeLogger logger = new PrintWriterTreeLogger(new PrintWriter(System.err, true));
logger.setMaxDetail(TreeLogger.ERROR);
return logger;
}
protected Document doc;
protected PrintWriter printWriter;
protected UiBinderWriter writer;
protected UiBinderParser parser;
protected XMLElementProvider elemProvider;
protected XMLElement elm;
protected FieldManager fieldManager;
protected Element item;
protected MockMortalLogger logger;
protected Set<Resource> resources = new HashSet<Resource>();
protected TypeOracle types;
public AbstractUiBinderWriterTest() {
super();
}
/**
* @param name
*/
public AbstractUiBinderWriterTest(String name) {
super(name);
}
@Override
public void setUp() throws Exception {
super.setUp();
resources.addAll(UiJavaResources.getUiResources());
printWriter = new AbortablePrintWriter(new PrintWriter(new StringWriter()));
}
protected void init(String domString, MockJavaResource rendererClass,
MockJavaResource... otherClasses) throws SAXParseException, UnableToCompleteException {
resources.add(RENDERABLE_PANEL);
resources.add(CLIENT_BUNDLE);
resources.add(DIV_ELEMENT);
resources.add(SPAN_ELEMENT);
resources.add(UI_STYLE);
resources.add(FOO);
resources.add(rendererClass);
resources.addAll(Arrays.asList(otherClasses));
CompilationState state =
CompilationStateBuilder.buildFrom(createCompileLogger(), new CompilerContext(), resources);
types = state.getTypeOracle();
logger = new MockMortalLogger();
UiBinderContext uiBinderCtx = new UiBinderContext();
fieldManager = new FieldManager(types, logger, true);
String baseClass = RENDERER_BASE_CLASS_NAME;
DesignTimeUtils designTime = DesignTimeUtilsStub.EMPTY;
elemProvider =
new XMLElementProviderImpl(new AttributeParsers(types, fieldManager, logger),
types, logger, designTime);
doc = docHelper.documentFor(domString, rendererClass.getPath());
item = (Element) doc.getDocumentElement().getChildNodes().item(0);
elm = elemProvider.get(item);
JClassType aClass = types.findType(baseClass);
MessagesWriter messages =
new MessagesWriter(types, BINDER_URI, logger, rendererClass.getPath(), "rendererPackage",
"rendererClassName");
ResourceOracle resourceOracle = new MockResourceOracle();
GssOptions gssOptions = new GssOptions(true, AutoConversionMode.OFF, true);
writer = new UiBinderWriter(aClass, "foo", "", types, logger, fieldManager, messages,
DesignTimeUtilsStub.EMPTY, uiBinderCtx, true, true, BINDER_URI, resourceOracle, gssOptions);
parser = new UiBinderParser(writer, messages, fieldManager, types, null, BINDER_URI,
new UiBinderContext(), resourceOracle, gssOptions);
designTime.rememberPathForElements(doc);
}
}