stringpad.js 5.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
  6. var tests = [
  7. {
  8. name: "String.prototype.padStart/padEnd should exist and constructed properly",
  9. body: function () {
  10. assert.isTrue(String.prototype.hasOwnProperty('padStart'), "String.prototype should have a padStart method");
  11. assert.isTrue(String.prototype.hasOwnProperty('padEnd'), "String.prototype should have a padEnd method");
  12. assert.areEqual(1, String.prototype.padStart.length, "padStart method takes one argument");
  13. assert.areEqual(1, String.prototype.padEnd.length, "padEnd method takes one argument");
  14. assert.areEqual("padStart", String.prototype.padStart.name, "padStart.name is 'padStart'");
  15. assert.areEqual("padEnd", String.prototype.padEnd.name, "padEnd.name is 'padEnd'");
  16. var descriptor = Object.getOwnPropertyDescriptor(String.prototype, 'padStart');
  17. assert.isTrue(descriptor.writable, "writable(padStart) must be true");
  18. assert.isFalse(descriptor.enumerable, "enumerable(padStart) must be false");
  19. assert.isTrue(descriptor.configurable, "configurable(padStart) must be true");
  20. descriptor = Object.getOwnPropertyDescriptor(String.prototype, 'padEnd');
  21. assert.isTrue(descriptor.writable, "writable(padEnd) must be true");
  22. assert.isFalse(descriptor.enumerable, "enumerable(padEnd) must be false");
  23. assert.isTrue(descriptor.configurable, "configurable(padEnd) must be true");
  24. }
  25. },
  26. {
  27. name: "String.prototype.padStart functionality",
  28. body: function () {
  29. assert.areEqual('foo'.padStart(), 'foo', "No arguments to padStart will not affect string");
  30. assert.areEqual('foo'.padStart(1), 'foo', "No padding added if maxLength (first argument) is less than the length of actual string");
  31. assert.areEqual('foo'.padStart(-1), 'foo', "No padding added if maxLength (first argument), negative, is less than the length of actual string");
  32. assert.areEqual('foo'.padStart(3), 'foo', "No padding added if maxLength (first argument) is equal to the length of actual string");
  33. assert.areEqual('foo'.padStart(4), ' foo', "String with one ' ' (SPACE) as pad is returned");
  34. assert.areEqual('foo'.padStart(10), ' foo', "String of length 10, with spaces filled as padding, is returned");
  35. assert.areEqual('foo'.padStart(10, ''), 'foo', "No padding added if the fillString is empty string");
  36. assert.areEqual('foo'.padStart(10, undefined), ' foo', "'undefined' fillString - string of length 10, with spaces filled as padding, is returned");
  37. assert.areEqual('foo'.padStart(10, ' '), ' foo', "fillString as one space - string of length 10, with spaces filled as padding, is returned");
  38. assert.areEqual('foo'.padStart(4, '123'), '1foo', "String of length 4, with only one character from fillString added as a padding, is returned");
  39. assert.areEqual('foo'.padStart(10, '123'), '1231231foo', "String of length 10, with repeatedly adding characters from fillString to create enough padding, is returned");
  40. }
  41. },
  42. {
  43. name: "String.prototype.padEnd functionality",
  44. body: function () {
  45. assert.areEqual('foo'.padEnd(), 'foo', "No arguments to padEnd will not affect string");
  46. assert.areEqual('foo'.padEnd(1), 'foo', "No padding added if maxLength (first argument) is less than the length of actual string");
  47. assert.areEqual('foo'.padEnd(-1), 'foo', "No padding added if maxLength (first argument), negative, is less than the length of actual string");
  48. assert.areEqual('foo'.padEnd(3), 'foo', "No padding added if maxLength (first argument) is equal to the length of actual string");
  49. assert.areEqual('foo'.padEnd(4), 'foo ', "String with one ' ' (SPACE) as pad is returned");
  50. assert.areEqual('foo'.padEnd(10), 'foo ', "String of length 10, with spaces filled as padding, is returned");
  51. assert.areEqual('foo'.padEnd(10, ''), 'foo', "No padding added if the fillString is empty string");
  52. assert.areEqual('foo'.padEnd(10, undefined), 'foo ', "'undefined' fillString - string of length 10, with spaces filled as padding, is returned");
  53. assert.areEqual('foo'.padEnd(10, ' '), 'foo ', "fillString as one space - string of length 10, with spaces filled as padding, is returned");
  54. assert.areEqual('foo'.padEnd(4, '123'), 'foo1', "String of length 4, with only one character from fillString added as a padding, is returned");
  55. assert.areEqual('foo'.padEnd(10, '123'), 'foo1231231', "String of length 10, with repeatedly adding characters from fillString to create enough padding, is returned");
  56. }
  57. },
  58. {
  59. name: "String.prototype.padStart out of bound scenario",
  60. body: function () {
  61. assert.throws(() => { 'foo'.padStart(2147483647);}, RangeError, "index is out of bound", "String length is out of bound");
  62. }
  63. }
  64. ];
  65. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });