mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-15 12:20:40 -07:00
test: coverage to 100%
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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
@@ -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 = [
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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')
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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()
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user