{ 0xFF00, UCharacterDirection.RIGHT_TO_LEFT_ARABIC },
{ 0x10800, UCharacterDirection.LEFT_TO_RIGHT },
{ 0x11000, UCharacterDirection.RIGHT_TO_LEFT },
{ 0x110000, UCharacterDirection.LEFT_TO_RIGHT }};
RangeValueIterator iterator = UCharacter.getTypeIterator();
RangeValueIterator.Element result = new RangeValueIterator.Element();
while (iterator.next(result)) {
if (result.start != limit) {
errln("UCharacterIteration failed: Ranges not continuous " +
"0x" + Integer.toHexString(result.start));
}
limit = result.limit;
if (result.value == prevtype) {
errln("Type of the next set of enumeration should be different");
}
prevtype = result.value;
for (int i = result.start; i < limit; i ++) {
int temptype = UCharacter.getType(i);
if (temptype != result.value) {
errln("UCharacterIteration failed: Codepoint \\u" +
Integer.toHexString(i) + " should be of type " +
temptype + " not " + result.value);
}
}
for (int i = 0; i < test.length; ++ i) {
if (result.start <= test[i][0] && test[i][0] < result.limit) {
if (result.value != test[i][1]) {
errln("error: getTypes() has range ["
+ Integer.toHexString(result.start) + ", "
+ Integer.toHexString(result.limit)
+ "] with type " + result.value
+ " instead of ["
+ Integer.toHexString(test[i][0]) + ", "
+ Integer.toHexString(test[i][1]));
}
}
}
// LineBreak.txt specifies:
// # - Assigned characters that are not listed explicitly are given the value
// # "AL".
// # - Unassigned characters are given the value "XX".
//
// PUA characters are listed explicitly with "XX".
// Verify that no assigned character has "XX".
if (result.value != UCharacterCategory.UNASSIGNED
&& result.value != UCharacterCategory.PRIVATE_USE) {
int c = result.start;
while (c < result.limit) {
if (0 == UCharacter.getIntPropertyValue(c,
UProperty.LINE_BREAK)) {
logln("error UProperty.LINE_BREAK(assigned \\u"
+ Utility.hex(c, 4) + ")=XX");
}
++ c;
}
}
/*
* Verify default Bidi classes.
* For recent Unicode versions, see UCD.html.
*
* For older Unicode versions:
* See table 3-7 "Bidirectional Character Types" in UAX #9.
* http://www.unicode.org/reports/tr9/
*
* See also DerivedBidiClass.txt for Cn code points!
*
* Unicode 4.0.1/Public Review Issue #28 (http://www.unicode.org/review/resolved-pri.html)
* changed some default values.
* In particular, non-characters and unassigned Default Ignorable Code Points
* change from L to BN.
*
* UCD.html version 4.0.1 does not yet reflect these changes.
*/
if (result.value == UCharacterCategory.UNASSIGNED
|| result.value == UCharacterCategory.PRIVATE_USE) {
int c = result.start;
for (int i = 0; i < defaultBidi.length && c < result.limit;
++ i) {
if (c < defaultBidi[i][0]) {
while (c < result.limit && c < defaultBidi[i][0]) {
// TODO change to public UCharacter.isNonCharacter(c) once it's available
if(com.ibm.icu.impl.UCharacterUtility.isNonCharacter(c) || UCharacter.hasBinaryProperty(c, UProperty.DEFAULT_IGNORABLE_CODE_POINT)) {
shouldBeDir=UCharacter.BOUNDARY_NEUTRAL;
} else {
shouldBeDir=defaultBidi[i][1];
}
if (UCharacter.getDirection(c) != shouldBeDir
|| UCharacter.getIntPropertyValue(c,
UProperty.BIDI_CLASS)
!= shouldBeDir) {
errln("error: getDirection(unassigned/PUA "
+ Integer.toHexString(c)
+ ") should be "
+ shouldBeDir);
}
++ c;
}
}
}
}
}
iterator.reset();
if (iterator.next(result) == false || result.start != 0) {
System.out.println("result " + result.start);
errln("UCharacterIteration reset() failed");
}
}