diff --git a/user/test/com/google/gwt/uibinder/UiBinderJreSuite.java b/user/test/com/google/gwt/uibinder/UiBinderJreSuite.java
index 20b033b..428590b 100644
--- a/user/test/com/google/gwt/uibinder/UiBinderJreSuite.java
+++ b/user/test/com/google/gwt/uibinder/UiBinderJreSuite.java
@@ -15,6 +15,10 @@
  */
 package com.google.gwt.uibinder;
 
+import com.google.gwt.uibinder.parsers.FieldReferenceConverterTest;
+import com.google.gwt.uibinder.parsers.SimpleAttributeParserTest;
+import com.google.gwt.uibinder.parsers.StrictAttributeParserTest;
+import com.google.gwt.uibinder.parsers.StringAttributeParserTest;
 import com.google.gwt.uibinder.rebind.GwtResourceEntityResolverTest;
 import com.google.gwt.uibinder.rebind.HandlerEvaluatorTest;
 import com.google.gwt.uibinder.rebind.TokenatorTest;
@@ -44,6 +48,12 @@
     suite.addTestSuite(OwnerFieldClassTest.class);
     suite.addTestSuite(OwnerFieldTest.class);
 
+    // parsers
+    suite.addTestSuite(FieldReferenceConverterTest.class);
+    suite.addTestSuite(SimpleAttributeParserTest.class);
+    suite.addTestSuite(StrictAttributeParserTest.class);
+    suite.addTestSuite(StringAttributeParserTest.class);
+
     return suite;
   }
 
diff --git a/user/test/com/google/gwt/uibinder/rebind/XMLElementTest.java b/user/test/com/google/gwt/uibinder/rebind/XMLElementTest.java
index 925a6a1..bdaaaa1 100644
--- a/user/test/com/google/gwt/uibinder/rebind/XMLElementTest.java
+++ b/user/test/com/google/gwt/uibinder/rebind/XMLElementTest.java
@@ -115,7 +115,7 @@
   }
 
   private void appendText(final String text) {
-    Text t = doc.createTextNode(STRING_WITH_DOUBLEQUOTE);
+    Text t = doc.createTextNode(text);
     item.appendChild(t);
   }
 
@@ -129,13 +129,11 @@
     assertEquals("", elm.consumeUnescapedInnerText());
   }
 
-  public void testEmptyStringOnMissingAttribute()
-      throws ParserConfigurationException, SAXException, IOException {
+  public void testEmptyStringOnMissingAttribute() {
     assertEquals("", elm.consumeAttribute("fnord"));
   }
 
-  public void testIterator() throws ParserConfigurationException, SAXException,
-      IOException {
+  public void testIterator() {
     String[] expecteds = {"attr1", "attr2"};
     Set<String> seen = new HashSet<String>();
     for (int i = elm.getAttributeCount() - 1; i >= 0; i--) {
