Complete text-* support for Style

Reposting of 1736803
Thanks Patrick!

Review at http://gwt-code-reviews.appspot.com/1737804

Review by: rdayal@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11033 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/dom/builder/client/DomStylesBuilder.java b/user/src/com/google/gwt/dom/builder/client/DomStylesBuilder.java
index f5aae1e..8bbf729 100644
--- a/user/src/com/google/gwt/dom/builder/client/DomStylesBuilder.java
+++ b/user/src/com/google/gwt/dom/builder/client/DomStylesBuilder.java
@@ -28,7 +28,11 @@
 import com.google.gwt.dom.client.Style.Overflow;
 import com.google.gwt.dom.client.Style.Position;
 import com.google.gwt.dom.client.Style.TableLayout;
+import com.google.gwt.dom.client.Style.TextAlign;
 import com.google.gwt.dom.client.Style.TextDecoration;
+import com.google.gwt.dom.client.Style.TextJustify;
+import com.google.gwt.dom.client.Style.TextOverflow;
+import com.google.gwt.dom.client.Style.TextTransform;
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.dom.client.Style.VerticalAlign;
 import com.google.gwt.dom.client.Style.Visibility;
@@ -350,12 +354,42 @@
   }
 
   @Override
+  public StylesBuilder textAlign(TextAlign value) {
+    delegate.assertCanAddStyleProperty().setTextAlign(value);
+    return this;
+  }
+
+  @Override
   public StylesBuilder textDecoration(TextDecoration value) {
     delegate.assertCanAddStyleProperty().setTextDecoration(value);
     return this;
   }
 
   @Override
+  public StylesBuilder textIndent(double value, Unit unit) {
+    delegate.assertCanAddStyleProperty().setTextIndent(value, unit);
+    return this;
+  }
+
+  @Override
+  public StylesBuilder textJustify(TextJustify value) {
+    delegate.assertCanAddStyleProperty().setTextJustify(value);
+    return this;
+  }
+
+  @Override
+  public StylesBuilder textOverflow(TextOverflow value) {
+    delegate.assertCanAddStyleProperty().setTextOverflow(value);
+    return this;
+  }
+
+  @Override
+  public StylesBuilder textTransform(TextTransform value) {
+    delegate.assertCanAddStyleProperty().setTextTransform(value);
+    return this;
+  }
+
+  @Override
   public StylesBuilder top(double value, Unit unit) {
     delegate.assertCanAddStyleProperty().setTop(value, unit);
     return this;
diff --git a/user/src/com/google/gwt/dom/builder/shared/HtmlStylesBuilder.java b/user/src/com/google/gwt/dom/builder/shared/HtmlStylesBuilder.java
index 678a300..2c12769 100644
--- a/user/src/com/google/gwt/dom/builder/shared/HtmlStylesBuilder.java
+++ b/user/src/com/google/gwt/dom/builder/shared/HtmlStylesBuilder.java
@@ -28,7 +28,11 @@
 import com.google.gwt.dom.client.Style.Overflow;
 import com.google.gwt.dom.client.Style.Position;
 import com.google.gwt.dom.client.Style.TableLayout;
+import com.google.gwt.dom.client.Style.TextAlign;
 import com.google.gwt.dom.client.Style.TextDecoration;
+import com.google.gwt.dom.client.Style.TextJustify;
+import com.google.gwt.dom.client.Style.TextOverflow;
+import com.google.gwt.dom.client.Style.TextTransform;
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.dom.client.Style.VerticalAlign;
 import com.google.gwt.dom.client.Style.Visibility;
@@ -364,11 +368,36 @@
   }
 
   @Override
+  public StylesBuilder textAlign(TextAlign value) {
+    return delegate.styleProperty(SafeStylesUtils.forTextAlign(value));
+  }
+
+  @Override
   public StylesBuilder textDecoration(TextDecoration value) {
     return delegate.styleProperty(SafeStylesUtils.forTextDecoration(value));
   }
 
   @Override
