diff --git a/user/test/com/google/gwt/emultest/java/math/BigDecimalArithmeticTest.java b/user/test/com/google/gwt/emultest/java/math/BigDecimalArithmeticTest.java
index a0a7fde..981e59a 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigDecimalArithmeticTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigDecimalArithmeticTest.java
@@ -42,11 +42,11 @@
 import java.math.RoundingMode;
 
 /**
- * Class: java.math.BigDecimal Methods: add, subtract, multiply, divide
+ * Class: java.math.BigDecimal Methods: add, subtract, multiply, divide.
  */
 public class BigDecimalArithmeticTest extends EmulTestBase {
   /**
-   * Add two numbers of different scales; the first is negative
+   * Add two numbers of different scales; the first is negative.
    */
   public void testAddDiffScaleNegPos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -63,7 +63,7 @@
   }
 
   /**
-   * Add two numbers of different scales; the first is positive
+   * Add two numbers of different scales; the first is positive.
    */
   public void testAddDiffScalePosNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -80,7 +80,7 @@
   }
 
   /**
-   * Add two numbers of different scales; the first is positive
+   * Add two numbers of different scales; the first is positive.
    */
   public void testAddDiffScalePosPos() {
     String a = "100";
@@ -97,7 +97,7 @@
   }
 
   /**
-   * Add two zeroes of different scales; the first is negative
+   * Add two zeroes of different scales; the first is negative.
    */
   public void testAddDiffScaleZeroZero() {
     String a = "0";
@@ -114,7 +114,7 @@
   }
 
   /**
-   * Add two numbers of equal negative scales
+   * Add two numbers of equal negative scales.
    */
   public void testAddEqualScaleNegNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -131,7 +131,7 @@
   }
 
   /**
-   * Add two numbers of equal positive scales
+   * Add two numbers of equal positive scales.
    */
   public void testAddEqualScalePosPos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -149,7 +149,7 @@
 
   /**
    * Add two numbers of different scales using MathContext; the first is
-   * positive
+   * positive.
    */
   public void testAddMathContextDiffScalePosNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -167,7 +167,7 @@
   }
 
   /**
-   * Add two numbers of equal negative scales using MathContext
+   * Add two numbers of equal negative scales using MathContext.
    */
   public void testAddMathContextEqualScaleNegNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -185,7 +185,7 @@
   }
 
   /**
-   * Add two numbers of equal positive scales using MathContext
+   * Add two numbers of equal positive scales using MathContext.
    */
   public void testAddMathContextEqualScalePosPos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -213,7 +213,6 @@
     assertEquals(val, sum);
   }
 
