TestBytes.hx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package unit;
  2. class TestBytes extends Test {
  3. function test() {
  4. var b = haxe.io.Bytes.alloc(10);
  5. eq(b.length,10);
  6. // get-set
  7. for( i in 0...10 )
  8. eq(b.get(i),0);
  9. unspec(function() b.get(-1));
  10. unspec(function() b.get(11));
  11. b.set(1,20);
  12. eq(b.get(1),20);
  13. unspec(function() b.set(-1,20));
  14. unspec(function() b.set(11,20));
  15. unspec(function() b.set(0,1000));
  16. b.set(1,0xF756);
  17. eq(b.get(1),0x56);
  18. // ofString
  19. var b2 = haxe.io.Bytes.ofString("ABCD");
  20. eq(b2.length,4);
  21. eq(b2.get(0),"A".charCodeAt(0));
  22. eq(b2.get(1),"B".charCodeAt(0));
  23. eq(b2.get(2),"C".charCodeAt(0));
  24. eq(b2.get(3),"D".charCodeAt(0));
  25. var b3 = haxe.io.Bytes.ofString("é");
  26. eq(b3.length,2);
  27. eq(b3.get(0),0xC3);
  28. eq(b3.get(1),0xA9);
  29. // blit
  30. b.blit(3,b2,1,3);
  31. eq(b.get(2),0);
  32. eq(b.get(3),"B".charCodeAt(0));
  33. eq(b.get(4),"C".charCodeAt(0));
  34. eq(b.get(5),"D".charCodeAt(0));
  35. eq(b.get(6),0);
  36. exc(function() b.blit(-1,b2,1,3));
  37. exc(function() b.blit(0,b2,2,3));
  38. exc(function() b.blit(9,b2,1,3));
  39. exc(function() b.blit(0,b2,-1,3));
  40. exc(function() b.blit(0,b2,1,-1));
  41. exc(function() b.blit(0,b2,1,20));
  42. // forward
  43. b.blit(4,b,3,3);
  44. eq(b.get(2),0);
  45. eq(b.get(3),"B".charCodeAt(0));
  46. eq(b.get(4),"B".charCodeAt(0));
  47. eq(b.get(5),"C".charCodeAt(0));
  48. eq(b.get(6),"D".charCodeAt(0));
  49. eq(b.get(7),0);
  50. // backward
  51. b.blit(3,b,5,3);
  52. eq(b.get(2),0);
  53. eq(b.get(3),"C".charCodeAt(0));
  54. eq(b.get(4),"D".charCodeAt(0));
  55. eq(b.get(5),0);
  56. eq(b.get(6),"D".charCodeAt(0));
  57. eq(b.get(7),0);
  58. // readString
  59. var bs = haxe.io.Bytes.ofString("One é accent");
  60. bs.set(3,0); // cut betwen "One" and "é"
  61. eq(bs.readString(0,3),"One");
  62. eq(bs.readString(4,bs.length-4),"é accent");
  63. eq(bs.readString(4,2),"é");
  64. exc(function() bs.readString(-1,1));
  65. exc(function() bs.readString(1,20));
  66. unspec(function() bs.readString(4,1)); // might not allow to cut UTF8 char
  67. unspec(function() bs.readString(1,5)); // the handling of \0 might vary
  68. /**
  69. HANDLING of 0x00 in string :
  70. Flash8 : ignore
  71. Flash9 : cut string
  72. JS/FFOX, JS/IE7, Neko : ok (\0 displayed as ? on Firefox, string cut on IE7)
  73. JS/IE6 : todo
  74. JS/Safari : todo
  75. JS/Opera : todo
  76. **/
  77. // toString
  78. eq(b2.toString(),"ABCD");
  79. // compare
  80. var strings = ["ABCD","ABDC","ABCDE","ABC","BC","AAAAAAAAA"];
  81. // NOTE : Flash<9 has a bug when comparing with the empty string
  82. for( s1 in strings )
  83. for( s2 in strings ) {
  84. var c = haxe.io.Bytes.ofString(s1).compare(haxe.io.Bytes.ofString(s2));
  85. infos("compare "+s1+" and "+s2);
  86. eq( c < 0, s1 < s2 );
  87. eq( c > 0, s1 > s2 );
  88. eq( c == 0, s1 == s2 );
  89. }
  90. infos(null);
  91. // sub
  92. var bs = haxe.io.Bytes.ofString("ABCDEFGH");
  93. eq( bs.sub(1,3).compare(haxe.io.Bytes.ofString("BCD")), 0 );
  94. exc(function() bs.sub(-1,3));
  95. exc(function() bs.sub(1,-1));
  96. exc(function() bs.sub(1,10));
  97. }
  98. function testBuffer() {
  99. var out = new haxe.io.BytesBuffer();
  100. out.add( haxe.io.Bytes.ofString("ABCDEF") );
  101. for( i in 1...6 )
  102. out.addByte(i);
  103. out.addBytes( haxe.io.Bytes.ofString("ABCDEF"),1,3 );
  104. var b = out.getBytes();
  105. var str = "ABCDEF\x01\x02\x03\x04\x05BCD";
  106. eq( b.length, str.length );
  107. for( i in 0...str.length )
  108. eq( b.get(i), str.charCodeAt(i) );
  109. }
  110. function testInput() {
  111. var bs = haxe.io.Bytes.ofString("One é accent");
  112. var input = new haxe.io.BytesInput(bs);
  113. //readAll
  114. eq(input.readAll().toString(), "One é accent");
  115. }
  116. }