tests.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. 'use strict';
  2. module.exports = [
  3. {
  4. description: 'scalars',
  5. tests: [
  6. {
  7. description: 'equal numbers',
  8. value1: 1,
  9. value2: 1,
  10. equal: true
  11. },
  12. {
  13. description: 'not equal numbers',
  14. value1: 1,
  15. value2: 2,
  16. equal: false
  17. },
  18. {
  19. description: 'number and array are not equal',
  20. value1: 1,
  21. value2: [],
  22. equal: false
  23. },
  24. {
  25. description: '0 and null are not equal',
  26. value1: 0,
  27. value2: null,
  28. equal: false
  29. },
  30. {
  31. description: 'equal strings',
  32. value1: 'a',
  33. value2: 'a',
  34. equal: true
  35. },
  36. {
  37. description: 'not equal strings',
  38. value1: 'a',
  39. value2: 'b',
  40. equal: false
  41. },
  42. {
  43. description: 'empty string and null are not equal',
  44. value1: '',
  45. value2: null,
  46. equal: false
  47. },
  48. {
  49. description: 'null is equal to null',
  50. value1: null,
  51. value2: null,
  52. equal: true
  53. },
  54. {
  55. description: 'equal booleans (true)',
  56. value1: true,
  57. value2: true,
  58. equal: true
  59. },
  60. {
  61. description: 'equal booleans (false)',
  62. value1: false,
  63. value2: false,
  64. equal: true
  65. },
  66. {
  67. description: 'not equal booleans',
  68. value1: true,
  69. value2: false,
  70. equal: false
  71. },
  72. {
  73. description: '1 and true are not equal',
  74. value1: 1,
  75. value2: true,
  76. equal: false
  77. },
  78. {
  79. description: '0 and false are not equal',
  80. value1: 0,
  81. value2: false,
  82. equal: false
  83. }
  84. ]
  85. },
  86. {
  87. description: 'objects',
  88. tests: [
  89. {
  90. description: 'empty objects are equal',
  91. value1: {},
  92. value2: {},
  93. equal: true
  94. },
  95. {
  96. description: 'equal objects (same properties "order")',
  97. value1: {a: 1, b: '2'},
  98. value2: {a: 1, b: '2'},
  99. equal: true
  100. },
  101. {
  102. description: 'equal objects (different properties "order")',
  103. value1: {a: 1, b: '2'},
  104. value2: {b: '2', a: 1},
  105. equal: true
  106. },
  107. {
  108. description: 'not equal objects (extra property)',
  109. value1: {a: 1, b: '2'},
  110. value2: {a: 1, b: '2', c: []},
  111. equal: false
  112. },
  113. {
  114. description: 'not equal objects (different properties)',
  115. value1: {a: 1, b: '2', c: 3},
  116. value2: {a: 1, b: '2', d: 3},
  117. equal: false
  118. },
  119. {
  120. description: 'not equal objects (different properties)',
  121. value1: {a: 1, b: '2', c: 3},
  122. value2: {a: 1, b: '2', d: 3},
  123. equal: false
  124. },
  125. {
  126. description: 'equal objects (same sub-properties)',
  127. value1: { a: [ { b: 'c' } ] },
  128. value2: { a: [ { b: 'c' } ] },
  129. equal: true
  130. },
  131. {
  132. description: 'not equal objects (different sub-property value)',
  133. value1: { a: [ { b: 'c' } ] },
  134. value2: { a: [ { b: 'd' } ] },
  135. equal: false
  136. },
  137. {
  138. description: 'not equal objects (different sub-property)',
  139. value1: { a: [ { b: 'c' } ] },
  140. value2: { a: [ { c: 'c' } ] },
  141. equal: false
  142. },
  143. {
  144. description: 'empty array and empty object are not equal',
  145. value1: {},
  146. value2: [],
  147. equal: false
  148. },
  149. {
  150. description: 'object with extra undefined properties are not equal #1',
  151. value1: {},
  152. value2: {foo: undefined},
  153. equal: false
  154. },
  155. {
  156. description: 'object with extra undefined properties are not equal #2',
  157. value1: {foo: undefined},
  158. value2: {},
  159. equal: false
  160. },
  161. {
  162. description: 'object with extra undefined properties are not equal #3',
  163. value1: {foo: undefined},
  164. value2: {bar: undefined},
  165. equal: false
  166. }
  167. ]
  168. },
  169. {
  170. description: 'arrays',
  171. tests: [
  172. {
  173. description: 'two empty arrays are equal',
  174. value1: [],
  175. value2: [],
  176. equal: true
  177. },
  178. {
  179. description: 'equal arrays',
  180. value1: [1, 2, 3],
  181. value2: [1, 2, 3],
  182. equal: true
  183. },
  184. {
  185. description: 'not equal arrays (different item)',
  186. value1: [1, 2, 3],
  187. value2: [1, 2, 4],
  188. equal: false
  189. },
  190. {
  191. description: 'not equal arrays (different length)',
  192. value1: [1, 2, 3],
  193. value2: [1, 2],
  194. equal: false
  195. },
  196. {
  197. description: 'equal arrays of objects',
  198. value1: [{a: 'a'}, {b: 'b'}],
  199. value2: [{a: 'a'}, {b: 'b'}],
  200. equal: true
  201. },
  202. {
  203. description: 'not equal arrays of objects',
  204. value1: [{a: 'a'}, {b: 'b'}],
  205. value2: [{a: 'a'}, {b: 'c'}],
  206. equal: false
  207. },
  208. {
  209. description: 'pseudo array and equivalent array are not equal',
  210. value1: {'0': 0, '1': 1, length: 2},
  211. value2: [0, 1],
  212. equal: false
  213. }
  214. ]
  215. },
  216. {
  217. description: 'Date objects',
  218. tests: [
  219. {
  220. description: 'equal date objects',
  221. value1: new Date('2017-06-16T21:36:48.362Z'),
  222. value2: new Date('2017-06-16T21:36:48.362Z'),
  223. equal: true
  224. },
  225. {
  226. description: 'not equal date objects',
  227. value1: new Date('2017-06-16T21:36:48.362Z'),
  228. value2: new Date('2017-01-01T00:00:00.000Z'),
  229. equal: false
  230. },
  231. {
  232. description: 'date and string are not equal',
  233. value1: new Date('2017-06-16T21:36:48.362Z'),
  234. value2: '2017-06-16T21:36:48.362Z',
  235. equal: false
  236. },
  237. {
  238. description: 'date and object are not equal',
  239. value1: new Date('2017-06-16T21:36:48.362Z'),
  240. value2: {},
  241. equal: false
  242. }
  243. ]
  244. },
  245. {
  246. description: 'RegExp objects',
  247. tests: [
  248. {
  249. description: 'equal RegExp objects',
  250. value1: /foo/,
  251. value2: /foo/,
  252. equal: true
  253. },
  254. {
  255. description: 'not equal RegExp objects (different pattern)',
  256. value1: /foo/,
  257. value2: /bar/,
  258. equal: false
  259. },
  260. {
  261. description: 'not equal RegExp objects (different flags)',
  262. value1: /foo/,
  263. value2: /foo/i,
  264. equal: false
  265. },
  266. {
  267. description: 'RegExp and string are not equal',
  268. value1: /foo/,
  269. value2: 'foo',
  270. equal: false
  271. },
  272. {
  273. description: 'RegExp and object are not equal',
  274. value1: /foo/,
  275. value2: {},
  276. equal: false
  277. }
  278. ]
  279. },
  280. {
  281. description: 'sample objects',
  282. tests: [
  283. {
  284. description: 'big object',
  285. value1: {
  286. prop1: 'value1',
  287. prop2: 'value2',
  288. prop3: 'value3',
  289. prop4: {
  290. subProp1: 'sub value1',
  291. subProp2: {
  292. subSubProp1: 'sub sub value1',
  293. subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5]
  294. }
  295. },
  296. prop5: 1000,
  297. prop6: new Date(2016, 2, 10)
  298. },
  299. value2: {
  300. prop5: 1000,
  301. prop3: 'value3',
  302. prop1: 'value1',
  303. prop2: 'value2',
  304. prop6: new Date('2016/03/10'),
  305. prop4: {
  306. subProp2: {
  307. subSubProp1: 'sub sub value1',
  308. subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5]
  309. },
  310. subProp1: 'sub value1'
  311. }
  312. },
  313. equal: true
  314. }
  315. ]
  316. }
  317. ];