IntPairAttributeParser now actually parses Review by jgw http://gwt-code-reviews.appspot.com/132811 git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7432 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/uibinder/attributeparsers/AttributeParsers.java b/user/src/com/google/gwt/uibinder/attributeparsers/AttributeParsers.java index 70af3f9..5b0c9c3 100644 --- a/user/src/com/google/gwt/uibinder/attributeparsers/AttributeParsers.java +++ b/user/src/com/google/gwt/uibinder/attributeparsers/AttributeParsers.java
@@ -69,7 +69,7 @@ addAttributeParser(DOUBLE, doubleParser); addAttributeParser(Double.class.getCanonicalName(), doubleParser); - addAttributeParser("int,int", new IntPairParser()); + addAttributeParser("int,int", new IntPairAttributeParser(intParser, logger)); addAttributeParser(HORIZ_CONSTANT, new HorizontalAlignmentConstantParser( converter, types.parse(HORIZ_CONSTANT), logger));
diff --git a/user/src/com/google/gwt/uibinder/attributeparsers/IntPairAttributeParser.java b/user/src/com/google/gwt/uibinder/attributeparsers/IntPairAttributeParser.java new file mode 100644 index 0000000..1bb1238 --- /dev/null +++ b/user/src/com/google/gwt/uibinder/attributeparsers/IntPairAttributeParser.java
@@ -0,0 +1,48 @@ +/* + * Copyright 2007 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.attributeparsers; + +import com.google.gwt.core.ext.UnableToCompleteException; +import com.google.gwt.uibinder.rebind.MortalLogger; + +/** + * Parses a pair of integer values. + */ +class IntPairAttributeParser implements AttributeParser { + + private final IntAttributeParser intParser; + private final MortalLogger logger; + + IntPairAttributeParser(IntAttributeParser intParser, MortalLogger logger) { + this.intParser = intParser; + this.logger = logger; + } + + public String parse(String value) throws UnableToCompleteException { + String[] values = value.split(","); + if (values.length != 2) { + die(value); + } + + String left = intParser.parse(values[0].trim()); + String right = intParser.parse(values[1].trim()); + return String.format("%s, %s", left, right); + } + + private void die(String value) throws UnableToCompleteException { + logger.die("Unable to parse \"%s\" as a pair of integers", value); + } +}
diff --git a/user/src/com/google/gwt/uibinder/attributeparsers/IntPairParser.java b/user/src/com/google/gwt/uibinder/attributeparsers/IntPairParser.java deleted file mode 100644 index 921942b..0000000 --- a/user/src/com/google/gwt/uibinder/attributeparsers/IntPairParser.java +++ /dev/null
@@ -1,27 +0,0 @@ -/* - * Copyright 2007 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.attributeparsers; - -/** - * Parses a pair of integer values. - */ -class IntPairParser implements AttributeParser { - - public String parse(String value) { - // TODO(jgw): parse & validate - return value; - } -}
diff --git a/user/src/com/google/gwt/uibinder/attributeparsers/LengthAttributeParser.java b/user/src/com/google/gwt/uibinder/attributeparsers/LengthAttributeParser.java index d111e67..21743df 100644 --- a/user/src/com/google/gwt/uibinder/attributeparsers/LengthAttributeParser.java +++ b/user/src/com/google/gwt/uibinder/attributeparsers/LengthAttributeParser.java
@@ -39,7 +39,7 @@ private final DoubleAttributeParser doubleParser; private final EnumAttributeParser enumParser; - public LengthAttributeParser(DoubleAttributeParser doubleParser, + LengthAttributeParser(DoubleAttributeParser doubleParser, EnumAttributeParser enumParser, MortalLogger logger) { this.doubleParser = doubleParser; this.enumParser = enumParser;
diff --git a/user/test/com/google/gwt/uibinder/UiBinderJreSuite.java b/user/test/com/google/gwt/uibinder/UiBinderJreSuite.java index f61d522..9ff047d 100644 --- a/user/test/com/google/gwt/uibinder/UiBinderJreSuite.java +++ b/user/test/com/google/gwt/uibinder/UiBinderJreSuite.java
@@ -18,6 +18,7 @@ import com.google.gwt.uibinder.attributeparsers.CssNameConverterTest; import com.google.gwt.uibinder.attributeparsers.FieldReferenceConverterTest; import com.google.gwt.uibinder.attributeparsers.IntAttributeParserTest; +import com.google.gwt.uibinder.attributeparsers.IntPairAttributeParserTest; import com.google.gwt.uibinder.attributeparsers.LengthAttributeParserTest; import com.google.gwt.uibinder.attributeparsers.StrictAttributeParserTest; import com.google.gwt.uibinder.attributeparsers.StringAttributeParserTest; @@ -63,6 +64,7 @@ // attributeparsers suite.addTestSuite(CssNameConverterTest.class); suite.addTestSuite(IntAttributeParserTest.class); + suite.addTestSuite(IntPairAttributeParserTest.class); suite.addTestSuite(FieldReferenceConverterTest.class); suite.addTestSuite(StrictAttributeParserTest.class); suite.addTestSuite(StringAttributeParserTest.class);
diff --git a/user/test/com/google/gwt/uibinder/attributeparsers/IntPairAttributeParserTest.java b/user/test/com/google/gwt/uibinder/attributeparsers/IntPairAttributeParserTest.java new file mode 100644 index 0000000..25ff237 --- /dev/null +++ b/user/test/com/google/gwt/uibinder/attributeparsers/IntPairAttributeParserTest.java
@@ -0,0 +1,87 @@ +/* + * 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.uibinder.attributeparsers; + +import com.google.gwt.core.ext.UnableToCompleteException; +import com.google.gwt.core.ext.typeinfo.TypeOracle; +import com.google.gwt.dev.javac.CompilationState; +import com.google.gwt.dev.javac.CompilationStateBuilder; +import com.google.gwt.uibinder.rebind.MortalLogger; +import com.google.gwt.uibinder.test.UiJavaResources; + +import junit.framework.TestCase; + +/** + * Eponymous test class. + */ +public class IntPairAttributeParserTest extends TestCase { + private IntPairAttributeParser parser; + + @Override + public void setUp() throws Exception { + super.setUp(); + + MortalLogger logger = MortalLogger.NULL; + + CompilationState state = CompilationStateBuilder.buildFrom( + logger.getTreeLogger(), UiJavaResources.getUiResources()); + TypeOracle types = state.getTypeOracle(); + + FieldReferenceConverter converter = new FieldReferenceConverter(null); + IntAttributeParser intParser = new IntAttributeParser(converter, + types.parse("int"), logger); + + parser = new IntPairAttributeParser(intParser, logger); + } + + public void testGood() throws UnableToCompleteException { + assertEquals("1, 1", parser.parse("1, 1")); + assertEquals("123, 456", parser.parse("123, 456")); + assertEquals("(int)able.baker(), (int)charlie.delta()", + parser.parse("{able.baker}, {charlie.delta}")); + assertEquals("0001, 0002", parser.parse("0001, 0002")); + } + + public void testBad() { + try { + parser.parse("fnord"); + fail("Expected UnableToCompleteException"); + } catch (UnableToCompleteException e) { + /* pass */ + } + + try { + parser.parse("1, 2, 3"); + fail("Expected UnableToCompleteException"); + } catch (UnableToCompleteException e) { + /* pass */ + } + + try { + parser.parse("1"); + fail("Expected UnableToCompleteException"); + } catch (UnableToCompleteException e) { + /* pass */ + } + + try { + parser.parse("1.2, 3.4"); + fail("Expected UnableToCompleteException"); + } catch (UnableToCompleteException e) { + /* pass */ + } + } +}
diff --git a/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java b/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java index 630137b..e20349a 100644 --- a/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java +++ b/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java
@@ -453,6 +453,11 @@ assertEquals("expected style name", widget.getStyleName()); } + public void testIntPair() { + assertEquals(100, widgetUi.sideBarWidget.getOffsetWidth()); + assertEquals(150, widgetUi.sideBarWidget.getOffsetHeight()); + } + public void testDataResource() { assertNotNull(widgetUi.heartCursorResource.getUrl()); }
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java index 1aa457e..ca6cdb0 100644 --- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java +++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
@@ -100,6 +100,7 @@ @UiField Tree myTree; @UiField Element nonStandardElement; @UiField DockPanel root; + @UiField Widget sideBarWidget; @UiField DivElement sideBar; @UiField SpanElement spanInMsg; @UiField Element tmElement;
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml index bb063e0..fb21f67 100644 --- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml +++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
@@ -152,7 +152,7 @@ </gwt:HTML> </gwt:Dock> <gwt:Dock direction='WEST'> - <gwt:HTML> + <gwt:HTML ui:field='sideBarWidget' pixelSize="100, 150"> <div ui:field="sideBar" style='border: 4px solid gray; padding: 4px; margin: 4px;' >This could<br/>