tcbarcodes.pas 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769
  1. unit tcbarcodes;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. TypInfo, Classes, SysUtils, fpcunit, testutils, testregistry, fpbarcode;
  6. type
  7. { TTestBarcodes }
  8. TTestBarcodes = class(TTestCase)
  9. private
  10. FText: String;
  11. FType: TBarcodeEncoding;
  12. class procedure AssertEquals(Msg: String; AExpected, AActual: TBarColor);
  13. class procedure AssertEquals(Msg: String; AExpected, AActual: TBarWidth);
  14. class procedure AssertEquals(Msg: String; AExpected, AActual: TBarHeight);
  15. procedure AssertParams(aType: TBarType; AColor: TBarColor; AWidth: TBarWidth; AHeight: TBarheight);
  16. Protected
  17. Procedure SetEncoding(aType: TBarcodeEncoding);
  18. Procedure SetText(aText : String);
  19. Function DoEncode : TBarTypeArray;
  20. Class Procedure AssertEquals(Msg : String; AExpected : Array of Byte; AActual : TBarTypeArray); overload;
  21. Property TheType : TBarcodeEncoding Read FType;
  22. Property TheText : String Read FText;
  23. published
  24. procedure TestEan8;
  25. procedure TestEan13;
  26. procedure TestCode39;
  27. procedure TestCode39Extended;
  28. procedure TestCode128A;
  29. procedure TestCode128B;
  30. procedure TestCode128C;
  31. procedure Testbe2of5industrial;
  32. procedure Testbe2of5interleaved;
  33. procedure Testbe2of5matrix;
  34. procedure TestCode93;
  35. procedure TestCode93Extended;
  36. procedure TestCodeCodabar;
  37. procedure TestCodeMSI;
  38. procedure TestCodePostNet;
  39. Procedure CheckParamsType;
  40. Procedure CheckNumerictypes;
  41. end;
  42. implementation
  43. procedure TTestBarcodes.SetEncoding(aType: TBarcodeEncoding);
  44. begin
  45. FType:=aType;
  46. end;
  47. procedure TTestBarcodes.SetText(aText: String);
  48. begin
  49. FText:=aText;
  50. end;
  51. function TTestBarcodes.DoEncode: TBarTypeArray;
  52. begin
  53. Result:=StringToBarTypeArray(FText,FType);
  54. //Writeln(NewToOld(Result));
  55. end;
  56. class procedure TTestBarcodes.AssertEquals(Msg: String; AExpected: array of Byte; AActual: TBarTypeArray);
  57. Var
  58. I : Integer;
  59. begin
  60. AssertEquals(Msg+': length equal',Length(aExpected),Length(AActual));
  61. for I:=0 to Length(aExpected)-1 do
  62. AssertEquals(Msg+': Element at position ['+intTostr(I)+']',aExpected[i],AActual[i]);
  63. end;
  64. {
  65. The tests have been generated using the barcode unit distributed with lazarus.
  66. The string text in the comment is the string as reproduced with the MakeData function of the TBarCode class.
  67. }
  68. procedure TTestBarcodes.TestEan8;
  69. begin
  70. SetEncoding(beEAN8);
  71. // 0 --> 5052605260526052605050507150715071507150505
  72. SetText('0');
  73. AssertEquals('Test for "0"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,0,4],DoEncode);
  74. // 1 --> 5052605260526052605050507150715061607150505
  75. SetText('1');
  76. AssertEquals('Test for "1"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,5,1,5,0,6,1,4,0,4,0,4],DoEncode);
  77. // 2 --> 5052605260526052605050507150715060617150505
  78. SetText('2');
  79. AssertEquals('Test for "2"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,5,0,5,1,6,1,4,0,4,0,4],DoEncode);
  80. // 3 --> 5052605260526052605050507150715053507150505
  81. SetText('3');
  82. AssertEquals('Test for "3"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,3,4,0,6,1,4,0,4,0,4],DoEncode);
  83. // 4 --> 5052605260526052605050507150715050717150505
  84. SetText('4');
  85. AssertEquals('Test for "4"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,0,6,1,6,1,4,0,4,0,4],DoEncode);
  86. // 5 --> 5052605260526052605050507150715051707150505
  87. SetText('5');
  88. AssertEquals('Test for "5"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,1,6,0,6,1,4,0,4,0,4],DoEncode);
  89. // 6 --> 5052605260526052605050507150715050537150505
  90. SetText('6');
  91. AssertEquals('Test for "6"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,0,4,3,6,1,4,0,4,0,4],DoEncode);
  92. // 7 --> 5052605260526052605050507150715052517150505
  93. SetText('7');
  94. AssertEquals('Test for "7"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,2,4,1,6,1,4,0,4,0,4],DoEncode);
  95. // 8 --> 5052605260526052605050507150715051527150505
  96. SetText('8');
  97. AssertEquals('Test for "8"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,4,1,4,2,6,1,4,0,4,0,4],DoEncode);
  98. // 9 --> 5052605260526052605050507150715070517150505
  99. SetText('9');
  100. AssertEquals('Test for "9"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,0,4,1,6,1,4,0,4,0,4],DoEncode);
  101. // 12345678 --> 5051615151608050526050505170505352515152505
  102. SetText('12345678');
  103. AssertEquals('Test for "12345678"',[4,0,4,1,5,1,4,1,4,1,5,0,7,0,4,0,4,2,5,0,4,0,4,0,4,1,6,0,4,0,4,3,4,2,4,1,4,1,4,2,4,0,4],DoEncode);
  104. end;
  105. procedure TTestBarcodes.TestEan13;
  106. begin
  107. SetEncoding(beEAN13);
  108. // 0 --> 50526052605260526052605260505050715071507150715071507150505
  109. SetText('0');
  110. AssertEquals('Test for "0"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,0,4],DoEncode);
  111. // 1 --> 50526052605260526052605260505050715071507150715061607150505
  112. SetText('1');
  113. AssertEquals('Test for "1"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,5,1,5,0,6,1,4,0,4,0,4],DoEncode);
  114. // 2 --> 50526052605260526052605260505050715071507150715060617150505
  115. SetText('2');
  116. AssertEquals('Test for "2"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,5,0,5,1,6,1,4,0,4,0,4],DoEncode);
  117. // 3 --> 50526052605260526052605260505050715071507150715053507150505
  118. SetText('3');
  119. AssertEquals('Test for "3"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,3,4,0,6,1,4,0,4,0,4],DoEncode);
  120. // 4 --> 50526052605260526052605260505050715071507150715050717150505
  121. SetText('4');
  122. AssertEquals('Test for "4"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,0,6,1,6,1,4,0,4,0,4],DoEncode);
  123. // 5 --> 50526052605260526052605260505050715071507150715051707150505
  124. SetText('5');
  125. AssertEquals('Test for "5"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,1,6,0,6,1,4,0,4,0,4],DoEncode);
  126. // 6 --> 50526052605260526052605260505050715071507150715050537150505
  127. SetText('6');
  128. AssertEquals('Test for "6"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,0,4,3,6,1,4,0,4,0,4],DoEncode);
  129. // 7 --> 50526052605260526052605260505050715071507150715052517150505
  130. SetText('7');
  131. AssertEquals('Test for "7"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,2,4,1,6,1,4,0,4,0,4],DoEncode);
  132. // 8 --> 50526052605260526052605260505050715071507150715051527150505
  133. SetText('8');
  134. AssertEquals('Test for "8"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,4,1,4,2,6,1,4,0,4,0,4],DoEncode);
  135. // 9 --> 50526052605260526052605260505050715071507150715070517150505
  136. SetText('9');
  137. AssertEquals('Test for "9"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,2,5,0,4,0,4,0,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,1,4,0,6,0,4,1,6,1,4,0,4,0,4],DoEncode);
  138. // 12345678 --> 50526052605260516151516080505050507151705053525151527150505
  139. SetText('12345678');
  140. AssertEquals('Test for "12345678"',[4,0,4,2,5,0,4,2,5,0,4,2,5,0,4,1,5,1,4,1,4,1,5,0,7,0,4,0,4,0,4,0,4,0,6,1,4,1,6,0,4,0,4,3,4,2,4,1,4,1,4,2,6,1,4,0,4,0,4],DoEncode);
  141. // 1234567890123 --> 50515160805170506253505152505050515270517150616060615350505
  142. SetText('1234567890123');
  143. AssertEquals('Test for "1234567890123"',[4,0,4,1,4,1,5,0,7,0,4,1,6,0,4,0,5,2,4,3,4,0,4,1,4,2,4,0,4,0,4,0,4,1,4,2,6,0,4,1,6,1,4,0,5,1,5,0,5,0,5,1,4,3,4,0,4,0,4],DoEncode);
  144. end;
  145. procedure TTestBarcodes.TestCode39;
  146. begin
  147. SetEncoding(be39);
  148. // 0 --> 51506060505051606050515060605
  149. SetText('0');
  150. AssertEquals('Test for "0"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,5,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  151. // 1 --> 51506060506051505060515060605
  152. SetText('1');
  153. AssertEquals('Test for "1"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  154. // 2 --> 51506060505061505060515060605
  155. SetText('2');
  156. AssertEquals('Test for "2"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,4,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  157. // 3 --> 51506060506061505050515060605
  158. SetText('3');
  159. AssertEquals('Test for "3"',[4,1,4,0,5,0,5,0,4,0,5,0,5,1,4,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  160. // 4 --> 51506060505051605060515060605
  161. SetText('4');
  162. AssertEquals('Test for "4"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,5,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  163. // 5 --> 51506060506051605050515060605
  164. SetText('5');
  165. AssertEquals('Test for "5"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  166. // 6 --> 51506060505061605050515060605
  167. SetText('6');
  168. AssertEquals('Test for "6"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  169. // 7 --> 51506060505051506060515060605
  170. SetText('7');
  171. AssertEquals('Test for "7"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  172. // 8 --> 51506060506051506050515060605
  173. SetText('8');
  174. AssertEquals('Test for "8"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  175. // 9 --> 51506060505061506050515060605
  176. SetText('9');
  177. AssertEquals('Test for "9"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  178. // 12345678 --> 515060605060515050605061505060606150505050516050606051605050506160505050515060606051506050515060605
  179. SetText('12345678');
  180. AssertEquals('Test for "12345678"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,0,5,1,4,0,4,0,5,0,5,0,5,1,4,0,4,0,4,0,4,0,4,1,5,0,4,0,5,0,5,0,4,1,5,0,4,0,4,0,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  181. // 123456789ABCDE --> 515060605060515050605061505060606150505050516050606051605050506160505050515060606051506050506150605060505150605060515060606051505050506150606050615050515060605
  182. SetText('123456789ABCDE');
  183. AssertEquals('Test for "123456789ABCDE"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,0,5,1,4,0,4,0,5,0,5,0,5,1,4,0,4,0,4,0,4,0,4,1,5,0,4,0,5,0,5,0,4,1,5,0,4,0,4,0,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,5,0,4,0,4,0,5,1,4,0,5,0,4,0,5,0,4,0,4,1,4,0,5,0,4,0,5,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,4,0,4,0,4,0,5,1,4,0,5,0,5,0,4,0,5,1,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  184. end;
  185. procedure TTestBarcodes.TestCode39Extended;
  186. begin
  187. SetEncoding(be39extended);
  188. // 0 --> 51506060505051606050515060605
  189. SetText('0');
  190. AssertEquals('Test for "0"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,5,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  191. // 1 --> 51506060506051505060515060605
  192. SetText('1');
  193. AssertEquals('Test for "1"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  194. // 2 --> 51506060505061505060515060605
  195. SetText('2');
  196. AssertEquals('Test for "2"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,4,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  197. // 3 --> 51506060506061505050515060605
  198. SetText('3');
  199. AssertEquals('Test for "3"',[4,1,4,0,5,0,5,0,4,0,5,0,5,1,4,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  200. // 4 --> 51506060505051605060515060605
  201. SetText('4');
  202. AssertEquals('Test for "4"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,5,0,4,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  203. // 5 --> 51506060506051605050515060605
  204. SetText('5');
  205. AssertEquals('Test for "5"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  206. // 6 --> 51506060505061605050515060605
  207. SetText('6');
  208. AssertEquals('Test for "6"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  209. // 7 --> 51506060505051506060515060605
  210. SetText('7');
  211. AssertEquals('Test for "7"',[4,1,4,0,5,0,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4,1,4,0,5,0,5,0,4],DoEncode);
  212. // 8 --> 51506060506051506050515060605
  213. SetText('8');
  214. AssertEquals('Test for "8"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  215. // 9 --> 51506060505061506050515060605
  216. SetText('9');
  217. AssertEquals('Test for "9"',[4,1,4,0,5,0,5,0,4,0,4,0,5,1,4,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  218. // 1234567800 --> 51506060506051505060506150506060615050505051605060605160505050616050505051506060605150605050516060505051606050515060605
  219. SetText('1234567800');
  220. AssertEquals('Test for "1234567800"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,0,5,1,4,0,4,0,5,0,5,0,5,1,4,0,4,0,4,0,4,0,4,1,5,0,4,0,5,0,5,0,4,1,5,0,4,0,4,0,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,5,0,4,0,4,0,4,1,5,0,5,0,4,0,4,0,4,1,5,0,5,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  221. // 123456789ABCDEwxyz --> 51506060506051505060506150506060615050505051605060605160505050616050505051506060605150605050615060506050515060506051506060605150505050615060605061505051505151506160505050515051515051506050605150515150615060505051505151505160605050515060605
  222. SetText('123456789ABCDEwxyz');
  223. AssertEquals('Test for "123456789ABCDEwxyz"',[4,1,4,0,5,0,5,0,4,0,5,0,4,1,4,0,4,0,5,0,4,0,5,1,4,0,4,0,5,0,5,0,5,1,4,0,4,0,4,0,4,0,4,1,5,0,4,0,5,0,5,0,4,1,5,0,4,0,4,0,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,5,0,4,0,4,0,5,1,4,0,5,0,4,0,5,0,4,0,4,1,4,0,5,0,4,0,5,0,4,1,4,0,5,0,5,0,5,0,4,1,4,0,4,0,4,0,4,0,5,1,4,0,5,0,5,0,4,0,5,1,4,0,4,0,4,1,4,0,4,1,4,1,4,0,5,1,5,0,4,0,4,0,4,0,4,1,4,0,4,1,4,1,4,0,4,1,4,0,5,0,4,0,5,0,4,1,4,0,4,1,4,1,4,0,5,1,4,0,5,0,4,0,4,0,4,1,4,0,4,1,4,1,4,0,4,1,5,0,5,0,4,0,4,0,4,1,4,0,5,0,5,0,4],DoEncode);
  224. end;
  225. Procedure TTestBarcodes.TestCode128A;
  226. begin
  227. SetEncoding(be128A);
  228. // 0 --> 6053515170615170616270506
  229. SetText('0');
  230. AssertEquals('Test for "0"',[5,0,4,3,4,1,4,1,6,0,5,1,4,1,6,0,5,1,5,2,6,0,4,0,5],DoEncode);
  231. // 1 --> 6053515171605171606270506
  232. SetText('1');
  233. AssertEquals('Test for "1"',[5,0,4,3,4,1,4,1,6,1,5,0,4,1,6,1,5,0,5,2,6,0,4,0,5],DoEncode);
  234. // 2 --> 6053516171506171506270506
  235. SetText('2');
  236. AssertEquals('Test for "2"',[5,0,4,3,4,1,5,1,6,1,4,0,5,1,6,1,4,0,5,2,6,0,4,0,5],DoEncode);
  237. // 3 --> 6053516150716150716270506
  238. SetText('3');
  239. AssertEquals('Test for "3"',[5,0,4,3,4,1,5,1,4,0,6,1,5,1,4,0,6,1,5,2,6,0,4,0,5],DoEncode);
  240. // 4 --> 6053516151706151706270506
  241. SetText('4');
  242. AssertEquals('Test for "4"',[5,0,4,3,4,1,5,1,4,1,6,0,5,1,4,1,6,0,5,2,6,0,4,0,5],DoEncode);
  243. // 5 --> 6053516071516071516270506
  244. SetText('5');
  245. AssertEquals('Test for "5"',[5,0,4,3,4,1,5,0,6,1,4,1,5,0,6,1,4,1,5,2,6,0,4,0,5],DoEncode);
  246. // 6 --> 6053516170516170516270506
  247. SetText('6');
  248. AssertEquals('Test for "6"',[5,0,4,3,4,1,5,1,6,0,4,1,5,1,6,0,4,1,5,2,6,0,4,0,5],DoEncode);
  249. // 7 --> 6053517060707060706270506
  250. SetText('7');
  251. AssertEquals('Test for "7"',[5,0,4,3,4,1,6,0,5,0,6,0,6,0,5,0,6,0,5,2,6,0,4,0,5],DoEncode);
  252. // 8 --> 6053517051617051616270506
  253. SetText('8');
  254. AssertEquals('Test for "8"',[5,0,4,3,4,1,6,0,4,1,5,1,6,0,4,1,5,1,5,2,6,0,4,0,5],DoEncode);
  255. // 9 --> 6053517150617150616270506
  256. SetText('9');
  257. AssertEquals('Test for "9"',[5,0,4,3,4,1,6,1,4,0,5,1,6,1,4,0,5,1,5,2,6,0,4,0,5],DoEncode);
  258. // 1234567800 --> 6053515171606171506150716151706071516170517060707051615170615170617050626270506
  259. SetText('1234567800');
  260. AssertEquals('Test for "1234567800"',[5,0,4,3,4,1,4,1,6,1,5,0,5,1,6,1,4,0,5,1,4,0,6,1,5,1,4,1,6,0,5,0,6,1,4,1,5,1,6,0,4,1,6,0,5,0,6,0,6,0,4,1,5,1,4,1,6,0,5,1,4,1,6,0,5,1,6,0,4,0,5,2,5,2,6,0,4,0,5],DoEncode);
  261. // 123456789ABCD --> 6053515171606171506150716151706071516170517060707051617150615052625250625252605062526170516270506
  262. SetText('123456789ABCD');
  263. AssertEquals('Test for "123456789ABCD"',[5,0,4,3,4,1,4,1,6,1,5,0,5,1,6,1,4,0,5,1,4,0,6,1,5,1,4,1,6,0,5,0,6,1,4,1,5,1,6,0,4,1,6,0,5,0,6,0,6,0,4,1,5,1,6,1,4,0,5,1,4,0,4,2,5,2,4,2,4,0,5,2,4,2,4,2,5,0,4,0,5,2,4,2,5,1,6,0,4,1,5,2,6,0,4,0,5],DoEncode);
  264. end;
  265. procedure TTestBarcodes.TestCode128B;
  266. begin
  267. SetEncoding(be128B);
  268. // 0 --> 6051535170615171606270506
  269. SetText('0');
  270. AssertEquals('Test for "0"',[5,0,4,1,4,3,4,1,6,0,5,1,4,1,6,1,5,0,5,2,6,0,4,0,5],DoEncode);
  271. // 1 --> 6051535171606171506270506
  272. SetText('1');
  273. AssertEquals('Test for "1"',[5,0,4,1,4,3,4,1,6,1,5,0,5,1,6,1,4,0,5,2,6,0,4,0,5],DoEncode);
  274. // 2 --> 6051536171506150716270506
  275. SetText('2');
  276. AssertEquals('Test for "2"',[5,0,4,1,4,3,5,1,6,1,4,0,5,1,4,0,6,1,5,2,6,0,4,0,5],DoEncode);
  277. // 3 --> 6051536150716151706270506
  278. SetText('3');
  279. AssertEquals('Test for "3"',[5,0,4,1,4,3,5,1,4,0,6,1,5,1,4,1,6,0,5,2,6,0,4,0,5],DoEncode);
  280. // 4 --> 6051536151706071516270506
  281. SetText('4');
  282. AssertEquals('Test for "4"',[5,0,4,1,4,3,5,1,4,1,6,0,5,0,6,1,4,1,5,2,6,0,4,0,5],DoEncode);
  283. // 5 --> 6051536071516170516270506
  284. SetText('5');
  285. AssertEquals('Test for "5"',[5,0,4,1,4,3,5,0,6,1,4,1,5,1,6,0,4,1,5,2,6,0,4,0,5],DoEncode);
  286. // 6 --> 6051536170517060706270506
  287. SetText('6');
  288. AssertEquals('Test for "6"',[5,0,4,1,4,3,5,1,6,0,4,1,6,0,5,0,6,0,5,2,6,0,4,0,5],DoEncode);
  289. // 7 --> 6051537060707051616270506
  290. SetText('7');
  291. AssertEquals('Test for "7"',[5,0,4,1,4,3,6,0,5,0,6,0,6,0,4,1,5,1,5,2,6,0,4,0,5],DoEncode);
  292. // 8 --> 6051537051617150616270506
  293. SetText('8');
  294. AssertEquals('Test for "8"',[5,0,4,1,4,3,6,0,4,1,5,1,6,1,4,0,5,1,5,2,6,0,4,0,5],DoEncode);
  295. // 9 --> 6051537150617151606270506
  296. SetText('9');
  297. AssertEquals('Test for "9"',[5,0,4,1,4,3,6,1,4,0,5,1,6,1,4,1,5,0,5,2,6,0,4,0,5],DoEncode);
  298. // 1234567800 --> 6051535171606171506150716151706071516170517060707051615170615170617052606270506
  299. SetText('1234567800');
  300. AssertEquals('Test for "1234567800"',[5,0,4,1,4,3,4,1,6,1,5,0,5,1,6,1,4,0,5,1,4,0,6,1,5,1,4,1,6,0,5,0,6,1,4,1,5,1,6,0,4,1,6,0,5,0,6,0,6,0,4,1,5,1,4,1,6,0,5,1,4,1,6,0,5,1,6,0,4,2,5,0,5,2,6,0,4,0,5],DoEncode);
  301. // 123456789ABCD --> 6051535171606171506150716151706071516170517060707051617150615052625250625252605062527060706270506
  302. SetText('123456789ABCD');
  303. AssertEquals('Test for "123456789ABCD"',[5,0,4,1,4,3,4,1,6,1,5,0,5,1,6,1,4,0,5,1,4,0,6,1,5,1,4,1,6,0,5,0,6,1,4,1,5,1,6,0,4,1,6,0,5,0,6,0,6,0,4,1,5,1,6,1,4,0,5,1,4,0,4,2,5,2,4,2,4,0,5,2,4,2,4,2,5,0,4,0,5,2,4,2,6,0,5,0,6,0,5,2,6,0,4,0,5],DoEncode);
  304. end;
  305. Procedure TTestBarcodes.TestCode128C;
  306. begin
  307. SetEncoding(be128C);
  308. // 0 --> 6051716061616161606270506
  309. SetText('0');
  310. AssertEquals('Test for "0"',[5,0,4,1,6,1,5,0,5,1,5,1,5,1,5,1,5,0,5,2,6,0,4,0,5],DoEncode);
  311. // 1 --> 6051716160615151626270506
  312. SetText('1');
  313. AssertEquals('Test for "1"',[5,0,4,1,6,1,5,1,5,0,5,1,4,1,4,1,5,2,5,2,6,0,4,0,5],DoEncode);
  314. // 2 --> 6051716161605152616270506
  315. SetText('2');
  316. AssertEquals('Test for "2"',[5,0,4,1,6,1,5,1,5,1,5,0,4,1,4,2,5,1,5,2,6,0,4,0,5],DoEncode);
  317. // 3 --> 6051715151625251616270506
  318. SetText('3');
  319. AssertEquals('Test for "3"',[5,0,4,1,6,1,4,1,4,1,5,2,4,2,4,1,5,1,5,2,6,0,4,0,5],DoEncode);
  320. // 4 --> 6051715152615161526270506
  321. SetText('4');
  322. AssertEquals('Test for "4"',[5,0,4,1,6,1,4,1,4,2,5,1,4,1,5,1,4,2,5,2,6,0,4,0,5],DoEncode);
  323. // 5 --> 6051715251615162516270506
  324. SetText('5');
  325. AssertEquals('Test for "5"',[5,0,4,1,6,1,4,2,4,1,5,1,4,1,5,2,4,1,5,2,6,0,4,0,5],DoEncode);
  326. // 6 --> 6051715161525261516270506
  327. SetText('6');
  328. AssertEquals('Test for "6"',[5,0,4,1,6,1,4,1,5,1,4,2,4,2,5,1,4,1,5,2,6,0,4,0,5],DoEncode);
  329. // 7 --> 6051715162516151526270506
  330. SetText('7');
  331. AssertEquals('Test for "7"',[5,0,4,1,6,1,4,1,5,2,4,1,5,1,4,1,4,2,5,2,6,0,4,0,5],DoEncode);
  332. // 8 --> 6051715261516152516270506
  333. SetText('8');
  334. AssertEquals('Test for "8"',[5,0,4,1,6,1,4,2,5,1,4,1,5,1,4,2,4,1,5,2,6,0,4,0,5],DoEncode);
  335. // 9 --> 6051716151526251516270506
  336. SetText('9');
  337. AssertEquals('Test for "9"',[5,0,4,1,6,1,5,1,4,1,4,2,5,2,4,1,4,1,5,2,6,0,4,0,5],DoEncode);
  338. // 1234567800 --> 6051715061715250627250606350516061615270606270506
  339. SetText('1234567800');
  340. AssertEquals('Test for "1234567800"',[5,0,4,1,6,1,4,0,5,1,6,1,4,2,4,0,5,2,6,2,4,0,5,0,5,3,4,0,4,1,5,0,5,1,5,1,4,2,6,0,5,0,5,2,6,0,4,0,5],DoEncode);
  341. end;
  342. Procedure TTestBarcodes.Testbe2of5industrial;
  343. begin
  344. SetEncoding(be2of5industrial);
  345. // 00 --> 60605050506060505050606050605060
  346. SetText('00');
  347. AssertEquals('Test for "00"',[5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,5,0,4,0,5,0],DoEncode);
  348. // 11 --> 60605060505050606050505060605060
  349. SetText('11');
  350. AssertEquals('Test for "11"',[5,0,5,0,4,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,5,0],DoEncode);
  351. // 22 --> 60605050605050605060505060605060
  352. SetText('22');
  353. AssertEquals('Test for "22"',[5,0,5,0,4,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,5,0,4,0,5,0],DoEncode);
  354. // 33 --> 60605060605050506060505050605060
  355. SetText('33');
  356. AssertEquals('Test for "33"',[5,0,5,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,4,0,5,0],DoEncode);
  357. // 44 --> 60605050506050605050605060605060
  358. SetText('44');
  359. AssertEquals('Test for "44"',[5,0,5,0,4,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,5,0,4,0,5,0],DoEncode);
  360. // 55 --> 60605060506050506050605050605060
  361. SetText('55');
  362. AssertEquals('Test for "55"',[5,0,5,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0],DoEncode);
  363. // 66 --> 60605050606050505060605050605060
  364. SetText('66');
  365. AssertEquals('Test for "66"',[5,0,5,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,5,0,4,0,5,0],DoEncode);
  366. // 77 --> 60605050505060605050506060605060
  367. SetText('77');
  368. AssertEquals('Test for "77"',[5,0,5,0,4,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,5,0,4,0,5,0],DoEncode);
  369. // 88 --> 60605060505060506050506050605060
  370. SetText('88');
  371. AssertEquals('Test for "88"',[5,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,5,0],DoEncode);
  372. // 99 --> 60605050605060505060506050605060
  373. SetText('99');
  374. AssertEquals('Test for "99"',[5,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,4,0,5,0,4,0,5,0,4,0,5,0],DoEncode);
  375. // 1234567800 --> 6060506050505060506050506060605050505050605060605060505050606050505050506060605050605050506060505050606050605060
  376. SetText('1234567800');
  377. AssertEquals('Test for "1234567800"',[5,0,5,0,4,0,5,0,4,0,4,0,4,0,5,0,4,0,5,0,4,0,4,0,5,0,5,0,5,0,4,0,4,0,4,0,4,0,4,0,5,0,4,0,5,0,5,0,4,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,4,0,4,0,5,0,5,0,5,0,4,0,4,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,4,0,4,0,5,0,5,0,4,0,5,0,4,0,5,0],DoEncode);
  378. end;
  379. Procedure TTestBarcodes.Testbe2of5interleaved;
  380. begin
  381. SetEncoding(be2of5interleaved);
  382. // 00 --> 50505050616150605
  383. SetText('00');
  384. AssertEquals('Test for "00"',[4,0,4,0,4,0,4,0,5,1,5,1,4,0,5,0,4],DoEncode);
  385. // 11 --> 50506150505061605
  386. SetText('11');
  387. AssertEquals('Test for "11"',[4,0,4,0,5,1,4,0,4,0,4,0,5,1,5,0,4],DoEncode);
  388. // 22 --> 50505061505061605
  389. SetText('22');
  390. AssertEquals('Test for "22"',[4,0,4,0,4,0,5,1,4,0,4,0,5,1,5,0,4],DoEncode);
  391. // 33 --> 50506161505050605
  392. SetText('33');
  393. AssertEquals('Test for "33"',[4,0,4,0,5,1,5,1,4,0,4,0,4,0,5,0,4],DoEncode);
  394. // 44 --> 50505050615061605
  395. SetText('44');
  396. AssertEquals('Test for "44"',[4,0,4,0,4,0,4,0,5,1,4,0,5,1,5,0,4],DoEncode);
  397. // 55 --> 50506150615050605
  398. SetText('55');
  399. AssertEquals('Test for "55"',[4,0,4,0,5,1,4,0,5,1,4,0,4,0,5,0,4],DoEncode);
  400. // 66 --> 50505061615050605
  401. SetText('66');
  402. AssertEquals('Test for "66"',[4,0,4,0,4,0,5,1,5,1,4,0,4,0,5,0,4],DoEncode);
  403. // 77 --> 50505050506161605
  404. SetText('77');
  405. AssertEquals('Test for "77"',[4,0,4,0,4,0,4,0,4,0,5,1,5,1,5,0,4],DoEncode);
  406. // 88 --> 50506150506150605
  407. SetText('88');
  408. AssertEquals('Test for "88"',[4,0,4,0,5,1,4,0,4,0,5,1,4,0,5,0,4],DoEncode);
  409. // 99 --> 50505061506150605
  410. SetText('99');
  411. AssertEquals('Test for "99"',[4,0,4,0,4,0,5,1,4,0,5,1,4,0,5,0,4],DoEncode);
  412. // 1234567800 --> 505060515050616060515051605161505051505061605050616150605
  413. SetText('1234567800');
  414. AssertEquals('Test for "1234567800"',[4,0,4,0,5,0,4,1,4,0,4,0,5,1,5,0,5,0,4,1,4,0,4,1,5,0,4,1,5,1,4,0,4,0,4,1,4,0,4,0,5,1,5,0,4,0,4,0,5,1,5,1,4,0,5,0,4],DoEncode);
  415. end;
  416. Procedure TTestBarcodes.Testbe2of5matrix;
  417. begin
  418. SetEncoding(be2of5matrix);
  419. // 00 --> 70505050615050615070505
  420. SetText('00');
  421. AssertEquals('Test for "00"',[6,0,4,0,4,0,4,0,5,1,4,0,4,0,5,1,4,0,6,0,4,0,4],DoEncode);
  422. // 11 --> 70505060506060506070505
  423. SetText('11');
  424. AssertEquals('Test for "11"',[6,0,4,0,4,0,5,0,4,0,5,0,5,0,4,0,5,0,6,0,4,0,4],DoEncode);
  425. // 22 --> 70505051506051506070505
  426. SetText('22');
  427. AssertEquals('Test for "22"',[6,0,4,0,4,0,4,1,4,0,5,0,4,1,4,0,5,0,6,0,4,0,4],DoEncode);
  428. // 33 --> 70505061505061505070505
  429. SetText('33');
  430. AssertEquals('Test for "33"',[6,0,4,0,4,0,5,1,4,0,4,0,5,1,4,0,4,0,6,0,4,0,4],DoEncode);
  431. // 44 --> 70505050606050606070505
  432. SetText('44');
  433. AssertEquals('Test for "44"',[6,0,4,0,4,0,4,0,5,0,5,0,4,0,5,0,5,0,6,0,4,0,4],DoEncode);
  434. // 55 --> 70505060605060605070505
  435. SetText('55');
  436. AssertEquals('Test for "55"',[6,0,4,0,4,0,5,0,5,0,4,0,5,0,5,0,4,0,6,0,4,0,4],DoEncode);
  437. // 66 --> 70505051605051605070505
  438. SetText('66');
  439. AssertEquals('Test for "66"',[6,0,4,0,4,0,4,1,5,0,4,0,4,1,5,0,4,0,6,0,4,0,4],DoEncode);
  440. // 77 --> 70505050516050516070505
  441. SetText('77');
  442. AssertEquals('Test for "77"',[6,0,4,0,4,0,4,0,4,1,5,0,4,0,4,1,5,0,6,0,4,0,4],DoEncode);
  443. // 88 --> 70505060515060515070505
  444. SetText('88');
  445. AssertEquals('Test for "88"',[6,0,4,0,4,0,5,0,4,1,4,0,5,0,4,1,4,0,6,0,4,0,4],DoEncode);
  446. // 99 --> 70505051515051515070505
  447. SetText('99');
  448. AssertEquals('Test for "99"',[6,0,4,0,4,0,4,1,4,1,4,0,4,1,4,1,4,0,6,0,4,0,4],DoEncode);
  449. // 1234567800 --> 70505060506051506061505050606060605051605050516060515050615050615070505
  450. SetText('1234567800');
  451. AssertEquals('Test for "1234567800"',[6,0,4,0,4,0,5,0,4,0,5,0,4,1,4,0,5,0,5,1,4,0,4,0,4,0,5,0,5,0,5,0,5,0,4,0,4,1,5,0,4,0,4,0,4,1,5,0,5,0,4,1,4,0,4,0,5,1,4,0,4,0,5,1,4,0,6,0,4,0,4],DoEncode);
  452. end;
  453. Procedure TTestBarcodes.TestCode93;
  454. begin
  455. SetEncoding(be93);
  456. // 0 --> 5050805250515250515250515050805
  457. SetText('0');
  458. AssertEquals('Test for "0"',[4,0,4,0,7,0,4,2,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,1,4,0,4,0,7,0,4],DoEncode);
  459. // 1 --> 5050805051525051525053505050805
  460. SetText('1');
  461. AssertEquals('Test for "1"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,3,4,0,4,0,4,0,7,0,4],DoEncode);
  462. // 2 --> 5050805052515052515152505050805
  463. SetText('2');
  464. AssertEquals('Test for "2"',[4,0,4,0,7,0,4,0,4,2,4,1,4,0,4,2,4,1,4,1,4,2,4,0,4,0,4,0,7,0,4],DoEncode);
  465. // 3 --> 5050805053505053505350505050805
  466. SetText('3');
  467. AssertEquals('Test for "3"',[4,0,4,0,7,0,4,0,4,3,4,0,4,0,4,3,4,0,4,3,4,0,4,0,4,0,4,0,7,0,4],DoEncode);
  468. // 4 --> 5050805150525150526052505050805
  469. SetText('4');
  470. AssertEquals('Test for "4"',[4,0,4,0,7,0,4,1,4,0,4,2,4,1,4,0,4,2,5,0,4,2,4,0,4,0,4,0,7,0,4],DoEncode);
  471. // 5 --> 5050805151515151516250505050805
  472. SetText('5');
  473. AssertEquals('Test for "5"',[4,0,4,0,7,0,4,1,4,1,4,1,4,1,4,1,4,1,5,2,4,0,4,0,4,0,4,0,7,0,4],DoEncode);
  474. // 6 --> 5050805152505152505062505050805
  475. SetText('6');
  476. AssertEquals('Test for "6"',[4,0,4,0,7,0,4,1,4,2,4,0,4,1,4,2,4,0,4,0,5,2,4,0,4,0,4,0,7,0,4],DoEncode);
  477. // 7 --> 5050805050535050535050625050805
  478. SetText('7');
  479. AssertEquals('Test for "7"',[4,0,4,0,7,0,4,0,4,0,4,3,4,0,4,0,4,3,4,0,4,0,5,2,4,0,4,0,7,0,4],DoEncode);
  480. // 8 --> 5050805251505251505150615050805
  481. SetText('8');
  482. AssertEquals('Test for "8"',[4,0,4,0,7,0,4,2,4,1,4,0,4,2,4,1,4,0,4,1,4,0,5,1,4,0,4,0,7,0,4],DoEncode);
  483. // 9 --> 5050805350505350506061505050805
  484. SetText('9');
  485. AssertEquals('Test for "9"',[4,0,4,0,7,0,4,3,4,0,4,0,4,3,4,0,4,0,5,0,5,1,4,0,4,0,4,0,7,0,4],DoEncode);
  486. // 1234567800 --> 5050805051525052515053505150525151515152505050535251505250515250515150527060505050805
  487. SetText('1234567800');
  488. AssertEquals('Test for "1234567800"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,2,4,1,4,0,4,3,4,0,4,1,4,0,4,2,4,1,4,1,4,1,4,1,4,2,4,0,4,0,4,0,4,3,4,2,4,1,4,0,4,2,4,0,4,1,4,2,4,0,4,1,4,1,4,0,4,2,6,0,5,0,4,0,4,0,4,0,7,0,4],DoEncode);
  489. // 123456789ABCD --> 5050805051525052515053505150525151515152505050535251505350506050526051516052506150515060616151505050805
  490. SetText('123456789ABCD');
  491. AssertEquals('Test for "123456789ABCD"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,2,4,1,4,0,4,3,4,0,4,1,4,0,4,2,4,1,4,1,4,1,4,1,4,2,4,0,4,0,4,0,4,3,4,2,4,1,4,0,4,3,4,0,4,0,5,0,4,0,4,2,5,0,4,1,4,1,5,0,4,2,4,0,5,1,4,0,4,1,4,0,5,0,5,1,5,1,4,1,4,0,4,0,4,0,7,0,4],DoEncode);
  492. end;
  493. Procedure TTestBarcodes.TestCode93Extended;
  494. begin
  495. SetEncoding(be93Extended);
  496. // 00 --> 5050805250515250515250515250515050805
  497. SetText('00');
  498. AssertEquals('Test for "00"',[4,0,4,0,7,0,4,2,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,1,4,0,4,0,7,0,4],DoEncode);
  499. // 11 --> 5050805051525051525053505251505050805
  500. SetText('11');
  501. AssertEquals('Test for "11"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,1,4,2,4,0,4,3,4,0,4,2,4,1,4,0,4,0,4,0,7,0,4],DoEncode);
  502. // 22 --> 5050805052515052515152505060525050805
  503. SetText('22');
  504. AssertEquals('Test for "22"',[4,0,4,0,7,0,4,0,4,2,4,1,4,0,4,2,4,1,4,1,4,2,4,0,4,0,5,0,4,2,4,0,4,0,7,0,4],DoEncode);
  505. // 33 --> 5050805053505053505350505150615050805
  506. SetText('33');
  507. AssertEquals('Test for "33"',[4,0,4,0,7,0,4,0,4,3,4,0,4,0,4,3,4,0,4,3,4,0,4,0,4,1,4,0,5,1,4,0,4,0,7,0,4],DoEncode);
  508. // 44 --> 5050805150525150526052505060615050805
  509. SetText('44');
  510. AssertEquals('Test for "44"',[4,0,4,0,7,0,4,1,4,0,4,2,4,1,4,0,4,2,5,0,4,2,4,0,4,0,5,0,5,1,4,0,4,0,7,0,4],DoEncode);
  511. // 55 --> 5050805151515151516250505060705050805
  512. SetText('55');
  513. AssertEquals('Test for "55"',[4,0,4,0,7,0,4,1,4,1,4,1,4,1,4,1,4,1,5,2,4,0,4,0,4,0,5,0,6,0,4,0,4,0,7,0,4],DoEncode);
  514. // 66 --> 5050805152505152505062505051525050805
  515. SetText('66');
  516. AssertEquals('Test for "66"',[4,0,4,0,7,0,4,1,4,2,4,0,4,1,4,2,4,0,4,0,5,2,4,0,4,0,4,1,4,2,4,0,4,0,7,0,4],DoEncode);
  517. // 77 --> 5050805050535050535050625350505050805
  518. SetText('77');
  519. AssertEquals('Test for "77"',[4,0,4,0,7,0,4,0,4,0,4,3,4,0,4,0,4,3,4,0,4,0,5,2,4,3,4,0,4,0,4,0,4,0,7,0,4],DoEncode);
  520. // 88 --> 5050805251505251505150615061515050805
  521. SetText('88');
  522. AssertEquals('Test for "88"',[4,0,4,0,7,0,4,2,4,1,4,0,4,2,4,1,4,0,4,1,4,0,5,1,4,0,5,1,4,1,4,0,4,0,7,0,4],DoEncode);
  523. // 99 --> 5050805350505350506061505250605050805
  524. SetText('99');
  525. AssertEquals('Test for "99"',[4,0,4,0,7,0,4,3,4,0,4,0,4,3,4,0,4,0,5,0,5,1,4,0,4,2,4,0,5,0,4,0,4,0,7,0,4],DoEncode);
  526. // 1234567800 --> 5050805051525052515053505150525151515152505050535251505250515250515150527060505050805
  527. SetText('1234567800');
  528. AssertEquals('Test for "1234567800"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,2,4,1,4,0,4,3,4,0,4,1,4,0,4,2,4,1,4,1,4,1,4,1,4,2,4,0,4,0,4,0,4,3,4,2,4,1,4,0,4,2,4,0,4,1,4,2,4,0,4,1,4,1,4,0,4,2,6,0,5,0,4,0,4,0,4,0,7,0,4],DoEncode);
  529. // 123456789ABCD --> 5050805051525052515053505150525151515152505050535251505350506050526051516052506150515060616151505050805
  530. SetText('123456789ABCD');
  531. AssertEquals('Test for "123456789ABCD"',[4,0,4,0,7,0,4,0,4,1,4,2,4,0,4,2,4,1,4,0,4,3,4,0,4,1,4,0,4,2,4,1,4,1,4,1,4,1,4,2,4,0,4,0,4,0,4,3,4,2,4,1,4,0,4,3,4,0,4,0,5,0,4,0,4,2,5,0,4,1,4,1,5,0,4,2,4,0,5,1,4,0,4,1,4,0,5,0,5,1,5,1,4,1,4,0,4,0,4,0,7,0,4],DoEncode);
  532. end;
  533. Procedure TTestBarcodes.TestCodeCodabar;
  534. begin
  535. SetEncoding(beCodabar);
  536. // 0 --> 50615150505051605151506
  537. SetText('0');
  538. AssertEquals('Test for "0"',[4,0,5,1,4,1,4,0,4,0,4,0,4,1,5,0,4,1,4,1,4,0,5],DoEncode);
  539. // 1 --> 50615150505061505151506
  540. SetText('1');
  541. AssertEquals('Test for "1"',[4,0,5,1,4,1,4,0,4,0,4,0,5,1,4,0,4,1,4,1,4,0,5],DoEncode);
  542. // 2 --> 50615150505150605151506
  543. SetText('2');
  544. AssertEquals('Test for "2"',[4,0,5,1,4,1,4,0,4,0,4,1,4,0,5,0,4,1,4,1,4,0,5],DoEncode);
  545. // 3 --> 50615150615050505151506
  546. SetText('3');
  547. AssertEquals('Test for "3"',[4,0,5,1,4,1,4,0,5,1,4,0,4,0,4,0,4,1,4,1,4,0,5],DoEncode);
  548. // 4 --> 50615150506051505151506
  549. SetText('4');
  550. AssertEquals('Test for "4"',[4,0,5,1,4,1,4,0,4,0,5,0,4,1,4,0,4,1,4,1,4,0,5],DoEncode);
  551. // 5 --> 50615150605051505151506
  552. SetText('5');
  553. AssertEquals('Test for "5"',[4,0,5,1,4,1,4,0,5,0,4,0,4,1,4,0,4,1,4,1,4,0,5],DoEncode);
  554. // 6 --> 50615150515050605151506
  555. SetText('6');
  556. AssertEquals('Test for "6"',[4,0,5,1,4,1,4,0,4,1,4,0,4,0,5,0,4,1,4,1,4,0,5],DoEncode);
  557. // 7 --> 50615150515060505151506
  558. SetText('7');
  559. AssertEquals('Test for "7"',[4,0,5,1,4,1,4,0,4,1,4,0,5,0,4,0,4,1,4,1,4,0,5],DoEncode);
  560. // 8 --> 50615150516050505151506
  561. SetText('8');
  562. AssertEquals('Test for "8"',[4,0,5,1,4,1,4,0,4,1,5,0,4,0,4,0,4,1,4,1,4,0,5],DoEncode);
  563. // 9 --> 50615150605150505151506
  564. SetText('9');
  565. AssertEquals('Test for "9"',[4,0,5,1,4,1,4,0,5,0,4,1,4,0,4,0,4,1,4,1,4,0,5],DoEncode);
  566. // 1234567800 --> 50615150505061505051506061505050506051506050515051505060515060505160505050505160505051605151506
  567. SetText('1234567800');
  568. AssertEquals('Test for "1234567800"',[4,0,5,1,4,1,4,0,4,0,4,0,5,1,4,0,4,0,4,1,4,0,5,0,5,1,4,0,4,0,4,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,4,1,4,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,5,0,4,0,4,0,4,0,4,0,4,1,5,0,4,0,4,0,4,1,5,0,4,1,4,1,4,0,5],DoEncode);
  569. // 123456789ABCD --> 50615150505061505051506061505050506051506050515051505060515060505160505060515050506151505151506050515160505161505151506
  570. SetText('123456789ABCD');
  571. AssertEquals('Test for "123456789ABCD"',[4,0,5,1,4,1,4,0,4,0,4,0,5,1,4,0,4,0,4,1,4,0,5,0,5,1,4,0,4,0,4,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,4,0,4,1,4,0,4,0,5,0,4,1,4,0,5,0,4,0,4,1,5,0,4,0,4,0,5,0,4,1,4,0,4,0,4,0,5,1,4,1,4,0,4,1,4,1,4,0,5,0,4,0,4,1,4,1,5,0,4,0,4,1,5,1,4,0,4,1,4,1,4,0,5],DoEncode);
  572. end;
  573. Procedure TTestBarcodes.TestCodeMSI;
  574. begin
  575. SetEncoding(beMSI);
  576. // 0 --> 605151515151516051515
  577. SetText('0');
  578. AssertEquals('Test for "0"',[5,0,4,1,4,1,4,1,4,1,4,1,4,1,5,0,4,1,4,1,4],DoEncode);
  579. // 1 --> 605151516051515160515
  580. SetText('1');
  581. AssertEquals('Test for "1"',[5,0,4,1,4,1,4,1,5,0,4,1,4,1,4,1,5,0,4,1,4],DoEncode);
  582. // 2 --> 605151605151515151515
  583. SetText('2');
  584. AssertEquals('Test for "2"',[5,0,4,1,4,1,5,0,4,1,4,1,4,1,4,1,4,1,4,1,4],DoEncode);
  585. // 3 --> 605151606060515160515
  586. SetText('3');
  587. AssertEquals('Test for "3"',[5,0,4,1,4,1,5,0,5,0,5,0,4,1,4,1,5,0,4,1,4],DoEncode);
  588. // 4 --> 605160515160515151515
  589. SetText('4');
  590. AssertEquals('Test for "4"',[5,0,4,1,5,0,4,1,4,1,5,0,4,1,4,1,4,1,4,1,4],DoEncode);
  591. // 5 --> 605160516051606060515
  592. SetText('5');
  593. AssertEquals('Test for "5"',[5,0,4,1,5,0,4,1,5,0,4,1,5,0,5,0,5,0,4,1,4],DoEncode);
  594. // 6 --> 605160605151606051515
  595. SetText('6');
  596. AssertEquals('Test for "6"',[5,0,4,1,5,0,5,0,4,1,4,1,5,0,5,0,4,1,4,1,4],DoEncode);
  597. // 7 --> 605160606051605160515
  598. SetText('7');
  599. AssertEquals('Test for "7"',[5,0,4,1,5,0,5,0,5,0,4,1,5,0,4,1,5,0,4,1,4],DoEncode);
  600. // 8 --> 606051515151605151515
  601. SetText('8');
  602. AssertEquals('Test for "8"',[5,0,5,0,4,1,4,1,4,1,4,1,5,0,4,1,4,1,4,1,4],DoEncode);
  603. // 9 --> 606051516051516060515
  604. SetText('9');
  605. AssertEquals('Test for "9"',[5,0,5,0,4,1,4,1,5,0,4,1,4,1,5,0,5,0,4,1,4],DoEncode);
  606. // 1234567800 --> 605151516051516051515160605160515151605160516060515160606060515151515151515151515160515151515
  607. SetText('1234567800');
  608. AssertEquals('Test for "1234567800"',[5,0,4,1,4,1,4,1,5,0,4,1,4,1,5,0,4,1,4,1,4,1,5,0,5,0,4,1,5,0,4,1,4,1,4,1,5,0,4,1,5,0,4,1,5,0,5,0,4,1,4,1,5,0,5,0,5,0,5,0,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,5,0,4,1,4,1,4,1,4,1,4],DoEncode);
  609. end;
  610. Procedure TTestBarcodes.TestCodePostNet;
  611. begin
  612. SetEncoding(bePostNet);
  613. // 0 --> 515151A1A1A15
  614. SetText('0');
  615. AssertEquals('Test for "0"',[4,1,4,1,4,1,8,1,8,1,8,1,4],DoEncode);
  616. // 1 --> 51A1A1A151515
  617. SetText('1');
  618. AssertEquals('Test for "1"',[4,1,8,1,8,1,8,1,4,1,4,1,4],DoEncode);
  619. // 2 --> 51A1A151A1515
  620. SetText('2');
  621. AssertEquals('Test for "2"',[4,1,8,1,8,1,4,1,8,1,4,1,4],DoEncode);
  622. // 3 --> 51A1A15151A15
  623. SetText('3');
  624. AssertEquals('Test for "3"',[4,1,8,1,8,1,4,1,4,1,8,1,4],DoEncode);
  625. // 4 --> 51A151A1A1515
  626. SetText('4');
  627. AssertEquals('Test for "4"',[4,1,8,1,4,1,8,1,8,1,4,1,4],DoEncode);
  628. // 5 --> 51A151A151A15
  629. SetText('5');
  630. AssertEquals('Test for "5"',[4,1,8,1,4,1,8,1,4,1,8,1,4],DoEncode);
  631. // 6 --> 51A15151A1A15
  632. SetText('6');
  633. AssertEquals('Test for "6"',[4,1,8,1,4,1,4,1,8,1,8,1,4],DoEncode);
  634. // 7 --> 5151A1A1A1515
  635. SetText('7');
  636. AssertEquals('Test for "7"',[4,1,4,1,8,1,8,1,8,1,4,1,4],DoEncode);
  637. // 8 --> 5151A1A151A15
  638. SetText('8');
  639. AssertEquals('Test for "8"',[4,1,4,1,8,1,8,1,4,1,8,1,4],DoEncode);
  640. // 9 --> 5151A151A1A15
  641. SetText('9');
  642. AssertEquals('Test for "9"',[4,1,4,1,8,1,4,1,8,1,8,1,4],DoEncode);
  643. // 1234567800 --> 51A1A1A15151A1A151A151A1A15151A1A151A1A151A151A151A1A15151A1A151A1A1A15151A1A151A15151A1A1A15151A1A1A15
  644. SetText('1234567800');
  645. AssertEquals('Test for "1234567800"',[4,1,8,1,8,1,8,1,4,1,4,1,8,1,8,1,4,1,8,1,4,1,8,1,8,1,4,1,4,1,8,1,8,1,4,1,8,1,8,1,4,1,8,1,4,1,8,1,4,1,8,1,8,1,4,1,4,1,8,1,8,1,4,1,8,1,8,1,8,1,4,1,4,1,8,1,8,1,4,1,8,1,4,1,4,1,8,1,8,1,8,1,4,1,4,1,8,1,8,1,8,1,4],DoEncode);
  646. end;
  647. {
  648. BarTypes : TBarTypeParams = (
  649. );
  650. }
  651. Class procedure TTestBarcodes.AssertEquals(Msg : String; AExpected,AActual : TBarColor);
  652. begin
  653. AssertEquals(Msg,GetEnumName(TypeInfo(TBarColor),Ord(AExpected)),
  654. GetEnumName(TypeInfo(TBarColor),Ord(AActual)));
  655. end;
  656. Class procedure TTestBarcodes.AssertEquals(Msg : String; AExpected,AActual : TBarWidth);
  657. begin
  658. AssertEquals(Msg,GetEnumName(TypeInfo(TBarWidth),Ord(AExpected)),
  659. GetEnumName(TypeInfo(TBarWidth),Ord(AActual)));
  660. end;
  661. Class procedure TTestBarcodes.AssertEquals(Msg : String; AExpected,AActual : TBarHeight);
  662. begin
  663. AssertEquals(Msg,GetEnumName(TypeInfo(TBarHeight),Ord(AExpected)),
  664. GetEnumName(TypeInfo(TBarHeight),Ord(AActual)));
  665. end;
  666. // AWidth : TBarWidth; AHeight : TBarheight);
  667. // AColor : TBarColor; AWidth : TBarWidth; AHeight : TBarheight
  668. procedure TTestBarcodes.AssertParams(aType : TBarType; AColor : TBarColor; AWidth : TBarWidth; AHeight : TBarheight);
  669. Var
  670. S : String;
  671. P : TBarParams;
  672. begin
  673. S:=Format('Bar type %d: ',[aType]);
  674. P:=BarTypeToBarParams(aType);
  675. AssertEquals(S+'Color',aColor,P.c);
  676. AssertEquals(S+'Width',aWidth,P.w);
  677. AssertEquals(S+'Height',aHeight,P.h);
  678. end;
  679. procedure TTestBarcodes.CheckParamsType;
  680. begin
  681. AssertParams(0, bcWhite, bw100, bhFull);
  682. AssertParams(1, bcWhite, bwWeighted, bhFull);
  683. AssertParams(2, bcWhite, bw150, bhFull);
  684. AssertParams(3, bcWhite, bw200, bhFull);
  685. AssertParams(4, bcBlack, bw100, bhFull);
  686. AssertParams(5, bcBlack, bwWeighted, bhFull);
  687. AssertParams(6, bcBlack, bw150, bhFull);
  688. AssertParams(7, bcBlack, bw200, bhFull);
  689. AssertParams(8, bcBlack, bw100, bhTwoFifth);
  690. AssertParams(9, bcBlack, bwWeighted, bhTwoFifth);
  691. AssertParams(10, bcBlack, bw150, bhTwoFifth);
  692. AssertParams(11, bcBlack, bw200, bhTwoFifth);
  693. end;
  694. procedure TTestBarcodes.CheckNumerictypes;
  695. begin
  696. AssertTrue('Numerical types',NumericalEncodings=[beEAN8,beEAN13,
  697. be2of5industrial,be2of5interleaved, be2of5matrix,
  698. bePostNet,
  699. beMSI,
  700. be128C]);
  701. end;
  702. initialization
  703. RegisterTest(TTestBarcodes);
  704. end.