Skip to content

Commit

Permalink
Demos: Add Rollup example with a mix of import, input, and output
Browse files Browse the repository at this point in the history
  • Loading branch information
Krinkle committed Jul 25, 2024
1 parent 3a09b40 commit e10d93e
Show file tree
Hide file tree
Showing 16 changed files with 330 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"coverage/**",
"demos/*/qunit/**",
"demos/*/coverage/**",
"demos/*/dist/**",
"demos/*/package-lock.json",
"docs/.jekyll-cache/**",
"docs/_site/**",
Expand Down Expand Up @@ -190,7 +191,7 @@
}
},
{
"files": ["demos/**/*.js"],
"files": ["demos/**/*.js", "demos/**/*.mjs"],
"env": {
"browser": true,
"es2017": true,
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
/coverage/
/demos/*/package-lock.json
/demos/*/node_modules/
/demos/*/dist/
/demos/rollup/test-*.html
/docs/.jekyll-cache/
/docs/_site/
/docs/Gemfile.lock
Expand Down
77 changes: 77 additions & 0 deletions demos/rollup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
const cp = require('child_process');
const path = require('path');
const DIR = path.join(__dirname, 'rollup');

function normalize (str) {
return str
.replace(/^localhost:\d+/g, 'localhost:8000')
.replace(/\b\d+ms\b/g, '42ms');
}

QUnit.module('rollup', {
before: () => {
cp.execSync('npm install --prefer-offline --no-audit --update-notifier=false', { cwd: DIR, encoding: 'utf8' });
cp.execSync('npx npm run build', { cwd: DIR, encoding: 'utf8' });
}
});

QUnit.test('test', assert => {
const expected = `Running "connect:all" (connect) task
Started connect web server on http://localhost:8000
Running "qunit:all" (qunit) task
Testing http://localhost:8000/test-import-default-from-cjs.es.html .OK
>> passed test "import default from qunit.cjs > example"
Testing http://localhost:8000/test-import-default-from-cjs.iife.html .OK
>> passed test "import default from qunit.cjs > example"
Testing http://localhost:8000/test-import-default-from-cjs.umd.html .OK
>> passed test "import default from qunit.cjs > example"
Testing http://localhost:8000/test-import-from-cjs.es.html .OK
>> passed test "import { module,test } from qunit.cjs > example"
Testing http://localhost:8000/test-import-from-cjs.iife.html .OK
>> passed test "import { module,test } from qunit.cjs > example"
Testing http://localhost:8000/test-import-from-cjs.umd.html .OK
>> passed test "import { module,test } from qunit.cjs > example"
Testing http://localhost:8000/test-mixed-to-import.es.html ....OK
>> passed test "import default from qunit.cjs > example"
>> passed test "import { module,test } from qunit.cjs > example"
>> passed test "require from qunit.cjs > example"
>> passed test "mixed"
Testing http://localhost:8000/test-mixed-to-import.iife.html ....OK
>> passed test "import default from qunit.cjs > example"
>> passed test "import { module,test } from qunit.cjs > example"
>> passed test "require from qunit.cjs > example"
>> passed test "mixed"
Testing http://localhost:8000/test-mixed-to-import.umd.html ....OK
>> passed test "import default from qunit.cjs > example"
>> passed test "import { module,test } from qunit.cjs > example"
>> passed test "require from qunit.cjs > example"
>> passed test "mixed"
Testing http://localhost:8000/test-mixed-to-require.es.html ....OK
>> passed test "import default from qunit.cjs > example"
>> passed test "import { module,test } from qunit.cjs > example"
>> passed test "require from qunit.cjs > example"
>> passed test "mixed"
Testing http://localhost:8000/test-mixed-to-require.iife.html ....OK
>> passed test "import default from qunit.cjs > example"
>> passed test "import { module,test } from qunit.cjs > example"
>> passed test "require from qunit.cjs > example"
>> passed test "mixed"
Testing http://localhost:8000/test-mixed-to-require.umd.html ....OK
>> passed test "import default from qunit.cjs > example"
>> passed test "import { module,test } from qunit.cjs > example"
>> passed test "require from qunit.cjs > example"
>> passed test "mixed"
Testing http://localhost:8000/test-require-from-cjs.es.html .OK
>> passed test "require from qunit.cjs > example"
Testing http://localhost:8000/test-require-from-cjs.iife.html .OK
>> passed test "require from qunit.cjs > example"
Testing http://localhost:8000/test-require-from-cjs.umd.html .OK
>> passed test "require from qunit.cjs > example"
>> 33 tests completed in 42ms, with 0 failed, 0 skipped, and 0 todo.
Done.`;

const actual = cp.execSync('npx npm -s test', { cwd: DIR, env: { PATH: process.env.PATH }, encoding: 'utf8' });
assert.equal(normalize(actual).trim(), expected);
});
39 changes: 39 additions & 0 deletions demos/rollup/Gruntfile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/* eslint-env node */
module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-qunit');

grunt.initConfig({
connect: {
all: {
options: {
useAvailablePort: true,
base: '.'
}
}
},
qunit: {
options: {
},
all: ['test-*.html']
}
});

grunt.event.once('connect.all.listening', function (_host, port) {
grunt.config('qunit.options.httpBase', `http://localhost:${port}`);
// console.log(grunt.config()); // DEBUG
});

let results = [];
grunt.event.on('qunit.on.testEnd', function (test) {
results.push(
`>> ${test.status} test "${test.fullName.join(' > ')}"`
);
});
grunt.event.on('qunit.on.runEnd', function () {
grunt.log.writeln(results.join('\n'));
results = [];
});

grunt.registerTask('test', ['connect', 'qunit']);
};
17 changes: 17 additions & 0 deletions demos/rollup/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# QUnit ♥️ Rollup

See also <https://rollupjs.org/>.

```bash
npm run build
npm test
```

```
Running "qunit:all" (qunit) task
Testing http://localhost:8000/test.html .OK
>> passed test "example"
>> 1 test completed in 0ms, with 0 failed, 0 skipped, and 0 todo.
Done.
```
103 changes: 103 additions & 0 deletions demos/rollup/build.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
import fs from 'node:fs';

import { rollup } from 'rollup';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';

const plugins = [commonjs(), resolve()];

const inputs = [
{
input: 'test/test-import-default-from-cjs.js',
plugins
},
{
input: 'test/test-import-from-cjs.js',
plugins
},
{
input: 'test/test-mixed-to-import.js',
plugins
},
{
input: 'test/test-mixed-to-require.js',
plugins,
// Ignore "output.name" warning for test-require-from-cjs.iife.js
onwarn: () => {}
},
{
input: 'test/test-require-from-cjs.js',
plugins,
// Ignore "output.name" warning for test-require-from-cjs.iife.js
onwarn: () => {}
}
];
const outputs = [
{
dir: 'dist/',
entryFileNames: '[name].[format].js',
format: 'es'
},
{
dir: 'dist/',
entryFileNames: '[name].[format].js',
format: 'cjs'
},
{
dir: 'dist/',
entryFileNames: '[name].[format].js',
format: 'iife'
},
{
dir: 'dist/',
entryFileNames: '[name].[format].js',
format: 'umd',
name: 'UNUSED'
}
];
const htmlTemplate = `
<!DOCTYPE html>
<html>
<head>
<title>{{title}}</title>
<link rel="stylesheet" href="node_modules/qunit/qunit/qunit.css">
{{scriptTag}}
</head>
<body>
<div id="qunit"></div>
</body>
</html>
`;

(async function main () {
const entries = fs.readdirSync('.');
for (const entry of entries) {
if (entry.match(/^test-.*\.html$/)) {
fs.rmSync(entry);
}
}
for (const input of inputs) {
const bundle = await rollup(input);

for (const outputOptions of outputs) {
const { output } = await bundle.write(outputOptions);
const fileName = output[0].fileName;
console.log('... built ' + fileName);

if (outputOptions.format !== 'cjs') {
const html = htmlTemplate
.replace('{{title}}', fileName)
.replace('{{scriptTag}}', (
fileName.endsWith('.es.js')
? `<script src="dist/${fileName}" type="module"></script>`
: `<script src="dist/${fileName}"></script>`
));

fs.writeFileSync(
fileName.replace('.js', '') + '.html',
html
);
}
}
}
}());
Empty file added demos/rollup/favicon.ico
Empty file.
16 changes: 16 additions & 0 deletions demos/rollup/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"private": true,
"devDependencies": {
"@rollup/plugin-commonjs": "^26.0.1",
"@rollup/plugin-node-resolve": "^15.2.3",
"grunt": "1.6.1",
"grunt-contrib-connect": "^5.0.0",
"grunt-contrib-qunit": "10.1.1",
"qunit": "file:../..",
"rollup": "^4.18.0"
},
"scripts": {
"build": "node build.mjs",
"test": "grunt test"
}
}
6 changes: 6 additions & 0 deletions demos/rollup/test/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
}
}
3 changes: 3 additions & 0 deletions demos/rollup/test/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"type": "module"
}
3 changes: 3 additions & 0 deletions demos/rollup/test/src.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function add (a, b) {
return a + b;
}
10 changes: 10 additions & 0 deletions demos/rollup/test/test-import-default-from-cjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import QUnit from 'qunit';
import { add } from './src.js';

