test: coverage to 100%

This commit is contained in:
Harttle
2021-12-07 23:34:53 +08:00
committed by Harttle
parent 6c114267a5
commit 69286c6909
6 changed files with 62 additions and 25 deletions
+2 -1
View File
@@ -1,4 +1,5 @@
import strftime, { LiquidDate } from '../../util/strftime'
import strftime from '../../util/strftime'
import { LiquidDate } from '../../util/liquid-date'
import { isString, isNumber } from '../../util/underscore'
import { FilterImpl } from '../../template/filter/filter-impl'
import { TimezoneDate } from '../../util/timezone-date'
+19
View File
@@ -0,0 +1,19 @@
/**
* The date interface LiquidJS uses.
* Basically a subset of JavaScript Date,
* it's defined abstractly here to allow different implementation
*/
export interface LiquidDate {
getTime(): number;
getMilliseconds(): number;
getSeconds(): number;
getMinutes(): number;
getHours(): number;
getDay(): number;
getDate(): number;
getMonth(): number;
getFullYear(): number;
getTimezoneOffset(): number;
toLocaleTimeString(): string;
toLocaleDateString(): string;
}
+1 -15
View File
@@ -1,19 +1,5 @@
import { changeCase, padStart, padEnd } from './underscore'
export interface LiquidDate {
getTime(): number;
getMilliseconds(): number;
getSeconds(): number;
getMinutes(): number;
getHours(): number;
getDay(): number;
getDate(): number;
getMonth(): number;
getFullYear(): number;
getTimezoneOffset(): number;
toLocaleTimeString(): string;
toLocaleDateString(): string;
}
import { LiquidDate } from './liquid-date'
const rFormat = /%([-_0^#:]+)?(\d+)?([EO])?(.)/
const monthNames = [
+9 -9
View File
@@ -1,4 +1,4 @@
import { LiquidDate } from './strftime'
import { LiquidDate } from './liquid-date'
// one minute in milliseconds
const OneMinute = 60000
@@ -13,18 +13,18 @@ const ISO8601_TIMEZONE_PATTERN = /([zZ]|([+-])(\d{2}):(\d{2}))$/
* - rewrite getTimezoneOffset() to trick strftime
*/
export class TimezoneDate implements LiquidDate {
private timezoneOffset?: number
private timezoneOffset: number
private date: Date
constructor (init: string | number | Date | TimezoneDate, timezoneOffset: number) {
const diff = (hostTimezoneOffset - timezoneOffset) * OneMinute
if (init instanceof TimezoneDate) {
this.date = init.date
this.timezoneOffset = init.timezoneOffset
timezoneOffset = init.timezoneOffset
} else {
const diff = (hostTimezoneOffset - timezoneOffset) * OneMinute
const time = new Date(init).getTime() + diff
this.date = new Date(time)
this.timezoneOffset = timezoneOffset
}
this.timezoneOffset = timezoneOffset
}
getTime () {
@@ -55,11 +55,11 @@ export class TimezoneDate implements LiquidDate {
getFullYear () {
return this.date.getFullYear()
}
toLocaleTimeString () {
return this.date.toLocaleTimeString()
toLocaleTimeString (locale?: string) {
return this.date.toLocaleTimeString(locale)
}
toLocaleDateString () {
return this.date.toLocaleDateString()
toLocaleDateString (locale?: string) {
return this.date.toLocaleDateString(locale)
}
getTimezoneOffset () {
return this.timezoneOffset!
+9
View File
@@ -22,5 +22,14 @@ describe('fs/loader', function () {
const candidates = [...loader.candidates('../root-dir/bar', ['/root'], '/root/current', true)]
expect(candidates).to.have.lengthOf(0)
})
it('should default `.contains()` to () => true', async function () {
const customFs = {
...fs,
contains: undefined
}
const loader = new Loader({ relativeReference: true, fs: customFs, extname: '' } as any)
const candidates = [...loader.candidates('../foo/bar', ['/root'], '/root/current', true)]
expect(candidates).to.contain('/foo/bar')
})
})
})
+22
View File
@@ -13,4 +13,26 @@ describe('TimezoneDate', () => {
expect(date.getTimezoneOffset()).to.equal(-360)
expect(date.getMinutes()).to.equal(26)
})
it('should support Date as argument', () => {
const date = new TimezoneDate(new Date('2021-10-06T14:26:00.000+08:00'), 0)
expect(date.getHours()).to.equal(6)
})
it('should support .getMilliseconds()', () => {
const date = new TimezoneDate('2021-10-06T14:26:00.001+00:00', 0)
expect(date.getMilliseconds()).to.equal(1)
})
it('should support .getDay()', () => {
const date = new TimezoneDate('2021-12-07T00:00:00.001+08:00', -480)
expect(date.getDay()).to.equal(2)
})
it('should support .toLocaleTimeString()', () => {
const date = new TimezoneDate('2021-10-06T00:00:00.001+00:00', -480)
expect(date.toLocaleTimeString('en-US')).to.equal('8:00:00 AM')
expect(() => date.toLocaleDateString()).to.not.throw()
})
it('should support .toLocaleDateString()', () => {
const date = new TimezoneDate('2021-10-06T22:00:00.001+00:00', -480)
expect(date.toLocaleDateString('en-US')).to.equal('10/7/2021')
expect(() => date.toLocaleDateString()).to.not.throw()
})
})