| 888 | } |
| 889 | |
| 890 | function verifyEqual(actual, expected) { |
| 891 | if (typeof expected !== 'object' || expected === null || expected === undefined) { |
| 892 | expect(actual).toEqual(expected); |
| 893 | return; |
| 894 | } |
| 895 | if (expected instanceof Array) { |
| 896 | for (let i = 0; i < expected.length; i++) { |
| 897 | verifyEqual(actual[i], expected[i]); |
| 898 | } |
| 899 | return; |
| 900 | } |
| 901 | |
| 902 | if (actual) { |
| 903 | expect(actual.constructor.name).toEqual(expected.constructor.name); |
| 904 | expect(actual.toString()).toEqual(expected.toString()); |
| 905 | for (const prop of Object.keys(expected)) { |
| 906 | verifyEqual(actual[prop], expected[prop]); |
| 907 | } |
| 908 | } |
| 909 | } |
| 910 | |
| 911 | function unicodeEscape(str) { |
| 912 | return str.replace(/[\s\S]/g, c => `\\u${('0000' + c.charCodeAt().toString(16)).slice(-4)}`); |