From 0a6a598b7bcb38a4ca86d6585ae2e3b4933f3a08 Mon Sep 17 00:00:00 2001 From: Andy McFadden Date: Tue, 24 Jan 2012 11:07:25 -0800 Subject: [PATCH] Tweak Dalvik tests 030 - adjust sleep duration so it's not a multiple of the 10-second timeout (and hence less likely to hit edge) 070 - added tests for all "view buffers", both big and little endian, plus a quick check for array() on direct buffers 092 - fixed date format test so it doesn't fail late at night, and added a getISO3Language test Change-Id: Ibc6f1111861a2ec8c69ded28d5e3de08f4ed2bc2 --- tests/030-bad-finalizer/src/Main.java | 2 +- tests/070-nio-buffer/expected.txt | 3 ++ tests/070-nio-buffer/src/Main.java | 84 ++++++++++++++++++++++++++++++++++- tests/092-locale/expected.txt | 8 +++- tests/092-locale/src/Main.java | 31 +++++++++++-- 5 files changed, 119 insertions(+), 9 deletions(-) diff --git a/tests/030-bad-finalizer/src/Main.java b/tests/030-bad-finalizer/src/Main.java index c063476d4..db80a8711 100644 --- a/tests/030-bad-finalizer/src/Main.java +++ b/tests/030-bad-finalizer/src/Main.java @@ -14,7 +14,7 @@ public class Main { System.gc(); for (int i = 0; i < 8; i++) { - BadFinalizer.snooze(5000); + BadFinalizer.snooze(4000); System.out.println("Requesting another GC."); System.gc(); } diff --git a/tests/070-nio-buffer/expected.txt b/tests/070-nio-buffer/expected.txt index e2710014c..ddb45af6b 100644 --- a/tests/070-nio-buffer/expected.txt +++ b/tests/070-nio-buffer/expected.txt @@ -1,3 +1,6 @@ +Direct byte buffer has array: true Got expected buffer overflow exception Got expected out-of-bounds exception Got expected buffer overflow exception +00fbfb2ec03000001234567840490fd01122334455667788000000000000000100000000 +ccfb2efb30c0cccc78563412d00f494088776655443322110100000000000000cccccccc diff --git a/tests/070-nio-buffer/src/Main.java b/tests/070-nio-buffer/src/Main.java index bfcab3afb..a7433b851 100644 --- a/tests/070-nio-buffer/src/Main.java +++ b/tests/070-nio-buffer/src/Main.java @@ -17,14 +17,21 @@ import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; import java.nio.FloatBuffer; import java.nio.IntBuffer; +import java.nio.LongBuffer; import java.nio.ShortBuffer; public class Main { public static void main(String[] args) { - intFloatTest(); - basicShortTest(); + ByteBuffer buf = ByteBuffer.allocateDirect(16); + System.out.println("Direct byte buffer has array: " + buf.hasArray()); + + intFloatTest(); + basicShortTest(); + primTest(); } /* @@ -94,4 +101,77 @@ public class Main { int1.put (data); int1.position (0); } + + /* + * Exercise all "view buffer" classes, in both byte orders. + */ + public static void primTest() { + ByteBuffer directBuf = ByteBuffer.allocateDirect(36); + directBuf.order(ByteOrder.BIG_ENDIAN); + storeValues(directBuf); + + for (int i = 0; i < 36; i++) { + directBuf.put(i, (byte) 0xcc); + } + + directBuf.order(ByteOrder.LITTLE_ENDIAN); + storeValues(directBuf); + } + + static void storeValues(ByteBuffer directBuf) { + directBuf.position(0); + ShortBuffer shortBuf = directBuf.asShortBuffer(); + CharBuffer charBuf = directBuf.asCharBuffer(); + IntBuffer intBuf = directBuf.asIntBuffer(); + FloatBuffer floatBuf = directBuf.asFloatBuffer(); + LongBuffer longBuf = directBuf.asLongBuffer(); + DoubleBuffer doubleBuf = directBuf.asDoubleBuffer(); + + final byte byteValue = -5; + final short shortValue = -1234; + final char charValue = 49200; + final int intValue = 0x12345678; + final float floatValue = 3.14159f; + final long longValue = 0x1122334455667788L; + final double doubleValue = Double.MIN_VALUE; + + if (directBuf.put(1, byteValue).get(1) != byteValue) { + throw new RuntimeException("byte get/store failed"); + } + if (shortBuf.put(1, shortValue).get(1) != shortValue) { + throw new RuntimeException("short get/store failed"); + } + if (charBuf.put(2, charValue).get(2) != charValue) { + throw new RuntimeException("char get/store failed"); + } + if (intBuf.put(2, intValue).get(2) != intValue) { + throw new RuntimeException("int get/store failed"); + } + if (floatBuf.put(3, floatValue).get(3) != floatValue) { + throw new RuntimeException("float get/store failed"); + } + if (longBuf.put(2, longValue).get(2) != longValue) { + throw new RuntimeException("long get/store failed"); + } + if (doubleBuf.put(3, doubleValue).get(3) != doubleValue) { + throw new RuntimeException("double get/store failed"); + } + + directBuf.position(0); + char[] outBuf = new char[directBuf.limit() * 2]; + for (int i = 0; i < directBuf.limit(); i++) { + byte b = directBuf.get(); + outBuf[i*2] = hexChar((byte) ((b >> 4) & 0x0f)); + outBuf[i*2+1] = hexChar((byte) (b & 0x0f)); + } + System.out.println(new String(outBuf)); + } + + static char hexChar(byte b) { + if (b < 10) { + return (char) ('0' + b); + } else { + return (char) ('a' + b - 10); + } + } } diff --git a/tests/092-locale/expected.txt b/tests/092-locale/expected.txt index 3f5514c98..0a955e729 100644 --- a/tests/092-locale/expected.txt +++ b/tests/092-locale/expected.txt @@ -1,8 +1,12 @@ -USA: Sunday, January 1, 2012 +USA(GMT): Sunday, January 1, 2012 USA: first=1, name=Sunday -France: Monday, January 2, 2012 +France(GMT): Monday, January 2, 2012 France: first=2, name=lundi USA dfs: [AM, PM] en_US: USD $2 jp_JP: JPY ¥0 Normalizer passed +loc: en_US + iso3=eng +loc: eng_USA + iso3=eng diff --git a/tests/092-locale/src/Main.java b/tests/092-locale/src/Main.java index 1303d3ceb..8916a29c4 100644 --- a/tests/092-locale/src/Main.java +++ b/tests/092-locale/src/Main.java @@ -22,6 +22,7 @@ import java.util.Calendar; import java.util.Currency; import java.util.Date; import java.util.Locale; +import java.util.MissingResourceException; import java.util.TimeZone; /** @@ -55,7 +56,7 @@ public class Main { } try { - testTimeZone(); + testIso3(); } catch (Exception ex) { ex.printStackTrace(); } @@ -66,11 +67,14 @@ public class Main { Locale usa = new Locale("en", "US"); Calendar usaCal = Calendar.getInstance(tz, usa); + usaCal.clear(); // don't want current date/time usaCal.set(2012, Calendar.JANUARY, 1); Date when = usaCal.getTime(); DateFormat fmt = DateFormat.getDateInstance(DateFormat.FULL, usa); - System.out.println("USA: " + fmt.format(when)); + fmt.setTimeZone(tz); // defaults to local TZ; force GMT + System.out.println("USA(" + fmt.getTimeZone().getID() + "): " + + fmt.format(when)); System.out.println("USA: first=" + usaCal.getFirstDayOfWeek() + ", name=" @@ -79,11 +83,14 @@ public class Main { Locale france = new Locale("fr", "FR"); Calendar franceCal = Calendar.getInstance(tz, france); + franceCal.clear(); franceCal.set(2012, Calendar.JANUARY, 2); when = franceCal.getTime(); fmt = DateFormat.getDateInstance(DateFormat.FULL, usa); - System.out.println("France: " + fmt.format(when)); + fmt.setTimeZone(tz); // defaults to local TZ; force GMT + System.out.println("France(" + fmt.getTimeZone().getID() + "): " + + fmt.format(when)); System.out.println("France: first=" + franceCal.getFirstDayOfWeek() + ", name=" @@ -131,6 +138,22 @@ public class Main { System.out.println("Normalizer passed"); } - static void testTimeZone() { + /* + * Test that we can set and get an ISO3 language code. Support for this + * is expected by the Android framework. + */ + static void testIso3() { + Locale loc; + loc = new Locale("en", "US"); + System.out.println("loc: " + loc); + System.out.println(" iso3=" + loc.getISO3Language()); + + loc = new Locale("eng", "USA"); + System.out.println("loc: " + loc); + try { + System.out.println(" iso3=" + loc.getISO3Language()); + } catch (MissingResourceException mre) { + System.err.println("couldn't get iso3 language"); + } } } -- 2.11.0