-
   /**
    * Test the the approximate scale is computed correctly.
    * <p>
@@ -979,7 +978,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_HALF_EVEN, result is negative; distance = 1
+   * Divide: rounding mode is ROUND_HALF_EVEN, result is negative; distance = 1.
    */
   public void testDivideRoundHalfEvenNeg1() {
     String a = "-92948782094488478231212478987482988798104576347813847567949855464535634534563456";
@@ -997,7 +996,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_HALF_EVEN, result is negative; equidistant
+   * Divide: rounding mode is ROUND_HALF_EVEN, result is negative; equidistant.
    */
   public void testDivideRoundHalfEvenNeg2() {
     String a = "-37361671119238118911893939591735";
@@ -1015,7 +1014,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_HALF_EVEN, result is positive; distance = -1
+   * Divide: rounding mode is ROUND_HALF_EVEN, result is positive; distance = -1.
    */
   public void testDivideRoundHalfEvenPos() {
     String a = "92948782094488478231212478987482988429808779810457634781384756794987";
@@ -1033,7 +1032,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_HALF_EVEN, result is positive; distance = 1
+   * Divide: rounding mode is ROUND_HALF_EVEN, result is positive; distance = 1.
    */
   public void testDivideRoundHalfEvenPos1() {
     String a = "92948782094488478231212478987482988798104576347813847567949855464535634534563456";
@@ -1051,7 +1050,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_HALF_UP, result is negative; distance = -1
+   * Divide: rounding mode is ROUND_HALF_UP, result is negative; distance = -1.
    */
   public void testDivideRoundHalfUpNeg() {
     String a = "-92948782094488478231212478987482988429808779810457634781384756794987";
@@ -1069,7 +1068,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_HALF_UP, result is negative; distance = 1
+   * Divide: rounding mode is ROUND_HALF_UP, result is negative; distance = 1.
    */
   public void testDivideRoundHalfUpNeg1() {
     String a = "-92948782094488478231212478987482988798104576347813847567949855464535634534563456";
@@ -1087,7 +1086,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_HALF_UP, result is negative; equidistant
+   * Divide: rounding mode is ROUND_HALF_UP, result is negative; equidistant.
    */
   public void testDivideRoundHalfUpNeg2() {
     String a = "-37361671119238118911893939591735";
@@ -1105,7 +1104,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_HALF_UP, result is positive; distance = -1
+   * Divide: rounding mode is ROUND_HALF_UP, result is positive; distance = -1.
    */
   public void testDivideRoundHalfUpPos() {
     String a = "92948782094488478231212478987482988429808779810457634781384756794987";
@@ -1123,7 +1122,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_HALF_UP, result is positive; distance = 1
+   * Divide: rounding mode is ROUND_HALF_UP, result is positive; distance = 1.
    */
   public void testDivideRoundHalfUpPos1() {
     String a = "92948782094488478231212478987482988798104576347813847567949855464535634534563456";
@@ -1141,7 +1140,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_UP, result is negative
+   * Divide: rounding mode is ROUND_UP, result is negative.
    */
   public void testDivideRoundUpNeg() {
     String a = "-92948782094488478231212478987482988429808779810457634781384756794987";
@@ -1158,7 +1157,7 @@
   }
 
   /**
-   * Divide: rounding mode is ROUND_UP, result is positive
+   * Divide: rounding mode is ROUND_UP, result is positive.
    */
   public void testDivideRoundUpPos() {
     String a = "92948782094488478231212478987482988429808779810457634781384756794987";
@@ -1188,7 +1187,7 @@
   }
   
   /**
-   * divideToIntegralValue(BigDecimal)
+   * divideToIntegralValue(BigDecimal).
    */
   public void testDivideToIntegralValue() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1205,7 +1204,7 @@
   }
 
   /**
-   * divideToIntegralValue(BigDecimal, MathContext)
+   * divideToIntegralValue(BigDecimal, MathContext).
    */
   public void testDivideToIntegralValueMathContextDOWN() {
     String a = "3736186567876876578956958769675785435673453453653543654354365435675671119238118911893939591735";
@@ -1225,7 +1224,7 @@
   }
 
   /**
-   * divideToIntegralValue(BigDecimal, MathContext)
+   * divideToIntegralValue(BigDecimal, MathContext).
    */
   public void testDivideToIntegralValueMathContextUP() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1268,7 +1267,7 @@
   }
 
   /**
-   * Multiply two numbers of different scales
+   * Multiply two numbers of different scales.
    */
   public void testMultiplyDiffScaleNegPos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1285,7 +1284,7 @@
   }
 
   /**
-   * Multiply two numbers of different scales
+   * Multiply two numbers of different scales.
    */
   public void testMultiplyDiffScalePosNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1302,7 +1301,7 @@
   }
 
   /**
-   * Multiply two numbers of negative scales
+   * Multiply two numbers of negative scales.
    */
   public void testMultiplyEqualScaleNegNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1319,7 +1318,7 @@
   }
 
   /**
-   * Multiply two numbers of different scales using MathContext
+   * Multiply two numbers of different scales using MathContext.
    */
   public void testMultiplyMathContextDiffScaleNegPos() {
     String a = "488757458676796558668876576576579097029810457634781384756794987";
@@ -1337,7 +1336,7 @@
   }
 
   /**
-   * Multiply two numbers of different scales using MathContext
+   * Multiply two numbers of different scales using MathContext.
    */
   public void testMultiplyMathContextDiffScalePosNeg() {
     String a = "987667796597975765768768767866756808779810457634781384756794987";
@@ -1355,7 +1354,7 @@
   }
 
   /**
-   * Multiply two numbers of positive scales using MathContext
+   * Multiply two numbers of positive scales using MathContext.
    */
   public void testMultiplyMathContextScalePosPos() {
     String a = "97665696756578755423325476545428779810457634781384756794987";
@@ -1373,7 +1372,7 @@
   }
 
   /**
-   * Multiply two numbers of positive scales
+   * Multiply two numbers of positive scales.
    */
   public void testMultiplyScalePosPos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1390,7 +1389,7 @@
   }
 
   /**
-   * pow(int)
+   * pow(int).
    */
   public void testPow() {
     String a = "123121247898748298842980";
@@ -1408,7 +1407,7 @@
   }
 
   /**
-   * pow(0)
+   * pow(0).
    */
   public void testPow0() {
     String a = "123121247898748298842980";
@@ -1423,7 +1422,7 @@
   }
 
   /**
-   * pow(int, MathContext)
+   * pow(int, MathContext).
    */
   public void testPowMathContext() {
     String a = "123121247898748298842980";
@@ -1439,7 +1438,7 @@
   }
 
   /**
-   * remainder(BigDecimal)
+   * remainder(BigDecimal).
    */
   public void testRemainder1() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1456,7 +1455,7 @@
   }
 
   /**
-   * remainder(BigDecimal)
+   * remainder(BigDecimal).
    */
   public void testRemainder2() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1473,7 +1472,7 @@
   }
 
   /**
-   * remainder(BigDecimal, MathContext)
+   * remainder(BigDecimal, MathContext).
    */
   public void testRemainderMathContextHALF_DOWN() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1493,7 +1492,7 @@
   }
 
   /**
-   * remainder(BigDecimal, MathContext)
+   * remainder(BigDecimal, MathContext).
    */
   public void testRemainderMathContextHALF_UP() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1539,7 +1538,7 @@
   }
 
   /**
-   * round(BigDecimal, MathContext)
+   * round(BigDecimal, MathContext).
    */
   public void testRoundMathContextHALF_DOWN() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1556,7 +1555,7 @@
   }
 
   /**
-   * round(BigDecimal, MathContext)
+   * round(BigDecimal, MathContext).
    */
   public void testRoundMathContextHALF_UP() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1573,7 +1572,7 @@
   }
 
   /**
-   * round(BigDecimal, MathContext) when precision = 0
+   * round(BigDecimal, MathContext) when precision = 0.
    */
   public void testRoundMathContextPrecision0() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1589,7 +1588,7 @@
   }
 
   /**
-   * Subtract two numbers of different scales; the first is negative
+   * Subtract two numbers of different scales; the first is negative.
    */
   public void testSubtractDiffScaleNegPos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1606,7 +1605,7 @@
   }
 
   /**
-   * Subtract two numbers of different scales; the first is positive
+   * Subtract two numbers of different scales; the first is positive.
    */
   public void testSubtractDiffScalePosNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1623,7 +1622,7 @@
   }
 
   /**
-   * Subtract two numbers of equal negative scales
+   * Subtract two numbers of equal negative scales.
    */
   public void testSubtractEqualScaleNegNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1640,7 +1639,7 @@
   }
 
   /**
-   * Subtract two numbers of equal positive scales
+   * Subtract two numbers of equal positive scales.
    */
   public void testSubtractEqualScalePosPos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1658,7 +1657,7 @@
 
   /**
    * Subtract two numbers of different scales using MathContext; the first is
-   * negative
+   * negative.
    */
   public void testSubtractMathContextDiffScaleNegPos() {
     String a = "986798656676789766678767876078779810457634781384756794987";
@@ -1677,7 +1676,7 @@
 
   /**
    * Subtract two numbers of different scales using MathContext; the first is
-   * positive
+   * positive.
    */
   public void testSubtractMathContextDiffScalePosNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1695,7 +1694,7 @@
   }
 
   /**
-   * Subtract two numbers of equal positive scales using MathContext
+   * Subtract two numbers of equal positive scales using MathContext.
    */
   public void testSubtractMathContextEqualScalePosPos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -1713,7 +1712,7 @@
   }
 
   /**
-   * ulp() of a negative BigDecimal
+   * ulp() of a negative BigDecimal.
    */
   public void testUlpNeg() {
     String a = "-3736186567876876578956958765675671119238118911893939591735";
@@ -1727,7 +1726,7 @@
   }
 
   /**
-   * ulp() of a positive BigDecimal
+   * ulp() of a positive BigDecimal.
    */
   public void testUlpPos() {
     String a = "3736186567876876578956958765675671119238118911893939591735";
@@ -1741,7 +1740,7 @@
   }
 
   /**
-   * ulp() of a negative BigDecimal
+   * ulp() of a negative BigDecimal.
    */
   public void testUlpZero() {
     String a = "0";
@@ -1755,7 +1754,7 @@
   }
 
   /**
-   * ZERO.pow(0)
+   * ZERO.pow(0).
    */
   public void testZeroPow0() {
     String c = "1";
diff --git a/user/test/com/google/gwt/emultest/java/math/BigDecimalScaleOperationsTest.java b/user/test/com/google/gwt/emultest/java/math/BigDecimalScaleOperationsTest.java
index ab9a5c7..5323bc7 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigDecimalScaleOperationsTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigDecimalScaleOperationsTest.java
@@ -45,7 +45,7 @@
 
 /**
  * Class: java.math.BigDecimal Methods: movePointLeft, movePointRight, scale,
- * setScale, unscaledValue *
+ * setScale, unscaledValue *.
  */
 public class BigDecimalScaleOperationsTest extends EmulTestBase {
 
@@ -55,7 +55,7 @@
   }
 
   /**
-   * Check the default scale
+   * Check the default scale.
    */
   public void testScaleDefault() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -65,7 +65,7 @@
   }
 
   /**
-   * Check a negative scale
+   * Check a negative scale.
    */
   public void testScaleNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -76,7 +76,7 @@
   }
 
   /**
-   * Check a positive scale
+   * Check a positive scale.
    */
   public void testScalePos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -87,7 +87,7 @@
   }
 
   /**
-   * Check the zero scale
+   * Check the zero scale.
    */
   public void testScaleZero() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -98,7 +98,7 @@
   }
 
   /**
-   * Check the unscaled value
+   * Check the unscaled value.
    */
   public void testUnscaledValue() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -110,7 +110,7 @@
   }
 
   /**
-   * Set a greater new scale
+   * Set a greater new scale.
    */
   public void testSetScaleGreater() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -135,7 +135,7 @@
   }
 
   /**
-   * Verify an exception when setting a new scale
+   * Verify an exception when setting a new scale.
    */
   public void testSetScaleException() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -152,7 +152,7 @@
   }
 
   /**
-   * Set the same new scale
+   * Set the same new scale.
    */
   public void testSetScaleSame() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -165,7 +165,7 @@
   }
 
   /**
-   * Set a new scale
+   * Set a new scale.
    */
   public void testSetScaleRoundUp() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -179,7 +179,7 @@
   }
 
   /**
-   * Set a new scale
+   * Set a new scale.
    */
   public void testSetScaleRoundDown() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -193,7 +193,7 @@
   }
 
   /**
-   * Set a new scale
+   * Set a new scale.
    */
   public void testSetScaleRoundCeiling() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -207,7 +207,7 @@
   }
 
   /**
-   * Set a new scale
+   * Set a new scale.
    */
   public void testSetScaleRoundFloor() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -221,7 +221,7 @@
   }
 
   /**
-   * Set a new scale
+   * Set a new scale.
    */
   public void testSetScaleRoundHalfUp() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -235,7 +235,7 @@
   }
 
   /**
-   * Set a new scale
+   * Set a new scale.
    */
   public void testSetScaleRoundHalfDown() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -249,7 +249,7 @@
   }
 
   /**
-   * Set a new scale
+   * Set a new scale.
    */
   public void testSetScaleRoundHalfEven() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -263,7 +263,7 @@
   }
 
   /**
-   * SetScale(int, RoundingMode)
+   * SetScale(int, RoundingMode).
    */
   public void testSetScaleIntRoundingMode() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -278,7 +278,7 @@
   }
 
   /**
-   * Move the decimal point to the left; the shift value is positive
+   * Move the decimal point to the left; the shift value is positive.
    */
   public void testMovePointLeftPos() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -292,7 +292,7 @@
   }
 
   /**
-   * Move the decimal point to the left; the shift value is positive
+   * Move the decimal point to the left; the shift value is positive.
    */
   public void testMovePointLeftNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -306,7 +306,7 @@
   }
 
   /**
-   * Move the decimal point to the right; the shift value is positive
+   * Move the decimal point to the right; the shift value is positive.
    */
   public void testMovePointRightPosGreater() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -320,7 +320,7 @@
   }
 
   /**
-   * Move the decimal point to the right; the shift value is positive
+   * Move the decimal point to the right; the shift value is positive.
    */
   public void testMovePointRightPosLess() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -335,7 +335,7 @@
   }
 
   /**
-   * Move the decimal point to the right; the shift value is positive
+   * Move the decimal point to the right; the shift value is positive.
    */
   public void testMovePointRightNeg() {
     String a = "1231212478987482988429808779810457634781384756794987";
@@ -349,7 +349,7 @@
   }
 
   /**
-   * Move the decimal point to the right when the scale overflows
+   * Move the decimal point to the right when the scale overflows.
    */
   public void testMovePointRightException() {
     String a = "12312124789874829887348723648726347429808779810457634781384756794987";
@@ -365,7 +365,7 @@
   }
 
   /**
-   * precision()
+   * precision().
    */
   public void testPrecision() {
     String a = "12312124789874829887348723648726347429808779810457634781384756794987";
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerAddTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerAddTest.java
index aa125d1..e69fb57 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerAddTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerAddTest.java
@@ -42,12 +42,12 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Method: add
+ * Class: java.math.BigInteger Method: add.
  */
 public class BigIntegerAddTest extends EmulTestBase {
 
   /**
-   * Add two positive numbers of the same length
+   * Add two positive numbers of the same length.
    */
   public void testCase1() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
@@ -67,7 +67,7 @@
   }
 
   /**
-   * Add two negative numbers of the same length
+   * Add two negative numbers of the same length.
    */
   public void testCase2() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
@@ -335,7 +335,7 @@
   }
 
   /**
-   * Add two equal numbers of different signs
+   * Add two equal numbers of different signs.
    */
   public void testCase15() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -354,7 +354,7 @@
   }
 
   /**
-   * Add zero to a number
+   * Add zero to a number.
    */
   public void testCase16() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -374,7 +374,7 @@
   }
 
   /**
-   * Add a number to zero
+   * Add a number to zero.
    */
   public void testCase17() {
     byte aBytes[] = {0};
@@ -394,7 +394,7 @@
   }
 
   /**
-   * Add zero to zero
+   * Add zero to zero.
    */
   public void testCase18() {
     byte aBytes[] = {0};
@@ -414,7 +414,7 @@
   }
 
   /**
-   * Add ZERO to a number
+   * Add ZERO to a number.
    */
   public void testCase19() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -432,7 +432,7 @@
   }
 
   /**
-   * Add a number to zero
+   * Add a number to zero.
    */
   public void testCase20() {
     byte bBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -450,7 +450,7 @@
   }
 
   /**
-   * Add ZERO to ZERO
+   * Add ZERO to ZERO.
    */
   public void testCase21() {
     byte rBytes[] = {0};
@@ -466,7 +466,7 @@
   }
 
   /**
-   * Add ONE to ONE
+   * Add ONE to ONE.
    */
   public void testCase22() {
     byte rBytes[] = {2};
@@ -482,7 +482,7 @@
   }
 
   /**
-   * Add two numbers so that carry is 1
+   * Add two numbers so that carry is 1.
    */
   public void testCase23() {
     byte aBytes[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerAndTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerAndTest.java
index d1db148..2c5141f 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerAndTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerAndTest.java
@@ -42,12 +42,12 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Method: and
+ * Class: java.math.BigInteger Method: and.
  */
 public class BigIntegerAndTest extends EmulTestBase {
 
   /**
-   * And for two negative numbers; the first is longer
+   * And for two negative numbers; the first is longer.
    */
   public void testNegNegFirstLonger() {
     byte aBytes[] = {
@@ -71,7 +71,7 @@
   }
 
   /**
-   * And for two negative numbers; the first is shorter
+   * And for two negative numbers; the first is shorter.
    */
   public void testNegNegFirstShorter() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -95,7 +95,7 @@
   }
 
   /**
-   * And for two negative numbers of the same length
+   * And for two negative numbers of the same length.
    */
   public void testNegNegSameLength() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -116,7 +116,7 @@
   }
 
   /**
-   * And for a negative number and zero
+   * And for a negative number and zero.
    */
   public void testNegPos() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -136,7 +136,7 @@
   }
 
   /**
-   * And for a negative and a positive numbers; the first is longer
+   * And for a negative and a positive numbers; the first is longer.
    */
   public void testNegPosFirstLonger() {
     byte aBytes[] = {
@@ -158,7 +158,7 @@
   }
 
   /**
-   * And for a negative and a positive numbers; the first is shorter
+   * And for a negative and a positive numbers; the first is shorter.
    */
   public void testNegPosFirstShorter() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -182,7 +182,7 @@
   }
 
   /**
-   * And for two numbers of different signs and the same length
+   * And for two numbers of different signs and the same length.
    */
   public void testNegPosSameLength() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -202,7 +202,7 @@
   }
 
   /**
-   * And for one and one
+   * And for one and one.
    */
   public void testOneOne() {
     BigInteger aNumber = BigInteger.ONE;
@@ -213,7 +213,7 @@
   }
 
   /**
-   * And for a positive and a negative numbers; the first is longer
+   * And for a positive and a negative numbers; the first is longer.
    */
   public void testPosNegFirstLonger() {
     byte aBytes[] = {
@@ -237,7 +237,7 @@
   }
 
   /**
-   * And for a positive and a negative numbers; the first is shorter
+   * And for a positive and a negative numbers; the first is shorter.
    */
   public void testPosNegFirstShorter() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -259,7 +259,7 @@
   }
 
   /**
-   * And for two numbers of different signs and the same length
+   * And for two numbers of different signs and the same length.
    */
   public void testPosNegSameLength() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -279,7 +279,7 @@
   }
 
   /**
-   * And for two positive numbers; the first is longer
+   * And for two positive numbers; the first is longer.
    */
   public void testPosPosFirstLonger() {
     byte aBytes[] = {
@@ -301,7 +301,7 @@
   }
 
   /**
-   * And for two positive numbers; the first is shorter
+   * And for two positive numbers; the first is shorter.
    */
   public void testPosPosFirstShorter() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -323,7 +323,7 @@
   }
 
   /**
-   * And for two positive numbers of the same length
+   * And for two positive numbers of the same length.
    */
   public void testPosPosSameLength() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -343,7 +343,7 @@
   }
 
   /**
-   * And for a positive number and zero
+   * And for a positive number and zero.
    */
   public void testPosZero() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -363,7 +363,7 @@
   }
 
   /**
-   * Test for a special case
+   * Test for a special case.
    */
   public void testSpecialCase1() {
     byte aBytes[] = {-1, -1, -1, -1};
@@ -383,7 +383,7 @@
   }
 
   /**
-   * Test for a special case
+   * Test for a special case.
    */
   public void testSpecialCase2() {
     byte aBytes[] = {-51};
@@ -403,7 +403,7 @@
   }
 
   /**
-   * And for zero and a negative number
+   * And for zero and a negative number.
    */
   public void testZeroNeg() {
     byte aBytes[] = {0};
@@ -423,7 +423,7 @@
   }
 
   /**
-   * And for zero and one
+   * And for zero and one.
    */
   public void testZeroOne() {
     BigInteger aNumber = BigInteger.ZERO;
@@ -434,7 +434,7 @@
   }
 
   /**
-   * And for zero and a positive number
+   * And for zero and a positive number.
    */
   public void testZeroPos() {
     byte aBytes[] = {0};
@@ -454,7 +454,7 @@
   }
 
   /**
-   * And for zero and zero
+   * And for zero and zero.
    */
   public void testZeroZero() {
     byte aBytes[] = {0};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerCompareTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerCompareTest.java
index 8b56def..1fc4ba0 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerCompareTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerCompareTest.java
@@ -43,11 +43,11 @@
 
 /**
  * Class: java.math.BigInteger Methods: abs, compareTo, equals, max, min,
- * negate, signum
+ * negate, signum.
  */
 public class BigIntegerCompareTest extends EmulTestBase {
   /**
-   * abs() for a negative number
+   * abs() for a negative number.
    */
   public void testAbsNegative() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -64,7 +64,7 @@
   }
 
   /**
-   * abs() for a positive number
+   * abs() for a positive number.
    */
   public void testAbsPositive() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java
index 6024e6f..ddafc49 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java
@@ -44,12 +44,12 @@
 
 /**
  * Class: java.math.BigInteger Constructors: BigInteger(byte[] a),
- * BigInteger(int sign, byte[] a), BigInteger(String val, int radix)
+ * BigInteger(int sign, byte[] a), BigInteger(String val, int radix).
  */
 public class BigIntegerConstructorsTest extends EmulTestBase {
   /**
    * Create a number from an array of bytes. Verify an exception thrown if an
-   * array is zero bytes long
+   * array is zero bytes long.
    */
   public void testConstructorBytesException() {
     byte aBytes[] = {};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerConvertTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerConvertTest.java
index df634f5..38f7283 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerConvertTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerConvertTest.java
@@ -43,7 +43,7 @@
 
 /**
  * Class: java.math.BigInteger Methods: intValue, longValue, toByteArray(),
- * valueOf(long val), floatValue(), doubleValue()
+ * valueOf(long val), floatValue(), doubleValue().
  */
 public class BigIntegerConvertTest extends EmulTestBase {
   /**
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerDivideTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerDivideTest.java
index 5975a2b..1e119cb 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerDivideTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerDivideTest.java
@@ -43,11 +43,11 @@
 
 /**
  * Class: java.math.BigInteger Methods: divide, remainder, mod, and
- * divideAndRemainder
+ * divideAndRemainder.
  */
 public class BigIntegerDivideTest extends EmulTestBase {
   /**
-   * Divide by zero
+   * Divide by zero.
    */
   public void testCase1() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -158,7 +158,7 @@
   }
 
   /**
-   * Remainder of division by zero
+   * Remainder of division by zero.
    */
   public void testCase15() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -177,7 +177,7 @@
   }
 
   /**
-   * Remainder of division of equal numbers
+   * Remainder of division of equal numbers.
    */
   public void testCase16() {
     byte aBytes[] = {-127, 100, 56, 7, 98, -1, 39, -128, 127};
@@ -197,7 +197,7 @@
   }
 
   /**
-   * Remainder of division of two positive numbers
+   * Remainder of division of two positive numbers.
    */
   public void testCase17() {
     byte aBytes[] = {-127, 100, 56, 7, 98, -1, 39, -128, 127, 75};
@@ -217,7 +217,7 @@
   }
 
   /**
-   * Remainder of division of two negative numbers
+   * Remainder of division of two negative numbers.
    */
   public void testCase18() {
     byte aBytes[] = {-127, 100, 56, 7, 98, -1, 39, -128, 127, 75};
@@ -258,7 +258,7 @@
   }
 
   /**
-   * Divide by ZERO
+   * Divide by ZERO.
    */
   public void testCase2() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -326,7 +326,7 @@
   }
 
   /**
-   * mod when modulus is negative
+   * mod when modulus is negative.
    */
   public void testCase22() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -345,7 +345,7 @@
   }
 
   /**
-   * mod when a divisor is positive
+   * mod when a divisor is positive.
    */
   public void testCase23() {
     byte aBytes[] = {-127, 100, 56, 7, 98, -1, 39, -128, 127, 75};
@@ -365,7 +365,7 @@
   }
 
   /**
-   * mod when a divisor is negative
+   * mod when a divisor is negative.
    */
   public void testCase24() {
     byte aBytes[] = {-127, 100, 56, 7, 98, -1, 39, -128, 127, 75};
@@ -385,7 +385,7 @@
   }
 
   /**
-   * Divide two equal positive numbers
+   * Divide two equal positive numbers.
    */
   public void testCase3() {
     byte aBytes[] = {-127, 100, 56, 7, 98, -1, 39, -128, 127};
@@ -586,7 +586,7 @@
   }
 
   /**
-   * Divide the number of multi digits by the number of one digit
+   * Divide the number of multi digits by the number of one digit.
    */
   public void testDivisionKnuthMultiDigitsByOneDigit() {
     byte aBytes[] = {113, -83, 123, -5, 18, -34, 67, 39, -29};
@@ -606,7 +606,7 @@
   }
 
   /**
-   * Divide the number of one digit by the number of one digit
+   * Divide the number of one digit by the number of one digit.
    */
   public void testDivisionKnuthOneDigitByOneDigit() {
     byte aBytes[] = {113, -83, 123, -5};
@@ -626,7 +626,7 @@
   }
 
   /**
-   * Tests the step D6 from the Knuth algorithm
+   * Tests the step D6 from the Knuth algorithm.
    */
   public void testRemainderKnuth1() {
     byte aBytes[] = {-9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1};
@@ -646,7 +646,7 @@
   }
 
   /**
-   * Divide the number of multi digits by the number of one digit
+   * Divide the number of multi digits by the number of one digit.
    */
   public void testRemainderKnuthMultiDigitsByOneDigit() {
     byte aBytes[] = {113, -83, 123, -5, 18, -34, 67, 39, -29};
@@ -666,7 +666,7 @@
   }
 
   /**
-   * Divide the number of one digit by the number of one digit
+   * Divide the number of one digit by the number of one digit.
    */
   public void testRemainderKnuthOneDigitByOneDigit() {
     byte aBytes[] = {113, -83, 123, -5};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerHashCodeTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerHashCodeTest.java
index 1e311c0..a107b6b 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerHashCodeTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerHashCodeTest.java
@@ -42,7 +42,7 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Method: hashCode()
+ * Class: java.math.BigInteger Method: hashCode().
  */
 public class BigIntegerHashCodeTest extends EmulTestBase {
   /**
@@ -61,7 +61,7 @@
   }
 
   /**
-   * Test hash codes for the same object
+   * Test hash codes for the same object.
    */
   public void testSameObject() {
     String value1 = "12378246728727834290276457386374882976782849";
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerModPowTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerModPowTest.java
index c3bb24f..ce676ff 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerModPowTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerModPowTest.java
@@ -42,11 +42,11 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Methods: modPow, modInverse, and gcd
+ * Class: java.math.BigInteger Methods: modPow, modInverse, and gcd.
  */
 public class BigIntegerModPowTest extends EmulTestBase {
   /**
-   * gcd: both numbers are zeros
+   * gcd: both numbers are zeros.
    */
   public void testGcdBothZeros() {
     byte rBytes[] = {0};
@@ -61,7 +61,7 @@
   }
 
   /**
-   * gcd: the first number is longer
+   * gcd: the first number is longer.
    */
   public void testGcdFirstLonger() {
     byte aBytes[] = {
@@ -83,7 +83,7 @@
   }
 
   /**
-   * gcd: the first number is zero
+   * gcd: the first number is zero.
    */
   public void testGcdFirstZero() {
     byte aBytes[] = {0};
@@ -103,7 +103,7 @@
   }
 
   /**
-   * gcd: the first number is ZERO
+   * gcd: the first number is ZERO.
    */
   public void testGcdFirstZERO() {
     byte bBytes[] = {15, 24, 123, 57, -15, 24, 123, 57, -15, 24, 123, 57};
@@ -121,7 +121,7 @@
   }
 
   /**
-   * gcd: the second number is longer
+   * gcd: the second number is longer.
    */
   public void testGcdSecondLonger() {
     byte aBytes[] = {-12, 1, 0, 0, 0, 23, 44, 55, 66};
@@ -143,7 +143,7 @@
   }
 
   /**
-   * gcd: the second number is zero
+   * gcd: the second number is zero.
    */
   public void testGcdSecondZero() {
     byte aBytes[] = {15, 24, 123, 57, -15, 24, 123, 57, -15, 24, 123, 57};
@@ -163,7 +163,7 @@
   }
 
   /**
-   * modInverse: non-positive modulus
+   * modInverse: non-positive modulus.
    */
   public void testmodInverseException() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -182,7 +182,7 @@
   }
 
   /**
-   * modInverse: negative number
+   * modInverse: negative number.
    */
   public void testmodInverseNeg1() {
     byte aBytes[] = {
@@ -204,7 +204,7 @@
   }
 
   /**
-   * modInverse: negative number (another case: x < 0)
+   * modInverse: negative number (another case: x < 0).
    */
   public void testmodInverseNeg2() {
     byte aBytes[] = {-15, 24, 123, 57, -15, 24, 123, 57, -15, 24, 123, 57};
@@ -222,7 +222,7 @@
   }
 
   /**
-   * modInverse: non-invertible number
+   * modInverse: non-invertible number.
    */
   public void testmodInverseNonInvertible() {
     byte aBytes[] = {
@@ -243,7 +243,7 @@
   }
 
   /**
-   * modInverse: positive number
+   * modInverse: positive number.
    */
   public void testmodInversePos1() {
     byte aBytes[] = {
@@ -264,7 +264,7 @@
   }
 
   /**
-   * modInverse: positive number (another case: a < 0)
+   * modInverse: positive number (another case: a < 0).
    */
   public void testmodInversePos2() {
     byte aBytes[] = {
@@ -286,7 +286,7 @@
   }
 
   /**
-   * modPow: non-positive modulus
+   * modPow: non-positive modulus.
    */
   public void testModPowException() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7};
@@ -308,7 +308,7 @@
   }
 
   /**
-   * modPow: negative exponent
+   * modPow: negative exponent.
    */
   public void testModPowNegExp() {
     byte aBytes[] = {-127, 100, 56, 7, 98, -1, 39, -128, 127, 75, 48, -7};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerMultiplyTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerMultiplyTest.java
index 5b24a50..06157f4 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerMultiplyTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerMultiplyTest.java
@@ -42,11 +42,11 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Method: multiply
+ * Class: java.math.BigInteger Method: multiply.
  */
 public class BigIntegerMultiplyTest extends EmulTestBase {
   /**
-   * Multiply two negative numbers of the same length
+   * Multiply two negative numbers of the same length.
    */
   public void testCase1() {
     byte aBytes[] = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerNotTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerNotTest.java
index 9a1b4f7..caec2c2 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerNotTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerNotTest.java
@@ -42,11 +42,11 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Methods: and, andNot
+ * Class: java.math.BigInteger Methods: and, andNot.
  */
 public class BigIntegerNotTest extends EmulTestBase {
   /**
-   * andNot for two negative numbers; the first is longer
+   * andNot for two negative numbers; the first is longer.
    */
   public void testAndNotNegNegFirstLonger() {
     byte aBytes[] = {
@@ -68,7 +68,7 @@
   }
 
   /**
-   * andNot for two positive numbers; the first is longer
+   * andNot for two positive numbers; the first is longer.
    */
   public void testAndNotPosPosFirstLonger() {
     byte aBytes[] = {
@@ -92,7 +92,7 @@
   }
 
   /**
-   * andNot for two positive numbers; the first is shorter
+   * andNot for two positive numbers; the first is shorter.
    */
   public void testAndNotPosPosFirstShorter() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -114,7 +114,7 @@
   }
 
   /**
-   * andNot for a negative and a positive numbers; the first is longer
+   * andNot for a negative and a positive numbers; the first is longer.
    */
   public void testNegPosFirstLonger() {
     byte aBytes[] = {
@@ -138,7 +138,7 @@
   }
 
   /**
-   * Not for a negative number
+   * Not for a negative number.
    */
   public void testNotNeg() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -156,7 +156,7 @@
   }
 
   /**
-   * Not for ONE
+   * Not for ONE.
    */
   public void testNotOne() {
     byte rBytes[] = {-2};
@@ -171,7 +171,7 @@
   }
 
   /**
-   * Not for a positive number
+   * Not for a positive number.
    */
   public void testNotPos() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -189,7 +189,7 @@
   }
 
   /**
-   * Not for a negative number
+   * Not for a negative number.
    */
 
   public void testNotSpecialCase() {
@@ -207,7 +207,7 @@
   }
 
   /**
-   * Not for ZERO
+   * Not for ZERO.
    */
   public void testNotZero() {
     byte rBytes[] = {-1};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerOperateBitsTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerOperateBitsTest.java
index 3e62f59..9ef9e27 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerOperateBitsTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerOperateBitsTest.java
@@ -43,7 +43,7 @@
 
 /**
  * Class: java.math.BigInteger Methods: bitLength, shiftLeft, shiftRight,
- * clearBit, flipBit, setBit, testBit
+ * clearBit, flipBit, setBit, testBit.
  */
 public class BigIntegerOperateBitsTest extends EmulTestBase {
   /**
@@ -83,7 +83,7 @@
   }
 
   /**
-   * bitLength() of a negative number with the leftmost bit set
+   * bitLength() of a negative number with the leftmost bit set.
    */
   public void testBitLengthNegative2() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -93,7 +93,7 @@
   }
 
   /**
-   * bitLength() of a negative number which is a power of 2
+   * bitLength() of a negative number which is a power of 2.
    */
   public void testBitLengthNegative3() {
     byte aBytes[] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
@@ -113,7 +113,7 @@
   }
 
   /**
-   * bitLength() of a positive number with the leftmost bit set
+   * bitLength() of a positive number with the leftmost bit set.
    */
   public void testBitLengthPositive2() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -123,7 +123,7 @@
   }
 
   /**
-   * bitLength() of a positive number which is a power of 2
+   * bitLength() of a positive number which is a power of 2.
    */
   public void testBitLengthPositive3() {
     byte aBytes[] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
@@ -141,7 +141,7 @@
   }
 
   /**
-   * clearBit(int n) of a negative n
+   * clearBit(int n) of a negative n.
    */
   public void testClearBitException() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -158,7 +158,7 @@
   }
 
   /**
-   * clearBit(int n) inside a negative number
+   * clearBit(int n) inside a negative number.
    */
   public void testClearBitNegativeInside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -176,7 +176,7 @@
   }
 
   /**
-   * clearBit(int n) inside a negative number
+   * clearBit(int n) inside a negative number.
    */
   public void testClearBitNegativeInside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -194,7 +194,7 @@
   }
 
   /**
-   * clearBit(2) in the negative number with all ones in bit representation
+   * clearBit(2) in the negative number with all ones in bit representation.
    */
   public void testClearBitNegativeInside3() {
     String as = "-18446744073709551615";
@@ -231,7 +231,7 @@
   }
 
   /**
-   * clearBit(int n) outside a negative number
+   * clearBit(int n) outside a negative number.
    */
   public void testClearBitNegativeOutside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -251,7 +251,7 @@
   }
 
   /**
-   * clearBit(int n) outside a negative number
+   * clearBit(int n) outside a negative number.
    */
   public void testClearBitNegativeOutside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -271,7 +271,7 @@
   }
 
   /**
-   * clearBit(int n) inside a positive number
+   * clearBit(int n) inside a positive number.
    */
   public void testClearBitPositiveInside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -289,7 +289,7 @@
   }
 
   /**
-   * clearBit(int n) inside a positive number
+   * clearBit(int n) inside a positive number.
    */
   public void testClearBitPositiveInside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -307,7 +307,7 @@
   }
 
   /**
-   * clearBit(int n) inside a positive number
+   * clearBit(int n) inside a positive number.
    */
   public void testClearBitPositiveInside3() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -325,7 +325,7 @@
   }
 
   /**
-   * clearBit(int n) inside a positive number
+   * clearBit(int n) inside a positive number.
    */
   public void testClearBitPositiveInside4() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -343,7 +343,7 @@
   }
 
   /**
-   * clearBit(int n) inside a positive number
+   * clearBit(int n) inside a positive number.
    */
   public void testClearBitPositiveInside5() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -361,7 +361,7 @@
   }
 
   /**
-   * clearBit(int n) outside a positive number
+   * clearBit(int n) outside a positive number.
    */
   public void testClearBitPositiveOutside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -379,7 +379,7 @@
   }
 
   /**
-   * clearBit(int n) outside a positive number
+   * clearBit(int n) outside a positive number.
    */
   public void testClearBitPositiveOutside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -397,7 +397,7 @@
   }
 
   /**
-   * clearBit(int n) the leftmost bit in a negative number
+   * clearBit(int n) the leftmost bit in a negative number.
    */
   public void testClearBitTopNegative() {
     byte aBytes[] = {1, -128, 56, 100, -15, 35, 26};
@@ -415,7 +415,7 @@
   }
 
   /**
-   * clearBit(int n) outside zero
+   * clearBit(int n) outside zero.
    */
   public void testClearBitZero() {
     byte aBytes[] = {0};
@@ -433,7 +433,7 @@
   }
 
   /**
-   * clearBit(int n) outside zero
+   * clearBit(int n) outside zero.
    */
   public void testClearBitZeroOutside1() {
     byte aBytes[] = {0};
@@ -451,7 +451,7 @@
   }
 
   /**
-   * flipBit(int n) of a negative n
+   * flipBit(int n) of a negative n.
    */
   public void testFlipBitException() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -468,7 +468,7 @@
   }
 
   /**
-   * flipBit(int n) the leftmost bit in a negative number
+   * flipBit(int n) the leftmost bit in a negative number.
    */
   public void testFlipBitLeftmostNegative() {
     byte aBytes[] = {1, -128, 56, 100, -15, 35, 26};
@@ -486,7 +486,7 @@
   }
 
   /**
-   * flipBit(int n) the leftmost bit in a positive number
+   * flipBit(int n) the leftmost bit in a positive number.
    */
   public void testFlipBitLeftmostPositive() {
     byte aBytes[] = {1, -128, 56, 100, -15, 35, 26};
@@ -504,7 +504,7 @@
   }
 
   /**
-   * flipBit(int n) inside a negative number
+   * flipBit(int n) inside a negative number.
    */
   public void testFlipBitNegativeInside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -522,7 +522,7 @@
   }
 
   /**
-   * flipBit(int n) inside a negative number
+   * flipBit(int n) inside a negative number.
    */
   public void testFlipBitNegativeInside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -540,7 +540,7 @@
   }
 
   /**
-   * flipBit(int n) inside a negative number with all ones in bit representation
+   * flipBit(int n) inside a negative number with all ones in bit representation.
    */
   public void testFlipBitNegativeInside3() {
     String as = "-18446744073709551615";
@@ -578,7 +578,7 @@
   }
 
   /**
-   * flipBit(int n) outside a negative number
+   * flipBit(int n) outside a negative number.
    */
   public void testFlipBitNegativeOutside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -598,7 +598,7 @@
   }
 
   /**
-   * flipBit(int n) outside a negative number
+   * flipBit(int n) outside a negative number.
    */
   public void testFlipBitNegativeOutside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -618,7 +618,7 @@
   }
 
   /**
-   * flipBit(int n) inside a positive number
+   * flipBit(int n) inside a positive number.
    */
   public void testFlipBitPositiveInside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -636,7 +636,7 @@
   }
 
   /**
-   * flipBit(int n) inside a positive number
+   * flipBit(int n) inside a positive number.
    */
   public void testFlipBitPositiveInside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -654,7 +654,7 @@
   }
 
   /**
-   * flipBit(int n) outside a positive number
+   * flipBit(int n) outside a positive number.
    */
   public void testFlipBitPositiveOutside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -674,7 +674,7 @@
   }
 
   /**
-   * flipBit(int n) outside a positive number
+   * flipBit(int n) outside a positive number.
    */
   public void testFlipBitPositiveOutside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -694,7 +694,7 @@
   }
 
   /**
-   * flipBit(int n) zero
+   * flipBit(int n) zero.
    */
   public void testFlipBitZero() {
     byte aBytes[] = {0};
@@ -712,7 +712,7 @@
   }
 
   /**
-   * flipBit(int n) outside zero
+   * flipBit(int n) outside zero.
    */
   public void testFlipBitZeroOutside1() {
     byte aBytes[] = {0};
@@ -730,7 +730,7 @@
   }
 
   /**
-   * flipBit(int n) outside zero
+   * flipBit(int n) outside zero.
    */
   public void testFlipBitZeroOutside2() {
     byte aBytes[] = {0};
@@ -749,7 +749,7 @@
 
   /**
    * setBit: check the case when the number of bit to be set can be represented
-   * as n * 32 + 31, where n is an arbitrary integer. Here 191 = 5 * 32 + 31
+   * as n * 32 + 31, where n is an arbitrary integer. Here 191 = 5 * 32 + 31.
    */
   public void testSetBitBug1331() {
     BigInteger result = BigInteger.valueOf(0L).setBit(191);
@@ -760,7 +760,7 @@
   }
 
   /**
-   * setBit(int n) of a negative n
+   * setBit(int n) of a negative n.
    */
   public void testSetBitException() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -777,7 +777,7 @@
   }
 
   /**
-   * setBit(int n) the leftmost bit in a negative number
+   * setBit(int n) the leftmost bit in a negative number.
    */
   public void testSetBitLeftmostNegative() {
     byte aBytes[] = {1, -128, 56, 100, -15, 35, 26};
@@ -795,7 +795,7 @@
   }
 
   /**
-   * setBit(int n) inside a negative number
+   * setBit(int n) inside a negative number.
    */
   public void testSetBitNegativeInside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -813,7 +813,7 @@
   }
 
   /**
-   * setBit(int n) inside a negative number
+   * setBit(int n) inside a negative number.
    */
   public void testSetBitNegativeInside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -831,7 +831,7 @@
   }
 
   /**
-   * setBit(int n) inside a negative number with all ones in bit representation
+   * setBit(int n) inside a negative number with all ones in bit representation.
    */
   public void testSetBitNegativeInside3() {
     String as = "-18446744073709551615";
@@ -867,7 +867,7 @@
   }
 
   /**
-   * setBit(int n) outside a negative number
+   * setBit(int n) outside a negative number.
    */
   public void testSetBitNegativeOutside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -885,7 +885,7 @@
   }
 
   /**
-   * setBit(int n) outside a negative number
+   * setBit(int n) outside a negative number.
    */
   public void testSetBitNegativeOutside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -903,7 +903,7 @@
   }
 
   /**
-   * setBit(int n) inside a positive number
+   * setBit(int n) inside a positive number.
    */
   public void testSetBitPositiveInside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -921,7 +921,7 @@
   }
 
   /**
-   * setBit(int n) inside a positive number
+   * setBit(int n) inside a positive number.
    */
   public void testSetBitPositiveInside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -939,7 +939,7 @@
   }
 
   /**
-   * setBit(int n) inside a positive number
+   * setBit(int n) inside a positive number.
    */
   public void testSetBitPositiveInside3() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -957,7 +957,7 @@
   }
 
   /**
-   * setBit(int n) inside a positive number
+   * setBit(int n) inside a positive number.
    */
   public void testSetBitPositiveInside4() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -975,7 +975,7 @@
   }
 
   /**
-   * setBit(int n) outside a positive number
+   * setBit(int n) outside a positive number.
    */
   public void testSetBitPositiveOutside1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -995,7 +995,7 @@
   }
 
   /**
-   * setBit(int n) outside a positive number
+   * setBit(int n) outside a positive number.
    */
   public void testSetBitPositiveOutside2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1015,7 +1015,7 @@
   }
 
   /**
-   * setBit(int n) the leftmost bit in a positive number
+   * setBit(int n) the leftmost bit in a positive number.
    */
   public void testSetBitTopPositive() {
     byte aBytes[] = {1, -128, 56, 100, -15, 35, 26};
@@ -1033,7 +1033,7 @@
   }
 
   /**
-   * setBit(int n) outside zero
+   * setBit(int n) outside zero.
    */
   public void testSetBitZero() {
     byte aBytes[] = {0};
@@ -1051,7 +1051,7 @@
   }
 
   /**
-   * setBit(int n) outside zero
+   * setBit(int n) outside zero.
    */
   public void testSetBitZeroOutside1() {
     byte aBytes[] = {0};
@@ -1069,7 +1069,7 @@
   }
 
   /**
-   * shiftLeft(int n), n = 0
+   * shiftLeft(int n), n = 0.
    */
   public void testShiftLeft1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1087,7 +1087,7 @@
   }
 
   /**
-   * shiftLeft(int n), n < 0
+   * shiftLeft(int n), n < 0.
    */
   public void testShiftLeft2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1105,7 +1105,7 @@
   }
 
   /**
-   * shiftLeft(int n) a positive number, n > 0
+   * shiftLeft(int n) a positive number, n > 0.
    */
   public void testShiftLeft3() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1124,7 +1124,7 @@
   }
 
   /**
-   * shiftLeft(int n) a positive number, n > 0
+   * shiftLeft(int n) a positive number, n > 0.
    */
   public void testShiftLeft4() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1143,7 +1143,7 @@
   }
 
   /**
-   * shiftLeft(int n) a negative number, n > 0
+   * shiftLeft(int n) a negative number, n > 0.
    */
   public void testShiftLeft5() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1163,7 +1163,7 @@
   }
 
   /**
-   * shiftRight(int n), n = 0
+   * shiftRight(int n), n = 0.
    */
   public void testShiftRight1() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1181,7 +1181,7 @@
   }
 
   /**
-   * shiftRight(int n), n < 0
+   * shiftRight(int n), n < 0.
    */
   public void testShiftRight2() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1200,7 +1200,7 @@
   }
 
   /**
-   * shiftRight(int n), 0 < n < 32
+   * shiftRight(int n), 0 < n < 32.
    */
   public void testShiftRight3() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1218,7 +1218,7 @@
   }
 
   /**
-   * shiftRight(int n), n > 32
+   * shiftRight(int n), n > 32.
    */
   public void testShiftRight4() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1236,7 +1236,7 @@
   }
 
   /**
-   * shiftRight(int n), n is greater than bitLength()
+   * shiftRight(int n), n is greater than bitLength().
    */
   public void testShiftRight5() {
     byte aBytes[] = {1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1334,7 +1334,7 @@
   }
 
   /**
-   * testBit(int n) of a negative n
+   * testBit(int n) of a negative n.
    */
   public void testTestBitException() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1351,7 +1351,7 @@
   }
 
   /**
-   * testBit(int n) of a negative number
+   * testBit(int n) of a negative number.
    */
   public void testTestBitNegative1() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1362,7 +1362,7 @@
   }
 
   /**
-   * testBit(int n) of a positive n
+   * testBit(int n) of a positive n.
    */
   public void testTestBitNegative2() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1373,7 +1373,7 @@
   }
 
   /**
-   * testBit(int n) of a positive n, n > bitLength()
+   * testBit(int n) of a positive n, n > bitLength().
    */
   public void testTestBitNegative3() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1384,7 +1384,7 @@
   }
 
   /**
-   * testBit(int n) of a positive number
+   * testBit(int n) of a positive number.
    */
   public void testTestBitPositive1() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1395,7 +1395,7 @@
   }
 
   /**
-   * testBit(int n) of a positive number
+   * testBit(int n) of a positive number.
    */
   public void testTestBitPositive2() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
