UNPKG

abc-notation-transposition

Version:

A robust utility for transposing ABC Notation by half steps.

39 lines (33 loc) 2.07 kB
const {validateInput} = require('../../../../functions/transpose-abc'); const {ERROR_MESSAGES} = require('../../../../constants'); const invalidOpts = { foo : 'bar' } const validOptsInvalidFieldTypes = { accidentalNumberPreference: false, preferSharpsOrFlats: 'foo' } const validOptsFloatingPointFields = { accidentalNumberPreference : 1.13, preferSharpsOrFlats: 0.52 } const validOptsInvalidFieldValues = { accidentalNumberPreference: 60, preferSharpsOrFlats: -60 } const validOptsValidFields = { accidentalNumberPreference: 0, preferSharpsOrFlats: 2 } test('Expect validate input to throw errors when incorrectly typed parameters are supplied.', () => { expect(() => validateInput()).toThrow(new TypeError(ERROR_MESSAGES.ABC_NOTATION_TYPE_MISMATCH + 'undefined')); expect(() => validateInput(3)).toThrow(new TypeError(ERROR_MESSAGES.ABC_NOTATION_TYPE_MISMATCH + 'number')); expect(() => validateInput('X:1\nK:C\nCDEF|]')).toThrow(new TypeError(ERROR_MESSAGES.HALF_STEPS_TYPE_MISMATCH + 'undefined')); expect(() => validateInput('X:1\nK:C\nCDEF|]', 3.14)).toThrow(new TypeError(ERROR_MESSAGES.HALF_STEPS_TYPE_MISMATCH + 'floating point')); expect(() => validateInput('X:1\nK:C\nCDEF|]', 3, 42)).toThrow(new TypeError(ERROR_MESSAGES.OPTS_OBJECT_TYPE_MISMATCH)); expect(() => validateInput('X:1\nK:C\nCDEF|]', 3, invalidOpts)).toThrow(new TypeError(ERROR_MESSAGES.OPTS_OBJECT_TYPE_MISMATCH)); expect(() => validateInput('X:1\nK:C\nCDEF|]', 3, validOptsInvalidFieldTypes)).toThrow(new TypeError(ERROR_MESSAGES.OPTS_FIELD_TYPE_MISMATCH + 'boolean and string')); expect(() => validateInput('X:1\nK:C\nCDEF|]', 3, validOptsFloatingPointFields)).toThrow(new TypeError(ERROR_MESSAGES.OPTS_FIELD_TYPE_MISMATCH + 'non-integer and non-integer')); expect(() => validateInput('X:1\nK:C\nCDEF|]', 3, validOptsInvalidFieldValues)).toThrow(new RangeError(ERROR_MESSAGES.OPTS_FIELD_TYPE_MISMATCH + '60 and -60')); expect(validateInput('X:1\nK:C\nCDEF|]', 3, validOptsValidFields)).toBe(undefined); });