+  public StylesBuilder textIndent(double value, Unit unit) {
+    return delegate.styleProperty(SafeStylesUtils.forTextIndent(value, unit));
+  }
+
+  @Override
+  public StylesBuilder textJustify(TextJustify value) {
+    return delegate.styleProperty(SafeStylesUtils.forTextJustify(value));
+  }
+
+  @Override
+  public StylesBuilder textOverflow(TextOverflow value) {
+    return delegate.styleProperty(SafeStylesUtils.forTextOverflow(value));
+  }
+
+  @Override
+  public StylesBuilder textTransform(TextTransform value) {
+    return delegate.styleProperty(SafeStylesUtils.forTextTransform(value));
+  }
+
+  @Override
   public StylesBuilder top(double value, Unit unit) {
     return delegate.styleProperty(SafeStylesUtils.forTop(value, unit));
   }
diff --git a/user/src/com/google/gwt/dom/builder/shared/StylesBuilder.java b/user/src/com/google/gwt/dom/builder/shared/StylesBuilder.java
index e265005..7f63003 100644
--- a/user/src/com/google/gwt/dom/builder/shared/StylesBuilder.java
+++ b/user/src/com/google/gwt/dom/builder/shared/StylesBuilder.java
@@ -26,7 +26,11 @@
 import com.google.gwt.dom.client.Style.Overflow;
 import com.google.gwt.dom.client.Style.Position;
 import com.google.gwt.dom.client.Style.TableLayout;
+import com.google.gwt.dom.client.Style.TextAlign;
 import com.google.gwt.dom.client.Style.TextDecoration;
+import com.google.gwt.dom.client.Style.TextJustify;
+import com.google.gwt.dom.client.Style.TextOverflow;
+import com.google.gwt.dom.client.Style.TextTransform;
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.dom.client.Style.VerticalAlign;
 import com.google.gwt.dom.client.Style.Visibility;
@@ -220,11 +224,36 @@
   StylesBuilder tableLayout(TableLayout value);
 
   /**
-   * Sets the text-decoration CSS property.
+   * Set the text-align CSS property.
+   */
+  StylesBuilder textAlign(TextAlign value);
+  
+  /**
+   * Set the text-decoration CSS property.
    */
   StylesBuilder textDecoration(TextDecoration value);
 
   /**
+   * Set the text-indent CSS property.
+   */
+  StylesBuilder textIndent(double value, Unit unit);
+
+  /**
+   * Set the text-justify CSS3 property.
+   */
+  StylesBuilder textJustify(TextJustify value);
+
+  /**
+   * Set the text-overflow CSS3 property.
+   */
+  StylesBuilder textOverflow(TextOverflow value);
+
+  /**
+   * Set the text-transform CSS property.
+   */
+  StylesBuilder textTransform(TextTransform value);
+
+  /**
    * Set the top css property.
    */
   StylesBuilder top(double value, Unit unit);
