rdf-validation
Version:
Validate RDF/JS objects
344 lines (303 loc) • 15.5 kB
JavaScript
import { describe } from 'mocha'
import XsdValidation from '../../lib/term/XsdValidation.js'
import generate from '../support/generate.js'
import * as ns from '../support/namespaces.js'
import runTestCases from '../support/runTestCases.js'
describe('XsdValidation', () => {
const testCases = [
['', ns.xsd.anySimpleType, true],
['test', ns.xsd.anySimpleType, true],
['\uffff', ns.xsd.anySimpleType, true],
['', ns.xsd.anyAtomicType, true],
['test', ns.xsd.anyAtomicType, true],
['\uffff', ns.xsd.anyAtomicType, true],
['', ns.xsd.string, true],
['test', ns.xsd.string, true],
['\u000d', ns.xsd.string, true],
['\u000a', ns.xsd.string, true],
['\u0009', ns.xsd.string, true],
['\ud8ff', ns.xsd.string, false],
['\udfff', ns.xsd.string, false],
['\ufffe', ns.xsd.string, false],
['\uffff', ns.xsd.string, false],
['', ns.xsd.boolean, false],
['test', ns.xsd.boolean, false],
['1', ns.xsd.boolean, true],
['true', ns.xsd.boolean, true],
['0', ns.xsd.boolean, true],
['false', ns.xsd.boolean, true],
['10', ns.xsd.boolean, false],
['1true', ns.xsd.boolean, false],
['01', ns.xsd.boolean, false],
['false0', ns.xsd.boolean, false],
['', ns.xsd.decimal, false],
['test', ns.xsd.decimal, false],
[generate(['', '+', '-'], ['', '00'], ['0', '123456789012345678901234567890'], ['', '.'], ['', '00']), ns.xsd.decimal, true],
[generate(['', '+', '-'], ['', '00'], ['', '.'], ['987654321098765432109876543210'], ['', '00']), ns.xsd.decimal, true],
[generate(['', '+', '-'], ['', '00'], ['0', '123456789012345678901234567890'], ['', '.'], ['987654321098765432109876543210'], ['', '00']), ns.xsd.decimal, true],
['NaN', ns.xsd.decimal, false],
['1,2', ns.xsd.decimal, false],
['1.2.3', ns.xsd.decimal, false],
['', ns.xsd.float, false],
['test', ns.xsd.float, false],
[generate(['', '+', '-'], ['', '00'], ['0', '123'], ['', '.'], ['', '00'], ['', 'e2', 'e+2', 'e-2', 'E2', 'E+2', 'E-2']), ns.xsd.float, true],
[generate(['', '+', '-'], ['', '00'], ['', '.'], ['987'], ['', '00'], ['', 'e2', 'e+2', 'e-2', 'E2', 'E+2', 'E-2']), ns.xsd.float, true],
[generate(['', '+', '-'], ['', '00'], ['0', '123'], ['', '.'], ['987'], ['', '00'], ['', 'e2', 'e+2', 'e-2', 'E2', 'E+2', 'E-2']), ns.xsd.float, true],
['INF', ns.xsd.float, true],
['-INF', ns.xsd.float, true],
['NaN', ns.xsd.float, true],
['1e2.3', ns.xsd.float, false],
['', ns.xsd.double, false],
['test', ns.xsd.double, false],
[generate(['', '+', '-'], ['', '00'], ['0', '123'], ['', '.'], ['', '00'], ['', 'e2', 'e+2', 'e-2', 'E2', 'E+2', 'E-2']), ns.xsd.double, true],
[generate(['', '+', '-'], ['', '00'], ['', '.'], ['987'], ['', '00'], ['', 'e2', 'e+2', 'e-2', 'E2', 'E+2', 'E-2']), ns.xsd.double, true],
[generate(['', '+', '-'], ['', '00'], ['0', '123'], ['', '.'], ['987'], ['', '00'], ['', 'e2', 'e+2', 'e-2', 'E2', 'E+2', 'E-2']), ns.xsd.double, true],
['INF', ns.xsd.double, true],
['-INF', ns.xsd.double, true],
['NaN', ns.xsd.double, true],
['1e2.3', ns.xsd.double, false],
['', ns.xsd.duration, false],
['test', ns.xsd.duration, false],
[generate(['P', '-P'], ['12Y'], ['', '12M'], ['', '12D']), ns.xsd.duration, true],
[generate(['P', '-P'], ['12M'], ['', '12D']), ns.xsd.duration, true],
[generate(['P', '-P'], ['', '12Y'], ['T'], ['12H'], ['', '12M'], ['', '12S', '12.34S']), ns.xsd.duration, true],
[generate(['P', '-P'], ['', '12Y'], ['T'], ['12M'], ['', '12S', '12.34S']), ns.xsd.duration, true],
[generate(['P', '-P'], ['', '12Y'], ['T'], ['12S', '12.34S']), ns.xsd.duration, true],
['P', ns.xsd.duration, false],
['P-12Y', ns.xsd.duration, false],
['', ns.xsd.dateTime, false],
['test', ns.xsd.dateTime, false],
[generate(['', '-'], ['0000', '2000', '20000'], ['-'], ['01', '12'], ['-'], ['01', '12'], ['T'], ['00', '12'], [':'], ['00', '12'], [':'], ['00', '12'], ['', '.000', '.123'], ['', 'Z', '+12:34', '-12:34']), ns.xsd.dateTime, true],
['123-01-01T00:00:00', ns.xsd.dateTime, false],
['0000-01-01T00:00:00abc', ns.xsd.dateTime, false],
['0000-01-01T00:00:00+123:00', ns.xsd.dateTime, false],
['', ns.xsd.time, false],
['test', ns.xsd.time, false],
[generate(['00', '12'], [':'], ['00', '12'], [':'], ['00', '12'], ['', '.000', '.123'], ['', 'Z', '+12:34', '-12:34']), ns.xsd.time, true],
['0000-00-00T0:00:00', ns.xsd.time, false],
['0000-00-00', ns.xsd.time, false],
['0:00:00', ns.xsd.time, false],
['00:00:00abc', ns.xsd.time, false],
['00:00:00+123:00', ns.xsd.time, false],
['', ns.xsd.date, false],
['test', ns.xsd.date, false],
[generate(['', '-'], ['0000', '2000', '20000'], ['-'], ['01', '12'], ['-'], ['01', '12'], ['', 'Z', '+12:34', '-12:34']), ns.xsd.date, true],
['0000-00-00T0:00:00', ns.xsd.date, false],
['00:00:00', ns.xsd.date, false],
['00-00-00', ns.xsd.date, false],
['0000-00-00abc', ns.xsd.date, false],
['0000-00-00+123:00', ns.xsd.date, false],
['', ns.xsd.gYearMonth, false],
['test', ns.xsd.gYearMonth, false],
[generate(['', '-'], ['0000', '2000', '20000'], ['-'], ['01', '12'], ['', 'Z', '+12:34', '-12:34']), ns.xsd.gYearMonth, true],
['0000-00-00T0:00:00', ns.xsd.gYearMonth, false],
['0000-00-00', ns.xsd.gYearMonth, false],
['00:00:00', ns.xsd.gYearMonth, false],
['0000-00abc', ns.xsd.gYearMonth, false],
['0000-00+123:00', ns.xsd.gYearMonth, false],
['', ns.xsd.gYear, false],
['test', ns.xsd.gYear, false],
[generate(['', '-'], ['0000', '2000', '20000'], ['', 'Z', '+12:34', '-12:34']), ns.xsd.gYear, true],
['0000-00-00T0:00:00', ns.xsd.gYear, false],
['0000-00-00', ns.xsd.gYear, false],
['0000-00', ns.xsd.gYear, false],
['00:00:00', ns.xsd.gYear, false],
['0000-00abc', ns.xsd.gYear, false],
['0000-00+123:00', ns.xsd.gYear, false],
['', ns.xsd.gMonthDay, false],
['test', ns.xsd.gMonthDay, false],
[generate(['--'], ['01', '12'], ['-'], ['01', '12'], ['', 'Z', '+12:34', '-12:34']), ns.xsd.gMonthDay, true],
['0000-00-00T0:00:00', ns.xsd.gMonthDay, false],
['--0000-00-00T0:00:00', ns.xsd.gMonthDay, false],
['00:00:00', ns.xsd.gMonthDay, false],
['--00:00:00', ns.xsd.gMonthDay, false],
['00-00-00', ns.xsd.gMonthDay, false],
['--00-00-00', ns.xsd.gMonthDay, false],
['--00-00abc', ns.xsd.gMonthDay, false],
['--0000-00+123:00', ns.xsd.gMonthDay, false],
['---00-00', ns.xsd.gMonthDay, false],
['', ns.xsd.gDay, false],
[generate(['---'], ['01', '12'], ['', 'Z', '+12:34', '-12:34']), ns.xsd.gDay, true],
['0000-00-00T0:00:00', ns.xsd.gDay, false],
['---0000-00-00T0:00:00', ns.xsd.gDay, false],
['00:00:00', ns.xsd.gDay, false],
['---00:00:00', ns.xsd.gDay, false],
['00-00-00', ns.xsd.gDay, false],
['---00-00-00', ns.xsd.gDay, false],
['---00-00abc', ns.xsd.gDay, false],
['---0000-00+123:00', ns.xsd.gDay, false],
['--00', ns.xsd.gDay, false],
['', ns.xsd.gMonth, false],
['test', ns.xsd.gMonth, false],
[generate(['--'], ['01', '12'], ['', 'Z', '+12:34', '-12:34']), ns.xsd.gMonth, true],
['0000-00-00T0:00:00', ns.xsd.gMonth, false],
['--0000-00-00T0:00:00', ns.xsd.gMonth, false],
['00:00:00', ns.xsd.gMonth, false],
['--00:00:00', ns.xsd.gMonth, false],
['00-00-00', ns.xsd.gMonth, false],
['--00-00-00', ns.xsd.gMonth, false],
['--00abc', ns.xsd.gMonth, false],
['--0000+123:00', ns.xsd.gMonth, false],
['---00-00', ns.xsd.gMonth, false],
['', ns.xsd.hexBinary, true],
['test', ns.xsd.hexBinary, false],
[generate(['0', '1', 'a', 'A', 'f', 'F'], ['0', '1', 'a', 'A', 'f', 'F']), ns.xsd.hexBinary, true],
[' ab', ns.xsd.hexBinary, false],
['ab ', ns.xsd.hexBinary, false],
['', ns.xsd.base64Binary, true],
['test', ns.xsd.base64Binary, true],
[generate(['0aB+', '1cDe'], ['', ' '], ['9zY/', 'AA==']), ns.xsd.base64Binary, true],
[generate(['0aB'], ['.', ':', '#', '@', '"', '\'']), ns.xsd.base64Binary, false],
['', ns.xsd.anyURI, true],
['test', ns.xsd.anyURI, true],
['\u000d', ns.xsd.anyURI, true],
['\u000a', ns.xsd.anyURI, true],
['\u0009', ns.xsd.anyURI, true],
['\ud8ff', ns.xsd.anyURI, false],
['\udfff', ns.xsd.anyURI, false],
['\ufffe', ns.xsd.anyURI, false],
['\uffff', ns.xsd.anyURI, false],
['', ns.xsd.normalizedString, true],
['test', ns.xsd.normalizedString, true],
[' ab', ns.xsd.normalizedString, true],
['ab ', ns.xsd.normalizedString, true],
['\u000d', ns.xsd.normalizedString, false],
['\u000a', ns.xsd.normalizedString, false],
['\u0009', ns.xsd.normalizedString, false],
['\ud8ff', ns.xsd.normalizedString, false],
['\udfff', ns.xsd.normalizedString, false],
['\ufffe', ns.xsd.normalizedString, false],
['\uffff', ns.xsd.normalizedString, false],
['', ns.xsd.token, true],
['test', ns.xsd.token, true],
[' ab', ns.xsd.token, false],
['ab ', ns.xsd.token, false],
['\u000d', ns.xsd.token, false],
['\u000a', ns.xsd.token, false],
['\u0009', ns.xsd.token, false],
['\ud8ff', ns.xsd.token, false],
['\udfff', ns.xsd.token, false],
['\ufffe', ns.xsd.token, false],
['\uffff', ns.xsd.token, false],
['', ns.xsd.language, false],
['test', ns.xsd.language, true],
['', ns.xsd.integer, false],
['test', ns.xsd.integer, false],
[generate(['', '+', '-'], ['', '0'], ['0', '123456789012345678901234567890']), ns.xsd.integer, true],
['abc', ns.xsd.integer, false],
['', ns.xsd.nonPositiveInteger, false],
['test', ns.xsd.nonPositiveInteger, false],
[generate(['-'], ['', '0'], ['0', '1', '123456789012345678901234567890']), ns.xsd.nonPositiveInteger, true],
['abc', ns.xsd.nonPositiveInteger, false],
['', ns.xsd.negativeInteger, false],
['test', ns.xsd.negativeInteger, false],
[generate(['-'], ['', '0'], ['1', '123456789012345678901234567890']), ns.xsd.negativeInteger, true],
['0', ns.xsd.negativeInteger, false],
['abc', ns.xsd.negativeInteger, false],
['', ns.xsd.long, false],
['test', ns.xsd.long, false],
[generate(['', '+', '-'], ['', '0'], ['0', '1', '1234567890123456789']), ns.xsd.long, true],
['9223372036854775807', ns.xsd.long, true],
['-9223372036854775808', ns.xsd.long, true],
['9223372036854775808', ns.xsd.long, false],
['-9223372036854775809', ns.xsd.long, false],
['abc', ns.xsd.long, false],
['', ns.xsd.int, false],
['test', ns.xsd.int, false],
[generate(['', '+', '-'], ['', '0'], ['0', '1', '1234567890']), ns.xsd.int, true],
['2147483647', ns.xsd.int, true],
['-2147483648', ns.xsd.int, true],
['2147483648', ns.xsd.int, false],
['-2147483649', ns.xsd.int, false],
['abc', ns.xsd.int, false],
['', ns.xsd.short, false],
['test', ns.xsd.short, false],
[generate(['', '+', '-'], ['', '0'], ['0', '1', '12345']), ns.xsd.short, true],
['32767', ns.xsd.short, true],
['-32768', ns.xsd.short, true],
['32768', ns.xsd.short, false],
['-32769', ns.xsd.short, false],
['abc', ns.xsd.short, false],
['', ns.xsd.byte, false],
['test', ns.xsd.byte, false],
[generate(['', '+', '-'], ['', '0'], ['0', '1', '123']), ns.xsd.byte, true],
['127', ns.xsd.byte, true],
['-128', ns.xsd.byte, true],
['128', ns.xsd.byte, false],
['-129', ns.xsd.byte, false],
['abc', ns.xsd.byte, false],
['', ns.xsd.nonNegativeInteger, false],
['test', ns.xsd.nonNegativeInteger, false],
[generate(['', '+'], ['', '0'], ['0', '1', '123456789012345678901234567890']), ns.xsd.nonNegativeInteger, true],
['abc', ns.xsd.nonNegativeInteger, false],
['', ns.xsd.unsignedLong, false],
['test', ns.xsd.unsignedLong, false],
[generate(['', '+'], ['', '0'], ['0', '1', '1234567890123456789']), ns.xsd.unsignedLong, true],
['abc', ns.xsd.unsignedLong, false],
['18446744073709551615', ns.xsd.unsignedLong, true],
['0', ns.xsd.unsignedLong, true],
['18446744073709551616', ns.xsd.unsignedLong, false],
['-1', ns.xsd.unsignedLong, false],
['abc', ns.xsd.unsignedLong, false],
['', ns.xsd.unsignedInt, false],
['test', ns.xsd.unsignedInt, false],
[generate(['', '+'], ['', '0'], ['0', '1', '1234567890']), ns.xsd.unsignedInt, true],
['abc', ns.xsd.unsignedInt, false],
['4294967295', ns.xsd.unsignedInt, true],
['0', ns.xsd.unsignedInt, true],
['4294967296', ns.xsd.unsignedInt, false],
['-1', ns.xsd.unsignedInt, false],
['abc', ns.xsd.unsignedInt, false],
['', ns.xsd.unsignedShort, false],
['test', ns.xsd.unsignedShort, false],
[generate(['', '+'], ['', '0'], ['0', '1', '12345']), ns.xsd.unsignedShort, true],
['abc', ns.xsd.unsignedShort, false],
['65535', ns.xsd.unsignedShort, true],
['0', ns.xsd.unsignedShort, true],
['65536', ns.xsd.unsignedShort, false],
['-1', ns.xsd.unsignedShort, false],
['abc', ns.xsd.unsignedShort, false],
['', ns.xsd.unsignedByte, false],
['test', ns.xsd.unsignedByte, false],
[generate(['', '+'], ['', '0'], ['0', '1', '123']), ns.xsd.unsignedByte, true],
['abc', ns.xsd.unsignedByte, false],
['255', ns.xsd.unsignedByte, true],
['0', ns.xsd.unsignedByte, true],
['256', ns.xsd.unsignedByte, false],
['-1', ns.xsd.unsignedByte, false],
['abc', ns.xsd.unsignedByte, false],
['', ns.xsd.positiveInteger, false],
['test', ns.xsd.positiveInteger, false],
[generate(['', '+'], ['', '0'], ['1', '123456789012345678901234567890']), ns.xsd.positiveInteger, true],
['0', ns.xsd.positiveInteger, false],
['abc', ns.xsd.positiveInteger, false],
['', ns.xsd.yearMonthDuration, false],
['test', ns.xsd.yearMonthDuration, false],
[generate(['P', '-P'], ['12Y'], ['', '12M']), ns.xsd.yearMonthDuration, true],
['P12Y12M12D', ns.xsd.yearMonthDuration, false],
['PT12D', ns.xsd.yearMonthDuration, false],
['PT12M', ns.xsd.yearMonthDuration, false],
['PT12S', ns.xsd.yearMonthDuration, false],
['P', ns.xsd.yearMonthDuration, false],
['P-12Y', ns.xsd.yearMonthDuration, false],
['', ns.xsd.dayTimeDuration, false],
['test', ns.xsd.dayTimeDuration, false],
[generate(['P', '-P'], ['', '12D'], ['T'], ['12H'], ['', '12M'], ['', '12S', '12.34S']), ns.xsd.dayTimeDuration, true],
[generate(['P', '-P'], ['', '12D'], ['T'], ['12M'], ['', '12S', '12.34S']), ns.xsd.dayTimeDuration, true],
[generate(['P', '-P'], ['', '12D'], ['T'], ['12S', '12.34S']), ns.xsd.dayTimeDuration, true],
['P12Y', ns.xsd.dayTimeDuration, false],
['P12M', ns.xsd.dayTimeDuration, false],
['P12Y12D', ns.xsd.dayTimeDuration, false],
['P12M12D', ns.xsd.dayTimeDuration, false],
['P', ns.xsd.dayTimeDuration, false],
['P-12D', ns.xsd.dayTimeDuration, false],
['', ns.xsd.dateTimeStamp, false],
['test', ns.xsd.dateTimeStamp, false],
[generate(['', '-'], ['0000', '2000', '20000'], ['-'], ['01', '12'], ['-'], ['01', '12'], ['T'], ['00', '12'], [':'], ['00', '12'], [':'], ['00', '12'], ['', '.000', '.123'], ['Z', '+12:34', '-12:34']), ns.xsd.dateTimeStamp, true],
['0000-01-01T00:00:00', ns.xsd.dateTimeStamp, false],
['0000-01-01T00:00:00+123:00', ns.xsd.dateTimeStamp, false],
['123-01-01T00:00:00Z', ns.xsd.dateTimeStamp, false]
]
const validation = new XsdValidation()
runTestCases({ testCases, validation })
})