test: run jest on source files

This commit is contained in:
Nolan Lawson 2020-06-09 23:22:51 -07:00
parent 1c1c3be036
commit 77c5eed0d8
20 changed files with 66 additions and 66 deletions

View File

@ -1,12 +1,11 @@
import { readFile } from './fs.js'
import { replaceInReadme } from './replaceInReadme.js'
import i18n from '../src/picker/i18n/en.js'
const START_MARKER = '<!-- i18n options start -->'
const END_MARKER = '<!-- i18n options end -->'
// Take the current English i18n object and inject it into the README
async function main () {
const i18n = JSON.parse(await readFile('./src/picker/i18n/en.json', 'utf8'))
const sortedI18n = Object.fromEntries(Object.entries(i18n).sort((a, b) => a[0] < b[0] ? -1 : 1))
const replacement = '```json\n' + JSON.stringify(sortedI18n, null, 2) + '\n```'
await replaceInReadme(START_MARKER, END_MARKER, replacement)

View File

@ -3,9 +3,16 @@ module.exports = {
'<rootDir>/test/spec/**/*.{spec,test}.{js,jsx,ts,tsx}'
],
transform: {
'^.+\\.js$': './config/babelJestTransform.cjs'
'^.+\\.js$': './config/babelJestTransform.cjs',
"^.+\\.svelte$": ["svelte-jester", {
"preprocess": true,
"compilerOptions": {
css: true,
customElement: true
}
}]
},
moduleFileExtensions: ['js'],
moduleFileExtensions: ['js', 'svelte'],
testPathIgnorePatterns: ['node_modules'],
transformIgnorePatterns: ['<rootDir>/node_modules/(?!lodash-es)'],
bail: true,

View File

@ -54,7 +54,6 @@
"@babel/preset-env": "^7.10.2",
"@peculiar/webcrypto": "^1.1.1",
"@rollup/plugin-commonjs": "^11.1.0",
"@rollup/plugin-json": "^4.0.3",
"@rollup/plugin-node-resolve": "^7.1.3",
"@rollup/plugin-replace": "^2.3.2",
"@testing-library/dom": "^7.10.1",
@ -90,6 +89,7 @@
"stylelint-config-recommended-scss": "^4.2.0",
"stylelint-scss": "^3.17.2",
"svelte": "^3.22.2",
"svelte-jester": "nolanlawson/svelte-jester#auto-preprocess",
"svelte-preprocess": "^3.7.4",
"typedoc": "^0.17.7",
"typedoc-plugin-markdown": "^2.3.1",

View File

@ -1,6 +1,5 @@
import cjs from '@rollup/plugin-commonjs'
import resolve from '@rollup/plugin-node-resolve'
import json from '@rollup/plugin-json'
import replace from '@rollup/plugin-replace'
import mainSvelte from 'rollup-plugin-svelte'
import hotSvelte from 'rollup-plugin-svelte-hot'
@ -17,7 +16,6 @@ const baseConfig = {
plugins: [
resolve(),
cjs(),
json(),
replace({
'process.env.NODE_ENV': dev ? '"development"' : '"production"',
'process.env.PERF': !!process.env.PERF,

View File

@ -1,7 +1,7 @@
import SveltePicker from './components/Picker/Picker.svelte'
import Database from './ImportedDatabase'
import { DEFAULT_DATA_SOURCE, DEFAULT_LOCALE } from '../database/constants'
import enI18n from './i18n/en.json'
import enI18n from './i18n/en'
import { mark } from '../shared/marks'
export default class Picker extends SveltePicker {

View File

@ -1,7 +1,7 @@
/* eslint-disable prefer-const,no-labels,no-inner-declarations */
import Database from '../../ImportedDatabase'
import i18n from '../../i18n/en.json'
import enI18n from '../../i18n/en'
import { categories } from '../../categories'
import { DEFAULT_LOCALE, DEFAULT_DATA_SOURCE } from '../../../database/constants'
import { MIN_SEARCH_TEXT_LENGTH } from '../../../shared/constants'
@ -24,6 +24,7 @@ const numSkinTones = 6
const skinToneTextForSkinTone = i => (i > 0 ? applySkinTone(SKIN_TONE_BASE_TEXT, i) : SKIN_TONE_BASE_TEXT)
const skinTones = Array(numSkinTones).fill().map((_, i) => skinToneTextForSkinTone(i))
let i18n = enI18n
let initialLoad = true
let database = null
let currentEmojis = []

32
src/picker/i18n/en.js Normal file
View File

@ -0,0 +1,32 @@
export default {
emojiUnsupported: 'Your browser does not support color emoji.',
loading: 'Loading…',
networkError: 'Could not load emoji. Try refreshing.',
regionLabel: 'Emoji picker',
search: 'Search',
skinToneLabel: 'Choose a skin tone',
skinToneDescription: 'When expanded, press up or down to select and enter to choose.',
skinTonesTitle: 'Skin tones',
searchResultsLabel: 'Search results',
searchDescription: 'When search results are available, press up or down to select and enter to choose.',
categoriesLabel: 'Categories',
skinTones: [
'Default',
'Light',
'Medium-Light',
'Medium',
'Medium-Dark',
'Dark'
],
categories: {
'smileys-emotion': 'Smileys and emoticons',
'people-body': 'People and body',
'animals-nature': 'Animals and nature',
'food-drink': 'Food and drink',
'travel-places': 'Travel and places',
activities: 'Activities',
objects: 'Objects',
symbols: 'Symbols',
flags: 'Flags'
}
}

View File

@ -1,32 +0,0 @@
{
"emojiUnsupported": "Your browser does not support color emoji.",
"loading": "Loading…",
"networkError": "Could not load emoji. Try refreshing.",
"regionLabel": "Emoji picker",
"search": "Search",
"skinToneLabel": "Choose a skin tone",
"skinToneDescription": "When expanded, press up or down to select and enter to choose.",
"skinTonesTitle": "Skin tones",
"searchResultsLabel": "Search results",
"searchDescription": "When search results are available, press up or down to select and enter to choose.",
"categoriesLabel": "Categories",
"skinTones": [
"Default",
"Light",
"Medium-Light",
"Medium",
"Medium-Dark",
"Dark"
],
"categories": {
"smileys-emotion": "Smileys and emoticons",
"people-body": "People and body",
"animals-nature": "Animals and nature",
"food-drink": "Food and drink",
"travel-places": "Travel and places",
"activities": "Activities",
"objects": "Objects",
"symbols": "Symbols",
"flags": "Flags"
}
}

View File

@ -2,13 +2,14 @@
// different emoji releases to determine what the font supports
import isEmoji from 'if-emoji'
import { mark, stop } from '../../shared/marks'
import { isJest } from './isJest'
const versionsAndTestEmoji = process.env.VERSIONS_AND_TEST_EMOJI
export function determineEmojiSupportLevel () {
mark('determineEmojiSupportLevel')
const testEmoji = isJest() ? () => true : isEmoji // avoid using Canvas in Jest, just say we support all emoji
const testEmoji = process.env.NODE_ENV === 'test'
? () => true
: isEmoji // avoid using Canvas in Jest, just say we support all emoji
const versionsWithSupports = Object.entries(versionsAndTestEmoji).map(([emoji, version]) => {
const supported = testEmoji(emoji)
return {

View File

@ -1,4 +0,0 @@
export function isJest () {
const env = typeof process !== 'undefined' && process.env
return env && env.NODE_ENV === 'test' // avoid rollup replacing the string so we can actually test it in prod
}

View File

@ -1,15 +1,14 @@
// @rollup/plugin-strip doesn't strip console.logs properly
import { isJest } from '../picker/utils/isJest'
export function log () {
if (process.env.NODE_ENV !== 'production' && !isJest()) {
if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {
console.log(...arguments)
}
}
export function warn () {
/* istanbul ignore if */
if (!isJest()) {
if (process.env.NODE_ENV !== 'test') {
console.warn(...arguments)
}
}

View File

@ -1,4 +1,4 @@
import { Database } from '../../../index.js'
import Database from '../../../src/database/Database'
import frEmoji from 'emojibase-data/fr/data.json'
import {
basicAfterEach, basicBeforeEach, ALL_EMOJI, ALL_EMOJI_MISCONFIGURED_ETAG,
@ -74,7 +74,7 @@ describe('database tests', () => {
})
test('invalid emoji data', async () => {
const NULL = 'http://localhost/null.json'
const NULL = 'null.json'
const NOT_ARRAY = 'not-array.json'
const EMPTY = 'empty.json'
const NULL_ARRAY = 'null-array.json'

View File

@ -1,5 +1,5 @@
import { ALL_EMOJI, basicAfterEach, basicBeforeEach } from '../shared'
import { Database } from '../../../index.js'
import Database from '../../../src/database/Database'
describe('getEmojiByGroup', () => {
beforeEach(basicBeforeEach)

View File

@ -1,5 +1,5 @@
import allEmoji from 'emojibase-data/en/data.json'
import { Database } from '../../../index.js'
import Database from '../../../src/database/Database'
import { pick } from 'lodash-es'
import { basicAfterEach, basicBeforeEach, ALL_EMOJI, truncatedEmoji } from '../shared'

View File

@ -1,5 +1,5 @@
import { ALL_EMOJI, basicAfterEach, basicBeforeEach } from '../shared'
import { Database } from '../../../index.js'
import Database from '../../../src/database/Database'
describe('getEmojiByShortcode', () => {
beforeEach(basicBeforeEach)

View File

@ -1,6 +1,6 @@
import allEmoji from 'emojibase-data/en/data.json'
import { ALL_EMOJI, basicAfterEach, basicBeforeEach, truncatedEmoji } from '../shared'
import { Database } from '../../../index.js'
import Database from '../../../src/database/Database'
describe('getEmojiByUnicode', () => {
beforeEach(basicBeforeEach)

View File

@ -1,5 +1,5 @@
import { ALL_EMOJI, basicAfterEach, basicBeforeEach } from '../shared'
import Database from '../../../database.js'
import Database from '../../../src/database/Database'
describe('offline first', () => {
beforeEach(() => {

View File

@ -1,5 +1,5 @@
import { ALL_EMOJI, ALL_EMOJI_NO_ETAG, basicAfterEach, basicBeforeEach, tick, truncatedEmoji } from '../shared'
import { Database } from '../../../index'
import Database from '../../../src/database/Database'
import allEmoji from 'emojibase-data/en/data.json'
function mockEmoji (dataSource, data, etag) {

View File

@ -1,6 +1,6 @@
import { basicBeforeEach, basicAfterEach, ALL_EMOJI, tick } from '../shared'
import { getAllByRole, getByRole } from '@testing-library/dom'
import { Picker } from '../../../index.js'
import Picker from '../../../src/picker/PickerElement.js'
describe('Picker tests', () => {
beforeEach(basicBeforeEach)

View File

@ -1099,13 +1099,6 @@
magic-string "^0.25.2"
resolve "^1.11.0"
"@rollup/plugin-json@^4.0.3":
version "4.0.3"
resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.0.3.tgz#747e2c2884c5a0fa00b66c9c0f3f1012cddca534"
integrity sha512-QMUT0HZNf4CX17LMdwaslzlYHUKTYGuuk34yYIgZrNdu+pMEfqMS55gck7HEeHBKXHM4cz5Dg1OVwythDdbbuQ==
dependencies:
"@rollup/pluginutils" "^3.0.8"
"@rollup/plugin-node-resolve@^7.1.3":
version "7.1.3"
resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca"
@ -7556,6 +7549,12 @@ svelte-hmr@^0.8.0:
resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.8.0.tgz#c02c9b5bbe2e8fa23f6f7e221aef4d00495d9e39"
integrity sha512-2CIgd1q2ANQhKzboWHQEZqNX+2kSun12Z8WTy/REOY4ymekWm9C9tsHKdE8uxp2snVYC64RXI6iNgtqpWtSfXg==
svelte-jester@nolanlawson/svelte-jester#auto-preprocess:
version "1.0.6"
resolved "https://codeload.github.com/nolanlawson/svelte-jester/tar.gz/a38d68b6e0f1cc2a80dd8a7e93fd46f6d85acc3b"
dependencies:
cosmiconfig "^6.0.0"
svelte-preprocess@^3.7.4:
version "3.7.4"
resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-3.7.4.tgz#d10cf9b7c96c2b123da90438a3e9814737347e8d"