diff --git a/user/src/com/google/gwt/dom/client/Style.java b/user/src/com/google/gwt/dom/client/Style.java
index b936a9d..29cbc81 100644
--- a/user/src/com/google/gwt/dom/client/Style.java
+++ b/user/src/com/google/gwt/dom/client/Style.java
@@ -638,31 +638,141 @@
   }
 
   /**
-   * Enum for the text-decoration property.
+   * Enum for the 'text-decoration' CSS property.
    */
   public enum TextDecoration implements HasCssName {
+    BLINK {
+      @Override
+      public String getCssName() {
+        return TEXT_DECORATION_BLINK;
+      }
+    },
+    LINE_THROUGH {
+      @Override
+      public String getCssName() {
+        return TEXT_DECORATION_LINE_THROUGH;
+      }
+    },
     NONE {
       @Override
       public String getCssName() {
         return TEXT_DECORATION_NONE;
       }
     },
-    UNDERLINE {
-      @Override
-      public String getCssName() {
-        return TEXT_DECORATION_UNDERLINE;
-      }
-    },
     OVERLINE {
       @Override
       public String getCssName() {
         return TEXT_DECORATION_OVERLINE;
       }
     },
-    LINE_THROUGH {
+    UNDERLINE {
       @Override
       public String getCssName() {
-        return TEXT_DECORATION_LINE_THROUGH;
+        return TEXT_DECORATION_UNDERLINE;
+      }
+    };
+    @Override
+    public abstract String getCssName();
+  }
+
+
+
+  /**
+   * Enum for the 'text-justify' CSS3 property.
+   */
+  public enum TextJustify implements HasCssName {
+    AUTO {
+      @Override
+      public String getCssName() {
+        return TEXT_JUSTIFY_AUTO;
+      }
+    },
+    DISTRIBUTE {
+      @Override
+      public String getCssName() {
+        return TEXT_JUSTIFY_DISTRIBUTE;
+      }
+    },
+    INTER_CLUSTER {
+      @Override
+      public String getCssName() {
+        return TEXT_JUSTIFY_INTER_CLUSTER;
+      }
+    },
+    INTER_IDEOGRAPH {
+      @Override
+      public String getCssName() {
+        return TEXT_JUSTIFY_INTER_IDEOGRAPH;
+      }
+    },
+    INTER_WORD {
+      @Override
+      public String getCssName() {
+        return TEXT_JUSTIFY_INTER_WORD;
+      }
+    },
+    KASHIDA {
+      @Override
+      public String getCssName() {
+        return TEXT_JUSTIFY_KASHIDA;
+      }
+    },
+    NONE {
+      @Override
+      public String getCssName() {
+        return TEXT_JUSTIFY_NONE;
+      }
+    };
+    @Override
+    public abstract String getCssName();
+  }
+  
+  /**
+   * Enum for the 'text-overflow' CSS3 property.
+   */
+  public enum TextOverflow implements HasCssName {
+    CLIP {
+      @Override
+      public String getCssName() {
+        return TEXT_OVERFLOW_CLIP;
+      }
+    },
+    ELLIPSIS {
+      @Override
+      public String getCssName() {
+        return TEXT_OVERFLOW_ELLIPSIS;
+      }
+    };
+    @Override
+    public abstract String getCssName();
+  }
+
+  /**
+   * Enum for the 'text-transform' CSS property.
+   */
+  public enum TextTransform implements HasCssName {
+    CAPITALIZE {
+      @Override
+      public String getCssName() {
+        return TEXT_TRANSFORM_CAPITALIZE;
+      }
+    },
+    NONE {
+      @Override
+      public String getCssName() {
+        return TEXT_TRANSFORM_NONE;
+      }
+    },
+    LOWERCASE {
+      @Override
+      public String getCssName() {
+        return TEXT_TRANSFORM_LOWERCASE;
+      }
+    },
+    UPPERCASE {
+      @Override
+      public String getCssName() {
+        return TEXT_TRANSFORM_UPPERCASE;
       }
     };
     @Override
@@ -901,6 +1011,10 @@
   private static final String STYLE_VERTICAL_ALIGN = "verticalAlign";
   private static final String STYLE_TABLE_LAYOUT = "tableLayout";
   private static final String STYLE_TEXT_ALIGN = "textAlign";
+  private static final String STYLE_TEXT_INDENT = "textIndent";
+  private static final String STYLE_TEXT_JUSTIFY = "textJustify";
+  private static final String STYLE_TEXT_OVERFLOW = "textOverflow";
+  private static final String STYLE_TEXT_TRANSFORM = "textTransform";
   private static final String STYLE_OUTLINE_WIDTH = "outlineWidth";
   private static final String STYLE_OUTLINE_STYLE = "outlineStyle";
   private static final String STYLE_OUTLINE_COLOR = "outlineColor";
@@ -915,10 +1029,27 @@
   private static final String TEXT_ALIGN_LEFT = "left";
   private static final String TEXT_ALIGN_RIGHT = "right";
 
+  private static final String TEXT_DECORATION_BLINK = "blink";
   private static final String TEXT_DECORATION_LINE_THROUGH = "line-through";
+  private static final String TEXT_DECORATION_NONE = "none";
   private static final String TEXT_DECORATION_OVERLINE = "overline";
   private static final String TEXT_DECORATION_UNDERLINE = "underline";
-  private static final String TEXT_DECORATION_NONE = "none";
+  
+  private static final String TEXT_JUSTIFY_AUTO = "auto";
+  private static final String TEXT_JUSTIFY_DISTRIBUTE = "distribute";
+  private static final String TEXT_JUSTIFY_INTER_CLUSTER = "inter-cluster";
+  private static final String TEXT_JUSTIFY_INTER_IDEOGRAPH = "inter-ideograph";
+  private static final String TEXT_JUSTIFY_INTER_WORD = "inter-word";
+  private static final String TEXT_JUSTIFY_KASHIDA = "kashida";
+  private static final String TEXT_JUSTIFY_NONE = "none";
+  
+  private static final String TEXT_OVERFLOW_CLIP = "clip";
+  private static final String TEXT_OVERFLOW_ELLIPSIS = "ellipsis";
+
+  private static final String TEXT_TRANSFORM_CAPITALIZE = "capitalize";
+  private static final String TEXT_TRANSFORM_NONE = "none";
+  private static final String TEXT_TRANSFORM_LOWERCASE = "lowercase";
+  private static final String TEXT_TRANSFORM_UPPERCASE = "uppercase";
 
   private static final String UNIT_MM = "mm";
   private static final String UNIT_CM = "cm";
@@ -1237,6 +1368,34 @@
   public final void clearTextDecoration() {
     clearProperty(STYLE_TEXT_DECORATION);
   }
+  
+  /**
+   * Clear the 'text-indent' CSS property.
+   */
+  public final void clearTextIndent() {
+    clearProperty(STYLE_TEXT_INDENT);
+  }
+  
+  /**
+   * Clear the 'text-justify' CSS3 property.
+   */
+  public final void clearTextJustify() {
+    clearProperty(STYLE_TEXT_JUSTIFY);
+  }
+  
+  /**
+   * Clear the 'text-overflow' CSS3 property.
+   */
+  public final void clearTextOverflow() {
+    clearProperty(STYLE_TEXT_OVERFLOW);
+  }
+  
+  /**
+   * Clear the 'text-transform' CSS property.
+   */
+  public final void clearTextTransform() {
+    clearProperty(STYLE_TEXT_TRANSFORM);
+  }
 
   /**
    * Clear the top css property.
@@ -1532,6 +1691,34 @@
   public final String getTextDecoration() {
     return getProperty(STYLE_TEXT_DECORATION);
   }
+  
+  /**
+   * Get the 'text-indent' CSS property.
+   */
+  public final String getTextIndent() {
+    return getProperty(STYLE_TEXT_INDENT);
+  }
+  
+  /**
+   * Get the 'text-justify' CSS3 property.
+   */
+  public final String getTextJustify() {
+    return getProperty(STYLE_TEXT_JUSTIFY);
+  }
+
+  /**
+   * Get the 'text-overflow' CSS3 property.
+   */
+  public final String getTextOverflow() {
+    return getProperty(STYLE_TEXT_OVERFLOW);
+  }
+
+  /**
+   * Get the 'text-transform' CSS property.
+   */
+  public final String getTextTransform() {
+    return getProperty(STYLE_TEXT_TRANSFORM);
+  }
 
   /**
    * Get the top css property.
@@ -1879,6 +2066,34 @@
   public final void setTextDecoration(TextDecoration value) {
     setProperty(STYLE_TEXT_DECORATION, value.getCssName());
   }
+  
+  /**
+   * Set the 'text-indent' CSS property.
+   */
+  public final void setTextIndent(double value, Unit unit) {
+    setProperty(STYLE_TEXT_INDENT, value, unit);
+  }
+
+  /**
+   * Set the 'text-justify' CSS3 property.
+   */
+  public final void setTextJustify(TextJustify value) {
+    setProperty(STYLE_TEXT_JUSTIFY, value.getCssName());
+  }
+
+  /**
+   * Set the 'text-overflow' CSS3 property.
+   */
+  public final void setTextOverflow(TextOverflow value) {
+    setProperty(STYLE_TEXT_OVERFLOW, value.getCssName());
+  }
+
+  /**
+   * Set the 'text-transform' CSS property.
+   */
+  public final void setTextTransform(TextTransform value) {
+    setProperty(STYLE_TEXT_TRANSFORM, value.getCssName());
+  }
 
   /**
    * Set the top css property.
diff --git a/user/src/com/google/gwt/safecss/shared/SafeStylesBuilder.java b/user/src/com/google/gwt/safecss/shared/SafeStylesBuilder.java
index 40fb551..5c3f41b 100644
--- a/user/src/com/google/gwt/safecss/shared/SafeStylesBuilder.java
+++ b/user/src/com/google/gwt/safecss/shared/SafeStylesBuilder.java
@@ -28,6 +28,9 @@
 import com.google.gwt.dom.client.Style.TableLayout;
 import com.google.gwt.dom.client.Style.TextAlign;
 import com.google.gwt.dom.client.Style.TextDecoration;
+import com.google.gwt.dom.client.Style.TextJustify;
+import com.google.gwt.dom.client.Style.TextOverflow;
+import com.google.gwt.dom.client.Style.TextTransform;
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.dom.client.Style.VerticalAlign;
 import com.google.gwt.dom.client.Style.Visibility;
@@ -359,6 +362,34 @@
   }
 
   /**
+   * Append the 'text-indent' CSS property.
+   */
+  public SafeStylesBuilder textIndent(double value, Unit unit) {
+    return append(SafeStylesUtils.forTextIndent(value, unit));
+  }
+
+  /**
+   * Append the 'text-justify' CSS3 property.
+   */
+  public SafeStylesBuilder textJustify(TextJustify value) {
+    return append(SafeStylesUtils.forTextJustify(value));
+  }
+
+  /**
+   * Append the 'text-overflow' CSS3 property.
+   */
+  public SafeStylesBuilder textOverflow(TextOverflow value) {
+    return append(SafeStylesUtils.forTextOverflow(value));
+  }
+
+  /**
+   * Append the 'text-transform' CSS property.
+   */
+  public SafeStylesBuilder textTransform(TextTransform value) {
+    return append(SafeStylesUtils.forTextTransform(value));
+  }
+
+  /**
    * Append the top css property.
    */
   public SafeStylesBuilder top(double value, Unit unit) {
diff --git a/user/src/com/google/gwt/safecss/shared/SafeStylesUtils.java b/user/src/com/google/gwt/safecss/shared/SafeStylesUtils.java
index 11ef99b..652fb48 100644
--- a/user/src/com/google/gwt/safecss/shared/SafeStylesUtils.java
+++ b/user/src/com/google/gwt/safecss/shared/SafeStylesUtils.java
@@ -30,6 +30,9 @@
 import com.google.gwt.dom.client.Style.TableLayout;
 import com.google.gwt.dom.client.Style.TextAlign;
 import com.google.gwt.dom.client.Style.TextDecoration;
+import com.google.gwt.dom.client.Style.TextJustify;
+import com.google.gwt.dom.client.Style.TextOverflow;
+import com.google.gwt.dom.client.Style.TextTransform;
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.dom.client.Style.VerticalAlign;
 import com.google.gwt.dom.client.Style.Visibility;
@@ -334,13 +337,41 @@
   }
 
   /**
-   * Sets the text-decoration CSS property.
+   * Sets the 'text-decoration' CSS property.
    */
   public static SafeStyles forTextDecoration(TextDecoration value) {
     return fromTrustedNameAndValue("text-decoration", value.getCssName());
   }
 
   /**
+   * Set the 'text-indent' CSS property.
+   */
+  public static SafeStyles forTextIndent(double value, Unit unit) {
+    return fromTrustedNameAndValue("text-indent", value + unit.getType());
+  }
+
+  /**
+   * Set the 'text-justify' CSS3 property.
+   */
+  public static SafeStyles forTextJustify(TextJustify value) {
+    return fromTrustedNameAndValue("text-justify", value.getCssName());
+  }
+
+  /**
+   * Set the 'text-overflow' CSS3 property.
+   */
+  public static SafeStyles forTextOverflow(TextOverflow value) {
+    return fromTrustedNameAndValue("text-overflow", value.getCssName());
+  }
+
+  /**
+   * Set the 'text-transform' CSS property.
+   */
+  public static SafeStyles forTextTransform(TextTransform value) {
+    return fromTrustedNameAndValue("text-transform", value.getCssName());
+  }
+
+  /**
    * Set the top css property.
    */
   public static SafeStyles forTop(double value, Unit unit) {
diff --git a/user/test/com/google/gwt/dom/client/StyleTest.java b/user/test/com/google/gwt/dom/client/StyleTest.java
index 3f2007d..33dfb21 100644
--- a/user/test/com/google/gwt/dom/client/StyleTest.java
+++ b/user/test/com/google/gwt/dom/client/StyleTest.java
@@ -37,6 +37,9 @@
 import com.google.gwt.dom.client.Style.TableLayout;
 import com.google.gwt.dom.client.Style.TextAlign;
 import com.google.gwt.dom.client.Style.TextDecoration;
+import com.google.gwt.dom.client.Style.TextJustify;
+import com.google.gwt.dom.client.Style.TextOverflow;
+import com.google.gwt.dom.client.Style.TextTransform;
 import com.google.gwt.dom.client.Style.VerticalAlign;
 import com.google.gwt.dom.client.Style.Visibility;
 import com.google.gwt.dom.client.Style.WhiteSpace;
@@ -277,6 +280,8 @@
     DivElement div = Document.get().createDivElement();
     Style style = div.getStyle();
 
+    style.setTextDecoration(TextDecoration.BLINK);
+    assertEquals(TextDecoration.BLINK, style.getTextDecoration());
     style.setTextDecoration(TextDecoration.NONE);
     assertEquals(TextDecoration.NONE, style.getTextDecoration());
     style.setTextDecoration(TextDecoration.UNDERLINE);
@@ -287,6 +292,68 @@
     assertEquals(TextDecoration.LINE_THROUGH, style.getTextDecoration());
   }
 
+  public void testTextIndent() {
+    DivElement div = Document.get().createDivElement();
+    Style style = div.getStyle();
+
+    style.setTextIndent(1, PX);
+    assertEquals("1px", style.getTextIndent());
+    style.setTextIndent(1, PCT);
+    assertEquals("1%", style.getTextIndent());
+    style.clearTextIndent();
+    assertEmpty(style.getTextIndent());
+  }
+
+  public void testTextJustify() {
+    DivElement div = Document.get().createDivElement();
+    Style style = div.getStyle();
+
+    style.setTextJustify(TextJustify.AUTO);
+    assertEquals(TextJustify.AUTO, style.getTextOverflow());
+    style.setTextJustify(TextJustify.DISTRIBUTE);
+    assertEquals(TextJustify.DISTRIBUTE, style.getTextOverflow());
+    style.setTextJustify(TextJustify.INTER_CLUSTER);
+    assertEquals(TextJustify.INTER_CLUSTER, style.getTextOverflow());
+    style.setTextJustify(TextJustify.INTER_IDEOGRAPH);
+    assertEquals(TextJustify.INTER_IDEOGRAPH, style.getTextOverflow());
+    style.setTextJustify(TextJustify.INTER_WORD);
+    assertEquals(TextJustify.INTER_WORD, style.getTextOverflow());
+    style.setTextJustify(TextJustify.KASHIDA);
+    assertEquals(TextJustify.KASHIDA, style.getTextOverflow());
+    style.setTextJustify(TextJustify.NONE);
+    assertEquals(TextJustify.NONE, style.getTextOverflow());
+    style.clearTextJustify();
+    assertEmpty(style.getTextJustify());
+  }
+
+  public void testTextOverflow() {
+    DivElement div = Document.get().createDivElement();
+    Style style = div.getStyle();
+
+    style.setTextOverflow(TextOverflow.CLIP);
+    assertEquals(TextOverflow.CLIP, style.getTextOverflow());
+    style.setTextOverflow(TextOverflow.ELLIPSIS);
+    assertEquals(TextOverflow.ELLIPSIS, style.getTextOverflow());
+    style.clearTextOverflow();
+    assertEmpty(style.getTextOverflow());
+  }
+
+  public void testTextTransform() {
+    DivElement div = Document.get().createDivElement();
+    Style style = div.getStyle();
+
+    style.setTextTransform(TextTransform.CAPITALIZE);
+    assertEquals(TextTransform.CAPITALIZE, style.getTextTransform());
+    style.setTextTransform(TextTransform.LOWERCASE);
+    assertEquals(TextTransform.LOWERCASE, style.getTextTransform());
+    style.setTextTransform(TextTransform.NONE);
+    assertEquals(TextTransform.NONE, style.getTextTransform());
+    style.setTextTransform(TextTransform.UPPERCASE);
+    assertEquals(TextTransform.UPPERCASE, style.getTextTransform());
+    style.clearTextTransform();
+    assertEmpty(style.getTextTransform());
+  }
+
   public void testVerticalAlign() {
     DivElement div = Document.get().createDivElement();
     Style style = div.getStyle();
diff --git a/user/test/com/google/gwt/safecss/shared/GwtSafeStylesUtilsTest.java b/user/test/com/google/gwt/safecss/shared/GwtSafeStylesUtilsTest.java
index ffc7d63..569cd78 100644
--- a/user/test/com/google/gwt/safecss/shared/GwtSafeStylesUtilsTest.java
+++ b/user/test/com/google/gwt/safecss/shared/GwtSafeStylesUtilsTest.java
@@ -19,6 +19,10 @@
 import com.google.gwt.dom.client.Style.Clear;
 import com.google.gwt.dom.client.Style.Display;
 import com.google.gwt.dom.client.Style.TextAlign;
+import com.google.gwt.dom.client.Style.TextDecoration;
+import com.google.gwt.dom.client.Style.TextJustify;
+import com.google.gwt.dom.client.Style.TextOverflow;
+import com.google.gwt.dom.client.Style.TextTransform;
 import com.google.gwt.dom.client.Style.WhiteSpace;
 import com.google.gwt.junit.client.GWTTestCase;
 import com.google.gwt.safehtml.shared.SafeUri;
@@ -102,10 +106,40 @@
   }
   
   public void testForTextAlign() {
-    assertEquals("text-align:center;", SafeStylesUtils.forTextAlign(TextAlign.CENTER).asString());
-    assertEquals("text-align:justify;", SafeStylesUtils.forTextAlign(TextAlign.JUSTIFY).asString());
-    assertEquals("text-align:left;", SafeStylesUtils.forTextAlign(TextAlign.LEFT).asString());
-    assertEquals("text-align:right;", SafeStylesUtils.forTextAlign(TextAlign.RIGHT).asString());
+    assertEquals("text-align:center;", SafeStylesUtils.forTextAlign(TextAlign.CENTER));
+    assertEquals("text-align:justify;", SafeStylesUtils.forTextAlign(TextAlign.JUSTIFY));
+    assertEquals("text-align:left;", SafeStylesUtils.forTextAlign(TextAlign.LEFT));
+    assertEquals("text-align:right;", SafeStylesUtils.forTextAlign(TextAlign.RIGHT));
+  }
+  
+  public void testForTextDecoration() {
+    assertEquals("text-decoration:blink;", SafeStylesUtils.forTextDecoration(TextDecoration.BLINK));
+    assertEquals("text-decoration:line-through;", SafeStylesUtils.forTextDecoration(TextDecoration.LINE_THROUGH));
+    assertEquals("text-decoration:none;", SafeStylesUtils.forTextDecoration(TextDecoration.NONE));
+    assertEquals("text-decoration:overline;", SafeStylesUtils.forTextDecoration(TextDecoration.OVERLINE));
+    assertEquals("text-decoration:underline;", SafeStylesUtils.forTextDecoration(TextDecoration.UNDERLINE));
+  }
+  
+  public void testForTextJustify() {
+    assertEquals("text-justify:auto;", SafeStylesUtils.forTextJustify(TextJustify.AUTO));
+    assertEquals("text-justify:distribute;", SafeStylesUtils.forTextJustify(TextJustify.DISTRIBUTE));
+    assertEquals("text-justify:inter-cluster;", SafeStylesUtils.forTextJustify(TextJustify.INTER_CLUSTER));
+    assertEquals("text-justify:inter-ideograph;", SafeStylesUtils.forTextJustify(TextJustify.INTER_IDEOGRAPH));
+    assertEquals("text-justify:inter-word;", SafeStylesUtils.forTextJustify(TextJustify.INTER_WORD));
+    assertEquals("text-justify:kashida;", SafeStylesUtils.forTextJustify(TextJustify.KASHIDA));
+    assertEquals("text-justify:none;", SafeStylesUtils.forTextJustify(TextJustify.NONE));
+  }
+  
+  public void testForTextOverflow() {
+    assertEquals("text-overflow:clip;", SafeStylesUtils.forTextOverflow(TextOverflow.CLIP));
+    assertEquals("text-overflow:ellipsis;", SafeStylesUtils.forTextOverflow(TextOverflow.ELLIPSIS));
+  }
+  
+  public void testForTextTransform() {
+    assertEquals("text-transform:capitalize;", SafeStylesUtils.forTextTransform(TextTransform.CAPITALIZE));
+    assertEquals("text-transform:lowercase;", SafeStylesUtils.forTextTransform(TextTransform.LOWERCASE));
+    assertEquals("text-transform:none;", SafeStylesUtils.forTextTransform(TextTransform.NONE));
+    assertEquals("text-transform:uppercase;", SafeStylesUtils.forTextTransform(TextTransform.UPPERCASE));
   }
 
   public void testForWhiteSpace() {
@@ -196,7 +230,7 @@
     for (String s : VALID_STYLE_NAMES) {
       try {
         SafeStyles styles = SafeStylesUtils.fromTrustedNameAndValue(s, "value");
-        assertEquals(s + ":value;", styles.asString());
+        assertEquals(s + ":value;", styles);
       } catch (Exception e) {
         fail("Unexpected exception thrown for valid style name: '" + s + "'.\n" + e.getMessage());
       }
@@ -212,7 +246,7 @@
     for (String s : VALID_STYLE_VALUES) {
       try {
         SafeStyles styles = SafeStylesUtils.fromTrustedNameAndValue("name", s);
-        assertEquals("name" + ":" + s + ";", styles.asString());
+        assertEquals("name" + ":" + s + ";", styles);
       } catch (Exception e) {
         fail("Unexpected exception thrown for valid style value: '" + s + "'.\n" + e.getMessage());
       }
@@ -220,6 +254,10 @@
   }
 
   public void testFromTrustedString() {
-    assertEquals("name:value;", SafeStylesUtils.fromTrustedString("name:value;").asString());
+    assertEquals("name:value;", SafeStylesUtils.fromTrustedString("name:value;"));
+  }
+  
+  private void assertEquals(String cssValue, SafeStyles safeStyles) {
+    assertEquals(cssValue, safeStyles.asString());
   }
 }