diff --git a/.babelrc b/.babelrc new file mode 100644 index 000000000..96640ac57 --- /dev/null +++ b/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + "@babel/preset-env", + "@babel/preset-react", + ], + "plugins": [ + "@babel/plugin-proposal-class-properties", + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-transform-runtime", + "styled-jsx/babel" + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 4acdb87a1..e1dffb0a1 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "private": true, "main": "main/index.js", "scripts": { - "test": "xo", + "test": "xo && ava --verbose", "start": "yarn && electron .", "build": "next build renderer && next export renderer", "dist": "npm run build && electron-builder", @@ -25,6 +25,8 @@ "name": "Kap" }, "dependencies": { + "@babel/preset-react": "^7.0.0", + "@babel/runtime": "^7.6.2", "@ffmpeg-installer/ffmpeg": "^1.0.20", "@sentry/browser": "^5.6.3", "@sentry/electron": "^0.17.3", @@ -68,15 +70,25 @@ "react-dom": "^16.9.0", "react-linkify": "^0.2.2", "semver": "^6.3.0", + "styled-jsx": "^3.2.2", "tempy": "^0.3.0", "tildify": "^2.0.0", "tmp": "^0.1.0", "unstated": "^1.2.0" }, "devDependencies": { + "@babel/plugin-proposal-class-properties": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.6.2", + "@babel/plugin-transform-runtime": "^7.6.2", + "@babel/preset-env": "^7.6.2", + "@babel/register": "^7.6.2", + "ava": "^1.0.0-beta.8", "babel-eslint": "^10.0.3", + "browser-env": "^3.2.6", "electron": "6.0.9", "electron-builder": "^21.2.0", + "enzyme": "^3.10.0", + "enzyme-adapter-react-16": "^1.14.0", "eslint-config-xo-react": "^0.20.0", "eslint-plugin-react": "^7.14.3", "eslint-plugin-react-hooks": "^2.0.1", @@ -107,6 +119,22 @@ "renderer/out" ] }, + "ava": { + "files": [ + "test/window-header.js", + "test/keyboard-number-input.js", + "test/open-files.js", + "test/encoding.js", + "!/test/editor" + ], + "require": [ + "@babel/register", + "@babel/preset-react", + "./test/helpers/browser-env.js", + "@babel/plugin-proposal-class-properties", + "@babel/plugin-proposal-object-rest-spread" + ] + }, "husky": { "hooks": { "pre-commit": "npm test", diff --git a/test/encoding.js b/test/encoding.js new file mode 100644 index 000000000..e12fb8446 --- /dev/null +++ b/test/encoding.js @@ -0,0 +1,12 @@ +import test from 'ava'; +import ffmpeg from '@ffmpeg-installer/ffmpeg'; +import execa from 'execa'; + +test('it should be able to find ffmpeg', t => { + t.deepEqual(ffmpeg, ffmpeg); +}); + +test('it should be able to find execa', t => { + t.deepEqual(execa, execa); +}); + diff --git a/test/helpers/browser-env.js b/test/helpers/browser-env.js new file mode 100644 index 000000000..a74e7a88b --- /dev/null +++ b/test/helpers/browser-env.js @@ -0,0 +1 @@ +require('browser-env')(); diff --git a/test/keyboard-number-input.js b/test/keyboard-number-input.js new file mode 100644 index 000000000..52fef31a5 --- /dev/null +++ b/test/keyboard-number-input.js @@ -0,0 +1,14 @@ +import test from 'ava'; +import React from 'react'; +import {mount, configure} from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; +import KeyboardNumberInput from '../renderer/components/keyboard-number-input'; + +configure({adapter: new Adapter()}); + +test('it should render input', t => { + const wrapper = mount(); + wrapper.find('input[type="text"]').at(2); + const input = wrapper.simulate('change', {target: {value: 72}}); + t.is((input.length), 1); +}); diff --git a/test/open-files.js b/test/open-files.js new file mode 100644 index 000000000..578e93310 --- /dev/null +++ b/test/open-files.js @@ -0,0 +1,12 @@ +import test from 'ava'; +import supportedVideoExtensions from '../main/common/constants'; + +test('it should support mp4 mov and m4v', t => { + t.deepEqual(supportedVideoExtensions, {supportedVideoExtensions: ['mp4', 'mov', 'm4v']}); +}); + +test('file extensions should equal .mp4 .mov and .m4v', t => { + const supportedVideoExtensions = ['mp4', 'mov', 'm4v']; + const fileExtensions = supportedVideoExtensions.map(ext => `.${ext}`); + t.deepEqual(fileExtensions, ['.mp4', '.mov', '.m4v']); +}); diff --git a/test/window-header.js b/test/window-header.js new file mode 100644 index 000000000..1348ce7b3 --- /dev/null +++ b/test/window-header.js @@ -0,0 +1,12 @@ +import test from 'ava'; +import React from 'react'; +import {shallow, configure} from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; +import WindowHeader from '../renderer/components/window-header'; + +configure({adapter: new Adapter()}); + +test('can mount component window header', t => { + const wrapper = shallow(); + t.true(wrapper.hasClass('window-header')); +});