@@ -1406,7 +1406,7 @@
   }
 
   /**
-   * testBit(int n) of a positive number, n > bitLength()
+   * testBit(int n) of a positive number, n > bitLength().
    */
   public void testTestBitPositive3() {
     byte aBytes[] = {-1, -128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerOrTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerOrTest.java
index e67cb2e..d9af732 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerOrTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerOrTest.java
@@ -42,11 +42,11 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Method: or
+ * Class: java.math.BigInteger Method: or.
  */
 public class BigIntegerOrTest extends EmulTestBase {
   /**
-   * Or for two negative numbers; the first is longer
+   * Or for two negative numbers; the first is longer.
    */
   public void testNegNegFirstLonger() {
     byte aBytes[] = {
@@ -69,7 +69,7 @@
   }
 
   /**
-   * Or for two negative numbers; the first is shorter
+   * Or for two negative numbers; the first is shorter.
    */
   public void testNegNegFirstShorter() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -92,7 +92,7 @@
   }
 
   /**
-   * Or for two negative numbers of the same length
+   * Or for two negative numbers of the same length.
    */
   public void testNegNegSameLength() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -113,7 +113,7 @@
   }
 
   /**
-   * Or for a negative number and zero
+   * Or for a negative number and zero.
    */
   public void testNegPos() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -134,7 +134,7 @@
   }
 
   /**
-   * Or for a negative and a positive numbers; the first is longer
+   * Or for a negative and a positive numbers; the first is longer.
    */
   public void testNegPosFirstLonger() {
     byte aBytes[] = {
@@ -158,7 +158,7 @@
   }
 
   /**
-   * Or for two negative numbers; the first is shorter
+   * Or for two negative numbers; the first is shorter.
    */
   public void testNegPosFirstShorter() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -180,7 +180,7 @@
   }
 
   /**
-   * Or for two numbers of different signs and the same length
+   * Or for two numbers of different signs and the same length.
    */
   public void testNegPosSameLength() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -200,7 +200,7 @@
   }
 
   /**
-   * Or for one and one
+   * Or for one and one.
    */
   public void testOneOne() {
     byte aBytes[] = {1};
@@ -220,7 +220,7 @@
   }
 
   /**
-   * Or for a positive and a negative numbers; the first is longer
+   * Or for a positive and a negative numbers; the first is longer.
    */
   public void testPosNegFirstLonger() {
     byte aBytes[] = {
@@ -242,7 +242,7 @@
   }
 
   /**
-   * Or for a positive and a negative number; the first is shorter
+   * Or for a positive and a negative number; the first is shorter.
    */
   public void testPosNegFirstShorter() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -266,7 +266,7 @@
   }
 
   /**
-   * Or for two numbers of different signs and the same length
+   * Or for two numbers of different signs and the same length.
    */
   public void testPosNegSameLength() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -287,7 +287,7 @@
   }
 
   /**
-   * Or for two positive numbers; the first is longer
+   * Or for two positive numbers; the first is longer.
    */
   public void testPosPosFirstLonger() {
     byte aBytes[] = {
@@ -311,7 +311,7 @@
   }
 
   /**
-   * Or for two positive numbers; the first is shorter
+   * Or for two positive numbers; the first is shorter.
    */
   public void testPosPosFirstShorter() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -335,7 +335,7 @@
   }
 
   /**
-   * Or for two positive numbers of the same length
+   * Or for two positive numbers of the same length.
    */
   public void testPosPosSameLength() {
     byte aBytes[] = {-128, 56, 100, -2, -76, 89, 45, 91, 3, -15, 35, 26, -117};
@@ -356,7 +356,7 @@
   }
 
   /**
-   * Or for a positive number and zero
+   * Or for a positive number and zero.
    */
   public void testPosZero() {
     byte aBytes[] = {-2, -3, -4, -4, 5, 14, 23, 39, 48, 57, 66, 5, 14, 23};
@@ -385,7 +385,7 @@
   }
 
   /**
-   * Or for zero and a negative number
+   * Or for zero and a negative number.
    */
   public void testZeroNeg() {
     byte aBytes[] = {0};
@@ -406,7 +406,7 @@
   }
 
   /**
-   * Or for zero and one
+   * Or for zero and one.
    */
   public void testZeroOne() {
     byte aBytes[] = {0};
@@ -426,7 +426,7 @@
   }
 
   /**
-   * Or for zero and a positive number
+   * Or for zero and a positive number.
    */
   public void testZeroPos() {
     byte aBytes[] = {0};
@@ -446,7 +446,7 @@
   }
 
   /**
-   * Or for zero and zero
+   * Or for zero and zero.
    */
   public void testZeroZero() {
     byte aBytes[] = {0};
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerSubtractTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerSubtractTest.java
index 8e6290a..f13525d 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerSubtractTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerSubtractTest.java
@@ -42,7 +42,7 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Method: subtract
+ * Class: java.math.BigInteger Method: subtract.
  */
 public class BigIntegerSubtractTest extends EmulTestBase {
   /**
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerToStringTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerToStringTest.java
index 958025c..65b9ba5 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerToStringTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerToStringTest.java
@@ -42,11 +42,11 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Method: toString(int radix)
+ * Class: java.math.BigInteger Method: toString(int radix).
  */
 public class BigIntegerToStringTest extends EmulTestBase {
   /**
-   * test negative number of radix 10
+   * test negative number of radix 10.
    */
   public void testRadix10Neg() {
     String value = "-2489756308572364789878394872984";
@@ -57,7 +57,7 @@
   }
 
   /**
-   * test positive number of radix 10
+   * test positive number of radix 10.
    */
   public void testRadix10Pos() {
     String value = "2387627892347567398736473476";
@@ -68,7 +68,7 @@
   }
 
   /**
-   * test negative number of radix 16
+   * test negative number of radix 16.
    */
   public void testRadix16Neg() {
     String value = "-287628a883451b800865c67e8d7ff20";
@@ -79,7 +79,7 @@
   }
 
   /**
-   * test positive number of radix 16
+   * test positive number of radix 16.
    */
   public void testRadix16Pos() {
     String value = "287628a883451b800865c67e8d7ff20";
@@ -90,7 +90,7 @@
   }
 
   /**
-   * test negative number of radix 24
+   * test negative number of radix 24.
    */
   public void testRadix24Neg() {
     String value = "-287628a88gmn3451b8ijk00865c67e8d7ff20";
@@ -101,7 +101,7 @@
   }
 
   /**
-   * test positive number of radix 24
+   * test positive number of radix 24.
    */
   public void testRadix24Pos() {
     String value = "287628a883451bg80ijhk0865c67e8d7ff20";
@@ -112,7 +112,7 @@
   }
 
   /**
-   * test negative number of radix 2
+   * test negative number of radix 2.
    */
   public void testRadix2Neg() {
     String value = "-101001100010010001001010101110000101010110001010010101010101010101010101010101010101010101010010101";
@@ -123,7 +123,7 @@
   }
 
   /**
-   * test positive number of radix 2
+   * test positive number of radix 2.
    */
   public void testRadix2Pos() {
     String value = "101000011111000000110101010101010101010001001010101010101010010101010101010000100010010";
@@ -134,7 +134,7 @@
   }
 
   /**
-   * test negative number of radix 24
+   * test negative number of radix 24.
    */
   public void testRadix36Neg() {
     String value = "-uhguweut98iu4h3478tq3985pq98yeiuth33485yq4aiuhalai485yiaehasdkr8tywi5uhslei8";
@@ -145,7 +145,7 @@
   }
 
   /**
-   * test positive number of radix 24
+   * test positive number of radix 24.
    */
   public void testRadix36Pos() {
     String value = "23895lt45y6vhgliuwhgi45y845htsuerhsi4586ysuerhtsio5y68peruhgsil4568ypeorihtse48y6";
@@ -156,7 +156,7 @@
   }
 
   /**
-   * If 36 < radix < 2 it should be set to 10
+   * If 36 < radix < 2 it should be set to 10.
    */
   public void testRadixOutOfRange() {
     String value = "442429234853876401";
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerXorTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerXorTest.java
index 028fdfa..a8e79d6 100644
--- a/user/test/com/google/gwt/emultest/java/math/BigIntegerXorTest.java
+++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerXorTest.java
@@ -42,11 +42,11 @@
 import java.math.BigInteger;
 
 /**
- * Class: java.math.BigInteger Method: xor
+ * Class: java.math.BigInteger Method: xor.
  */
 public class BigIntegerXorTest extends EmulTestBase {
   /**
-   * Xor for two negative numbers; the first is longer
+   * Xor for two negative numbers; the first is longer.
    */
   public void testNegNegFirstLonger() {
     String numA = "-2837462783428374767845648748973847593874837948575684767";
@@ -59,7 +59,7 @@
   }
 
   /**
-   * Xor for two negative numbers; the first is shorter
+   * Xor for two negative numbers; the first is shorter.
    */
   public void testNegNegFirstShorter() {
     String numA = "293478573489347658763745839457637";
@@ -72,7 +72,7 @@
   }
 
   /**
-   * Xor for two negative numbers of the same length
+   * Xor for two negative numbers of the same length.
    */
   public void testNegNegSameLength() {
     String numA = "-283746278342837476784564875684767";
@@ -85,7 +85,7 @@
   }
 
   /**
-   * Xor for a negative number and zero
+   * Xor for a negative number and zero.
    */
   public void testNegPos() {
     String numA = "-27384627835298756289327365";
@@ -98,7 +98,7 @@
   }
 
   /**
-   * Xor for a negative and a positive numbers; the first is longer
+   * Xor for a negative and a positive numbers; the first is longer.
    */
   public void testNegPosFirstLonger() {
     String numA = "-2837462783428374767845648748973847593874837948575684767";
@@ -111,7 +111,7 @@
   }
 
   /**
-   * Xor for two negative numbers; the first is shorter
+   * Xor for two negative numbers; the first is shorter.
    */
   public void testNegPosFirstShorter() {
     String numA = "-293478573489347658763745839457637";
@@ -124,7 +124,7 @@
   }
 
   /**
-   * Xor for two numbers of different signs and the same length
+   * Xor for two numbers of different signs and the same length.
    */
   public void testNegPosSameLength() {
     String numA = "-283746278342837476784564875684767";
@@ -137,7 +137,7 @@
   }
 
   /**
-   * Xor for one and one
+   * Xor for one and one.
    */
   public void testOneOne() {
     String numA = "1";
@@ -150,7 +150,7 @@
   }
 
   /**
-   * Xor for a positive and a negative numbers; the first is longer
+   * Xor for a positive and a negative numbers; the first is longer.
    */
   public void testPosNegFirstLonger() {
     String numA = "2837462783428374767845648748973847593874837948575684767";
@@ -163,7 +163,7 @@
   }
 
   /**
-   * Xor for a positive and a negative number; the first is shorter
+   * Xor for a positive and a negative number; the first is shorter.
    */
   public void testPosNegFirstShorter() {
     String numA = "293478573489347658763745839457637";
@@ -176,7 +176,7 @@
   }
 
   /**
-   * Xor for two numbers of different signs and the same length
+   * Xor for two numbers of different signs and the same length.
    */
   public void testPosNegSameLength() {
     String numA = "283746278342837476784564875684767";
@@ -189,7 +189,7 @@
   }
 
   /**
-   * Xor for two positive numbers; the first is longer
+   * Xor for two positive numbers; the first is longer.
    */
   public void testPosPosFirstLonger() {
     String numA = "2837462783428374767845648748973847593874837948575684767";
@@ -202,7 +202,7 @@
   }
 
   /**
-   * Xor for two positive numbers; the first is shorter
+   * Xor for two positive numbers; the first is shorter.
    */
   public void testPosPosFirstShorter() {
     String numA = "293478573489347658763745839457637";
@@ -215,7 +215,7 @@
   }
 
   /**
-   * Xor for two positive numbers of the same length
+   * Xor for two positive numbers of the same length.
    */
   public void testPosPosSameLength() {
     String numA = "283746278342837476784564875684767";
@@ -228,7 +228,7 @@
   }
 
   /**
-   * Xor for a positive number and zero
+   * Xor for a positive number and zero.
    */
   public void testPosZero() {
     String numA = "27384627835298756289327365";
@@ -241,7 +241,7 @@
   }
 
   /**
-   * Xor for zero and a negative number
+   * Xor for zero and a negative number.
    */
   public void testZeroNeg() {
     String numA = "0";
@@ -254,7 +254,7 @@
   }
 
   /**
-   * Xor for zero and one
+   * Xor for zero and one.
    */
   public void testZeroOne() {
     String numA = "0";
@@ -267,7 +267,7 @@
   }
 
   /**
-   * Xor for zero and a positive number
+   * Xor for zero and a positive number.
    */
   public void testZeroPos() {
     String numA = "0";
@@ -280,7 +280,7 @@
   }
 
   /**
-   * Xor for zero and zero
+   * Xor for zero and zero.
    */
   public void testZeroZero() {
     String numA = "0";
diff --git a/user/test/com/google/gwt/regexp/shared/RegExpTest.java b/user/test/com/google/gwt/regexp/shared/RegExpTest.java
index f084672..ac3869b 100644
--- a/user/test/com/google/gwt/regexp/shared/RegExpTest.java
+++ b/user/test/com/google/gwt/regexp/shared/RegExpTest.java
@@ -529,7 +529,7 @@
   }
 
   /**
-   * Failed in all modes due to HtmlUnit bug:
+   * Failed in all modes due to HtmlUnit bug.  See:
    * https://sourceforge.net/tracker/?func=detail&aid=2949446&group_id=47038&atid=448266
    */
   @DoNotRunWith({Platform.HtmlUnitBug})
diff --git a/user/test/com/google/gwt/uibinder/client/UiBinderUtilTest.java b/user/test/com/google/gwt/uibinder/client/UiBinderUtilTest.java
index 2224235..4eded61 100644
--- a/user/test/com/google/gwt/uibinder/client/UiBinderUtilTest.java
+++ b/user/test/com/google/gwt/uibinder/client/UiBinderUtilTest.java
@@ -26,7 +26,7 @@
 import com.google.gwt.user.client.ui.RootPanel;
 
 /**
- * Tests {@link UiBinderUtil}
+ * Tests {@link UiBinderUtil}.
  */
 public class UiBinderUtilTest extends GWTTestCase {
 
diff --git a/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java b/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java
index 0f01550..1e59209 100644
--- a/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java
+++ b/user/test/com/google/gwt/uibinder/elementparsers/ElementParserTester.java
@@ -137,7 +137,9 @@
     b.append(xml);
     b.append("</ui:UiBinder>");
 
+    // CHECKSTYLE_OFF
     String tag = "g:" + parsedType.getName();
+    // CHECKSTYLE_ON
     parser.parse(getElem(b.toString(), tag), FIELD_NAME, parsedType, writer);
     return fieldManager.lookup(FIELD_NAME);
   }
diff --git a/user/test/com/google/gwt/user/client/ui/AbsolutePanelTest.java b/user/test/com/google/gwt/user/client/ui/AbsolutePanelTest.java
index cd09ea3..648467b 100644
--- a/user/test/com/google/gwt/user/client/ui/AbsolutePanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/AbsolutePanelTest.java
@@ -39,7 +39,7 @@
   }
 
   /**
-   * Failed in all modes due to HtmlUnit bug:
+   * Failed in all modes due to HtmlUnit bug.  See:
    * https://sourceforge.net/tracker/?func=detail&aid=2892289&group_id=47038&atid=448266
    */
   @DoNotRunWith(Platform.HtmlUnitBug)
diff --git a/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java b/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java
index 9edc46d..562957e 100644
--- a/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java
@@ -16,7 +16,6 @@
 
 package com.google.gwt.user.client.ui;
 
-
 /**
  * Test for {@link DeckPanel}.
  */
diff --git a/user/test/com/google/gwt/user/client/ui/ListBoxProfile.java b/user/test/com/google/gwt/user/client/ui/ListBoxProfile.java
index 119a286..b21041e 100644
--- a/user/test/com/google/gwt/user/client/ui/ListBoxProfile.java
+++ b/user/test/com/google/gwt/user/client/ui/ListBoxProfile.java
@@ -45,7 +45,9 @@
     RootPanel.get().add(b);
     resetTimer();
     for (int i = 0; i < num; i++) {
+      // CHECKSTYLE_OFF
       b.addItem("item" + i, "i:" + i);
+      // CHECKSTYLE_ON
     }
     timing("add(" + num + ")");
   }
diff --git a/user/test/com/google/gwt/user/client/ui/TextAreaTest.java b/user/test/com/google/gwt/user/client/ui/TextAreaTest.java
index 55cbdb7..45ab383 100644
--- a/user/test/com/google/gwt/user/client/ui/TextAreaTest.java
+++ b/user/test/com/google/gwt/user/client/ui/TextAreaTest.java
@@ -16,7 +16,6 @@
 
 package com.google.gwt.user.client.ui;
 
-
 /**
  * Tests a {@link TextArea}.
  */
diff --git a/user/test/com/google/gwt/user/client/ui/TextBoxBaseTestBase.java b/user/test/com/google/gwt/user/client/ui/TextBoxBaseTestBase.java
index 95a9f62..ee46262 100644
--- a/user/test/com/google/gwt/user/client/ui/TextBoxBaseTestBase.java
+++ b/user/test/com/google/gwt/user/client/ui/TextBoxBaseTestBase.java
@@ -99,7 +99,7 @@
   }
   
   /**
-   * Failed in all modes due to HtmlUnit bug:
+   * Failed in all modes due to HtmlUnit bug.
    */
   @DoNotRunWith({Platform.HtmlUnitBug})
   public void testValueChangeEvent() {
diff --git a/user/test/com/google/gwt/xml/client/XMLTest.java b/user/test/com/google/gwt/xml/client/XMLTest.java
index c10e604..df82a26 100644
--- a/user/test/com/google/gwt/xml/client/XMLTest.java
+++ b/user/test/com/google/gwt/xml/client/XMLTest.java
@@ -383,15 +383,19 @@
     for (Iterator<Node> iter = textLikeNodes.iterator(); iter.hasNext();) {
       CharacterData textLike = (CharacterData) iter.next();
       textLike.setData(b.toString());
+      // CHECKSTYLE_OFF
       assertEquals("initialLength type:" + textLike.getNodeType(), 30000 - 32,
           textLike.getLength());
       assertEquals("initialEquals", textLike.getData(), b.toString());
+      // CHECKSTYLE_ON
     }
     for (int i = 32; i < 29900; i += 100) {
       for (Iterator<Node> iter = textLikeNodes.iterator(); iter.hasNext();) {
         CharacterData textLike = (CharacterData) iter.next();
+        // CHECKSTYLE_OFF
         assertEquals("substring type:" + textLike.getNodeType() + " count: "
             + i, b.substring(i, i + 100), textLike.substringData(i, 100));
+        // CHECKSTYLE_ON
       }
     }
     for (Iterator<Node> iter = textLikeNodes.iterator(); iter.hasNext();) {
@@ -399,10 +403,12 @@
       CharacterData textLike = (CharacterData) iter.next();
       textLike.deleteData(100, 100);
       bTemp.delete(100, 200);
+      // CHECKSTYLE_OFF
       assertEquals("deleteLength type:" + textLike.getNodeType(),
           bTemp.length(), textLike.getData().length());
       assertEquals("deleteEquals type:" + textLike.getNodeType(),
           bTemp.toString(), textLike.getData());
+      // CHECKSTYLE_ON
       bTemp.setLength(0);
     }
     for (Iterator<Node> iter = textLikeNodes.iterator(); iter.hasNext();) {
@@ -411,10 +417,12 @@
       textLike.setData(bTemp.toString());
       textLike.replaceData(50, 100, " ");
       bTemp.replace(50, 150, " ");
+      // CHECKSTYLE_OFF
       assertEquals("replaceLength type:" + textLike.getNodeType(),
           bTemp.length(), textLike.getData().length());
       assertEquals("replaceEquals type:" + textLike.getNodeType(),
           bTemp.toString(), textLike.getData());
+      // CHECKSTYLE_ON
       bTemp.setLength(0);
     }
     for (Iterator<Node> iter = textLikeNodes.iterator(); iter.hasNext();) {
