util_lang_spec.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. var _ = require('../../../src/util')
  2. describe('Util - Language Enhancement', function () {
  3. it('guard', function () {
  4. expect(_.guard(1)).toBe(1)
  5. expect(_.guard(null)).toBe(null)
  6. expect(_.guard(undefined)).toBe('')
  7. })
  8. it('guardNumber', function () {
  9. expect(_.guardNumber('12')).toBe(12)
  10. expect(_.guardNumber('1e5')).toBe(1e5)
  11. expect(_.guardNumber('0x2F')).toBe(0x2F)
  12. expect(_.guardNumber(null)).toBe(null)
  13. expect(_.guardNumber(true)).toBe(true)
  14. expect(_.guardNumber('hello')).toBe('hello')
  15. })
  16. it('bind', function () {
  17. var original = function (a) {
  18. return this.a + a
  19. }
  20. var ctx = { a: 'ctx a ' }
  21. var bound = _.bind(original, ctx)
  22. var res = bound('arg a')
  23. expect(res).toBe('ctx a arg a')
  24. })
  25. it('toArray', function () {
  26. // should make a copy of original array
  27. var arr = [1,2,3]
  28. var res = _.toArray(arr)
  29. expect(Array.isArray(res)).toBe(true)
  30. expect(res.toString()).toEqual('1,2,3')
  31. expect(res).not.toBe(arr)
  32. // should work on arguments
  33. ;(function () {
  34. var res = _.toArray(arguments)
  35. expect(Array.isArray(res)).toBe(true)
  36. expect(res.toString()).toEqual('1,2,3')
  37. })(1,2,3)
  38. })
  39. it('extend', function () {
  40. var from = {a:1,b:2}
  41. var to = {}
  42. _.extend(to, from)
  43. expect(to.a).toBe(from.a)
  44. expect(to.b).toBe(from.b)
  45. })
  46. it('deepMixin', function () {
  47. var from = Object.create({c:123})
  48. var to = {}
  49. Object.defineProperty(from, 'a', {
  50. enumerable: false,
  51. configurable: true,
  52. get: function () {
  53. return 'AAA'
  54. }
  55. })
  56. Object.defineProperty(from, 'b', {
  57. enumerable: true,
  58. configurable: false,
  59. value: 'BBB'
  60. })
  61. _.deepMixin(to, from)
  62. var descA = Object.getOwnPropertyDescriptor(to, 'a')
  63. var descB = Object.getOwnPropertyDescriptor(to, 'b')
  64. expect(descA.enumerable).toBe(false)
  65. expect(descA.configurable).toBe(true)
  66. expect(to.a).toBe('AAA')
  67. expect(descB.enumerable).toBe(true)
  68. expect(descB.configurable).toBe(false)
  69. expect(to.b).toBe('BBB')
  70. expect(to.c).toBeUndefined()
  71. })
  72. it('proxy', function () {
  73. var to = { test2: 'to' }
  74. var from = { test2: 'from' }
  75. var val = '123'
  76. Object.defineProperty(from, 'test', {
  77. get: function () {
  78. return val
  79. },
  80. set: function (v) {
  81. val = v
  82. }
  83. })
  84. _.proxy(to, from, 'test')
  85. expect(to.test).toBe(val)
  86. to.test = '234'
  87. expect(val).toBe('234')
  88. expect(to.test).toBe(val)
  89. // should not overwrite existing property
  90. _.proxy(to, from, 'test2')
  91. expect(to.test2).toBe('to')
  92. })
  93. it('isObject', function () {
  94. expect(_.isObject({})).toBe(true)
  95. expect(_.isObject([])).toBe(false)
  96. expect(_.isObject(null)).toBe(false)
  97. if (_.inBrowser) {
  98. expect(_.isObject(window)).toBe(false)
  99. }
  100. })
  101. it('isArray', function () {
  102. expect(_.isArray([])).toBe(true)
  103. expect(_.isArray({})).toBe(false)
  104. expect(_.isArray(arguments)).toBe(false)
  105. })
  106. it('define', function () {
  107. var obj = {}
  108. _.define(obj, 'test', 123)
  109. expect(obj.test).toBe(123)
  110. var desc = Object.getOwnPropertyDescriptor(obj, 'test')
  111. expect(desc.enumerable).toBe(false)
  112. _.define(obj, 'test2', 123, true)
  113. expect(obj.test2).toBe(123)
  114. var desc = Object.getOwnPropertyDescriptor(obj, 'test2')
  115. expect(desc.enumerable).toBe(true)
  116. })
  117. it('augment', function () {
  118. if ('__proto__' in {}) {
  119. var target = {}
  120. var proto = {}
  121. _.augment(target, proto)
  122. expect(target.__proto__).toBe(proto)
  123. } else {
  124. expect(_.augment).toBe(_.deepMixin)
  125. }
  126. })
  127. })