builtin_string_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package goja
  2. import "testing"
  3. func TestSubstr(t *testing.T) {
  4. const SCRIPT = `
  5. assert.sameValue('abc'.substr(0, false), '', 'start: 0, length: false');
  6. assert.sameValue('abc'.substr(1, false), '', 'start: 1, length: false');
  7. assert.sameValue('abc'.substr(2, false), '', 'start: 2, length: false');
  8. assert.sameValue('abc'.substr(3, false), '', 'start: 3, length: false');
  9. assert.sameValue('abc'.substr(0, NaN), '', 'start: 0, length: NaN');
  10. assert.sameValue('abc'.substr(1, NaN), '', 'start: 1, length: NaN');
  11. assert.sameValue('abc'.substr(2, NaN), '', 'start: 2, length: NaN');
  12. assert.sameValue('abc'.substr(3, NaN), '', 'start: 3, length: NaN');
  13. assert.sameValue('abc'.substr(0, ''), '', 'start: 0, length: ""');
  14. assert.sameValue('abc'.substr(1, ''), '', 'start: 1, length: ""');
  15. assert.sameValue('abc'.substr(2, ''), '', 'start: 2, length: ""');
  16. assert.sameValue('abc'.substr(3, ''), '', 'start: 3, length: ""');
  17. assert.sameValue('abc'.substr(0, null), '', 'start: 0, length: null');
  18. assert.sameValue('abc'.substr(1, null), '', 'start: 1, length: null');
  19. assert.sameValue('abc'.substr(2, null), '', 'start: 2, length: null');
  20. assert.sameValue('abc'.substr(3, null), '', 'start: 3, length: null');
  21. assert.sameValue('abc'.substr(0, -1), '', '0, -1');
  22. assert.sameValue('abc'.substr(0, -2), '', '0, -2');
  23. assert.sameValue('abc'.substr(0, -3), '', '0, -3');
  24. assert.sameValue('abc'.substr(0, -4), '', '0, -4');
  25. assert.sameValue('abc'.substr(1, -1), '', '1, -1');
  26. assert.sameValue('abc'.substr(1, -2), '', '1, -2');
  27. assert.sameValue('abc'.substr(1, -3), '', '1, -3');
  28. assert.sameValue('abc'.substr(1, -4), '', '1, -4');
  29. assert.sameValue('abc'.substr(2, -1), '', '2, -1');
  30. assert.sameValue('abc'.substr(2, -2), '', '2, -2');
  31. assert.sameValue('abc'.substr(2, -3), '', '2, -3');
  32. assert.sameValue('abc'.substr(2, -4), '', '2, -4');
  33. assert.sameValue('abc'.substr(3, -1), '', '3, -1');
  34. assert.sameValue('abc'.substr(3, -2), '', '3, -2');
  35. assert.sameValue('abc'.substr(3, -3), '', '3, -3');
  36. assert.sameValue('abc'.substr(3, -4), '', '3, -4');
  37. assert.sameValue('abc'.substr(0, 1), 'a', '0, 1');
  38. assert.sameValue('abc'.substr(0, 2), 'ab', '0, 1');
  39. assert.sameValue('abc'.substr(0, 3), 'abc', '0, 1');
  40. assert.sameValue('abc'.substr(0, 4), 'abc', '0, 1');
  41. assert.sameValue('abc'.substr(1, 1), 'b', '1, 1');
  42. assert.sameValue('abc'.substr(1, 2), 'bc', '1, 1');
  43. assert.sameValue('abc'.substr(1, 3), 'bc', '1, 1');
  44. assert.sameValue('abc'.substr(1, 4), 'bc', '1, 1');
  45. assert.sameValue('abc'.substr(2, 1), 'c', '2, 1');
  46. assert.sameValue('abc'.substr(2, 2), 'c', '2, 1');
  47. assert.sameValue('abc'.substr(2, 3), 'c', '2, 1');
  48. assert.sameValue('abc'.substr(2, 4), 'c', '2, 1');
  49. assert.sameValue('abc'.substr(3, 1), '', '3, 1');
  50. assert.sameValue('abc'.substr(3, 2), '', '3, 1');
  51. assert.sameValue('abc'.substr(3, 3), '', '3, 1');
  52. assert.sameValue('abc'.substr(3, 4), '', '3, 1');
  53. assert.sameValue('abc'.substr(0), 'abc', 'start: 0, length: unspecified');
  54. assert.sameValue('abc'.substr(1), 'bc', 'start: 1, length: unspecified');
  55. assert.sameValue('abc'.substr(2), 'c', 'start: 2, length: unspecified');
  56. assert.sameValue('abc'.substr(3), '', 'start: 3, length: unspecified');
  57. assert.sameValue(
  58. 'abc'.substr(0, undefined), 'abc', 'start: 0, length: undefined'
  59. );
  60. assert.sameValue(
  61. 'abc'.substr(1, undefined), 'bc', 'start: 1, length: undefined'
  62. );
  63. assert.sameValue(
  64. 'abc'.substr(2, undefined), 'c', 'start: 2, length: undefined'
  65. );
  66. assert.sameValue(
  67. 'abc'.substr(3, undefined), '', 'start: 3, length: undefined'
  68. );
  69. assert.sameValue('A—', String.fromCharCode(65, 0x2014));
  70. `
  71. testScript1(TESTLIB+SCRIPT, _undefined, t)
  72. }