| OLD | NEW |
| (Empty) |
| 1 /******************************************************************** | |
| 2 * COPYRIGHT: | |
| 3 * Copyright (c) 1997-2010, International Business Machines Corporation and | |
| 4 * others. All Rights Reserved. | |
| 5 ********************************************************************/ | |
| 6 | |
| 7 #include "unicode/utypes.h" | |
| 8 #include "unicode/uchar.h" | |
| 9 #include "unicode/normlzr.h" | |
| 10 #include "unicode/uniset.h" | |
| 11 #include "unicode/usetiter.h" | |
| 12 #include "unicode/schriter.h" | |
| 13 #include "tstnorm.h" | |
| 14 | |
| 15 #if !UCONFIG_NO_NORMALIZATION | |
| 16 | |
| 17 static UErrorCode status = U_ZERO_ERROR; | |
| 18 | |
| 19 // test APIs that are not otherwise used - improve test coverage | |
| 20 void | |
| 21 BasicNormalizerTest::TestNormalizerAPI() { | |
| 22 // instantiate a Normalizer from a CharacterIterator | |
| 23 UnicodeString s=UnicodeString("a\\u0308\\uac00\\U0002f800", "").unescape(); | |
| 24 s.append(s); // make s a bit longer and more interesting | |
| 25 StringCharacterIterator iter(s); | |
| 26 Normalizer norm(iter, UNORM_NFC); | |
| 27 if(norm.next()!=0xe4) { | |
| 28 dataerrln("error in Normalizer(CharacterIterator).next()"); | |
| 29 } | |
| 30 | |
| 31 // test copy constructor | |
| 32 Normalizer copy(norm); | |
| 33 if(copy.next()!=0xac00) { | |
| 34 dataerrln("error in Normalizer(Normalizer(CharacterIterator)).next()"); | |
| 35 } | |
| 36 | |
| 37 // test clone(), ==, and hashCode() | |
| 38 Normalizer *clone=copy.clone(); | |
| 39 if(*clone!=copy) { | |
| 40 errln("error in Normalizer(Normalizer(CharacterIterator)).clone()!=copy"
); | |
| 41 } | |
| 42 // clone must have the same hashCode() | |
| 43 if(clone->hashCode()!=copy.hashCode()) { | |
| 44 errln("error in Normalizer(Normalizer(CharacterIterator)).clone()->hashC
ode()!=copy.hashCode()"); | |
| 45 } | |
| 46 if(clone->next()!=0x4e3d) { | |
| 47 dataerrln("error in Normalizer(Normalizer(CharacterIterator)).clone()->n
ext()"); | |
| 48 } | |
| 49 // position changed, must change hashCode() | |
| 50 if(clone->hashCode()==copy.hashCode()) { | |
| 51 errln("error in Normalizer(Normalizer(CharacterIterator)).clone()->next(
).hashCode()==copy.hashCode()"); | |
| 52 } | |
| 53 delete clone; | |
| 54 clone=0; | |
| 55 | |
| 56 // test compose() and decompose() | |
| 57 UnicodeString tel, nfkc, nfkd; | |
| 58 tel=UnicodeString(1, (UChar32)0x2121, 10); | |
| 59 tel.insert(1, (UChar)0x301); | |
| 60 | |
| 61 UErrorCode errorCode=U_ZERO_ERROR; | |
| 62 Normalizer::compose(tel, TRUE, 0, nfkc, errorCode); | |
| 63 Normalizer::decompose(tel, TRUE, 0, nfkd, errorCode); | |
| 64 if(U_FAILURE(errorCode)) { | |
| 65 dataerrln("error in Normalizer::(de)compose(): %s", u_errorName(errorCod
e)); | |
| 66 } else if( | |
| 67 nfkc!=UnicodeString("TE\\u0139TELTELTELTELTELTELTELTELTEL", "").unescape
() || | |
| 68 nfkd!=UnicodeString("TEL\\u0301TELTELTELTELTELTELTELTELTEL", "").unescap
e() | |
| 69 ) { | |
| 70 errln("error in Normalizer::(de)compose(): wrong result(s)"); | |
| 71 } | |
| 72 | |
| 73 // test setIndex() | |
| 74 norm.setIndexOnly(3); | |
| 75 if(norm.current()!=0x4e3d) { | |
| 76 dataerrln("error in Normalizer(CharacterIterator).setIndex(3)"); | |
| 77 } | |
| 78 | |
| 79 // test setText(CharacterIterator) and getText() | |
| 80 UnicodeString out, out2; | |
| 81 errorCode=U_ZERO_ERROR; | |
| 82 copy.setText(iter, errorCode); | |
| 83 if(U_FAILURE(errorCode)) { | |
| 84 errln("error Normalizer::setText() failed: %s", u_errorName(errorCode)); | |
| 85 } else { | |
| 86 copy.getText(out); | |
| 87 iter.getText(out2); | |
| 88 if( out!=out2 || | |
| 89 copy.startIndex()!=iter.startIndex() || | |
| 90 copy.endIndex()!=iter.endIndex() | |
| 91 ) { | |
| 92 errln("error in Normalizer::setText() or Normalizer::getText()"); | |
| 93 } | |
| 94 } | |
| 95 | |
| 96 // test setText(UChar *), getUMode() and setMode() | |
| 97 errorCode=U_ZERO_ERROR; | |
| 98 copy.setText(s.getBuffer()+1, s.length()-1, errorCode); | |
| 99 copy.setMode(UNORM_NFD); | |
| 100 if(copy.getUMode()!=UNORM_NFD) { | |
| 101 errln("error in Normalizer::setMode() or Normalizer::getUMode()"); | |
| 102 } | |
| 103 if(copy.next()!=0x308 || copy.next()!=0x1100) { | |
| 104 dataerrln("error in Normalizer::setText(UChar *) or Normalizer::setMode(
)"); | |
| 105 } | |
| 106 | |
| 107 // test setText(UChar *, length=-1) | |
| 108 errorCode=U_ZERO_ERROR; | |
| 109 | |
| 110 // NUL-terminate s | |
| 111 s.append((UChar)0); // append NUL | |
| 112 s.truncate(s.length()-1); // undo length change | |
| 113 | |
| 114 copy.setText(s.getBuffer()+1, -1, errorCode); | |
| 115 if(copy.endIndex()!=s.length()-1) { | |
| 116 errln("error in Normalizer::setText(UChar *, -1)"); | |
| 117 } | |
| 118 | |
| 119 // test setOption() and getOption() | |
| 120 copy.setOption(0xaa0000, TRUE); | |
| 121 copy.setOption(0x20000, FALSE); | |
| 122 if(!copy.getOption(0x880000) || copy.getOption(0x20000)) { | |
| 123 errln("error in Normalizer::setOption() or Normalizer::getOption()"); | |
| 124 } | |
| 125 | |
| 126 // test last()/previous() with an internal buffer overflow | |
| 127 errorCode=U_ZERO_ERROR; | |
| 128 copy.setText(UnicodeString(1000, (UChar32)0x308, 1000), errorCode); | |
| 129 if(copy.last()!=0x308) { | |
| 130 errln("error in Normalizer(1000*U+0308).last()"); | |
| 131 } | |
| 132 | |
| 133 // test UNORM_NONE | |
| 134 norm.setMode(UNORM_NONE); | |
| 135 if(norm.first()!=0x61 || norm.next()!=0x308 || norm.last()!=0x2f800) { | |
| 136 errln("error in Normalizer(UNORM_NONE).first()/next()/last()"); | |
| 137 } | |
| 138 Normalizer::normalize(s, UNORM_NONE, 0, out, status); | |
| 139 if(out!=s) { | |
| 140 errln("error in Normalizer::normalize(UNORM_NONE)"); | |
| 141 } | |
| 142 | |
| 143 // test that the same string can be used as source and destination | |
| 144 s.setTo((UChar)0xe4); | |
| 145 Normalizer::normalize(s, UNORM_NFD, 0, s, status); | |
| 146 if(s.charAt(1)!=0x308) { | |
| 147 dataerrln("error in Normalizer::normalize(UNORM_NFD, self)"); | |
| 148 } | |
| 149 Normalizer::normalize(s, UNORM_NFC, 0, s, status); | |
| 150 if(s.charAt(0)!=0xe4) { | |
| 151 dataerrln("error in Normalizer::normalize(UNORM_NFC, self)"); | |
| 152 } | |
| 153 Normalizer::decompose(s, FALSE, 0, s, status); | |
| 154 if(s.charAt(1)!=0x308) { | |
| 155 dataerrln("error in Normalizer::decompose(self)"); | |
| 156 } | |
| 157 Normalizer::compose(s, FALSE, 0, s, status); | |
| 158 if(s.charAt(0)!=0xe4) { | |
| 159 dataerrln("error in Normalizer::compose(self)"); | |
| 160 } | |
| 161 Normalizer::concatenate(s, s, s, UNORM_NFC, 0, status); | |
| 162 if(s.charAt(1)!=0xe4) { | |
| 163 dataerrln("error in Normalizer::decompose(self)"); | |
| 164 } | |
| 165 } | |
| 166 | |
| 167 #endif | |
| OLD | NEW |