Fix test behaviour of OutputStreamWriterTest and WriterTest.
Change-Id: Ief4c101813f3d1ecb2058c877d2fb757400abdf1
diff --git a/user/super/com/google/gwt/emul/java/io/Writer.java b/user/super/com/google/gwt/emul/java/io/Writer.java
index 4bba793..a2e34e2 100644
--- a/user/super/com/google/gwt/emul/java/io/Writer.java
+++ b/user/super/com/google/gwt/emul/java/io/Writer.java
@@ -15,8 +15,8 @@
*/
package java.io;
+import static javaemul.internal.InternalPreconditions.checkCriticalStringBounds;
import static javaemul.internal.InternalPreconditions.checkNotNull;
-import static javaemul.internal.InternalPreconditions.checkPositionIndexes;
import java.util.Objects;
@@ -57,7 +57,6 @@
}
public void write(String str, int offset, int count) throws IOException {
- IOUtils.checkOffsetAndCount(str, offset, count);
char[] buf = new char[count];
str.getChars(offset, offset + count, buf, 0);
write(buf, 0, buf.length);
@@ -77,7 +76,15 @@
if (csq == null) {
csq = "null";
}
- checkPositionIndexes(start, end, csq.length());
+ /*
+ * Ensure we throw StringIndexOutOfBoundsException as String#subsequence method depends on
+ * JavaScript's string#substr() which has different behaviour than original Java method.
+ *
+ * JavaScript behaviour of substr(start, length):
+ * "gwt".substr(0, -1) returns ""
+ * "gwt".substr(-1, 1) returns "t" -> Calculates substring from end.
+ */
+ checkCriticalStringBounds(start, end, csq.length());
write(csq.subSequence(start, end).toString());
return this;
}
diff --git a/user/test/com/google/gwt/emultest/java/io/OutputStreamWriterTest.java b/user/test/com/google/gwt/emultest/java/io/OutputStreamWriterTest.java
index 49ae2b2..a9b9e25 100644
--- a/user/test/com/google/gwt/emultest/java/io/OutputStreamWriterTest.java
+++ b/user/test/com/google/gwt/emultest/java/io/OutputStreamWriterTest.java
@@ -78,11 +78,13 @@
public void testWriteUnicodeChar() throws IOException {
writer.write(UNICODE_STRING, 0, UNICODE_STRING.length());
+ writer.close();
assertTrue(Arrays.equals(UNICODE_STRING.getBytes(encodingUTF8Charset), baos.toByteArray()));
}
public void testWriteASCIIChar() throws IOException {
writer.write(ASCII_CHAR_ARRAY, 0, ASCII_CHAR_ARRAY.length);
+ writer.close();
assertTrue(
Arrays.equals(
new String(ASCII_CHAR_ARRAY).getBytes(encodingUTF8Charset), baos.toByteArray()));
diff --git a/user/test/com/google/gwt/emultest/java/io/WriterTest.java b/user/test/com/google/gwt/emultest/java/io/WriterTest.java
index 7df1001..adbae10 100644
--- a/user/test/com/google/gwt/emultest/java/io/WriterTest.java
+++ b/user/test/com/google/gwt/emultest/java/io/WriterTest.java
@@ -122,8 +122,8 @@
final CharSequence csq = "hola";
try {
writer.append(csq, -1, 2);
- fail("should have thrown IndexOutOfBoundsException");
- } catch (IndexOutOfBoundsException expected) {
+ fail("should have thrown StringIndexOutOfBoundsException");
+ } catch (StringIndexOutOfBoundsException expected) {
}
}
@@ -131,8 +131,8 @@
final CharSequence csq = "hola";
try {
writer.append(csq, 0, -1);
- fail("should have thrown IndexOutOfBoundsException");
- } catch (IllegalArgumentException expected) {
+ fail("should have thrown StringIndexOutOfBoundsException");
+ } catch (StringIndexOutOfBoundsException expected) {
}
}
@@ -140,8 +140,8 @@
final CharSequence csq = "hola";
try {
writer.append(csq, 2, 1);
- fail("should have thrown IndexOutOfBoundsException");
- } catch (IllegalArgumentException expected) {
+ fail("should have thrown StringIndexOutOfBoundsException");
+ } catch (StringIndexOutOfBoundsException expected) {
}
}
@@ -213,8 +213,8 @@
final String str = "hola";
try {
writer.append(str, -1, 2);
- fail("should have thrown IndexOutOfBoundsException");
- } catch (IndexOutOfBoundsException expected) {
+ fail("should have thrown StringIndexOutOfBoundsException");
+ } catch (StringIndexOutOfBoundsException expected) {
}
}
@@ -222,8 +222,8 @@
final String str = "hola";
try {
writer.append(str, 0, -1);
- fail("should have thrown IndexOutOfBoundsException");
- } catch (IllegalArgumentException expected) {
+ fail("should have thrown StringIndexOutOfBoundsException");
+ } catch (StringIndexOutOfBoundsException expected) {
}
}
@@ -231,8 +231,8 @@
final String str = "hola";
try {
writer.append(str, 2, 1);
- fail("should have thrown IndexOutOfBoundsException");
- } catch (IllegalArgumentException expected) {
+ fail("should have thrown StringIndexOutOfBoundsException");
+ } catch (StringIndexOutOfBoundsException expected) {
}
}