lang_spec.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. var _ = require('src/util')
  2. describe('Util - Language Enhancement', function () {
  3. it('hasOwn', function () {
  4. var obj1 = { a: 1 }
  5. expect(_.hasOwn(obj1, 'a')).toBe(true)
  6. var obj2 = Object.create(null)
  7. obj2.a = 2
  8. expect(_.hasOwn(obj2, 'a')).toBe(true)
  9. })
  10. it('isLiteral', function () {
  11. expect(_.isLiteral('123')).toBe(true)
  12. expect(_.isLiteral('12.3')).toBe(true)
  13. expect(_.isLiteral('true')).toBe(true)
  14. expect(_.isLiteral(' false ')).toBe(true)
  15. expect(_.isLiteral('"foo"')).toBe(true)
  16. expect(_.isLiteral(" 'foo' ")).toBe(true)
  17. expect(_.isLiteral('a.b.c')).toBe(false)
  18. expect(_.isLiteral('1 + 1')).toBe(false)
  19. })
  20. it('toString', function () {
  21. expect(_._toString('foo')).toBe('foo')
  22. expect(_._toString(1.234)).toBe('1.234')
  23. expect(_._toString(null)).toBe('')
  24. expect(_._toString(undefined)).toBe('')
  25. })
  26. it('toNumber', function () {
  27. expect(_.toNumber('12')).toBe(12)
  28. expect(_.toNumber('1e5')).toBe(1e5)
  29. expect(_.toNumber('0x2F')).toBe(0x2F)
  30. expect(_.toNumber(null)).toBe(null)
  31. expect(_.toNumber(true)).toBe(true)
  32. expect(_.toNumber('hello')).toBe('hello')
  33. })
  34. it('strip quotes', function () {
  35. expect(_.stripQuotes('"123"')).toBe('123')
  36. expect(_.stripQuotes("'fff'")).toBe('fff')
  37. expect(_.stripQuotes("'fff")).toBe("'fff")
  38. })
  39. it('camelize', function () {
  40. expect(_.camelize('abc')).toBe('abc')
  41. expect(_.camelize('some-long-name')).toBe('someLongName')
  42. })
  43. it('hyphenate', function () {
  44. expect(_.hyphenate('fooBar')).toBe('foo-bar')
  45. expect(_.hyphenate('a1BfC')).toBe('a1-bf-c')
  46. expect(_.hyphenate('already-With-Hyphen')).toBe('already-with-hyphen')
  47. expect(_.hyphenate('ABigApple')).toBe('a-big-apple')
  48. })
  49. it('classify', function () {
  50. expect(_.classify('abc')).toBe('Abc')
  51. expect(_.classify('foo-bar')).toBe('FooBar')
  52. expect(_.classify('foo_bar')).toBe('FooBar')
  53. expect(_.classify('foo/bar')).toBe('FooBar')
  54. })
  55. it('bind', function () {
  56. var original = function (a) {
  57. return this.a + a
  58. }
  59. var ctx = { a: 'ctx a ' }
  60. var bound = _.bind(original, ctx)
  61. var res = bound('arg a')
  62. expect(res).toBe('ctx a arg a')
  63. })
  64. it('toArray', function () {
  65. // should make a copy of original array
  66. var arr = [1, 2, 3]
  67. var res = _.toArray(arr)
  68. expect(Array.isArray(res)).toBe(true)
  69. expect(res.toString()).toEqual('1,2,3')
  70. expect(res).not.toBe(arr)
  71. // should work on arguments
  72. ;(function () {
  73. var res = _.toArray(arguments)
  74. expect(Array.isArray(res)).toBe(true)
  75. expect(res.toString()).toEqual('1,2,3')
  76. })(1, 2, 3)
  77. })
  78. it('extend', function () {
  79. var from = {a: 1, b: 2}
  80. var to = {}
  81. var res = _.extend(to, from)
  82. expect(to.a).toBe(from.a)
  83. expect(to.b).toBe(from.b)
  84. expect(res).toBe(to)
  85. })
  86. it('isObject', function () {
  87. expect(_.isObject({})).toBe(true)
  88. expect(_.isObject([])).toBe(true)
  89. expect(_.isObject(null)).toBeFalsy()
  90. expect(_.isObject(123)).toBeFalsy()
  91. expect(_.isObject(true)).toBeFalsy()
  92. expect(_.isObject('foo')).toBeFalsy()
  93. expect(_.isObject(undefined)).toBeFalsy()
  94. expect(_.isObject(function () {})).toBeFalsy()
  95. })
  96. it('isPlainObject', function () {
  97. expect(_.isPlainObject({})).toBe(true)
  98. expect(_.isPlainObject([])).toBe(false)
  99. expect(_.isPlainObject(null)).toBe(false)
  100. expect(_.isPlainObject(null)).toBeFalsy()
  101. expect(_.isPlainObject(123)).toBeFalsy()
  102. expect(_.isPlainObject(true)).toBeFalsy()
  103. expect(_.isPlainObject('foo')).toBeFalsy()
  104. expect(_.isPlainObject(undefined)).toBeFalsy()
  105. expect(_.isPlainObject(function () {})).toBe(false)
  106. expect(_.isPlainObject(window)).toBe(false)
  107. })
  108. it('isArray', function () {
  109. expect(_.isArray([])).toBe(true)
  110. expect(_.isArray({})).toBe(false)
  111. expect(_.isArray(arguments)).toBe(false)
  112. })
  113. it('define', function () {
  114. var obj = {}
  115. _.def(obj, 'test', 123)
  116. expect(obj.test).toBe(123)
  117. var desc = Object.getOwnPropertyDescriptor(obj, 'test')
  118. expect(desc.enumerable).toBe(false)
  119. _.def(obj, 'test2', 123, true)
  120. expect(obj.test2).toBe(123)
  121. desc = Object.getOwnPropertyDescriptor(obj, 'test2')
  122. expect(desc.enumerable).toBe(true)
  123. })
  124. it('debounce', function (done) {
  125. var count = 0
  126. var fn = _.debounce(function () {
  127. count++
  128. }, 100)
  129. fn()
  130. setTimeout(fn, 10)
  131. setTimeout(fn, 20)
  132. setTimeout(function () {
  133. expect(count).toBe(0)
  134. }, 30)
  135. setTimeout(function () {
  136. expect(count).toBe(1)
  137. done()
  138. }, 200)
  139. })
  140. it('looseEqual', function () {
  141. expect(_.looseEqual(1, '1')).toBe(true)
  142. expect(_.looseEqual(null, undefined)).toBe(true)
  143. expect(_.looseEqual({a: 1}, {a: 1})).toBe(true)
  144. expect(_.looseEqual({a: 1}, {a: 2})).toBe(false)
  145. expect(_.looseEqual({}, [])).toBe(false)
  146. })
  147. })