diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/object-property-accessor.test.js | 40 | 
1 files changed, 40 insertions, 0 deletions
| diff --git a/test/object-property-accessor.test.js b/test/object-property-accessor.test.js index a8730093..4f1fa87b 100644 --- a/test/object-property-accessor.test.js +++ b/test/object-property-accessor.test.js @@ -19,6 +19,9 @@  import {expect, test} from 'vitest';  import {ObjectPropertyAccessor} from '../ext/js/general/object-property-accessor.js'; +/** + * @returns {import('core').UnknownObject} + */  function createTestObject() {      return {          0: null, @@ -36,8 +39,10 @@ function createTestObject() {  } +/** */  function testGet1() {      test('Get1', () => { +        /** @type {[pathArray: (string|number)[], getExpected: (object: import('core').SafeAny) => unknown][]} */          const data = [              [[], (object) => object],              [['0'], (object) => object['0']], @@ -61,11 +66,13 @@ function testGet1() {      });  } +/** */  function testGet2() {      test('Get2', () => {          const object = createTestObject();          const accessor = new ObjectPropertyAccessor(object); +        /** @type {[pathArray: (string|number)[], message: string][]} */          const data = [              [[0], 'Invalid path: [0]'],              [['0', 'invalid'], 'Invalid path: ["0"].invalid'], @@ -95,9 +102,11 @@ function testGet2() {  } +/** */  function testSet1() {      test('Set1', () => {          const testValue = {}; +        /** @type {(string|number)[][]} */          const data = [              ['0'],              ['value1', 'value2'], @@ -120,12 +129,14 @@ function testSet1() {      });  } +/** */  function testSet2() {      test('Set2', () => {          const object = createTestObject();          const accessor = new ObjectPropertyAccessor(object);          const testValue = {}; +        /** @type {[pathArray: (string|number)[], message: string][]} */          const data = [              [[], 'Invalid path'],              [[0], 'Invalid path: [0]'], @@ -148,10 +159,17 @@ function testSet2() {  } +/** */  function testDelete1() {      test('Delete1', () => { +        /** +         * @param {unknown} object +         * @param {string} property +         * @returns {boolean} +         */          const hasOwn = (object, property) => Object.prototype.hasOwnProperty.call(object, property); +        /** @type {[pathArray: (string|number)[], validate: (object: import('core').SafeAny) => boolean][]} */          const data = [              [['0'], (object) => !hasOwn(object, '0')],              [['value1', 'value2'], (object) => !hasOwn(object.value1, 'value2')], @@ -171,8 +189,10 @@ function testDelete1() {      });  } +/** */  function testDelete2() {      test('Delete2', () => { +        /** @type {[pathArray: (string|number)[], message: string][]} */          const data = [              [[], 'Invalid path'],              [[0], 'Invalid path: [0]'], @@ -201,8 +221,10 @@ function testDelete2() {  } +/** */  function testSwap1() {      test('Swap1', () => { +        /** @type {[pathArray: (string|number)[], compareValues: boolean][]} */          const data = [              [['0'], true],              [['value1', 'value2'], true], @@ -237,8 +259,10 @@ function testSwap1() {      });  } +/** */  function testSwap2() {      test('Swap2', () => { +        /** @type {[pathArray1: (string|number)[], pathArray2: (string|number)[], checkRevert: boolean, message: string][]} */          const data = [              [[], [], false, 'Invalid path 1'],              [['0'], [], false, 'Invalid path 2'], @@ -276,8 +300,10 @@ function testSwap2() {  } +/** */  function testGetPathString1() {      test('GetPathString1', () => { +        /** @type {[pathArray: (string|number)[], expected: string][]} */          const data = [              [[], ''],              [[0], '[0]'], @@ -298,22 +324,27 @@ function testGetPathString1() {      });  } +/** */  function testGetPathString2() {      test('GetPathString2', () => { +        /** @type {[pathArray: unknown[], message: string][]} */          const data = [              [[1.5], 'Invalid index'],              [[null], 'Invalid type: object']          ];          for (const [pathArray, message] of data) { +            // @ts-ignore - Throwing is expected              expect(() => ObjectPropertyAccessor.getPathString(pathArray)).toThrow(message);          }      });  } +/** */  function testGetPathArray1() {      test('GetPathArray1', () => { +        /** @type {[pathString: string, pathArray: (string|number)[]][]} */          const data = [              ['', []],              ['[0]', [0]], @@ -338,8 +369,10 @@ function testGetPathArray1() {      });  } +/** */  function testGetPathArray2() {      test('GetPathArray2', () => { +        /** @type {[pathString: string, message: string][]} */          const data = [              ['?', 'Unexpected character: ?'],              ['.', 'Unexpected character: .'], @@ -372,8 +405,10 @@ function testGetPathArray2() {  } +/** */  function testHasProperty() {      test('HasProperty', () => { +        /** @type {[object: unknown, property: unknown, expected: boolean][]} */          const data = [              [{}, 'invalid', false],              [{}, 0, false], @@ -389,13 +424,16 @@ function testHasProperty() {          ];          for (const [object, property, expected] of data) { +            // @ts-ignore - Ignore potentially property types              expect(ObjectPropertyAccessor.hasProperty(object, property)).toStrictEqual(expected);          }      });  } +/** */  function testIsValidPropertyType() {      test('IsValidPropertyType', () => { +        /** @type {[object: unknown, property: unknown, expected: boolean][]} */          const data = [              [{}, 'invalid', true],              [{}, 0, false], @@ -411,12 +449,14 @@ function testIsValidPropertyType() {          ];          for (const [object, property, expected] of data) { +            // @ts-ignore - Ignore potentially property types              expect(ObjectPropertyAccessor.isValidPropertyType(object, property)).toStrictEqual(expected);          }      });  } +/** */  function main() {      testGet1();      testGet2(); |