From 860341b93c6e5b30bbc10f538341e462a146905a Mon Sep 17 00:00:00 2001 From: Leland Richardson Date: Tue, 15 Aug 2017 15:27:26 -0700 Subject: [PATCH] Lerna init, move src/* and test/* into enzyme --- .eslintignore | 1 + .gitignore | 2 + .travis.yml | 28 +----- env.js | 96 +++++++++++++++++++ example-test.sh | 10 -- karma.conf.js | 18 ++-- lerna.json | 7 ++ package.json | 67 +++++-------- packages/enzyme-adapter-react-13/.babelrc | 6 ++ .../enzyme-adapter-react-13/.eslintignore | 2 + packages/enzyme-adapter-react-13/.eslintrc | 13 +++ packages/enzyme-adapter-react-13/package.json | 50 ++++++++++ .../src}/ReactThirteenAdapter.js | 11 ++- .../src/ReactThirteenElementToTree.js | 2 +- .../src}/ReactThirteenMapNativeEventNames.js | 0 packages/enzyme-adapter-react-13/src/index.js | 2 + packages/enzyme-adapter-react-14/.babelrc | 6 ++ .../enzyme-adapter-react-14/.eslintignore | 2 + packages/enzyme-adapter-react-14/.eslintrc | 13 +++ packages/enzyme-adapter-react-14/package.json | 52 ++++++++++ .../src}/ReactFourteenAdapter.js | 8 +- packages/enzyme-adapter-react-14/src/index.js | 2 + packages/enzyme-adapter-react-15.4/.babelrc | 6 ++ .../enzyme-adapter-react-15.4/.eslintignore | 2 + packages/enzyme-adapter-react-15.4/.eslintrc | 13 +++ .../enzyme-adapter-react-15.4/package.json | 52 ++++++++++ .../src}/ReactFifteenFourAdapter.js | 8 +- .../enzyme-adapter-react-15.4/src/index.js | 2 + packages/enzyme-adapter-react-15/.babelrc | 6 ++ .../enzyme-adapter-react-15/.eslintignore | 2 + packages/enzyme-adapter-react-15/.eslintrc | 13 +++ packages/enzyme-adapter-react-15/package.json | 51 ++++++++++ .../src}/ReactFifteenAdapter.js | 8 +- packages/enzyme-adapter-react-15/src/index.js | 2 + packages/enzyme-adapter-react-16/.babelrc | 6 ++ .../enzyme-adapter-react-16/.eslintignore | 2 + .../enzyme-adapter-react-16}/.eslintrc | 0 packages/enzyme-adapter-react-16/package.json | 53 ++++++++++ .../src}/ReactSixteenAdapter.js | 10 +- packages/enzyme-adapter-react-16/src/index.js | 2 + packages/enzyme-adapter-utils/.babelrc | 6 ++ packages/enzyme-adapter-utils/.eslintignore | 2 + packages/enzyme-adapter-utils/package.json | 42 ++++++++ .../enzyme-adapter-utils/src}/Utils.js | 39 ++++++++ packages/enzyme-adapter-utils/src/index.js | 2 + packages/enzyme-test-suite/.eslintignore | 2 + .../enzyme-test-suite}/.eslintrc | 0 packages/enzyme-test-suite/package.json | 41 ++++++++ .../enzyme-test-suite/test}/Adapter-spec.jsx | 2 +- .../test}/ComplexSelector-spec.jsx | 2 +- .../enzyme-test-suite/test}/Debug-spec.jsx | 6 +- .../test}/RSTTraversal-spec.jsx | 6 +- .../test}/ReactWrapper-spec.jsx | 4 +- .../test}/ShallowWrapper-spec.jsx | 4 +- .../enzyme-test-suite/test}/Utils-spec.jsx | 4 +- .../test}/_helpers/index.jsx | 0 .../test}/_helpers/react-compat.js | 0 .../test}/_helpers/setupAdapters.js | 16 ++-- .../test}/_helpers/version.js | 0 .../test}/staticRender-spec.jsx | 2 +- packages/enzyme/.babelrc | 6 ++ packages/enzyme/.eslintignore | 2 + packages/enzyme/.eslintrc | 31 ++++++ .../enzyme/ReactWrapper.js | 0 .../enzyme/ShallowWrapper.js | 0 mount.js => packages/enzyme/mount.js | 0 packages/enzyme/package.json | 54 +++++++++++ render.js => packages/enzyme/render.js | 0 shallow.js => packages/enzyme/shallow.js | 0 .../enzyme/src}/ComplexSelector.js | 0 {src => packages/enzyme/src}/Debug.js | 0 .../enzyme/src}/EnzymeAdapter.js | 0 {src => packages/enzyme/src}/RSTTraversal.js | 0 {src => packages/enzyme/src}/ReactWrapper.jsx | 0 .../enzyme/src}/ReactWrapperComponent.jsx | 0 .../enzyme/src}/ShallowWrapper.js | 0 {src => packages/enzyme/src}/Utils.js | 0 {src => packages/enzyme/src}/configuration.js | 0 {src => packages/enzyme/src}/index.js | 2 + {src => packages/enzyme/src}/mount.js | 0 {src => packages/enzyme/src}/render.jsx | 0 {src => packages/enzyme/src}/shallow.js | 0 .../enzyme/src}/validateAdapter.js | 2 +- withDom.js => packages/enzyme/withDom.js | 0 test/mocha.opts | 2 +- 85 files changed, 786 insertions(+), 129 deletions(-) create mode 100755 env.js delete mode 100644 example-test.sh create mode 100644 lerna.json create mode 100644 packages/enzyme-adapter-react-13/.babelrc create mode 100644 packages/enzyme-adapter-react-13/.eslintignore create mode 100644 packages/enzyme-adapter-react-13/.eslintrc create mode 100644 packages/enzyme-adapter-react-13/package.json rename {src/adapters => packages/enzyme-adapter-react-13/src}/ReactThirteenAdapter.js (96%) rename src/adapters/elementToTree.js => packages/enzyme-adapter-react-13/src/ReactThirteenElementToTree.js (89%) rename {src/adapters => packages/enzyme-adapter-react-13/src}/ReactThirteenMapNativeEventNames.js (100%) create mode 100644 packages/enzyme-adapter-react-13/src/index.js create mode 100644 packages/enzyme-adapter-react-14/.babelrc create mode 100644 packages/enzyme-adapter-react-14/.eslintignore create mode 100644 packages/enzyme-adapter-react-14/.eslintrc create mode 100644 packages/enzyme-adapter-react-14/package.json rename {src/adapters => packages/enzyme-adapter-react-14/src}/ReactFourteenAdapter.js (96%) create mode 100644 packages/enzyme-adapter-react-14/src/index.js create mode 100644 packages/enzyme-adapter-react-15.4/.babelrc create mode 100644 packages/enzyme-adapter-react-15.4/.eslintignore create mode 100644 packages/enzyme-adapter-react-15.4/.eslintrc create mode 100644 packages/enzyme-adapter-react-15.4/package.json rename {src/adapters => packages/enzyme-adapter-react-15.4/src}/ReactFifteenFourAdapter.js (96%) create mode 100644 packages/enzyme-adapter-react-15.4/src/index.js create mode 100644 packages/enzyme-adapter-react-15/.babelrc create mode 100644 packages/enzyme-adapter-react-15/.eslintignore create mode 100644 packages/enzyme-adapter-react-15/.eslintrc create mode 100644 packages/enzyme-adapter-react-15/package.json rename {src/adapters => packages/enzyme-adapter-react-15/src}/ReactFifteenAdapter.js (96%) create mode 100644 packages/enzyme-adapter-react-15/src/index.js create mode 100644 packages/enzyme-adapter-react-16/.babelrc create mode 100644 packages/enzyme-adapter-react-16/.eslintignore rename {src/adapters => packages/enzyme-adapter-react-16}/.eslintrc (100%) create mode 100644 packages/enzyme-adapter-react-16/package.json rename {src/adapters => packages/enzyme-adapter-react-16/src}/ReactSixteenAdapter.js (96%) create mode 100644 packages/enzyme-adapter-react-16/src/index.js create mode 100644 packages/enzyme-adapter-utils/.babelrc create mode 100644 packages/enzyme-adapter-utils/.eslintignore create mode 100644 packages/enzyme-adapter-utils/package.json rename {src/adapters => packages/enzyme-adapter-utils/src}/Utils.js (74%) create mode 100644 packages/enzyme-adapter-utils/src/index.js create mode 100644 packages/enzyme-test-suite/.eslintignore rename {test => packages/enzyme-test-suite}/.eslintrc (100%) create mode 100644 packages/enzyme-test-suite/package.json rename {test => packages/enzyme-test-suite/test}/Adapter-spec.jsx (99%) rename {test => packages/enzyme-test-suite/test}/ComplexSelector-spec.jsx (99%) rename {test => packages/enzyme-test-suite/test}/Debug-spec.jsx (99%) rename {test => packages/enzyme-test-suite/test}/RSTTraversal-spec.jsx (98%) rename {test => packages/enzyme-test-suite/test}/ReactWrapper-spec.jsx (99%) rename {test => packages/enzyme-test-suite/test}/ShallowWrapper-spec.jsx (99%) rename {test => packages/enzyme-test-suite/test}/Utils-spec.jsx (99%) rename {test => packages/enzyme-test-suite/test}/_helpers/index.jsx (100%) rename {test => packages/enzyme-test-suite/test}/_helpers/react-compat.js (100%) rename {test => packages/enzyme-test-suite/test}/_helpers/setupAdapters.js (51%) rename {test => packages/enzyme-test-suite/test}/_helpers/version.js (100%) rename {test => packages/enzyme-test-suite/test}/staticRender-spec.jsx (98%) create mode 100644 packages/enzyme/.babelrc create mode 100644 packages/enzyme/.eslintignore create mode 100644 packages/enzyme/.eslintrc rename ReactWrapper.js => packages/enzyme/ReactWrapper.js (100%) rename ShallowWrapper.js => packages/enzyme/ShallowWrapper.js (100%) rename mount.js => packages/enzyme/mount.js (100%) create mode 100644 packages/enzyme/package.json rename render.js => packages/enzyme/render.js (100%) rename shallow.js => packages/enzyme/shallow.js (100%) rename {src => packages/enzyme/src}/ComplexSelector.js (100%) rename {src => packages/enzyme/src}/Debug.js (100%) rename {src/adapters => packages/enzyme/src}/EnzymeAdapter.js (100%) rename {src => packages/enzyme/src}/RSTTraversal.js (100%) rename {src => packages/enzyme/src}/ReactWrapper.jsx (100%) rename {src => packages/enzyme/src}/ReactWrapperComponent.jsx (100%) rename {src => packages/enzyme/src}/ShallowWrapper.js (100%) rename {src => packages/enzyme/src}/Utils.js (100%) rename {src => packages/enzyme/src}/configuration.js (100%) rename {src => packages/enzyme/src}/index.js (84%) rename {src => packages/enzyme/src}/mount.js (100%) rename {src => packages/enzyme/src}/render.jsx (100%) rename {src => packages/enzyme/src}/shallow.js (100%) rename {src => packages/enzyme/src}/validateAdapter.js (93%) rename withDom.js => packages/enzyme/withDom.js (100%) diff --git a/.eslintignore b/.eslintignore index 121f8b489..ae4bf1ea9 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ _book/ build/ +node_modules/ diff --git a/.gitignore b/.gitignore index 264a43d2c..b37acffab 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,5 @@ _book # Only apps should have lockfiles package-lock.json + +packages/*/build/ diff --git a/.travis.yml b/.travis.yml index ecc5a5393..bad3e46fe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,18 +3,16 @@ node_js: - "8" - "6" - "4" - - "0.12" - - "0.10" -before_install: - - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi' - - 'if [ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" = "0" ] || [ "${TRAVIS_NODE_VERSION:0:4}" = "iojs" ]; then npm install -g npm@4.5 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi' install: - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;' before_script: + - 'rm ./node_modules/.bin/npm 2>/dev/null || :' + - "./node_modules/.bin/lerna bootstrap" + - "./node_modules/.bin/lerna run build" - "sh install-relevant-react.sh" - if [ -n "${KARMA-}" ]; then export CHROME_BIN=chromium-browser; export DISPLAY=:99.0; sh -e /etc/init.d/xvfb start; fi script: - - 'if [ -n "${EXAMPLE-}" ]; then npm run test:env -- "${EXAMPLE}" ; elif [ -n "${LINT-}" ]; then npm run lint; elif [ -n "${KARMA-}" ]; then npm run test:karma -- --single-run; elif [ -n "${REACT-}" ]; then npm run travis; else false ; fi' + - 'if [ -n "${LINT-}" ]; then npm run lint; elif [ -n "${KARMA-}" ]; then npm run test:karma -- --single-run; elif [ -n "${REACT-}" ]; then npm run travis; else false ; fi' after_script: - 'if [ "${TRAVIS_NODE_VERSION}" = "4" ] || [ "${TRAVIS_NODE_VERSION}" = "0.12" ]; then cat ./coverage/lcov.info | ./node_modules/.bin/coveralls ; fi' sudo: false @@ -23,16 +21,6 @@ matrix: include: - node_js: "6" env: LINT=true - - node_js: "6" - env: EXAMPLE=mocha - - node_js: "6" - env: EXAMPLE=karma - - node_js: "6" - env: EXAMPLE=react-native - - node_js: "6" - env: EXAMPLE=karma-webpack - - node_js: "6" - env: EXAMPLE=jest - node_js: "6" env: KARMA=true REACT=0.13 - node_js: "6" @@ -44,14 +32,6 @@ matrix: - node_js: "6" env: KARMA=true REACT=16 allow_failures: - - node_js: "6" - env: EXAMPLE=react-native - - node_js: "6" - env: EXAMPLE=mocha - - node_js: "6" - env: EXAMPLE=karma - - node_js: "6" - env: EXAMPLE=karma-webpack - node_js: "6" env: KARMA=true REACT=16 env: diff --git a/env.js b/env.js new file mode 100755 index 000000000..e2f6e74ea --- /dev/null +++ b/env.js @@ -0,0 +1,96 @@ +const path = require('path'); +const fs = require('fs'); +const child_process = require('child_process'); +const rimraf = require('rimraf'); + +const promisify = fn => new Promise((res, rej) => { + const done = (err, val) => (err ? rej(err) : res(val)); + fn(done); +}); +const getJSON = fpath => getFile(fpath).then(json => JSON.parse(json)); +const getFile = fpath => promisify(cb => fs.readFile(fpath, 'utf8', cb)); +const getFiles = fpath => promisify(cb => fs.readdir(fpath, cb)); +const writeFile = (fpath, src) => promisify(cb => fs.writeFile(fpath, src, cb)); +const writeJSON = (fpath, json, pretty = false) => writeFile( + fpath, + pretty + ? JSON.stringify(json, null, 2) + : JSON.stringify(json) +); +const primraf = path => promisify(cb => rimraf(path, cb)); +const run = cmd => promisify(cb => child_process.exec(cmd, cb)); + +// This script is executed with a single argument, indicating the version of +// react and adapters etc. that we want to set ourselves up for testing. +// should be "14" for "enzyme-adapter-react-14", "15.4" for "enzyme-adapter-react-15.4", etc. +const version = process.argv[2]; + +// This script will do the following: +// +// 1. remove / uninstall all relevant modules +// 2. find the adapter for the passed in version +// 3. get the package.json for the adapter +// 4. add the adapter to the dev-deps for enzyme-test-suite package +// 5. call lerna bootstrap to link all the packages +// 6. install all of the package's peer deps at the top level + +var root = process.cwd(); +var adapterName = 'enzyme-adapter-react-' + version; +var adapterPackageJsonPath = path.join(root, 'packages', adapterName, 'package.json'); +var testPackageJsonPath = path.join(root, 'packages', 'enzyme-test-suite', 'package.json'); + +if (!fs.statSync(adapterPackageJsonPath)) { + throw new Error('Adapter not found: "' + adapterName + '"'); +} + +const packagesToRemove = [ + 'react', + 'react-dom', + 'react-addons-test-utils', + 'react-test-renderer', + 'create-react-class', +].map(s => `./node_modules/${s}`); + +const additionalDirsToRemove = [ + 'node_modules/.bin/npm', + 'node_modules/.bin/npm.cmd', +]; + +const rmrfArgs = [] + .concat(packagesToRemove) + .concat(additionalDirsToRemove) + .join(' '); + +Promise.resolve() + .then(() => primraf(rmrfArgs)) + .then(() => run('npm i')) + .then(() => Promise.all([ + getJSON(adapterPackageJsonPath), + getJSON(testPackageJsonPath), + ])) + .then(([adapterJson, testJson]) => { + const peerDeps = adapterJson.peerDependencies; + const installs = Object.keys(peerDeps) + .filter(key => !key.startsWith('enzyme')) + .map(key => `${key}@'${peerDeps[key]}'`) + .join(' '); + + testJson.dependencies[adapterName] = adapterJson.version; + + return Promise.all([ + // npm install the peer deps at the root + run(`npm i --no-save ${installs}`), + + // add the adapter to the dependencies of the test suite + writeJSON(testPackageJsonPath, testJson, true), + ]); + }) + .then(() => run('lerna bootstrap')) + .then(() => getJSON(testPackageJsonPath)) + .then(testJson => { + // now that we've lerna bootstrapped, we can remove the adapter from the + // package.json so there is no diff + delete testJson.dependencies[adapterName]; + return writeJSON(testPackageJsonPath, testJson, true); + }) + .catch(err => console.error(err)); diff --git a/example-test.sh b/example-test.sh deleted file mode 100644 index 08b273bae..000000000 --- a/example-test.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -set -e - -npm run clean -npm run build -cd node_modules/enzyme-example-$1 -npm install --no-package-lock -npm i ../../ --no-save -npm test diff --git a/karma.conf.js b/karma.conf.js index 02979e540..d81a10ce1 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -3,14 +3,14 @@ require('babel-register'); var IgnorePlugin = require('webpack').IgnorePlugin; -var is = require('./test/_helpers/version').is; +var is = require('./packages/enzyme-test-suite/test/_helpers/version').is; function getPlugins() { - const adapter13 = new IgnorePlugin(/adapters\/ReactThirteenAdapter/); - const adapter14 = new IgnorePlugin(/adapters\/ReactFourteenAdapter/); - const adapter154 = new IgnorePlugin(/adapters\/ReactFifteenFourAdapter/); - const adapter15 = new IgnorePlugin(/adapters\/ReactFifteenFiveAdapter/); - const adapter16 = new IgnorePlugin(/adapters\/ReactSixteenAdapter/); + const adapter13 = new IgnorePlugin(/enzyme-adapter-react-13$/); + const adapter14 = new IgnorePlugin(/enzyme-adapter-react-14$/); + const adapter154 = new IgnorePlugin(/enzyme-adapter-react-15\.4$/); + const adapter15 = new IgnorePlugin(/enzyme-adapter-react-15$/); + const adapter16 = new IgnorePlugin(/enzyme-adapter-react-16$/); var plugins = [ adapter13, @@ -66,11 +66,11 @@ module.exports = function karma(config) { reporters: ['dots'], files: [ - 'test/*.{jsx,js}', + 'packages/enzyme-test-suite/test/*.{jsx,js}', ], exclude: [ - 'test/_helpers/index.jsx', + 'packages/enzyme-test-suite/test/_helpers/index.jsx', ], browsers: [ @@ -79,7 +79,7 @@ module.exports = function karma(config) { ], preprocessors: { - 'test/*.{jsx,js}': ['webpack', 'sourcemap'], + 'packages/enzyme-test-suite/test/*.{jsx,js}': ['webpack', 'sourcemap'], }, webpack: { diff --git a/lerna.json b/lerna.json new file mode 100644 index 000000000..28254abe5 --- /dev/null +++ b/lerna.json @@ -0,0 +1,7 @@ +{ + "lerna": "2.0.0", + "packages": [ + "packages/*" + ], + "version": "2.9.1" +} diff --git a/package.json b/package.json index 35f31e83b..dfc49547d 100644 --- a/package.json +++ b/package.json @@ -1,41 +1,41 @@ { "name": "enzyme", - "version": "2.9.1", + "private": true, + "version": "0.0.1", "description": "JavaScript Testing utilities for React", "homepage": "http://airbnb.io/enzyme/", - "main": "build", "scripts": { "prepublish": "not-in-publish || (npm run clean && npm run build && safe-publish-latest)", "preversion": "npm run clean && npm run check", "postversion": "git push && git push --tags && npm run clean && npm run docs:publish", - "version": "npm run build", - "clean": "rimraf build", - "lint": "eslint --ext js,jsx src test", + "version": "lerna run build", + "clean": "lerna run clean", + "lint": "lerna run lint", "postlint": "npm run docs:lint", - "check": "npm run lint && npm run test:all", - "build": "babel src --out-dir build", - "pretest": "npm run lint", + "check": "lerna run lint && npm run test:all", + "build": "lerna run build", + "build:watch": "lerna run build", + "pretest": "lerna run lint", "test": "npm run clean && npm run build && npm run test:only", - "test:only": "mocha --recursive test", + "test:only": "mocha --recursive packages/enzyme-test-suite/test", "test:single": "mocha --watch", - "test:watch": "mocha --recursive --watch test", - "test:karma": "karma start", + "test:watch": "mocha --recursive --watch packages/enzyme-test-suite/test", + "test:karma": "npm run build && karma start", "test:env": "sh ./example-test.sh", "test:all": "npm run react:13 && npm run test:only && npm run react:14 && npm run test:only && npm run react:15.4 && npm run test:only && npm run react:15 && npm run test:only && npm run react:16 && npm run test:only", - "clean-local-npm": "rimraf node_modules/.bin/npm node_modules/.bin/npm.cmd", - "react:clean": "npm run clean-local-npm && rimraf node_modules/react node_modules/react-dom node_modules/react-addons-test-utils node_modules/react-test-renderer node_modules/create-react-class && npm prune", - "react:13": "npm run react:clean && npm install && npm i --no-save react@0.13", - "react:14": "npm run react:clean && npm install && npm i --no-save react@0.14 react-dom@0.14 react-addons-test-utils@0.14", - "react:15.4": "npm run react:clean && npm install && npm i --no-save react@15.4 react-dom@15.4 react-addons-test-utils@15.4", - "react:15": "npm run react:clean && npm install && npm i --no-save react@15 react-dom@15 create-react-class@15 react-test-renderer@^15.5.4", - "react:16": "npm run react:clean && npm install && npm i --no-save react@^16.0.0-0 react-dom@^16.0.0-0 create-react-class@^15.6.0 react-test-renderer@^16.0.0-0", + "react:13": "npm run env -- 13", + "react:14": "npm run env -- 14", + "react:15.4": "npm run env -- 15.4", + "react:15": "npm run env -- 15", + "react:16": "npm run env -- 16", + "env": "babel-node ./env.js", "docs:clean": "rimraf _book", - "docs:lint": "eslint --ext md --config .eslintrc-markdown .", + "docs:lint": "eslint --ext md --config .eslintrc-markdown --ignore-path .eslintignore .", "docs:prepare": "gitbook install", "docs:build": "npm run docs:prepare && gitbook build", "docs:watch": "npm run docs:prepare && gitbook serve", "docs:publish": "npm run docs:clean && npm run docs:build && cd _book && git init && git commit --allow-empty -m 'update book' && git fetch git@github.com:airbnb/enzyme.git gh-pages && git checkout -b gh-pages && git add . && git commit -am 'update book' && git push git@github.com:airbnb/enzyme.git gh-pages --force", - "travis": "babel-node \"$(which istanbul)\" cover --report html _mocha -- test --recursive" + "travis": "npm run build && babel-node \"$(which istanbul)\" cover --report html _mocha -- packages/enzyme-test-suite/test --recursive" }, "repository": { "type": "git", @@ -57,21 +57,8 @@ ], "author": "Leland Richardson ", "license": "MIT", - "dependencies": { - "cheerio": "^0.22.0", - "function.prototype.name": "^1.0.3", - "is-subset": "^0.1.1", - "lodash": "^4.17.4", - "object-is": "^1.0.1", - "object.assign": "^4.0.4", - "object.entries": "^1.0.4", - "object.values": "^1.0.4", - "prop-types": "^15.5.10", - "raf": "^3.3.2", - "semver": "^5.4.1", - "uuid": "^3.1.0" - }, "devDependencies": { + "prop-types": "^15.5.10", "babel-cli": "^6.24.1", "babel-core": "^6.25.0", "babel-eslint": "^7.2.3", @@ -82,11 +69,6 @@ "chai": "^4.1.1", "coveralls": "^2.13.1", "create-react-class": "^15.6.0", - "enzyme-example-jest": "^0.1.0", - "enzyme-example-karma": "^0.1.1", - "enzyme-example-karma-webpack": "^0.1.4", - "enzyme-example-mocha": "^0.1.0", - "enzyme-example-react-native": "^0.1.0", "eslint": "^4.4.1", "eslint-config-airbnb": "^15.1.0", "eslint-plugin-import": "^2.7.0", @@ -104,14 +86,11 @@ "karma-mocha": "^1.3.0", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.8.1", + "lerna": "^2.0.0", "mocha": "^3.5.0", "rimraf": "^2.6.1", "safe-publish-latest": "^1.1.1", "sinon": "^2.4.1", - "webpack": "^1.13.3", - "react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0" - }, - "peerDependencies": { - "react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0" + "webpack": "^1.13.3" } } diff --git a/packages/enzyme-adapter-react-13/.babelrc b/packages/enzyme-adapter-react-13/.babelrc new file mode 100644 index 000000000..b7a8b2f5a --- /dev/null +++ b/packages/enzyme-adapter-react-13/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": ["airbnb"], + "plugins": [ + ["transform-replace-object-assign", "object.assign"], + ], +} diff --git a/packages/enzyme-adapter-react-13/.eslintignore b/packages/enzyme-adapter-react-13/.eslintignore new file mode 100644 index 000000000..121f8b489 --- /dev/null +++ b/packages/enzyme-adapter-react-13/.eslintignore @@ -0,0 +1,2 @@ +_book/ +build/ diff --git a/packages/enzyme-adapter-react-13/.eslintrc b/packages/enzyme-adapter-react-13/.eslintrc new file mode 100644 index 000000000..f9c5faba8 --- /dev/null +++ b/packages/enzyme-adapter-react-13/.eslintrc @@ -0,0 +1,13 @@ +{ + "rules": { + "react/no-find-dom-node": 0, + "react/no-multi-comp": 0, + "no-underscore-dangle": 0, + "class-methods-use-this": 0 + }, + "settings": { + "react": { + "version": "0.13.0" + } + } +} diff --git a/packages/enzyme-adapter-react-13/package.json b/packages/enzyme-adapter-react-13/package.json new file mode 100644 index 000000000..2a814be12 --- /dev/null +++ b/packages/enzyme-adapter-react-13/package.json @@ -0,0 +1,50 @@ +{ + "name": "enzyme-adapter-react-13", + "version": "2.9.1", + "description": "JavaScript Testing utilities for React", + "homepage": "http://airbnb.io/enzyme/", + "main": "build", + "scripts": { + "clean": "rimraf build", + "lint": "eslint --ext js,jsx src test", + "build": "babel src --out-dir build", + "watch": "babel src --out-dir build -w" + }, + "repository": { + "type": "git", + "url": "https://github.com/airbnb/enzyme.git" + }, + "keywords": [ + "javascript", + "shallow rendering", + "shallowRender", + "test", + "reactjs", + "react", + "flux", + "testing", + "test utils", + "assertion helpers", + "tdd", + "mocha" + ], + "author": "Leland Richardson ", + "license": "MIT", + "dependencies": { + "enzyme-adapter-utils": "2.9.1", + "lodash": "^4.17.4", + "object.values": "^1.0.4", + "prop-types": "^15.5.10" + }, + "peerDependencies": { + "enzyme": "2.9.1", + "react": "^0.13.0" + }, + "devDependencies": { + "enzyme": "2.9.1", + "babel-cli": "^6.24.1", + "eslint": "^4.4.1", + "in-publish": "^2.0.0", + "rimraf": "^2.6.1" + } +} diff --git a/src/adapters/ReactThirteenAdapter.js b/packages/enzyme-adapter-react-13/src/ReactThirteenAdapter.js similarity index 96% rename from src/adapters/ReactThirteenAdapter.js rename to packages/enzyme-adapter-react-13/src/ReactThirteenAdapter.js index a223f2167..219d75505 100644 --- a/src/adapters/ReactThirteenAdapter.js +++ b/packages/enzyme-adapter-react-13/src/ReactThirteenAdapter.js @@ -1,16 +1,19 @@ import React from 'react'; +// eslint-disable-next-line import/no-unresolved, import/extensions import ReactAddons from 'react/addons'; +// eslint-disable-next-line import/no-unresolved, import/extensions import ReactContext from 'react/lib/ReactContext'; import PropTypes from 'prop-types'; import values from 'object.values'; -import EnzymeAdapter from './EnzymeAdapter'; -import elementToTree from './elementToTree'; -import mapNativeEventNames from './ReactThirteenMapNativeEventNames'; +import { EnzymeAdapter } from 'enzyme'; import { propFromEvent, withSetStateAllowed, assertDomAvailable, -} from './Utils'; +} from 'enzyme-adapter-utils'; +import mapNativeEventNames from './ReactThirteenMapNativeEventNames'; +import elementToTree from './ReactThirteenElementToTree'; + // this fixes some issues in React 0.13 with setState and jsdom... // see issue: https://github.com/airbnb/enzyme/issues/27 diff --git a/src/adapters/elementToTree.js b/packages/enzyme-adapter-react-13/src/ReactThirteenElementToTree.js similarity index 89% rename from src/adapters/elementToTree.js rename to packages/enzyme-adapter-react-13/src/ReactThirteenElementToTree.js index 321a5ff1c..85be2c35e 100644 --- a/src/adapters/elementToTree.js +++ b/packages/enzyme-adapter-react-13/src/ReactThirteenElementToTree.js @@ -7,7 +7,7 @@ export function nodeTypeFromType(type) { if ( type && type.prototype && - (type.prototype.isReactComponent || typeof type.prototype.render === 'function') + (typeof type.prototype.render === 'function') ) { return 'class'; } diff --git a/src/adapters/ReactThirteenMapNativeEventNames.js b/packages/enzyme-adapter-react-13/src/ReactThirteenMapNativeEventNames.js similarity index 100% rename from src/adapters/ReactThirteenMapNativeEventNames.js rename to packages/enzyme-adapter-react-13/src/ReactThirteenMapNativeEventNames.js diff --git a/packages/enzyme-adapter-react-13/src/index.js b/packages/enzyme-adapter-react-13/src/index.js new file mode 100644 index 000000000..4dd6b3ca1 --- /dev/null +++ b/packages/enzyme-adapter-react-13/src/index.js @@ -0,0 +1,2 @@ +/* eslint global-require: 0 */ +module.exports = require('./ReactThirteenAdapter'); diff --git a/packages/enzyme-adapter-react-14/.babelrc b/packages/enzyme-adapter-react-14/.babelrc new file mode 100644 index 000000000..b7a8b2f5a --- /dev/null +++ b/packages/enzyme-adapter-react-14/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": ["airbnb"], + "plugins": [ + ["transform-replace-object-assign", "object.assign"], + ], +} diff --git a/packages/enzyme-adapter-react-14/.eslintignore b/packages/enzyme-adapter-react-14/.eslintignore new file mode 100644 index 000000000..121f8b489 --- /dev/null +++ b/packages/enzyme-adapter-react-14/.eslintignore @@ -0,0 +1,2 @@ +_book/ +build/ diff --git a/packages/enzyme-adapter-react-14/.eslintrc b/packages/enzyme-adapter-react-14/.eslintrc new file mode 100644 index 000000000..798d02f8d --- /dev/null +++ b/packages/enzyme-adapter-react-14/.eslintrc @@ -0,0 +1,13 @@ +{ + "rules": { + "react/no-find-dom-node": 0, + "react/no-multi-comp": 0, + "no-underscore-dangle": 0, + "class-methods-use-this": 0 + }, + "settings": { + "react": { + "version": "0.14.0" + } + } +} diff --git a/packages/enzyme-adapter-react-14/package.json b/packages/enzyme-adapter-react-14/package.json new file mode 100644 index 000000000..1d94b0d11 --- /dev/null +++ b/packages/enzyme-adapter-react-14/package.json @@ -0,0 +1,52 @@ +{ + "name": "enzyme-adapter-react-14", + "version": "2.9.1", + "description": "JavaScript Testing utilities for React", + "homepage": "http://airbnb.io/enzyme/", + "main": "build", + "scripts": { + "clean": "rimraf build", + "lint": "eslint --ext js,jsx src test", + "build": "babel src --out-dir build", + "watch": "babel src --out-dir build -w" + }, + "repository": { + "type": "git", + "url": "https://github.com/airbnb/enzyme.git" + }, + "keywords": [ + "javascript", + "shallow rendering", + "shallowRender", + "test", + "reactjs", + "react", + "flux", + "testing", + "test utils", + "assertion helpers", + "tdd", + "mocha" + ], + "author": "Leland Richardson ", + "license": "MIT", + "dependencies": { + "enzyme-adapter-utils": "2.9.1", + "lodash": "^4.17.4", + "object.values": "^1.0.4", + "prop-types": "^15.5.10" + }, + "peerDependencies": { + "enzyme": "2.9.1", + "react": "^0.14.0", + "react-dom": "^0.14.0", + "react-addons-test-utils": "^0.14.0" + }, + "devDependencies": { + "enzyme": "2.9.1", + "babel-cli": "^6.24.1", + "eslint": "^4.4.1", + "in-publish": "^2.0.0", + "rimraf": "^2.6.1" + } +} diff --git a/src/adapters/ReactFourteenAdapter.js b/packages/enzyme-adapter-react-14/src/ReactFourteenAdapter.js similarity index 96% rename from src/adapters/ReactFourteenAdapter.js rename to packages/enzyme-adapter-react-14/src/ReactFourteenAdapter.js index c7830366d..5d13cb02d 100644 --- a/src/adapters/ReactFourteenAdapter.js +++ b/packages/enzyme-adapter-react-14/src/ReactFourteenAdapter.js @@ -1,17 +1,19 @@ import React from 'react'; import ReactDOM from 'react-dom'; +// eslint-disable-next-line import/no-unresolved, import/extensions import ReactDOMServer from 'react-dom/server'; +// eslint-disable-next-line import/no-unresolved, import/extensions import TestUtils from 'react-addons-test-utils'; import PropTypes from 'prop-types'; import values from 'object.values'; -import EnzymeAdapter from './EnzymeAdapter'; -import elementToTree from './elementToTree'; +import { EnzymeAdapter } from 'enzyme'; import { + elementToTree, mapNativeEventNames, propFromEvent, withSetStateAllowed, assertDomAvailable, -} from './Utils'; +} from 'enzyme-adapter-utils'; function typeToNodeType(type) { if (typeof type === 'function') { diff --git a/packages/enzyme-adapter-react-14/src/index.js b/packages/enzyme-adapter-react-14/src/index.js new file mode 100644 index 000000000..f5fc26baa --- /dev/null +++ b/packages/enzyme-adapter-react-14/src/index.js @@ -0,0 +1,2 @@ +/* eslint global-require: 0 */ +module.exports = require('./ReactFourteenAdapter'); diff --git a/packages/enzyme-adapter-react-15.4/.babelrc b/packages/enzyme-adapter-react-15.4/.babelrc new file mode 100644 index 000000000..b7a8b2f5a --- /dev/null +++ b/packages/enzyme-adapter-react-15.4/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": ["airbnb"], + "plugins": [ + ["transform-replace-object-assign", "object.assign"], + ], +} diff --git a/packages/enzyme-adapter-react-15.4/.eslintignore b/packages/enzyme-adapter-react-15.4/.eslintignore new file mode 100644 index 000000000..121f8b489 --- /dev/null +++ b/packages/enzyme-adapter-react-15.4/.eslintignore @@ -0,0 +1,2 @@ +_book/ +build/ diff --git a/packages/enzyme-adapter-react-15.4/.eslintrc b/packages/enzyme-adapter-react-15.4/.eslintrc new file mode 100644 index 000000000..17ef04206 --- /dev/null +++ b/packages/enzyme-adapter-react-15.4/.eslintrc @@ -0,0 +1,13 @@ +{ + "rules": { + "react/no-find-dom-node": 0, + "react/no-multi-comp": 0, + "no-underscore-dangle": 0, + "class-methods-use-this": 0 + }, + "settings": { + "react": { + "version": "16.0.0" + } + } +} diff --git a/packages/enzyme-adapter-react-15.4/package.json b/packages/enzyme-adapter-react-15.4/package.json new file mode 100644 index 000000000..6e421c6a9 --- /dev/null +++ b/packages/enzyme-adapter-react-15.4/package.json @@ -0,0 +1,52 @@ +{ + "name": "enzyme-adapter-react-15.4", + "version": "2.9.1", + "description": "JavaScript Testing utilities for React", + "homepage": "http://airbnb.io/enzyme/", + "main": "build", + "scripts": { + "clean": "rimraf build", + "lint": "eslint --ext js,jsx src test", + "build": "babel src --out-dir build", + "watch": "babel src --out-dir build -w" + }, + "repository": { + "type": "git", + "url": "https://github.com/airbnb/enzyme.git" + }, + "keywords": [ + "javascript", + "shallow rendering", + "shallowRender", + "test", + "reactjs", + "react", + "flux", + "testing", + "test utils", + "assertion helpers", + "tdd", + "mocha" + ], + "author": "Leland Richardson ", + "license": "MIT", + "dependencies": { + "enzyme-adapter-utils": "2.9.1", + "lodash": "^4.17.4", + "object.values": "^1.0.4", + "prop-types": "^15.5.10" + }, + "peerDependencies": { + "enzyme": "2.9.1", + "react": "15.0.0-0 - 15.4.x", + "react-addons-test-utils": "15.0.0-0 - 15.4.x", + "react-dom": "15.0.0-0 - 15.4.x" + }, + "devDependencies": { + "enzyme": "2.9.1", + "babel-cli": "^6.24.1", + "eslint": "^4.4.1", + "in-publish": "^2.0.0", + "rimraf": "^2.6.1" + } +} diff --git a/src/adapters/ReactFifteenFourAdapter.js b/packages/enzyme-adapter-react-15.4/src/ReactFifteenFourAdapter.js similarity index 96% rename from src/adapters/ReactFifteenFourAdapter.js rename to packages/enzyme-adapter-react-15.4/src/ReactFifteenFourAdapter.js index 17a81e49c..3c53d67fa 100644 --- a/src/adapters/ReactFifteenFourAdapter.js +++ b/packages/enzyme-adapter-react-15.4/src/ReactFifteenFourAdapter.js @@ -1,17 +1,19 @@ import React from 'react'; import ReactDOM from 'react-dom'; +// eslint-disable-next-line import/no-unresolved, import/extensions import ReactDOMServer from 'react-dom/server'; +// eslint-disable-next-line import/no-unresolved, import/extensions import TestUtils from 'react-addons-test-utils'; import PropTypes from 'prop-types'; import values from 'object.values'; -import EnzymeAdapter from './EnzymeAdapter'; -import elementToTree from './elementToTree'; +import { EnzymeAdapter } from 'enzyme'; import { + elementToTree, mapNativeEventNames, propFromEvent, withSetStateAllowed, assertDomAvailable, -} from './Utils'; +} from 'enzyme-adapter-utils'; function compositeTypeToNodeType(type) { switch (type) { diff --git a/packages/enzyme-adapter-react-15.4/src/index.js b/packages/enzyme-adapter-react-15.4/src/index.js new file mode 100644 index 000000000..bcdd4340c --- /dev/null +++ b/packages/enzyme-adapter-react-15.4/src/index.js @@ -0,0 +1,2 @@ +/* eslint global-require: 0 */ +module.exports = require('./ReactFifteenFourAdapter'); diff --git a/packages/enzyme-adapter-react-15/.babelrc b/packages/enzyme-adapter-react-15/.babelrc new file mode 100644 index 000000000..b7a8b2f5a --- /dev/null +++ b/packages/enzyme-adapter-react-15/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": ["airbnb"], + "plugins": [ + ["transform-replace-object-assign", "object.assign"], + ], +} diff --git a/packages/enzyme-adapter-react-15/.eslintignore b/packages/enzyme-adapter-react-15/.eslintignore new file mode 100644 index 000000000..121f8b489 --- /dev/null +++ b/packages/enzyme-adapter-react-15/.eslintignore @@ -0,0 +1,2 @@ +_book/ +build/ diff --git a/packages/enzyme-adapter-react-15/.eslintrc b/packages/enzyme-adapter-react-15/.eslintrc new file mode 100644 index 000000000..d69a0c24b --- /dev/null +++ b/packages/enzyme-adapter-react-15/.eslintrc @@ -0,0 +1,13 @@ +{ + "rules": { + "react/no-find-dom-node": 0, + "react/no-multi-comp": 0, + "no-underscore-dangle": 0, + "class-methods-use-this": 0 + }, + "settings": { + "react": { + "version": "15.5.0" + } + } +} diff --git a/packages/enzyme-adapter-react-15/package.json b/packages/enzyme-adapter-react-15/package.json new file mode 100644 index 000000000..3216e45e6 --- /dev/null +++ b/packages/enzyme-adapter-react-15/package.json @@ -0,0 +1,51 @@ +{ + "name": "enzyme-adapter-react-15", + "version": "2.9.1", + "description": "JavaScript Testing utilities for React", + "homepage": "http://airbnb.io/enzyme/", + "main": "build", + "scripts": { + "clean": "rimraf build", + "lint": "eslint --ext js,jsx src test", + "build": "babel src --out-dir build", + "watch": "babel src --out-dir build -w" + }, + "repository": { + "type": "git", + "url": "https://github.com/airbnb/enzyme.git" + }, + "keywords": [ + "javascript", + "shallow rendering", + "shallowRender", + "test", + "reactjs", + "react", + "flux", + "testing", + "test utils", + "assertion helpers", + "tdd", + "mocha" + ], + "author": "Leland Richardson ", + "license": "MIT", + "dependencies": { + "enzyme-adapter-utils": "2.9.1", + "lodash": "^4.17.4", + "object.values": "^1.0.4", + "prop-types": "^15.5.10" + }, + "peerDependencies": { + "enzyme": "2.9.1", + "react": "^15.5.0", + "react-dom": "^15.5.0" + }, + "devDependencies": { + "enzyme": "2.9.1", + "babel-cli": "^6.24.1", + "eslint": "^4.4.1", + "in-publish": "^2.0.0", + "rimraf": "^2.6.1" + } +} diff --git a/src/adapters/ReactFifteenAdapter.js b/packages/enzyme-adapter-react-15/src/ReactFifteenAdapter.js similarity index 96% rename from src/adapters/ReactFifteenAdapter.js rename to packages/enzyme-adapter-react-15/src/ReactFifteenAdapter.js index 40d813efa..e608beda8 100644 --- a/src/adapters/ReactFifteenAdapter.js +++ b/packages/enzyme-adapter-react-15/src/ReactFifteenAdapter.js @@ -1,17 +1,19 @@ import React from 'react'; import ReactDOM from 'react-dom'; +// eslint-disable-next-line import/no-unresolved, import/extensions import ReactDOMServer from 'react-dom/server'; +// eslint-disable-next-line import/no-unresolved, import/extensions import TestUtils from 'react-dom/test-utils'; import PropTypes from 'prop-types'; import values from 'object.values'; -import EnzymeAdapter from './EnzymeAdapter'; -import elementToTree from './elementToTree'; +import { EnzymeAdapter } from 'enzyme'; import { + elementToTree, mapNativeEventNames, propFromEvent, withSetStateAllowed, assertDomAvailable, -} from './Utils'; +} from 'enzyme-adapter-utils'; function compositeTypeToNodeType(type) { switch (type) { diff --git a/packages/enzyme-adapter-react-15/src/index.js b/packages/enzyme-adapter-react-15/src/index.js new file mode 100644 index 000000000..85587aca1 --- /dev/null +++ b/packages/enzyme-adapter-react-15/src/index.js @@ -0,0 +1,2 @@ +/* eslint global-require: 0 */ +module.exports = require('./ReactFifteenAdapter'); diff --git a/packages/enzyme-adapter-react-16/.babelrc b/packages/enzyme-adapter-react-16/.babelrc new file mode 100644 index 000000000..b7a8b2f5a --- /dev/null +++ b/packages/enzyme-adapter-react-16/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": ["airbnb"], + "plugins": [ + ["transform-replace-object-assign", "object.assign"], + ], +} diff --git a/packages/enzyme-adapter-react-16/.eslintignore b/packages/enzyme-adapter-react-16/.eslintignore new file mode 100644 index 000000000..121f8b489 --- /dev/null +++ b/packages/enzyme-adapter-react-16/.eslintignore @@ -0,0 +1,2 @@ +_book/ +build/ diff --git a/src/adapters/.eslintrc b/packages/enzyme-adapter-react-16/.eslintrc similarity index 100% rename from src/adapters/.eslintrc rename to packages/enzyme-adapter-react-16/.eslintrc diff --git a/packages/enzyme-adapter-react-16/package.json b/packages/enzyme-adapter-react-16/package.json new file mode 100644 index 000000000..aa7728ae9 --- /dev/null +++ b/packages/enzyme-adapter-react-16/package.json @@ -0,0 +1,53 @@ +{ + "name": "enzyme-adapter-react-16", + "version": "2.9.1", + "description": "JavaScript Testing utilities for React", + "homepage": "http://airbnb.io/enzyme/", + "main": "build", + "scripts": { + "clean": "rimraf build", + "lint": "eslint --ext js,jsx src test", + "build": "babel src --out-dir build", + "watch": "babel src --out-dir build -w" + }, + "repository": { + "type": "git", + "url": "https://github.com/airbnb/enzyme.git" + }, + "keywords": [ + "javascript", + "shallow rendering", + "shallowRender", + "test", + "reactjs", + "react", + "flux", + "testing", + "test utils", + "assertion helpers", + "tdd", + "mocha" + ], + "author": "Leland Richardson ", + "license": "MIT", + "dependencies": { + "enzyme-adapter-utils": "2.9.1", + "lodash": "^4.17.4", + "object.values": "^1.0.4", + "object.assign": "^4.0.4", + "prop-types": "^15.5.10" + }, + "peerDependencies": { + "enzyme": "2.9.1", + "react": "^16.0.0-0", + "react-dom": "^16.0.0-0", + "react-test-renderer": "^16.0.0-0" + }, + "devDependencies": { + "enzyme": "2.9.1", + "babel-cli": "^6.24.1", + "eslint": "^4.4.1", + "in-publish": "^2.0.0", + "rimraf": "^2.6.1" + } +} diff --git a/src/adapters/ReactSixteenAdapter.js b/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js similarity index 96% rename from src/adapters/ReactSixteenAdapter.js rename to packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js index db5318b54..9aeb18374 100644 --- a/src/adapters/ReactSixteenAdapter.js +++ b/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js @@ -1,18 +1,22 @@ /* eslint no-use-before-define: 0 */ import React from 'react'; import ReactDOM from 'react-dom'; +// eslint-disable-next-line import/no-unresolved, import/extensions import ReactDOMServer from 'react-dom/server'; +// eslint-disable-next-line import/no-unresolved, import/extensions import ShallowRenderer from 'react-test-renderer/shallow'; +// eslint-disable-next-line import/no-unresolved, import/extensions import TestUtils from 'react-dom/test-utils'; import PropTypes from 'prop-types'; -import EnzymeAdapter from './EnzymeAdapter'; -import elementToTree, { nodeTypeFromType } from './elementToTree'; +import { EnzymeAdapter } from 'enzyme'; import { + elementToTree, + nodeTypeFromType, mapNativeEventNames, propFromEvent, assertDomAvailable, withSetStateAllowed, -} from './Utils'; +} from 'enzyme-adapter-utils'; const HostRoot = 3; const ClassComponent = 2; diff --git a/packages/enzyme-adapter-react-16/src/index.js b/packages/enzyme-adapter-react-16/src/index.js new file mode 100644 index 000000000..48f80c302 --- /dev/null +++ b/packages/enzyme-adapter-react-16/src/index.js @@ -0,0 +1,2 @@ +/* eslint global-require: 0 */ +module.exports = require('./ReactSixteenAdapter'); diff --git a/packages/enzyme-adapter-utils/.babelrc b/packages/enzyme-adapter-utils/.babelrc new file mode 100644 index 000000000..b7a8b2f5a --- /dev/null +++ b/packages/enzyme-adapter-utils/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": ["airbnb"], + "plugins": [ + ["transform-replace-object-assign", "object.assign"], + ], +} diff --git a/packages/enzyme-adapter-utils/.eslintignore b/packages/enzyme-adapter-utils/.eslintignore new file mode 100644 index 000000000..121f8b489 --- /dev/null +++ b/packages/enzyme-adapter-utils/.eslintignore @@ -0,0 +1,2 @@ +_book/ +build/ diff --git a/packages/enzyme-adapter-utils/package.json b/packages/enzyme-adapter-utils/package.json new file mode 100644 index 000000000..16569cfdb --- /dev/null +++ b/packages/enzyme-adapter-utils/package.json @@ -0,0 +1,42 @@ +{ + "name": "enzyme-adapter-utils", + "version": "2.9.1", + "description": "JavaScript Testing utilities for React", + "homepage": "http://airbnb.io/enzyme/", + "main": "build", + "scripts": { + "clean": "rimraf build", + "lint": "eslint --ext js,jsx src test", + "build": "babel src --out-dir build", + "watch": "babel src --out-dir build -w" + }, + "repository": { + "type": "git", + "url": "https://github.com/airbnb/enzyme.git" + }, + "keywords": [ + "javascript", + "shallow rendering", + "shallowRender", + "test", + "reactjs", + "react", + "flux", + "testing", + "test utils", + "assertion helpers", + "tdd", + "mocha" + ], + "author": "Leland Richardson ", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.4" + }, + "devDependencies": { + "babel-cli": "^6.24.1", + "eslint": "^4.4.1", + "in-publish": "^2.0.0", + "rimraf": "^2.6.1" + } +} diff --git a/src/adapters/Utils.js b/packages/enzyme-adapter-utils/src/Utils.js similarity index 74% rename from src/adapters/Utils.js rename to packages/enzyme-adapter-utils/src/Utils.js index 302f9da54..f39f14741 100644 --- a/src/adapters/Utils.js +++ b/packages/enzyme-adapter-utils/src/Utils.js @@ -1,3 +1,5 @@ +import flatten from 'lodash/flatten'; + export function mapNativeEventNames(event) { const nativeToReactEventMap = { compositionend: 'compositionEnd', @@ -74,3 +76,40 @@ export function assertDomAvailable(feature) { ); } } + +export function nodeTypeFromType(type) { + if (typeof type === 'string') { + return 'host'; + } + if ( + type && + type.prototype && + type.prototype.isReactComponent + ) { + return 'class'; + } + return 'function'; +} + +export function elementToTree(el) { + if (el === null || typeof el !== 'object' || !('type' in el)) { + return el; + } + const { type, props, key, ref } = el; + const { children } = props; + let rendered = null; + if (Array.isArray(children)) { + rendered = flatten(children, true).map(elementToTree); + } else if (children !== undefined) { + rendered = elementToTree(children); + } + return { + nodeType: nodeTypeFromType(type), + type, + props, + key, + ref, + instance: null, + rendered, + }; +} diff --git a/packages/enzyme-adapter-utils/src/index.js b/packages/enzyme-adapter-utils/src/index.js new file mode 100644 index 000000000..872e768e0 --- /dev/null +++ b/packages/enzyme-adapter-utils/src/index.js @@ -0,0 +1,2 @@ +/* eslint global-require: 0 */ +module.exports = require('./Utils'); diff --git a/packages/enzyme-test-suite/.eslintignore b/packages/enzyme-test-suite/.eslintignore new file mode 100644 index 000000000..121f8b489 --- /dev/null +++ b/packages/enzyme-test-suite/.eslintignore @@ -0,0 +1,2 @@ +_book/ +build/ diff --git a/test/.eslintrc b/packages/enzyme-test-suite/.eslintrc similarity index 100% rename from test/.eslintrc rename to packages/enzyme-test-suite/.eslintrc diff --git a/packages/enzyme-test-suite/package.json b/packages/enzyme-test-suite/package.json new file mode 100644 index 000000000..147c7ddb7 --- /dev/null +++ b/packages/enzyme-test-suite/package.json @@ -0,0 +1,41 @@ +{ + "name": "enzyme-test-suite", + "private": true, + "version": "2.9.1", + "description": "JavaScript Testing utilities for React", + "homepage": "http://airbnb.io/enzyme/", + "scripts": { + "lint": "eslint --ext js,jsx src test" + }, + "repository": { + "type": "git", + "url": "https://github.com/airbnb/enzyme.git" + }, + "keywords": [ + "javascript", + "shallow rendering", + "shallowRender", + "test", + "reactjs", + "react", + "flux", + "testing", + "test utils", + "assertion helpers", + "tdd", + "mocha" + ], + "author": "Leland Richardson ", + "license": "MIT", + "dependencies": { + "semver": "^5.4.1", + "chai": "^4.1.1", + "sinon": "^2.4.1", + "prop-types": "^15.5.10", + "enzyme": "2.9.1", + "enzyme-adapter-utils": "2.9.1" + }, + "peerDependencies": { + "react": "^15.5.0" + } +} \ No newline at end of file diff --git a/test/Adapter-spec.jsx b/packages/enzyme-test-suite/test/Adapter-spec.jsx similarity index 99% rename from test/Adapter-spec.jsx rename to packages/enzyme-test-suite/test/Adapter-spec.jsx index a16e32daa..67d31ba0e 100644 --- a/test/Adapter-spec.jsx +++ b/packages/enzyme-test-suite/test/Adapter-spec.jsx @@ -3,7 +3,7 @@ import React from 'react'; import { expect } from 'chai'; import { REACT013, REACT16 } from './_helpers/version'; -import configuration from '../src/configuration'; +import configuration from 'enzyme/build/configuration'; import { itIf, describeWithDOM } from './_helpers'; const { adapter } = configuration.get(); diff --git a/test/ComplexSelector-spec.jsx b/packages/enzyme-test-suite/test/ComplexSelector-spec.jsx similarity index 99% rename from test/ComplexSelector-spec.jsx rename to packages/enzyme-test-suite/test/ComplexSelector-spec.jsx index e0f6cb963..16fdad3d2 100644 --- a/test/ComplexSelector-spec.jsx +++ b/packages/enzyme-test-suite/test/ComplexSelector-spec.jsx @@ -6,7 +6,7 @@ import { describeWithDOM } from './_helpers'; import { mount, shallow, -} from '../src/'; +} from 'enzyme'; const tests = [ { diff --git a/test/Debug-spec.jsx b/packages/enzyme-test-suite/test/Debug-spec.jsx similarity index 99% rename from test/Debug-spec.jsx rename to packages/enzyme-test-suite/test/Debug-spec.jsx index 6f63fc274..af16a3a6b 100644 --- a/test/Debug-spec.jsx +++ b/packages/enzyme-test-suite/test/Debug-spec.jsx @@ -6,15 +6,15 @@ import { indent, debugNode, debugNodes, -} from '../src/Debug'; -import { mount, shallow } from '../src/'; +} from 'enzyme/build/Debug'; +import { mount, shallow } from 'enzyme'; import { describeWithDOM, describeIf, itIf, } from './_helpers'; import { REACT013 } from './_helpers/version'; -import configuration from '../src/configuration'; +import configuration from 'enzyme/build/configuration'; const { adapter } = configuration.get(); diff --git a/test/RSTTraversal-spec.jsx b/packages/enzyme-test-suite/test/RSTTraversal-spec.jsx similarity index 98% rename from test/RSTTraversal-spec.jsx rename to packages/enzyme-test-suite/test/RSTTraversal-spec.jsx index a5656bbe1..7248705ce 100644 --- a/test/RSTTraversal-spec.jsx +++ b/packages/enzyme-test-suite/test/RSTTraversal-spec.jsx @@ -4,8 +4,8 @@ import sinon from 'sinon'; import { expect } from 'chai'; import { splitSelector, -} from '../src/Utils'; -import elementToTree from '../src/adapters/elementToTree'; +} from 'enzyme/build/Utils'; +import { elementToTree } from 'enzyme-adapter-utils'; import { hasClassName, nodeHasProperty, @@ -14,7 +14,7 @@ import { pathToNode, getTextFromNode, buildPredicate, -} from '../src/RSTTraversal'; +} from 'enzyme/build/RSTTraversal'; import { describeIf } from './_helpers'; import { REACT013 } from './_helpers/version'; diff --git a/test/ReactWrapper-spec.jsx b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx similarity index 99% rename from test/ReactWrapper-spec.jsx rename to packages/enzyme-test-suite/test/ReactWrapper-spec.jsx index 9a5983d17..95bcdef77 100644 --- a/test/ReactWrapper-spec.jsx +++ b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx @@ -17,8 +17,8 @@ import { mount, render, ReactWrapper, -} from '../src'; -import { ITERATOR_SYMBOL } from '../src/Utils'; +} from 'enzyme'; +import { ITERATOR_SYMBOL } from 'enzyme/build/Utils'; import { REACT013, REACT014, REACT16, is } from './_helpers/version'; describeWithDOM('mount', () => { diff --git a/test/ShallowWrapper-spec.jsx b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx similarity index 99% rename from test/ShallowWrapper-spec.jsx rename to packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx index 366dd2700..4ff2147a5 100644 --- a/test/ShallowWrapper-spec.jsx +++ b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx @@ -5,9 +5,9 @@ import { expect } from 'chai'; import sinon from 'sinon'; import { createClass } from './_helpers/react-compat'; -import { shallow, render, ShallowWrapper } from '../src/'; +import { shallow, render, ShallowWrapper } from 'enzyme'; import { describeIf, itIf, itWithData, generateEmptyRenderData } from './_helpers'; -import { ITERATOR_SYMBOL, withSetStateAllowed } from '../src/Utils'; +import { ITERATOR_SYMBOL, withSetStateAllowed } from 'enzyme/build/Utils'; import { REACT013, REACT014, REACT16, is } from './_helpers/version'; // The shallow renderer in react 16 does not yet support batched updates. When it does, diff --git a/test/Utils-spec.jsx b/packages/enzyme-test-suite/test/Utils-spec.jsx similarity index 99% rename from test/Utils-spec.jsx rename to packages/enzyme-test-suite/test/Utils-spec.jsx index e289de285..ac58d381d 100644 --- a/test/Utils-spec.jsx +++ b/packages/enzyme-test-suite/test/Utils-spec.jsx @@ -12,11 +12,11 @@ import { SELECTOR, selectorType, displayNameOfNode, -} from '../src/Utils'; +} from 'enzyme/build/Utils'; import { mapNativeEventNames, propFromEvent, -} from '../src/adapters/Utils'; +} from 'enzyme-adapter-utils'; import { REACT013 } from './_helpers/version'; describe('Utils', () => { diff --git a/test/_helpers/index.jsx b/packages/enzyme-test-suite/test/_helpers/index.jsx similarity index 100% rename from test/_helpers/index.jsx rename to packages/enzyme-test-suite/test/_helpers/index.jsx diff --git a/test/_helpers/react-compat.js b/packages/enzyme-test-suite/test/_helpers/react-compat.js similarity index 100% rename from test/_helpers/react-compat.js rename to packages/enzyme-test-suite/test/_helpers/react-compat.js diff --git a/test/_helpers/setupAdapters.js b/packages/enzyme-test-suite/test/_helpers/setupAdapters.js similarity index 51% rename from test/_helpers/setupAdapters.js rename to packages/enzyme-test-suite/test/_helpers/setupAdapters.js index 40077a083..e3e42a0ab 100644 --- a/test/_helpers/setupAdapters.js +++ b/packages/enzyme-test-suite/test/_helpers/setupAdapters.js @@ -1,25 +1,25 @@ -/* eslint global-require: 0 */ +/* eslint global-require: 0, import/no-extraneous-dependencies: 0, import/no-unresolved: 0 */ /** * This file is needed only because we run our unit tests on multiple * versions of React at a time. This file basically figures out which * version of React is loaded, and configures enzyme to use the right * corresponding adapter. */ -const Version = require('.//version'); -const Enzyme = require('../../src'); +const Version = require('./version'); +const Enzyme = require('enzyme'); let Adapter = null; if (Version.REACT013) { - Adapter = require('../../src/adapters/ReactThirteenAdapter'); + Adapter = require('enzyme-adapter-react-13'); } else if (Version.REACT014) { - Adapter = require('../../src/adapters/ReactFourteenAdapter'); + Adapter = require('enzyme-adapter-react-14'); } else if (Version.REACT155) { - Adapter = require('../../src/adapters/ReactFifteenAdapter'); + Adapter = require('enzyme-adapter-react-15'); } else if (Version.REACT15) { - Adapter = require('../../src/adapters/ReactFifteenFourAdapter'); + Adapter = require('enzyme-adapter-react-15.4'); } else if (Version.REACT16) { - Adapter = require('../../src/adapters/ReactSixteenAdapter'); + Adapter = require('enzyme-adapter-react-16'); } Enzyme.configure({ adapter: new Adapter() }); diff --git a/test/_helpers/version.js b/packages/enzyme-test-suite/test/_helpers/version.js similarity index 100% rename from test/_helpers/version.js rename to packages/enzyme-test-suite/test/_helpers/version.js diff --git a/test/staticRender-spec.jsx b/packages/enzyme-test-suite/test/staticRender-spec.jsx similarity index 98% rename from test/staticRender-spec.jsx rename to packages/enzyme-test-suite/test/staticRender-spec.jsx index 9be393098..33b05129e 100644 --- a/test/staticRender-spec.jsx +++ b/packages/enzyme-test-suite/test/staticRender-spec.jsx @@ -3,7 +3,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { expect } from 'chai'; import { describeWithDOM, describeIf } from './_helpers'; -import { render } from '../src/'; +import { render } from 'enzyme'; import { REACT013 } from './_helpers/version'; import { createClass } from './_helpers/react-compat'; diff --git a/packages/enzyme/.babelrc b/packages/enzyme/.babelrc new file mode 100644 index 000000000..b7a8b2f5a --- /dev/null +++ b/packages/enzyme/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": ["airbnb"], + "plugins": [ + ["transform-replace-object-assign", "object.assign"], + ], +} diff --git a/packages/enzyme/.eslintignore b/packages/enzyme/.eslintignore new file mode 100644 index 000000000..121f8b489 --- /dev/null +++ b/packages/enzyme/.eslintignore @@ -0,0 +1,2 @@ +_book/ +build/ diff --git a/packages/enzyme/.eslintrc b/packages/enzyme/.eslintrc new file mode 100644 index 000000000..d639d726a --- /dev/null +++ b/packages/enzyme/.eslintrc @@ -0,0 +1,31 @@ +{ + "extends": "airbnb", + "root": true, + "env": { + "node": true, + "mocha": true + }, + "rules": { + "id-length": 0, + "new-cap": [2, { "capIsNewExceptions": ["AND"] }], + "react/jsx-pascal-case": [2, { "allowAllCaps": true }], + "react/no-find-dom-node": 1, + "import/first": 0, + "no-underscore-dangle": [2, { + "allowAfterThis": true, + "allow": [ + "_context", + "_currentElement", + "_instance", + "_reactInternalComponent", + "_reactInternalInstance", + "_renderedChildren", + "_renderedComponent", + "_renderedNodeType", + "_state", + "_store", + "_stringText", + ], + }], + } +} diff --git a/ReactWrapper.js b/packages/enzyme/ReactWrapper.js similarity index 100% rename from ReactWrapper.js rename to packages/enzyme/ReactWrapper.js diff --git a/ShallowWrapper.js b/packages/enzyme/ShallowWrapper.js similarity index 100% rename from ShallowWrapper.js rename to packages/enzyme/ShallowWrapper.js diff --git a/mount.js b/packages/enzyme/mount.js similarity index 100% rename from mount.js rename to packages/enzyme/mount.js diff --git a/packages/enzyme/package.json b/packages/enzyme/package.json new file mode 100644 index 000000000..901e35994 --- /dev/null +++ b/packages/enzyme/package.json @@ -0,0 +1,54 @@ +{ + "name": "enzyme", + "version": "2.9.1", + "description": "JavaScript Testing utilities for React", + "homepage": "http://airbnb.io/enzyme/", + "main": "build", + "scripts": { + "clean": "rimraf build", + "lint": "eslint --ext js,jsx src test", + "build": "babel src --out-dir build", + "watch": "babel src --out-dir build -w" + }, + "repository": { + "type": "git", + "url": "https://github.com/airbnb/enzyme.git" + }, + "keywords": [ + "javascript", + "shallow rendering", + "shallowRender", + "test", + "reactjs", + "react", + "flux", + "testing", + "test utils", + "assertion helpers", + "tdd", + "mocha" + ], + "author": "Leland Richardson ", + "license": "MIT", + "dependencies": { + "cheerio": "^0.22.0", + "function.prototype.name": "^1.0.3", + "is-subset": "^0.1.1", + "lodash": "^4.17.4", + "object-is": "^1.0.1", + "object.assign": "^4.0.4", + "object.entries": "^1.0.4", + "prop-types": "^15.5.10", + "raf": "^3.3.2", + "uuid": "^3.1.0" + }, + "peerDependencies": { + "react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0" + }, + "devDependencies": { + "babel-cli": "^6.24.1", + "eslint": "^4.4.1", + "in-publish": "^2.0.0", + "rimraf": "^2.6.1" + } +} diff --git a/render.js b/packages/enzyme/render.js similarity index 100% rename from render.js rename to packages/enzyme/render.js diff --git a/shallow.js b/packages/enzyme/shallow.js similarity index 100% rename from shallow.js rename to packages/enzyme/shallow.js diff --git a/src/ComplexSelector.js b/packages/enzyme/src/ComplexSelector.js similarity index 100% rename from src/ComplexSelector.js rename to packages/enzyme/src/ComplexSelector.js diff --git a/src/Debug.js b/packages/enzyme/src/Debug.js similarity index 100% rename from src/Debug.js rename to packages/enzyme/src/Debug.js diff --git a/src/adapters/EnzymeAdapter.js b/packages/enzyme/src/EnzymeAdapter.js similarity index 100% rename from src/adapters/EnzymeAdapter.js rename to packages/enzyme/src/EnzymeAdapter.js diff --git a/src/RSTTraversal.js b/packages/enzyme/src/RSTTraversal.js similarity index 100% rename from src/RSTTraversal.js rename to packages/enzyme/src/RSTTraversal.js diff --git a/src/ReactWrapper.jsx b/packages/enzyme/src/ReactWrapper.jsx similarity index 100% rename from src/ReactWrapper.jsx rename to packages/enzyme/src/ReactWrapper.jsx diff --git a/src/ReactWrapperComponent.jsx b/packages/enzyme/src/ReactWrapperComponent.jsx similarity index 100% rename from src/ReactWrapperComponent.jsx rename to packages/enzyme/src/ReactWrapperComponent.jsx diff --git a/src/ShallowWrapper.js b/packages/enzyme/src/ShallowWrapper.js similarity index 100% rename from src/ShallowWrapper.js rename to packages/enzyme/src/ShallowWrapper.js diff --git a/src/Utils.js b/packages/enzyme/src/Utils.js similarity index 100% rename from src/Utils.js rename to packages/enzyme/src/Utils.js diff --git a/src/configuration.js b/packages/enzyme/src/configuration.js similarity index 100% rename from src/configuration.js rename to packages/enzyme/src/configuration.js diff --git a/src/index.js b/packages/enzyme/src/index.js similarity index 84% rename from src/index.js rename to packages/enzyme/src/index.js index 2c3a41b9b..6c2fb4842 100644 --- a/src/index.js +++ b/packages/enzyme/src/index.js @@ -1,5 +1,6 @@ import ReactWrapper from './ReactWrapper'; import ShallowWrapper from './ShallowWrapper'; +import EnzymeAdapter from './EnzymeAdapter'; import mount from './mount'; import shallow from './shallow'; @@ -13,4 +14,5 @@ module.exports = { ShallowWrapper, ReactWrapper, configure, + EnzymeAdapter, }; diff --git a/src/mount.js b/packages/enzyme/src/mount.js similarity index 100% rename from src/mount.js rename to packages/enzyme/src/mount.js diff --git a/src/render.jsx b/packages/enzyme/src/render.jsx similarity index 100% rename from src/render.jsx rename to packages/enzyme/src/render.jsx diff --git a/src/shallow.js b/packages/enzyme/src/shallow.js similarity index 100% rename from src/shallow.js rename to packages/enzyme/src/shallow.js diff --git a/src/validateAdapter.js b/packages/enzyme/src/validateAdapter.js similarity index 93% rename from src/validateAdapter.js rename to packages/enzyme/src/validateAdapter.js index 329a1b983..3d64ce334 100644 --- a/src/validateAdapter.js +++ b/packages/enzyme/src/validateAdapter.js @@ -1,4 +1,4 @@ -import EnzymeAdapter from './adapters/EnzymeAdapter'; +import EnzymeAdapter from './EnzymeAdapter'; export default function validateAdapter(adapter) { if (!adapter) { diff --git a/withDom.js b/packages/enzyme/withDom.js similarity index 100% rename from withDom.js rename to packages/enzyme/withDom.js diff --git a/test/mocha.opts b/test/mocha.opts index 7ecaceb4d..5fbbaa4cc 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,3 +1,3 @@ ---require withDom.js ./test/_helpers/setupAdapters.js +--require ./packages/enzyme/withDom.js ./packages/enzyme-test-suite/test/_helpers/setupAdapters.js --compilers js:babel-core/register,jsx:babel-core/register --extensions js,jsx