Skip to content

Commit

Permalink
fix: ensure scope handling (#465)
Browse files Browse the repository at this point in the history
* fix: ensure scope handling

* fix: chrome esm

* chore: update dev dependencies

* fix: fallback for platform
  • Loading branch information
Christoffer Åström committed Jun 7, 2019
1 parent 8dcedca commit 02f2db1
Show file tree
Hide file tree
Showing 14 changed files with 131 additions and 109 deletions.
8 changes: 7 additions & 1 deletion aw.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,10 @@ module.exports = {
'!**/examples/webpack-dev-server/**',
],
'filter.chrome.packages': ['@after-work.js/example-chrome-*'],
'filter.chrome.files': ['**/examples/chrome-*/**'],
'filter.chrome.files': [
'**/examples/chrome-*/**',
'!**/examples/chrome-esm/**',
],
'filter.puppeteer.packages': ['@after-work.js/example-puppeteer'],
'filter.puppeteer.files': ['**/examples/puppeteer/**'],
'filter.protractor.files': ['**/examples/protractor/**'],
Expand All @@ -66,4 +69,7 @@ module.exports = {
port: 9677,
},
specs: ['./examples/protractor/test/hello.spec.js'],
transform: {
exclude: ['**/chrome-esm/**'],
},
};
30 changes: 16 additions & 14 deletions babel.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,29 @@ module.exports = (api) => {
case 'chrome':
return {
presets: [
['@babel/preset-env', {
targets: {
browsers: ['last 2 versions', 'safari >= 7'],
[
'@babel/preset-env',
{
targets: {
browsers: ['last 2 versions', 'safari >= 7'],
},
modules: 'amd',
},
modules: 'amd',
}],
],
ignore: [
'**/ignore.js',
],
],
ignore: ['**/ignore.js'],
};
default:
return {
presets: [
['@babel/preset-env', {
targets: { node: 'current' },
}],
],
plugins: [
'@babel/plugin-transform-react-jsx',
[
'@babel/preset-env',
{
targets: { node: 'current' },
},
],
],
plugins: ['@babel/plugin-transform-react-jsx'],
};
}
};
2 changes: 0 additions & 2 deletions commands/cdp/src/options.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const {
packages,
TEST_GLOB,
SRC_GLOB,
WATCH_GLOB,
Expand Down Expand Up @@ -30,7 +29,6 @@ module.exports = {
scope: {
description: 'Scope to package',
default: [],
choices: packages,
type: 'array',
alias: 's',
},
Expand Down
2 changes: 0 additions & 2 deletions commands/node/src/options.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const {
packages,
TEST_GLOB,
SRC_GLOB,
WATCH_GLOB,
Expand All @@ -23,7 +22,6 @@ module.exports = {
scope: {
description: 'Scope to package',
default: [],
choices: packages,
type: 'array',
alias: 's',
},
Expand Down
2 changes: 1 addition & 1 deletion commands/protractor/src/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ const setReporterInfo = async (browser) => {
browser.reporterInfo.browserName = browserName;
const cap = await browser.getCapabilities();
browser.reporterInfo.browserVersion = cap.get('version');
const platform = browserName === 'internet-explorer' ? 'WINDOwS' : cap.get('platform');
const platform = cap.get('platform') || cap.get('platformName') || 'unknown';
browser.reporterInfo.platform = platform.replace(/ /g, '-').toLowerCase();
browser.reporterInfo.reportName = `${browser.reporterInfo.browserName}-${
process.env.AW_CURRENT_SESSION_TIMESTAMP
Expand Down
2 changes: 0 additions & 2 deletions commands/puppeteer/src/options.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const {
packages,
TEST_GLOB,
SRC_GLOB,
WATCH_GLOB,
Expand All @@ -22,7 +21,6 @@ module.exports = {
scope: {
description: 'Scope to package',
default: [],
choices: packages,
type: 'array',
alias: 's',
},
Expand Down
2 changes: 1 addition & 1 deletion examples/chrome-esm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## From the project root run

```sh
npx aw chrome -c aw.config.js --glob examples/chrome-esm/test/a.spec.js --url http://localhost:9676/examples/chrome-esm/index.html
npx aw chrome -c aw.config.js --glob examples/chrome-esm/test/a.spec.js --url http://localhost:9677/examples/chrome-esm/index.html
```

This example shows how to run ecmascript modules from the browser.
73 changes: 37 additions & 36 deletions examples/chrome-esm/index.html
Original file line number Diff line number Diff line change
@@ -1,39 +1,40 @@
<!doctype>
<!DOCTYPE >
<html>
<head>
<title>Test</title>
<meta charset="utf-8" />
</head>

<head>
<title>Test</title>
<meta charset="utf-8">
</head>

<body>
<script src="/node_modules/mocha/mocha.js"></script>
<script src="/node_modules/chai/chai.js"></script>
<script>
window.expect = chai.expect;
</script>
<script type="module">
function loadFromScript(src) {
return new Promise((resolve, reject) => {
const script = document.createElement('script');
script.type = 'text/javascript';
script.async = false;
script.type = 'module';
script.onload = () => {
resolve();
};
script.onerror = (e) => {
reject(e);
};
script.src = src;
document.documentElement.appendChild(script);
});
}
(async () => {
await Promise.all(window.awFiles.map(f => loadFromScript(f)));
mocha.run();
})();
</script>
</body>

<body>
<script src="/node_modules/mocha/mocha.js"></script>
<script src="/node_modules/chai/chai.js"></script>
<script>
window.expect = chai.expect;
</script>
<script type="module">
function loadFromScript(src) {
return new Promise((resolve, reject) => {
const script = document.createElement('script');
script.setAttribute('type', 'module');
script.setAttribute('src', src);
script.addEventListener('load', resolve);
script.addEventListener('error', reject);
script.addEventListener('abort', () =>
reject('Script loading aborted.')
);
document.head.appendChild(script);
});
}
(async () => {
try {
await Promise.all(window.awFiles.map(f => loadFromScript(f)));
} catch (e) {
console.error(
JSON.stringify(e, ['message', 'arguments', 'type', 'name'])
);
}
mocha.run();
})();
</script>
</body>
</html>
2 changes: 1 addition & 1 deletion examples/chrome-esm/test/a.spec.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// The .js is needed since that's what the browser will request and according to spec
import getA from '../src/a.js'; // eslint-disable-line import/extensions

describe('A', () => {
describe('chrome-esm A', () => {
it('should return "a"', () => {
expect(getA()).to.equal('a');
});
Expand Down
14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,20 @@
"test:protractor:multi": "aw protractor -c examples/protractor/aw.config.multi.js",
"test:protractor:rendering": "aw protractor -c examples/protractor/aw.config.rendering.js",
"test:puppeteer": "aw puppeteer -c aw.config.js --httpServer",
"test:coveralls": "aw -c aw.config.js --coverage && cat coverage/lcov.info | coveralls",
"test:coveralls": "aw -c aw.config.js && cat coverage/lcov.info | coveralls",
"lint": "lerna run lint"
},
"repository": {
"type": "git",
"url": "ssh://git@github.com:qlik-oss/after-work.js.git"
},
"devDependencies": {
"@after-work.js/cli": "6.0.3",
"@after-work.js/cdp": "6.0.3",
"@after-work.js/node": "6.0.3",
"@after-work.js/puppeteer": "6.0.3",
"@after-work.js/protractor": "6.0.3",
"@after-work.js/serve": "6.0.3",
"@after-work.js/cli": "6.0.4",
"@after-work.js/cdp": "6.0.4",
"@after-work.js/node": "6.0.4",
"@after-work.js/puppeteer": "6.0.4",
"@after-work.js/protractor": "6.0.4",
"@after-work.js/serve": "6.0.4",
"@babel/core": "7.4.0",
"@babel/plugin-transform-react-jsx": "7.3.0",
"@babel/preset-env": "7.4.2",
Expand Down
1 change: 1 addition & 0 deletions packages/transform-middleware/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ module.exports = function transformFiles(userArgv) {
if (shouldInstrument || shouldTransform) {
const file = transformFile(url, argv);
if (file) {
res.set('Content-Type', 'text/javascript');
res.send(file);
return;
}
Expand Down
2 changes: 0 additions & 2 deletions packages/transform-middleware/src/options.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const {
packages,
DEFAULT_TEST_EXT_PATTERN,
TEST_GLOB,
SRC_GLOB,
Expand Down Expand Up @@ -29,7 +28,6 @@ module.exports = {
scope: {
description: 'Scope to package',
default: [],
choices: packages,
type: 'array',
alias: 's',
},
Expand Down
90 changes: 55 additions & 35 deletions packages/utils/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const packagesPath = [...workspaces, ...lernaPackages];
const DEFAULT_TEST_EXT_PATTERN = '*.{spec,test}.{js,jsx,ts,tsx}';
const DEFAULT_TEST_GLOB_PATTERN = `**/${DEFAULT_TEST_EXT_PATTERN}`;

const DEFAULT_SRC_EXT_PATTERN = '*.{js,ts}';
const DEFAULT_SRC_EXT_PATTERN = '*.{js,ts,jsx,tsx}';
const DEFAULT_SRC_GLOB_PATTERN = `**/${DEFAULT_SRC_EXT_PATTERN}`;
const DEFAULT_SRC_EXCLUDE_PATTERN = [
'**/coverage/**',
Expand All @@ -42,23 +42,57 @@ const DEFAULT_NEGATED_SRC_EXCLUDE_PATTERN = DEFAULT_SRC_EXCLUDE_PATTERN.reduce(
[],
);

const getTestGlob = ({ testExt }) => [
...(packagesPath.length
? packagesPath.map(p => `${p}/**/${testExt}`)
: [`**/${testExt}`]),
'!**/node_modules/**',
'!./node_modules/**',
];
const TEST_GLOB = getTestGlob({ testExt: DEFAULT_TEST_EXT_PATTERN });
const getPackages = ({ testExt, srcExt }) => {
const packagesMap = new Map();

const getSrcGlob = ({ srcExt }) => [
...(packagesPath.length
? packagesPath.map(p => `${p}/src/**/${srcExt}`)
: [`src/**/${srcExt}`]),
'!**/node_modules/**',
'!./node_modules/**',
];
const SRC_GLOB = getSrcGlob({ srcExt: DEFAULT_SRC_EXT_PATTERN });
packagesPath.forEach((root) => {
const { name } = importCwd(`./${root}/package.json`);
const hasTests = globby.sync(`${root}/**/${testExt}`).length > 0;
const testGlob = [`${root}/**/${testExt}`];
const srcGlob = [`${root}/src/**/${srcExt}`];
packagesMap.set(name, {
root,
hasTests,
testGlob,
srcGlob,
});
});
return packagesMap;
};

const excludeGlob = ['!**/node_modules/**', '!./node_modules/**'];

const getTestGlob = (argv) => {
const { testExt, scope } = argv;
const packagesMap = getPackages(argv);
let includeGlob = [`**/${testExt}`];
const pkgs = scope.length > 0 ? scope : [...packagesMap.keys()];
if (pkgs.length > 0) {
includeGlob = pkgs.reduce((acc, s) => {
const { testGlob } = packagesMap.get(s);
return [...acc, ...testGlob];
}, []);
}
return [...includeGlob, ...excludeGlob];
};

const TEST_GLOB = getTestGlob({ testExt: DEFAULT_TEST_EXT_PATTERN, scope: [] });

const getSrcGlob = (argv) => {
const { srcExt, scope } = argv;
const packagesMap = getPackages(argv);
let includeGlob = [`src/**/${srcExt}`];
const pkgs = scope.length > 0 ? scope : [...packagesMap.keys()];
if (pkgs.length > 0) {
includeGlob = pkgs.reduce((acc, s) => {
const { srcGlob } = packagesMap.get(s);
return [...acc, ...srcGlob];
}, []);
}
return [...includeGlob, ...excludeGlob];
};

const SRC_GLOB = getSrcGlob({ srcExt: DEFAULT_SRC_EXT_PATTERN, scope: [] });

const WATCH_GLOB = [...TEST_GLOB, ...SRC_GLOB];

Expand Down Expand Up @@ -120,24 +154,10 @@ const addDefaults = (argv) => {
if (argv.watchGlob === WATCH_GLOB) {
argv.watchGlob = [...argv.glob, ...argv.src];
}
if (argv.nyc.exclude === DEFAULT_INSTRUMENT_EXCLUDE_PATTERN) {
argv.nyc.exclude = getInstrumentExcludePattern(argv);
}
};

const getPackages = ({ testExt }) => {
const packagesMap = new Map();
let packages = [];

packagesPath.forEach((root) => {
const { name } = importCwd(`./${root}/package.json`);
const tests = globby.sync(`${root}/**/${testExt}`);
if (tests.length) {
packages = [...packages, name];
}
packagesMap.set(name, root);
});
return { packagesMap, packages };
argv.nyc.exclude = [
...argv.nyc.exclude,
...getInstrumentExcludePattern(argv),
];
};

const utils = {
Expand Down
Loading

0 comments on commit 02f2db1

Please sign in to comment.