From 77c5eed0d8617debe128fb3f021dce5ff78e8232 Mon Sep 17 00:00:00 2001 From: Nolan Lawson Date: Tue, 9 Jun 2020 23:22:51 -0700 Subject: [PATCH] test: run jest on source files --- bin/generateI18nDocs.js | 3 +- jest.config.cjs | 11 +++++-- package.json | 2 +- rollup.config.js | 2 -- src/picker/PickerElement.js | 2 +- src/picker/components/Picker/Picker.js | 3 +- src/picker/i18n/en.js | 32 +++++++++++++++++++ src/picker/i18n/en.json | 32 ------------------- .../utils/determineEmojiSupportLevel.js | 5 +-- src/picker/utils/isJest.js | 4 --- src/shared/log.js | 5 ++- test/spec/database/Database.test.js | 4 +-- test/spec/database/getEmojiByGroup.test.js | 2 +- .../database/getEmojiBySearchQuery.test.js | 2 +- .../spec/database/getEmojiByShortcode.test.js | 2 +- test/spec/database/getEmojiByUnicode.test.js | 2 +- test/spec/database/offlineFirst.test.js | 2 +- test/spec/database/secondLoad.test.js | 2 +- test/spec/picker/Picker.test.js | 2 +- yarn.lock | 13 ++++---- 20 files changed, 66 insertions(+), 66 deletions(-) create mode 100644 src/picker/i18n/en.js delete mode 100644 src/picker/i18n/en.json delete mode 100644 src/picker/utils/isJest.js diff --git a/bin/generateI18nDocs.js b/bin/generateI18nDocs.js index 6eb3087..517337b 100644 --- a/bin/generateI18nDocs.js +++ b/bin/generateI18nDocs.js @@ -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 = '' const END_MARKER = '' // 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) diff --git a/jest.config.cjs b/jest.config.cjs index 1a5cee3..8b9323e 100644 --- a/jest.config.cjs +++ b/jest.config.cjs @@ -3,9 +3,16 @@ module.exports = { '/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: ['/node_modules/(?!lodash-es)'], bail: true, diff --git a/package.json b/package.json index 46f36ff..be2ad4a 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/rollup.config.js b/rollup.config.js index 83ab2e4..98d06bc 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -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, diff --git a/src/picker/PickerElement.js b/src/picker/PickerElement.js index 316fe02..ab2c162 100644 --- a/src/picker/PickerElement.js +++ b/src/picker/PickerElement.js @@ -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 { diff --git a/src/picker/components/Picker/Picker.js b/src/picker/components/Picker/Picker.js index 83da95f..9a1def8 100644 --- a/src/picker/components/Picker/Picker.js +++ b/src/picker/components/Picker/Picker.js @@ -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 = [] diff --git a/src/picker/i18n/en.js b/src/picker/i18n/en.js new file mode 100644 index 0000000..b091caa --- /dev/null +++ b/src/picker/i18n/en.js @@ -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' + } +} diff --git a/src/picker/i18n/en.json b/src/picker/i18n/en.json deleted file mode 100644 index 7e57e94..0000000 --- a/src/picker/i18n/en.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/src/picker/utils/determineEmojiSupportLevel.js b/src/picker/utils/determineEmojiSupportLevel.js index 49c38f0..ce6bb59 100644 --- a/src/picker/utils/determineEmojiSupportLevel.js +++ b/src/picker/utils/determineEmojiSupportLevel.js @@ -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 { diff --git a/src/picker/utils/isJest.js b/src/picker/utils/isJest.js deleted file mode 100644 index b3f6181..0000000 --- a/src/picker/utils/isJest.js +++ /dev/null @@ -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 -} diff --git a/src/shared/log.js b/src/shared/log.js index 835f1a2..a5197ea 100644 --- a/src/shared/log.js +++ b/src/shared/log.js @@ -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) } } diff --git a/test/spec/database/Database.test.js b/test/spec/database/Database.test.js index b817ce8..20c953f 100644 --- a/test/spec/database/Database.test.js +++ b/test/spec/database/Database.test.js @@ -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' diff --git a/test/spec/database/getEmojiByGroup.test.js b/test/spec/database/getEmojiByGroup.test.js index ea8c1ce..ac1d5e0 100644 --- a/test/spec/database/getEmojiByGroup.test.js +++ b/test/spec/database/getEmojiByGroup.test.js @@ -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) diff --git a/test/spec/database/getEmojiBySearchQuery.test.js b/test/spec/database/getEmojiBySearchQuery.test.js index 5e08253..5c6fd2a 100644 --- a/test/spec/database/getEmojiBySearchQuery.test.js +++ b/test/spec/database/getEmojiBySearchQuery.test.js @@ -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' diff --git a/test/spec/database/getEmojiByShortcode.test.js b/test/spec/database/getEmojiByShortcode.test.js index be314d1..4de6d44 100644 --- a/test/spec/database/getEmojiByShortcode.test.js +++ b/test/spec/database/getEmojiByShortcode.test.js @@ -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) diff --git a/test/spec/database/getEmojiByUnicode.test.js b/test/spec/database/getEmojiByUnicode.test.js index dd497aa..6984def 100644 --- a/test/spec/database/getEmojiByUnicode.test.js +++ b/test/spec/database/getEmojiByUnicode.test.js @@ -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) diff --git a/test/spec/database/offlineFirst.test.js b/test/spec/database/offlineFirst.test.js index 77fe770..85dc893 100644 --- a/test/spec/database/offlineFirst.test.js +++ b/test/spec/database/offlineFirst.test.js @@ -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(() => { diff --git a/test/spec/database/secondLoad.test.js b/test/spec/database/secondLoad.test.js index e62fe96..684a157 100644 --- a/test/spec/database/secondLoad.test.js +++ b/test/spec/database/secondLoad.test.js @@ -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) { diff --git a/test/spec/picker/Picker.test.js b/test/spec/picker/Picker.test.js index 1f3c217..15cd590 100644 --- a/test/spec/picker/Picker.test.js +++ b/test/spec/picker/Picker.test.js @@ -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) diff --git a/yarn.lock b/yarn.lock index dab6aa0..5df3334 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"