123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. const test = require('tap').test
  2. , prr = require('./')
  3. test('test prr(o, key, value) form', function (t) {
  4. t.plan(2)
  5. var o = {}
  6. prr(o, 'foo', 'bar')
  7. t.equal(o.foo, 'bar', 'correct value')
  8. t.deepEqual(
  9. Object.getOwnPropertyDescriptor(o, 'foo')
  10. , {
  11. enumerable : false
  12. , configurable : false
  13. , writable : false
  14. , value : 'bar'
  15. }
  16. , 'correct property descriptor'
  17. )
  18. t.end()
  19. })
  20. test('test prr(o, { key: value }) form', function (t) {
  21. t.plan(2)
  22. var o = {}
  23. prr(o, { foo: 'bar' })
  24. t.equal(o.foo, 'bar', 'correct value')
  25. t.deepEqual(
  26. Object.getOwnPropertyDescriptor(o, 'foo')
  27. , {
  28. enumerable : false
  29. , configurable : false
  30. , writable : false
  31. , value : 'bar'
  32. }
  33. , 'correct property descriptor'
  34. )
  35. t.end()
  36. })
  37. test('test multiple key:value pairs', function (t) {
  38. var o = { foo: 'bar' }
  39. prr(o, { one: 'ONE', two: 'TWO', obj: { o: 'o' }})
  40. t.deepEqual(o, { foo: 'bar' }, 'properties are not enumerable')
  41. t.equal(o.one, 'ONE', 'correctly set property')
  42. t.equal(o.two, 'TWO', 'correctly set property')
  43. t.deepEqual(o.obj, { o: 'o' }, 'correctly set property')
  44. ;[ 'one', 'two', 'obj' ].forEach(function (p) {
  45. t.deepEqual(
  46. Object.getOwnPropertyDescriptor(o, p)
  47. , {
  48. enumerable : false
  49. , configurable : false
  50. , writable : false
  51. , value : p == 'obj' ? { o: 'o' } : p.toUpperCase()
  52. }
  53. , 'correct property descriptor'
  54. )
  55. })
  56. t.end()
  57. })
  58. test('test descriptor options', function (t) {
  59. var o = {}
  60. prr(o, 'foo', 'bar', {
  61. enumerable : true
  62. , configurable : false
  63. })
  64. t.equal(o.foo, 'bar', 'correct value')
  65. t.deepEqual(
  66. Object.getOwnPropertyDescriptor(o, 'foo')
  67. , {
  68. enumerable : true
  69. , configurable : false
  70. , writable : false
  71. , value : 'bar'
  72. }
  73. , 'correct property descriptor'
  74. )
  75. prr(o, 'foo2', 'bar2', {
  76. enumerable : true
  77. , configurable : true
  78. , writable : false
  79. })
  80. t.equal(o.foo2, 'bar2', 'correct value')
  81. t.deepEqual(
  82. Object.getOwnPropertyDescriptor(o, 'foo2')
  83. , {
  84. enumerable : true
  85. , configurable : true
  86. , writable : false
  87. , value : 'bar2'
  88. }
  89. , 'correct property descriptor'
  90. )
  91. prr(o, 'foo3', 'bar3', {
  92. enumerable : true
  93. , configurable : true
  94. , writable : true
  95. })
  96. t.equal(o.foo3, 'bar3', 'correct value')
  97. t.deepEqual(
  98. Object.getOwnPropertyDescriptor(o, 'foo3')
  99. , {
  100. enumerable : true
  101. , configurable : true
  102. , writable : true
  103. , value : 'bar3'
  104. }
  105. , 'correct property descriptor'
  106. )
  107. t.end()
  108. })
  109. test('test descriptor options, string form', function (t) {
  110. var o = {}
  111. prr(o, 'foo', 'bar', 'e')
  112. t.equal(o.foo, 'bar', 'correct value')
  113. t.deepEqual(
  114. Object.getOwnPropertyDescriptor(o, 'foo')
  115. , {
  116. enumerable : true
  117. , configurable : false
  118. , writable : false
  119. , value : 'bar'
  120. }
  121. , 'correct property descriptor'
  122. )
  123. prr(o, 'foo2', 'bar2', 'ec')
  124. t.equal(o.foo2, 'bar2', 'correct value')
  125. t.deepEqual(
  126. Object.getOwnPropertyDescriptor(o, 'foo2')
  127. , {
  128. enumerable : true
  129. , configurable : true
  130. , writable : false
  131. , value : 'bar2'
  132. }
  133. , 'correct property descriptor'
  134. )
  135. prr(o, 'foo3', 'bar3', 'ecw')
  136. t.equal(o.foo3, 'bar3', 'correct value')
  137. t.deepEqual(
  138. Object.getOwnPropertyDescriptor(o, 'foo3')
  139. , {
  140. enumerable : true
  141. , configurable : true
  142. , writable : true
  143. , value : 'bar3'
  144. }
  145. , 'correct property descriptor'
  146. )
  147. t.end()
  148. })