QUnit._hello_a6 = QUnit.assert._hello_a6 = 'test-import-default-from-cjs';

QUnit.module('import default from qunit.cjs', function () {
QUnit.test('example', function (assert) {
assert.equal(add(2, 3), 5);
});
});
10 changes: 10 additions & 0 deletions demos/rollup/test/test-import-from-cjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { QUnit, assert, module, test } from 'qunit';
import { add } from './src.js';

QUnit._hello_b4 = assert._hello_b4 = 'test-import-from-cjs';

module('import { module,test } from qunit.cjs', function () {
test('example', function (assert) {
assert.equal(add(2, 3), 5);
});
});
16 changes: 16 additions & 0 deletions demos/rollup/test/test-mixed-to-import.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import './test-import-default-from-cjs.js';
import './test-import-from-cjs.js';
import './test-require-from-cjs.js';

import QUnit from 'qunit';

QUnit.test('mixed', function (assert) {
assert.strictEqual(QUnit._hello_a6, 'test-import-default-from-cjs');
assert.strictEqual(assert._hello_a6, 'test-import-default-from-cjs');

assert.strictEqual(QUnit._hello_b4, 'test-import-from-cjs');
assert.strictEqual(assert._hello_b4, 'test-import-from-cjs');

assert.strictEqual(QUnit._hello_c9, 'test-require-from-cjs');
assert.strictEqual(assert._hello_c9, 'test-require-from-cjs');
});
16 changes: 16 additions & 0 deletions demos/rollup/test/test-mixed-to-require.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const QUnit = require('qunit');

require('./test-import-default-from-cjs.js');
require('./test-import-from-cjs.js');
require('./test-require-from-cjs.js');

QUnit.test('mixed', function (assert) {
assert.strictEqual(QUnit._hello_a6, 'test-import-default-from-cjs');
assert.strictEqual(assert._hello_a6, 'test-import-default-from-cjs');

assert.strictEqual(QUnit._hello_b4, 'test-import-from-cjs');
assert.strictEqual(assert._hello_b4, 'test-import-from-cjs');

assert.strictEqual(QUnit._hello_c9, 'test-require-from-cjs');
assert.strictEqual(assert._hello_c9, 'test-require-from-cjs');
});
10 changes: 10 additions & 0 deletions demos/rollup/test/test-require-from-cjs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const QUnit = require('qunit');
const { add } = require('./src.js');

QUnit._hello_c9 = QUnit.assert._hello_c9 = 'test-require-from-cjs';

QUnit.module('require from qunit.cjs', function () {
QUnit.test('example', function (assert) {
assert.equal(add(2, 3), 5);
});
});

0 comments on commit e10d93e

Please sign in to comment.