at.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /* eslint no-useless-call: "off" */
  2. // See tests at https://github.com/mathiasbynens/String.prototype.at
  3. "use strict";
  4. module.exports = function (t, a) {
  5. a(t.length, 1, "Length");
  6. a.h1("BMP");
  7. a(t.call("abc\uD834\uDF06def", -Infinity), "", "-Infinity");
  8. a(t.call("abc\uD834\uDF06def", -1), "", "-1");
  9. a(t.call("abc\uD834\uDF06def", -0), "a", "-0");
  10. a(t.call("abc\uD834\uDF06def", +0), "a", "+0");
  11. a(t.call("abc\uD834\uDF06def", 1), "b", "1");
  12. a(t.call("abc\uD834\uDF06def", 3), "\uD834\uDF06", "3");
  13. a(t.call("abc\uD834\uDF06def", 4), "\uDF06", "4");
  14. a(t.call("abc\uD834\uDF06def", 5), "d", "5");
  15. a(t.call("abc\uD834\uDF06def", 42), "", "42");
  16. a(t.call("abc\uD834\uDF06def", Number(Infinity)), "", "+Infinity");
  17. a(t.call("abc\uD834\uDF06def", null), "a", "null");
  18. a(t.call("abc\uD834\uDF06def", undefined), "a", "undefined");
  19. a(t.call("abc\uD834\uDF06def"), "a", "No argument");
  20. a(t.call("abc\uD834\uDF06def", false), "a", "false");
  21. a(t.call("abc\uD834\uDF06def", NaN), "a", "NaN");
  22. a(t.call("abc\uD834\uDF06def", ""), "a", "Empty string");
  23. a(t.call("abc\uD834\uDF06def", "_"), "a", "_");
  24. a(t.call("abc\uD834\uDF06def", "1"), "b", "'1'");
  25. a(t.call("abc\uD834\uDF06def", []), "a", "[]");
  26. a(t.call("abc\uD834\uDF06def", {}), "a", "{}");
  27. a(t.call("abc\uD834\uDF06def", -0.9), "a", "-0.9");
  28. a(t.call("abc\uD834\uDF06def", 1.9), "b", "1.9");
  29. a(t.call("abc\uD834\uDF06def", 7.9), "f", "7.9");
  30. a(t.call("abc\uD834\uDF06def", Math.pow(2, 32)), "", "Big number");
  31. a.h1("Astral symbol");
  32. a(t.call("\uD834\uDF06def", -Infinity), "", "-Infinity");
  33. a(t.call("\uD834\uDF06def", -1), "", "-1");
  34. a(t.call("\uD834\uDF06def", -0), "\uD834\uDF06", "-0");
  35. a(t.call("\uD834\uDF06def", +0), "\uD834\uDF06", "+0");
  36. a(t.call("\uD834\uDF06def", 1), "\uDF06", "1");
  37. a(t.call("\uD834\uDF06def", 2), "d", "2");
  38. a(t.call("\uD834\uDF06def", 3), "e", "3");
  39. a(t.call("\uD834\uDF06def", 4), "f", "4");
  40. a(t.call("\uD834\uDF06def", 42), "", "42");
  41. a(t.call("\uD834\uDF06def", Number(Infinity)), "", "+Infinity");
  42. a(t.call("\uD834\uDF06def", null), "\uD834\uDF06", "null");
  43. a(t.call("\uD834\uDF06def", undefined), "\uD834\uDF06", "undefined");
  44. a(t.call("\uD834\uDF06def"), "\uD834\uDF06", "No arguments");
  45. a(t.call("\uD834\uDF06def", false), "\uD834\uDF06", "false");
  46. a(t.call("\uD834\uDF06def", NaN), "\uD834\uDF06", "NaN");
  47. a(t.call("\uD834\uDF06def", ""), "\uD834\uDF06", "Empty string");
  48. a(t.call("\uD834\uDF06def", "_"), "\uD834\uDF06", "_");
  49. a(t.call("\uD834\uDF06def", "1"), "\uDF06", "'1'");
  50. a.h1("Lone high surrogates");
  51. a(t.call("\uD834abc", -Infinity), "", "-Infinity");
  52. a(t.call("\uD834abc", -1), "", "-1");
  53. a(t.call("\uD834abc", -0), "\uD834", "-0");
  54. a(t.call("\uD834abc", +0), "\uD834", "+0");
  55. a(t.call("\uD834abc", 1), "a", "1");
  56. a(t.call("\uD834abc", 42), "", "42");
  57. a(t.call("\uD834abc", Number(Infinity)), "", "Infinity");
  58. a(t.call("\uD834abc", null), "\uD834", "null");
  59. a(t.call("\uD834abc", undefined), "\uD834", "undefined");
  60. a(t.call("\uD834abc"), "\uD834", "No arguments");
  61. a(t.call("\uD834abc", false), "\uD834", "false");
  62. a(t.call("\uD834abc", NaN), "\uD834", "NaN");
  63. a(t.call("\uD834abc", ""), "\uD834", "Empty string");
  64. a(t.call("\uD834abc", "_"), "\uD834", "_");
  65. a(t.call("\uD834abc", "1"), "a", "'a'");
  66. a.h1("Lone low surrogates");
  67. a(t.call("\uDF06abc", -Infinity), "", "-Infinity");
  68. a(t.call("\uDF06abc", -1), "", "-1");
  69. a(t.call("\uDF06abc", -0), "\uDF06", "-0");
  70. a(t.call("\uDF06abc", +0), "\uDF06", "+0");
  71. a(t.call("\uDF06abc", 1), "a", "1");
  72. a(t.call("\uDF06abc", 42), "", "42");
  73. a(t.call("\uDF06abc", Number(Infinity)), "", "+Infinity");
  74. a(t.call("\uDF06abc", null), "\uDF06", "null");
  75. a(t.call("\uDF06abc", undefined), "\uDF06", "undefined");
  76. a(t.call("\uDF06abc"), "\uDF06", "No arguments");
  77. a(t.call("\uDF06abc", false), "\uDF06", "false");
  78. a(t.call("\uDF06abc", NaN), "\uDF06", "NaN");
  79. a(t.call("\uDF06abc", ""), "\uDF06", "Empty string");
  80. a(t.call("\uDF06abc", "_"), "\uDF06", "_");
  81. a(t.call("\uDF06abc", "1"), "a", "'1'");
  82. a.h1("Context");
  83. a.throws(
  84. function () {
  85. t.call(undefined);
  86. },
  87. TypeError,
  88. "Undefined"
  89. );
  90. a.throws(
  91. function () {
  92. t.call(undefined, 4);
  93. },
  94. TypeError,
  95. "Undefined + argument"
  96. );
  97. a.throws(
  98. function () {
  99. t.call(null);
  100. },
  101. TypeError,
  102. "Null"
  103. );
  104. a.throws(
  105. function () {
  106. t.call(null, 4);
  107. },
  108. TypeError,
  109. "Null + argument"
  110. );
  111. a(t.call(42, 0), "4", "Number #1");
  112. a(t.call(42, 1), "2", "Number #2");
  113. a(
  114. t.call(
  115. {
  116. toString: function () {
  117. return "abc";
  118. }
  119. },
  120. 2
  121. ),
  122. "c",
  123. "Object"
  124. );
  125. };