twide6.pp 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. {$codepage utf-8}
  2. uses
  3. {$ifdef unix}
  4. cwstring,
  5. {$endif}
  6. sysutils;
  7. procedure doerror(i : integer);
  8. begin
  9. writeln('Error: ',i);
  10. halt(i);
  11. end;
  12. { normal upper case testing }
  13. procedure testupper;
  14. var
  15. s: ansistring;
  16. w1,w2,w3,w4: widestring;
  17. i: longint;
  18. begin
  19. w1:='aé'#0'èàł'#$d87e#$dc04;
  20. w2:='AÉ'#0'ÈÀŁ'#$d87e#$dc04;
  21. {$ifdef print}
  22. // the utf-8 output can confuse the testsuite parser
  23. writeln('original: ',w1);
  24. writeln('original upper: ',w2);
  25. {$endif print}
  26. s:=w1;
  27. {$ifdef print}
  28. writeln('ansi: ',s);
  29. {$endif print}
  30. w3:=s;
  31. w4:=AnsiUpperCase(s);
  32. { filter out unsupported characters }
  33. for i:=1 to length(w3) do
  34. if w3[i]='?' then
  35. begin
  36. w2[i]:='?';
  37. w1[i]:='?';
  38. end;
  39. w1:=wideuppercase(w1);
  40. {$ifdef print}
  41. writeln('wideupper: ',w1);
  42. writeln('original upper: ',w2);
  43. writeln('ansiupper: ',w4);
  44. {$endif print}
  45. if (w1 <> w2) then
  46. doerror(1);
  47. if (w4 <> w2) then
  48. doerror(2);
  49. w1:='aéèàł'#$d87e#$dc04;
  50. w2:='AÉÈÀŁ'#$d87e#$dc04;
  51. s:=w1;
  52. w3:=s;
  53. w4:=AnsiStrUpper(pchar(s));
  54. { filter out unsupported characters }
  55. for i:=1 to length(w3) do
  56. if w3[i]='?' then
  57. begin
  58. w2[i]:='?';
  59. w1[i]:='?';
  60. end;
  61. w1:=wideuppercase(w1);
  62. {$ifdef print}
  63. writeln('wideupper: ',w1);
  64. writeln('ansistrupper: ',w4);
  65. {$endif print}
  66. if (w1 <> w2) then
  67. doerror(21);
  68. if (w4 <> w2) then
  69. doerror(22);
  70. end;
  71. { normal lower case testing }
  72. procedure testlower;
  73. var
  74. s: ansistring;
  75. w1,w2,w3,w4: widestring;
  76. i: longint;
  77. begin
  78. w1:='AÉ'#0'ÈÀŁ'#$d87e#$dc04;
  79. w2:='aé'#0'èàł'#$d87e#$dc04;
  80. {$ifdef print}
  81. // the utf-8 output can confuse the testsuite parser
  82. writeln('original: ',w1);
  83. writeln('original lower: ',w2);
  84. {$endif print}
  85. s:=w1;
  86. w3:=s;
  87. w4:=AnsiLowerCase(s);
  88. { filter out unsupported characters }
  89. for i:=1 to length(w3) do
  90. if w3[i]='?' then
  91. begin
  92. w2[i]:='?';
  93. w1[i]:='?';
  94. end;
  95. w1:=widelowercase(w1);
  96. {$ifdef print}
  97. writeln('widelower: ',w1);
  98. writeln('ansilower: ',w4);
  99. {$endif print}
  100. if (w1 <> w2) then
  101. doerror(3);
  102. if (w4 <> w2) then
  103. doerror(4);
  104. w1:='AÉÈÀŁ'#$d87e#$dc04;
  105. w2:='aéèàł'#$d87e#$dc04;
  106. s:=w1;
  107. w3:=s;
  108. w4:=AnsiStrLower(pchar(s));
  109. { filter out unsupported characters }
  110. for i:=1 to length(w3) do
  111. if w3[i]='?' then
  112. begin
  113. w2[i]:='?';
  114. w1[i]:='?';
  115. end;
  116. w1:=widelowercase(w1);
  117. {$ifdef print}
  118. writeln('widelower: ',w1);
  119. writeln('ansistrlower: ',w4);
  120. {$endif print}
  121. if (w1 <> w2) then
  122. doerror(3);
  123. if (w4 <> w2) then
  124. doerror(4);
  125. end;
  126. { upper case testing with a missing utf-16 pair at the end }
  127. procedure testupperinvalid;
  128. var
  129. s: ansistring;
  130. w1,w2,w3,w4: widestring;
  131. i: longint;
  132. begin
  133. { missing utf-16 pair at end }
  134. w1:='aé'#0'èàł'#$d87e;
  135. w2:='AÉ'#0'ÈÀŁ'#$d87e;
  136. {$ifdef print}
  137. // the utf-8 output can confuse the testsuite parser
  138. writeln('original: ',w1);
  139. writeln('original upper: ',w2);
  140. {$endif print}
  141. s:=w1;
  142. w3:=s;
  143. w4:=AnsiUpperCase(s);
  144. { filter out unsupported characters }
  145. for i:=1 to length(w3) do
  146. if w3[i]='?' then
  147. begin
  148. w2[i]:='?';
  149. w1[i]:='?';
  150. end;
  151. w1:=wideuppercase(w1);
  152. {$ifdef print}
  153. writeln('wideupper: ',w1);
  154. writeln('ansiupper: ',w4);
  155. {$endif print}
  156. if (w1 <> w2) then
  157. doerror(5);
  158. if (w4 <> w2) then
  159. doerror(6);
  160. end;
  161. { lower case testing with a missing utf-16 pair at the end }
  162. procedure testlowerinvalid;
  163. var
  164. s: ansistring;
  165. w1,w2,w3,w4: widestring;
  166. i: longint;
  167. begin
  168. { missing utf-16 pair at end}
  169. w1:='AÉ'#0'ÈÀŁ'#$d87e;
  170. w2:='aé'#0'èàł'#$d87e;
  171. {$ifdef print}
  172. // the utf-8 output can confuse the testsuite parser
  173. writeln('original: ',w1);
  174. writeln('original lower: ',w2);
  175. {$endif print}
  176. s:=w1;
  177. w3:=s;
  178. w4:=AnsiLowerCase(s);
  179. { filter out unsupported characters }
  180. for i:=1 to length(w3) do
  181. if w3[i]='?' then
  182. begin
  183. w2[i]:='?';
  184. w1[i]:='?';
  185. end;
  186. w1:=widelowercase(w1);
  187. {$ifdef print}
  188. writeln('widelower: ',w1);
  189. writeln('ansilower: ',w4);
  190. {$endif print}
  191. if (w1 <> w2) then
  192. doerror(7);
  193. if (w4 <> w2) then
  194. doerror(8);
  195. end;
  196. { upper case testing with a missing utf-16 pair at the end, followed by a normal char }
  197. procedure testupperinvalid1;
  198. var
  199. s: ansistring;
  200. w1,w2,w3,w4: widestring;
  201. i: longint;
  202. begin
  203. { missing utf-16 pair at end with char after it}
  204. w1:='aé'#0'èàł'#$d87e'j';
  205. w2:='AÉ'#0'ÈÀŁ'#$d87e'J';
  206. {$ifdef print}
  207. // the utf-8 output can confuse the testsuite parser
  208. writeln('original: ',w1);
  209. writeln('original upper: ',w2);
  210. {$endif print}
  211. s:=w1;
  212. w3:=s;
  213. w4:=AnsiUpperCase(s);
  214. { filter out unsupported characters }
  215. for i:=1 to length(w3) do
  216. if w3[i]='?' then
  217. begin
  218. w2[i]:='?';
  219. w1[i]:='?';
  220. end;
  221. w1:=wideuppercase(w1);
  222. {$ifdef print}
  223. writeln('wideupper: ',w1);
  224. writeln('ansiupper: ',w4);
  225. {$endif print}
  226. if (w1 <> w2) then
  227. doerror(9);
  228. if (w4 <> w2) then
  229. doerror(10);
  230. end;
  231. { lower case testing with a missing utf-16 pair at the end, followed by a normal char }
  232. procedure testlowerinvalid1;
  233. var
  234. s: ansistring;
  235. w1,w2,w3,w4: widestring;
  236. i: longint;
  237. begin
  238. { missing utf-16 pair at end with char after it}
  239. w1:='AÉ'#0'ÈÀŁ'#$d87e'J';
  240. w2:='aé'#0'èàł'#$d87e'j';
  241. {$ifdef print}
  242. // the utf-8 output can confuse the testsuite parser
  243. writeln('original: ',w1);
  244. writeln('original lower: ',w2);
  245. {$endif print}
  246. s:=w1;
  247. w3:=s;
  248. w4:=AnsiLowerCase(s);
  249. { filter out unsupported characters }
  250. for i:=1 to length(w3) do
  251. if w3[i]='?' then
  252. begin
  253. w2[i]:='?';
  254. w1[i]:='?';
  255. end;
  256. w1:=widelowercase(w1);
  257. {$ifdef print}
  258. writeln('widelower: ',w1);
  259. writeln('ansilower: ',w4);
  260. {$endif print}
  261. if (w1 <> w2) then
  262. doerror(11);
  263. if (w4 <> w2) then
  264. doerror(12);
  265. end;
  266. { upper case testing with corrupting the utf-8 string after conversion }
  267. procedure testupperinvalid2;
  268. var
  269. s: ansistring;
  270. w1,w2,w3,w4: widestring;
  271. i: longint;
  272. begin
  273. w1:='aé'#0'èàł'#$d87e#$dc04'ö';
  274. w2:='AÉ'#0'ÈÀŁ'#$d87e#$dc04'Ö';
  275. {$ifdef print}
  276. // the utf-8 output can confuse the testsuite parser
  277. writeln('original: ',w1);
  278. writeln('original upper: ',w2);
  279. {$endif print}
  280. s:=w1;
  281. { truncate the last utf-8 character }
  282. setlength(s,length(s)-1);
  283. w3:=s;
  284. { adjust checking values for new length due to corruption }
  285. if length(w3)<>length(w2) then
  286. begin
  287. setlength(w2,length(w3));
  288. setlength(w1,length(w3));
  289. end;
  290. w4:=AnsiUpperCase(s);
  291. { filter out unsupported characters }
  292. for i:=1 to length(w3) do
  293. if w3[i]='?' then
  294. begin
  295. w2[i]:='?';
  296. w1[i]:='?';
  297. end;
  298. w1:=wideuppercase(w1);
  299. {$ifdef print}
  300. writeln('wideupper: ',w1);
  301. writeln('ansiupper: ',w4);
  302. {$endif print}
  303. if (w1 <> w2) then
  304. doerror(13);
  305. if (w4 <> w2) then
  306. doerror(14);
  307. end;
  308. { lower case testing with corrupting the utf-8 string after conversion }
  309. procedure testlowerinvalid2;
  310. var
  311. s: ansistring;
  312. w1,w2,w3,w4: widestring;
  313. i: longint;
  314. begin
  315. w1:='AÉ'#0'ÈÀŁ'#$d87e#$dc04'Ö';
  316. w2:='aé'#0'èàł'#$d87e#$dc04'ö';
  317. {$ifdef print}
  318. // the utf-8 output can confuse the testsuite parser
  319. writeln('original: ',w1);
  320. writeln('original lower: ',w2);
  321. {$endif print}
  322. s:=w1;
  323. { truncate the last utf-8 character }
  324. setlength(s,length(s)-1);
  325. w3:=s;
  326. { adjust checking values for new length due to corruption }
  327. if length(w3)<>length(w2) then
  328. begin
  329. setlength(w2,length(w3));
  330. setlength(w1,length(w3));
  331. end;
  332. w4:=AnsiLowerCase(s);
  333. { filter out unsupported characters }
  334. for i:=1 to length(w3) do
  335. if w3[i]='?' then
  336. begin
  337. w2[i]:='?';
  338. w1[i]:='?';
  339. end;
  340. w1:=widelowercase(w1);
  341. {$ifdef print}
  342. writeln('widelower: ',w1);
  343. writeln('ansilower: ',w4);
  344. {$endif print}
  345. if (w1 <> w2) then
  346. doerror(15);
  347. if (w4 <> w2) then
  348. doerror(16);
  349. end;
  350. begin
  351. testupper;
  352. writeln;
  353. testlower;
  354. writeln;
  355. writeln;
  356. testupperinvalid;
  357. writeln;
  358. testlowerinvalid;
  359. writeln;
  360. writeln;
  361. testupperinvalid1;
  362. writeln;
  363. testlowerinvalid1;
  364. writeln;
  365. writeln;
  366. testupperinvalid2;
  367. writeln;
  368. testlowerinvalid2;
  369. end.