UNPKG

wikibase-edit

Version:

Edit Wikibase from NodeJS

436 lines 15.9 kB
import 'should'; import { getTimeObject } from '../../../src/lib/claim/get_time_object.js'; describe('claim time', () => { it('should parse year without precision', () => { getTimeObject('2018').should.deepEqual({ time: '+2018-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 9, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject('-2018').should.deepEqual({ time: '-2018-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 9, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse explicitly positive year', () => { getTimeObject('+2018').should.deepEqual({ time: '+2018-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 9, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); }); it('should parse month without precision', () => { getTimeObject('2018-03').should.deepEqual({ time: '+2018-03-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject('-2018-03').should.deepEqual({ time: '-2018-03-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse day without precision', () => { getTimeObject('2018-03-03').should.deepEqual({ time: '+2018-03-03T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 11, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject('-2018-03-03').should.deepEqual({ time: '-2018-03-03T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 11, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse year with precision', () => { getTimeObject({ time: '2018', precision: 9 }).should.deepEqual({ time: '+2018-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 9, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject({ time: '-2018', precision: 9 }).should.deepEqual({ time: '-2018-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 9, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse month with precision', () => { getTimeObject({ time: '2018-03', precision: 10 }).should.deepEqual({ time: '+2018-03-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject({ time: '-2018-03', precision: 10 }).should.deepEqual({ time: '-2018-03-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse day with precision', () => { getTimeObject({ time: '2018-03-03', precision: 11 }).should.deepEqual({ time: '+2018-03-03T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 11, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject({ time: '-2018-03-03', precision: 11 }).should.deepEqual({ time: '-2018-03-03T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 11, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse hour with precision', () => { getTimeObject({ time: '2018-03-03T11:00:00Z', precision: 12 }).should.deepEqual({ time: '+2018-03-03T11:00:00Z', timezone: 0, before: 0, after: 0, precision: 12, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject({ time: '-2018-03-03T11:00:00Z', precision: 12 }).should.deepEqual({ time: '-2018-03-03T11:00:00Z', timezone: 0, before: 0, after: 0, precision: 12, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse minute with precision', () => { getTimeObject({ time: '2018-03-03T11:22:00Z', precision: 13 }).should.deepEqual({ time: '+2018-03-03T11:22:00Z', timezone: 0, before: 0, after: 0, precision: 13, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject({ time: '-2018-03-03T11:22:00Z', precision: 13 }).should.deepEqual({ time: '-2018-03-03T11:22:00Z', timezone: 0, before: 0, after: 0, precision: 13, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse second with precision', () => { getTimeObject({ time: '2018-03-03T11:22:33Z', precision: 14 }).should.deepEqual({ time: '+2018-03-03T11:22:33Z', timezone: 0, before: 0, after: 0, precision: 14, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject({ time: '-2018-03-03T11:22:33Z', precision: 14 }).should.deepEqual({ time: '-2018-03-03T11:22:33Z', timezone: 0, before: 0, after: 0, precision: 14, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse decade with precision', () => { getTimeObject({ time: '2010', precision: 8 }).should.deepEqual({ time: '+2010-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 8, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject({ time: '-2010', precision: 8 }).should.deepEqual({ time: '-2010-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 8, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse century with precision', () => { getTimeObject({ time: '2100', precision: 7 }).should.deepEqual({ time: '+2100-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 7, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject({ time: '-2100', precision: 7 }).should.deepEqual({ time: '-2100-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 7, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse millenium with precision', () => { getTimeObject({ time: '2000', precision: 6 }).should.deepEqual({ time: '+2000-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 6, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); }); it('should parse ten thousand years with precision', () => { getTimeObject({ time: '-10000', precision: 5 }).should.deepEqual({ time: '-10000-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 5, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse ten thousand years without precision and assume its years', () => { getTimeObject('-10000').should.deepEqual({ time: '-10000-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 9, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); getTimeObject('10000').should.deepEqual({ time: '+10000-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 9, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); }); it('should parse hundred thousand years with precision', () => { getTimeObject({ time: '-2500000', precision: 4 }).should.deepEqual({ time: '-2500000-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 4, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse million years with precision', () => { getTimeObject({ time: '-13798000000', precision: 3 }).should.deepEqual({ time: '-13798000000-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 3, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse billion years with precision', () => { getTimeObject({ time: '-5000000000', precision: 0 }).should.deepEqual({ time: '-5000000000-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 0, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should parse low precision time with too much precision', () => { getTimeObject({ time: '2100-01-23', precision: 7 }).should.deepEqual({ time: '+2100-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 7, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); }); it('should set custom calendar', () => { const gregorian = 'http://www.wikidata.org/entity/Q1985727'; const julian = 'http://www.wikidata.org/entity/Q1985786'; getTimeObject({ time: '2020' }).calendarmodel.should.equal(gregorian); getTimeObject({ time: '2020', calendar: 'gregorian' }).calendarmodel.should.equal(gregorian); getTimeObject({ time: '2020', calendar: 'Q1985727' }).calendarmodel.should.equal(gregorian); getTimeObject({ time: '2020', calendar: gregorian }).calendarmodel.should.equal(gregorian); getTimeObject({ time: '2020', calendar: 'julian' }).calendarmodel.should.equal(julian); getTimeObject({ time: '2020', calendar: 'Q1985786' }).calendarmodel.should.equal(julian); getTimeObject({ time: '2020', calendar: julian }).calendarmodel.should.equal(julian); }); it('should accept full rich value', () => { getTimeObject({ time: '2018-04-15T00:00:00.000Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }).should.deepEqual({ time: '+2018-04-15T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); }); it('should accept setting month precision for times that specify a day', () => { getTimeObject({ time: '2018-04-15T00:00:00.000Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }).should.deepEqual({ time: '+2018-04-15T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); }); it('should default to julian calendar for dates before 1582, 1582 included', () => { getTimeObject('1582').should.deepEqual({ time: '+1582-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 9, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); getTimeObject('1582-11').should.deepEqual({ time: '+1582-11-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); getTimeObject('1582-12-04').should.deepEqual({ time: '+1582-12-04T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 11, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); getTimeObject({ time: '+1582-12-04T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }).should.deepEqual({ time: '+1582-12-04T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985786', }); }); it('should default to gregorian calendar for dates after 1582', () => { getTimeObject('1583').should.deepEqual({ time: '+1583-00-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 9, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject('1583-02').should.deepEqual({ time: '+1583-02-00T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject('1583-10-05').should.deepEqual({ time: '+1583-10-05T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 11, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); getTimeObject({ time: '+1583-10-05T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }).should.deepEqual({ time: '+1583-10-05T00:00:00Z', timezone: 0, before: 0, after: 0, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); }); // cf https://www.wikidata.org/wiki/Help:Dates#Time_datatype it('should preserve custom timezone/before/after', () => { getTimeObject({ time: '+1583-10-05T00:00:00Z', timezone: 60, before: 1, after: 2, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }).should.deepEqual({ time: '+1583-10-05T00:00:00Z', timezone: 60, before: 1, after: 2, precision: 10, calendarmodel: 'http://www.wikidata.org/entity/Q1985727', }); }); }); //# sourceMappingURL=time.js.map