| 'use strict'; |
| |
| module.exports = [ |
| { |
| description: 'scalars', |
| tests: [ |
| { |
| description: 'equal numbers', |
| value1: 1, |
| value2: 1, |
| equal: true |
| }, |
| { |
| description: 'not equal numbers', |
| value1: 1, |
| value2: 2, |
| equal: false |
| }, |
| { |
| description: 'number and array are not equal', |
| value1: 1, |
| value2: [], |
| equal: false |
| }, |
| { |
| description: '0 and null are not equal', |
| value1: 0, |
| value2: null, |
| equal: false |
| }, |
| { |
| description: 'equal strings', |
| value1: 'a', |
| value2: 'a', |
| equal: true |
| }, |
| { |
| description: 'not equal strings', |
| value1: 'a', |
| value2: 'b', |
| equal: false |
| }, |
| { |
| description: 'empty string and null are not equal', |
| value1: '', |
| value2: null, |
| equal: false |
| }, |
| { |
| description: 'null is equal to null', |
| value1: null, |
| value2: null, |
| equal: true |
| }, |
| { |
| description: 'equal booleans (true)', |
| value1: true, |
| value2: true, |
| equal: true |
| }, |
| { |
| description: 'equal booleans (false)', |
| value1: false, |
| value2: false, |
| equal: true |
| }, |
| { |
| description: 'not equal booleans', |
| value1: true, |
| value2: false, |
| equal: false |
| }, |
| { |
| description: '1 and true are not equal', |
| value1: 1, |
| value2: true, |
| equal: false |
| }, |
| { |
| description: '0 and false are not equal', |
| value1: 0, |
| value2: false, |
| equal: false |
| } |
| ] |
| }, |
| |
| { |
| description: 'objects', |
| tests: [ |
| { |
| description: 'empty objects are equal', |
| value1: {}, |
| value2: {}, |
| equal: true |
| }, |
| { |
| description: 'equal objects (same properties "order")', |
| value1: {a: 1, b: '2'}, |
| value2: {a: 1, b: '2'}, |
| equal: true |
| }, |
| { |
| description: 'equal objects (different properties "order")', |
| value1: {a: 1, b: '2'}, |
| value2: {b: '2', a: 1}, |
| equal: true |
| }, |
| { |
| description: 'not equal objects (extra property)', |
| value1: {a: 1, b: '2'}, |
| value2: {a: 1, b: '2', c: []}, |
| equal: false |
| }, |
| { |
| description: 'not equal objects (different properties)', |
| value1: {a: 1, b: '2', c: 3}, |
| value2: {a: 1, b: '2', d: 3}, |
| equal: false |
| }, |
| { |
| description: 'not equal objects (different properties)', |
| value1: {a: 1, b: '2', c: 3}, |
| value2: {a: 1, b: '2', d: 3}, |
| equal: false |
| }, |
| { |
| description: 'equal objects (same sub-properties)', |
| value1: { a: [ { b: 'c' } ] }, |
| value2: { a: [ { b: 'c' } ] }, |
| equal: true |
| }, |
| { |
| description: 'not equal objects (different sub-property value)', |
| value1: { a: [ { b: 'c' } ] }, |
| value2: { a: [ { b: 'd' } ] }, |
| equal: false |
| }, |
| { |
| description: 'not equal objects (different sub-property)', |
| value1: { a: [ { b: 'c' } ] }, |
| value2: { a: [ { c: 'c' } ] }, |
| equal: false |
| }, |
| { |
| description: 'empty array and empty object are not equal', |
| value1: {}, |
| value2: [], |
| equal: false |
| }, |
| { |
| description: 'object with extra undefined properties are not equal #1', |
| value1: {}, |
| value2: {foo: undefined}, |
| equal: false |
| }, |
| { |
| description: 'object with extra undefined properties are not equal #2', |
| value1: {foo: undefined}, |
| value2: {}, |
| equal: false |
| }, |
| { |
| description: 'object with extra undefined properties are not equal #3', |
| value1: {foo: undefined}, |
| value2: {bar: undefined}, |
| equal: false |
| } |
| ] |
| }, |
| |
| { |
| description: 'arrays', |
| tests: [ |
| { |
| description: 'two empty arrays are equal', |
| value1: [], |
| value2: [], |
| equal: true |
| }, |
| { |
| description: 'equal arrays', |
| value1: [1, 2, 3], |
| value2: [1, 2, 3], |
| equal: true |
| }, |
| { |
| description: 'not equal arrays (different item)', |
| value1: [1, 2, 3], |
| value2: [1, 2, 4], |
| equal: false |
| }, |
| { |
| description: 'not equal arrays (different length)', |
| value1: [1, 2, 3], |
| value2: [1, 2], |
| equal: false |
| }, |
| { |
| description: 'equal arrays of objects', |
| value1: [{a: 'a'}, {b: 'b'}], |
| value2: [{a: 'a'}, {b: 'b'}], |
| equal: true |
| }, |
| { |
| description: 'not equal arrays of objects', |
| value1: [{a: 'a'}, {b: 'b'}], |
| value2: [{a: 'a'}, {b: 'c'}], |
| equal: false |
| }, |
| { |
| description: 'pseudo array and equivalent array are not equal', |
| value1: {'0': 0, '1': 1, length: 2}, |
| value2: [0, 1], |
| equal: false |
| } |
| ] |
| }, |
| { |
| description: 'Date objects', |
| tests: [ |
| { |
| description: 'equal date objects', |
| value1: new Date('2017-06-16T21:36:48.362Z'), |
| value2: new Date('2017-06-16T21:36:48.362Z'), |
| equal: true |
| }, |
| { |
| description: 'not equal date objects', |
| value1: new Date('2017-06-16T21:36:48.362Z'), |
| value2: new Date('2017-01-01T00:00:00.000Z'), |
| equal: false |
| }, |
| { |
| description: 'date and string are not equal', |
| value1: new Date('2017-06-16T21:36:48.362Z'), |
| value2: '2017-06-16T21:36:48.362Z', |
| equal: false |
| }, |
| { |
| description: 'date and object are not equal', |
| value1: new Date('2017-06-16T21:36:48.362Z'), |
| value2: {}, |
| equal: false |
| } |
| ] |
| }, |
| { |
| description: 'RegExp objects', |
| tests: [ |
| { |
| description: 'equal RegExp objects', |
| value1: /foo/, |
| value2: /foo/, |
| equal: true |
| }, |
| { |
| description: 'not equal RegExp objects (different pattern)', |
| value1: /foo/, |
| value2: /bar/, |
| equal: false |
| }, |
| { |
| description: 'not equal RegExp objects (different flags)', |
| value1: /foo/, |
| value2: /foo/i, |
| equal: false |
| }, |
| { |
| description: 'RegExp and string are not equal', |
| value1: /foo/, |
| value2: 'foo', |
| equal: false |
| }, |
| { |
| description: 'RegExp and object are not equal', |
| value1: /foo/, |
| value2: {}, |
| equal: false |
| } |
| ] |
| }, |
| { |
| description: 'sample objects', |
| tests: [ |
| { |
| description: 'big object', |
| value1: { |
| prop1: 'value1', |
| prop2: 'value2', |
| prop3: 'value3', |
| prop4: { |
| subProp1: 'sub value1', |
| subProp2: { |
| subSubProp1: 'sub sub value1', |
| subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5] |
| } |
| }, |
| prop5: 1000, |
| prop6: new Date(2016, 2, 10) |
| }, |
| value2: { |
| prop5: 1000, |
| prop3: 'value3', |
| prop1: 'value1', |
| prop2: 'value2', |
| prop6: new Date('2016/03/10'), |
| prop4: { |
| subProp2: { |
| subSubProp1: 'sub sub value1', |
| subSubProp2: [1, 2, {prop2: 1, prop: 2}, 4, 5] |
| }, |
| subProp1: 'sub value1' |
| } |
| }, |
| equal: true |
| } |
| ] |
| } |
| ]; |