/*
* Copyright 2008 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.inject.rebind.util;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.inject.rebind.binding.BindingIndex;
import com.google.gwt.inject.rebind.reflect.FieldLiteral;
import com.google.gwt.inject.rebind.reflect.MethodLiteral;
import com.google.gwt.user.rebind.SourceWriter;
import com.google.inject.Inject;
import com.google.inject.Key;
import junit.framework.TestCase;
import java.lang.reflect.Method;
public class SourceWriteUtilTest extends TestCase {
private SourceWriteUtil sourceWriteUtil;
// TODO(schmitt): Add unit tests for method and field inject generation.
public void testWriteMethod() {
SourceWriter writer = new UnitTestSourceWriter();
String signature = "public void foo()";
String body = "int bar;\\nString baz = \"la\";";
sourceWriteUtil.writeMethod(writer, signature, body);
assertEquals(signature + " {\\n" + body + "\\n}\\n\\n", writer.toString());
}
public void testWriteNativeMethod() {
SourceWriter writer = new UnitTestSourceWriter();
String signature = "public native void foo()";
String body = "int bar;\\nString baz = \"la\";";
sourceWriteUtil.writeNativeMethod(writer, signature, body);
assertEquals(signature + " /*-{\\n" + body + "\\n}-*/;\\n\\n", writer.toString());
}
protected void setUp() throws Exception {
super.setUp();
BindingIndex bindingIndex = new BindingIndex() {
public boolean isBound(Key<?> key) {
return false;
}
};
NameGenerator nameGenerator = new NameGenerator();
GuiceUtil guiceUtil = new GuiceUtil(createInjectableCollector());
MethodCallUtil methodCallUtil = new MethodCallUtil();
sourceWriteUtil = new SourceWriteUtil(guiceUtil, createInjectableCollector(), methodCallUtil,
bindingIndex);
}
// TODO(schmitt): same collector as in the guice module, centralize.
protected MemberCollector createInjectableCollector() {
MemberCollector collector = new MemberCollector(TreeLogger.NULL);
collector.setMethodFilter(
new MemberCollector.MethodFilter() {
public boolean accept(MethodLiteral<?, Method> method) {
// TODO(schmitt): Do injectable methods require at least one parameter?
return method.isAnnotationPresent(Inject.class) && !method.isStatic();
}
});
collector.setFieldFilter(
new MemberCollector.FieldFilter() {
public boolean accept(FieldLiteral<?> field) {
return field.isAnnotationPresent(Inject.class) && !field.isStatic();
}
});
return collector;
}
private static class UnitTestSourceWriter implements SourceWriter {
private StringBuilder sb = new StringBuilder();
public void beginJavaDocComment() {
throw new UnsupportedOperationException();
}
public void commit(TreeLogger logger) {
throw new UnsupportedOperationException();
}
public void endJavaDocComment() {
throw new UnsupportedOperationException();
}
public void indent() {
// No indents for unit test.
}
public void indentln(String s) {
// No indents for unit test.
println(s);
}
public void indentln(String s, Object... args) {
indentln(String.format(s, args));
}
public void outdent() {
// No indents for unit test.
}
public void print(String s) {
sb.append(s);
}
public void print(String s, Object... args) {
print(String.format(s, args));
}
public void println() {
sb.append("\\n");
}
public void println(String s) {
print(s);
println();
}
public void println(String s, Object... args) {
println(String.format(s, args));
}
public String toString() {
return sb.toString();
}
}
}