mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-20 15:00:42 -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 { isString, isNumber } from '../../util/underscore'
|
||||||
import { FilterImpl } from '../../template/filter/filter-impl'
|
import { FilterImpl } from '../../template/filter/filter-impl'
|
||||||
import { TimezoneDate } from '../../util/timezone-date'
|
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'
|
import { changeCase, padStart, padEnd } from './underscore'
|
||||||
|
import { LiquidDate } from './liquid-date'
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rFormat = /%([-_0^#:]+)?(\d+)?([EO])?(.)/
|
const rFormat = /%([-_0^#:]+)?(\d+)?([EO])?(.)/
|
||||||
const monthNames = [
|
const monthNames = [
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { LiquidDate } from './strftime'
|
import { LiquidDate } from './liquid-date'
|
||||||
|
|
||||||
// one minute in milliseconds
|
// one minute in milliseconds
|
||||||
const OneMinute = 60000
|
const OneMinute = 60000
|
||||||
@@ -13,18 +13,18 @@ const ISO8601_TIMEZONE_PATTERN = /([zZ]|([+-])(\d{2}):(\d{2}))$/
|
|||||||
* - rewrite getTimezoneOffset() to trick strftime
|
* - rewrite getTimezoneOffset() to trick strftime
|
||||||
*/
|
*/
|
||||||
export class TimezoneDate implements LiquidDate {
|
export class TimezoneDate implements LiquidDate {
|
||||||
private timezoneOffset?: number
|
private timezoneOffset: number
|
||||||
private date: Date
|
private date: Date
|
||||||
constructor (init: string | number | Date | TimezoneDate, timezoneOffset: number) {
|
constructor (init: string | number | Date | TimezoneDate, timezoneOffset: number) {
|
||||||
const diff = (hostTimezoneOffset - timezoneOffset) * OneMinute
|
|
||||||
if (init instanceof TimezoneDate) {
|
if (init instanceof TimezoneDate) {
|
||||||
this.date = init.date
|
this.date = init.date
|
||||||
this.timezoneOffset = init.timezoneOffset
|
timezoneOffset = init.timezoneOffset
|
||||||
} else {
|
} else {
|
||||||
|
const diff = (hostTimezoneOffset - timezoneOffset) * OneMinute
|
||||||
const time = new Date(init).getTime() + diff
|
const time = new Date(init).getTime() + diff
|
||||||
this.date = new Date(time)
|
this.date = new Date(time)
|
||||||
this.timezoneOffset = timezoneOffset
|
|
||||||
}
|
}
|
||||||
|
this.timezoneOffset = timezoneOffset
|
||||||
}
|
}
|
||||||
|
|
||||||
getTime () {
|
getTime () {
|
||||||
@@ -55,11 +55,11 @@ export class TimezoneDate implements LiquidDate {
|
|||||||
getFullYear () {
|
getFullYear () {
|
||||||
return this.date.getFullYear()
|
return this.date.getFullYear()
|
||||||
}
|
}
|
||||||
toLocaleTimeString () {
|
toLocaleTimeString (locale?: string) {
|
||||||
return this.date.toLocaleTimeString()
|
return this.date.toLocaleTimeString(locale)
|
||||||
}
|
}
|
||||||
toLocaleDateString () {
|
toLocaleDateString (locale?: string) {
|
||||||
return this.date.toLocaleDateString()
|
return this.date.toLocaleDateString(locale)
|
||||||
}
|
}
|
||||||
getTimezoneOffset () {
|
getTimezoneOffset () {
|
||||||
return this.timezoneOffset!
|
return this.timezoneOffset!
|
||||||
|
|||||||
@@ -22,5 +22,14 @@ describe('fs/loader', function () {
|
|||||||
const candidates = [...loader.candidates('../root-dir/bar', ['/root'], '/root/current', true)]
|
const candidates = [...loader.candidates('../root-dir/bar', ['/root'], '/root/current', true)]
|
||||||
expect(candidates).to.have.lengthOf(0)
|
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.getTimezoneOffset()).to.equal(-360)
|
||||||
expect(date.getMinutes()).to.equal(26)
|
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