Integrate jest and add first test file (#51)
This sets up the first bit of test infrastructure to write and run unit tests on every PR Related to #14 Fixes #7
This commit is contained in:
Generated
+3706
-17
File diff suppressed because it is too large
Load Diff
+21
-4
@@ -7,7 +7,8 @@
|
||||
"deploy": "./deploy.sh",
|
||||
"prettier": "prettier --write './**/*.ts' './**/*.tsx'",
|
||||
"lint": "eslint './**/*.ts' './**/*.tsx'",
|
||||
"test": "npm run lint",
|
||||
"jest": "jest",
|
||||
"test": "tsc --noEmit && npm run lint && jest",
|
||||
"serve": "parcel index.html --open --no-autoinstall"
|
||||
},
|
||||
"browserslist": [
|
||||
@@ -17,17 +18,33 @@
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@types/jest": "^22.2.3",
|
||||
"@types/pako": "1.0.0",
|
||||
"aphrodite": "2.1.0",
|
||||
"eslint": "^4.19.1",
|
||||
"eslint-plugin-prettier": "^2.6.0",
|
||||
"jest": "^23.0.1",
|
||||
"pako": "1.0.6",
|
||||
"parcel-bundler": "1.7.0",
|
||||
"preact": "8.2.7",
|
||||
"prettier": "^1.12.0",
|
||||
"regl": "1.3.1",
|
||||
"ts-jest": "^22.4.6",
|
||||
"typescript": "2.8.1",
|
||||
"typescript-eslint-parser": "^14.0.0",
|
||||
"uglify-es": "3.2.2",
|
||||
"@types/pako": "1.0.0",
|
||||
"pako": "1.0.6"
|
||||
"uglify-es": "3.2.2"
|
||||
},
|
||||
"jest": {
|
||||
"transform": {
|
||||
"^.+\\.tsx?$": "ts-jest"
|
||||
},
|
||||
"testRegex": "\\.test\\.tsx?$",
|
||||
"moduleFileExtensions": [
|
||||
"ts",
|
||||
"tsx",
|
||||
"js",
|
||||
"jsx",
|
||||
"json"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
import {
|
||||
sortBy,
|
||||
getOrInsert,
|
||||
getOrElse,
|
||||
getOrThrow,
|
||||
itMap,
|
||||
itForEach,
|
||||
itReduce,
|
||||
zeroPad,
|
||||
} from './utils'
|
||||
|
||||
test('sortBy', () => {
|
||||
const ls = ['a3', 'b2', 'c1', 'd4']
|
||||
sortBy(ls, k => k.charCodeAt(1))
|
||||
expect(ls).toEqual(['c1', 'b2', 'a3', 'd4'])
|
||||
})
|
||||
|
||||
test('getOrInsert', () => {
|
||||
const m = new Map<string, number>()
|
||||
expect(getOrInsert(m, 'hello', k => k.length)).toBe(5)
|
||||
expect(getOrInsert(m, 'hello', k => 2 * k.length)).toBe(5)
|
||||
expect(getOrInsert(m, 'x', k => k.length)).toBe(1)
|
||||
expect(m.get('hello')).toBe(5)
|
||||
expect(m.get('x')).toBe(1)
|
||||
})
|
||||
|
||||
test('getOrElse', () => {
|
||||
const m = new Map<string, number>()
|
||||
expect(getOrElse(m, 'hello', k => k.length)).toBe(5)
|
||||
expect(getOrElse(m, 'hello', k => 2 * k.length)).toBe(10)
|
||||
expect(getOrElse(m, 'x', k => k.length)).toBe(1)
|
||||
expect(getOrElse(m, 'x', () => 3)).toBe(3)
|
||||
expect(m.get('hello')).toBe(undefined)
|
||||
expect(m.get('x')).toBe(undefined)
|
||||
})
|
||||
|
||||
test('getOrThrow', () => {
|
||||
const m = new Map<string, number>()
|
||||
m.set('hello', 5)
|
||||
expect(getOrThrow(m, 'hello')).toBe(5)
|
||||
expect(() => getOrThrow(m, 'goodbye')).toThrow('Expected key goodbye')
|
||||
})
|
||||
|
||||
test('itMap', () => {
|
||||
const s = new Set<number>([1, 2, 3])
|
||||
expect(new Set(itMap(s, v => v * v))).toEqual(new Set([1, 4, 9]))
|
||||
})
|
||||
|
||||
test('itForEach', () => {
|
||||
const s = new Set<number>([1, 2, 3])
|
||||
const t = new Set()
|
||||
itForEach(s, v => t.add(v * v))
|
||||
expect(t).toEqual(new Set([1, 4, 9]))
|
||||
})
|
||||
|
||||
test('itReduce', () => {
|
||||
const s = new Set<number>([1, 2, 3])
|
||||
expect(itReduce(s, (a, b) => a + b, 0)).toBe(6)
|
||||
})
|
||||
|
||||
test('zeroPad', () => {
|
||||
expect(zeroPad('1', 2)).toBe('01')
|
||||
expect(zeroPad('1', 3)).toBe('001')
|
||||
expect(zeroPad('1000', 3)).toBe('1000')
|
||||
expect(zeroPad('FF', 4)).toBe('00FF')
|
||||
})
|
||||
@@ -14,7 +14,7 @@ export function getOrInsert<K, V>(map: Map<K, V>, k: K, fallback: (k: K) => V):
|
||||
return map.get(k)!
|
||||
}
|
||||
|
||||
export function getOrElse<K, V>(map: Map<K, V>, k: K, fallback: (k?: K) => V): V {
|
||||
export function getOrElse<K, V>(map: Map<K, V>, k: K, fallback: (k: K) => V): V {
|
||||
if (!map.has(k)) return fallback(k)
|
||||
return map.get(k)!
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user