Skip to content

Commit 4e2baaa

Browse files
committed
chore: Recreated tests from examples
1 parent c679157 commit 4e2baaa

10 files changed

Lines changed: 147 additions & 2 deletions

File tree

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
"main": "dist/src/main.js",
3131
"scripts": {
3232
"build": "./build.sh --production",
33-
"example": "pnpm preexample && cd examples && pnpm example",
3433
"format": "prettier --cache --write .",
3534
"lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\" --prefix-colors auto && pnpm lint:format",
3635
"lint:js": "eslint . --cache",
@@ -41,7 +40,7 @@
4140
"prepack": "pnpm build",
4241
"preexample": "vite build",
4342
"test": "concurrently \"pnpm:test:*\" --names \"test:\" --prefix-colors auto",
44-
"test:example": "pnpm preexample && cd examples && pnpm test",
43+
"test:fixtures": "./build.sh --test && mt dist-for-testing --quiet",
4544
"test:vitest": "vitest run --exclude dist-for-testing --exclude tests"
4645
},
4746
"dependencies": {
@@ -51,7 +50,10 @@
5150
"devDependencies": {
5251
"@babel/eslint-parser": "^7.27.5",
5352
"@babel/types": "^7.27.6",
53+
"@codemod-utils/files": "^3.0.2",
54+
"@codemod-utils/tests": "^2.0.1",
5455
"@eslint/js": "^9.28.0",
56+
"@sondr3/minitest": "^0.1.2",
5557
"@tsconfig/node18": "^18.2.4",
5658
"@tsconfig/strictest": "^2.0.5",
5759
"@types/babel__core": "^7.20.5",

tests/fixtures/example/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { convertFixtureToJson } from '@codemod-utils/tests';
2+
3+
const inputProject = convertFixtureToJson('example/input');
4+
const outputProject = convertFixtureToJson('example/output');
5+
6+
export { inputProject, outputProject };
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import Component from '@glimmer/component';
2+
3+
/**
4+
* An example GJS file on which we can run the Prettier for GJS plugin.
5+
*/
6+
class MyComponent
7+
extends Component {
8+
9+
<template>
10+
11+
12+
<h1> Class top level template. Class top level template. Class top level template. Class top level template. Class top level template. </h1>
13+
</template>
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type { TemplateOnlyComponent } from '@ember/component/template-only';
2+
3+
export interface Signature {
4+
Element: HTMLElement,
5+
Args: {
6+
7+
8+
}
9+
Yields: []
10+
}
11+
12+
export default <template> Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. </template> as TemplateOnlyComponent<Signature>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import Component from '@glimmer/component';
2+
3+
/**
4+
* An example GJS file on which we can run the Prettier for GJS plugin.
5+
*/
6+
class MyComponent extends Component {
7+
<template>
8+
<h1>
9+
Class top level template. Class top level template. Class top level
10+
template. Class top level template. Class top level template.
11+
</h1>
12+
</template>
13+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import type { TemplateOnlyComponent } from '@ember/component/template-only';
2+
3+
export interface Signature {
4+
Element: HTMLElement;
5+
Args: {};
6+
Yields: [];
7+
}
8+
9+
<template>
10+
Explicit default export module top level component. Explicit default export
11+
module top level component. Explicit default export module top level
12+
component. Explicit default export module top level component. Explicit
13+
default export module top level component.
14+
</template> as TemplateOnlyComponent<Signature>

tests/helpers/format-file.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { format } from 'prettier';
2+
3+
import type { PluginOptions } from '../../src/options.js';
4+
import type { NodeType } from '../../src/utils/index.js';
5+
6+
const defaultOptions = {
7+
printWidth: 80,
8+
singleQuote: true,
9+
templateSingleQuote: false,
10+
};
11+
12+
export async function formatFile(
13+
file: string,
14+
pluginOptions?: Partial<PluginOptions<NodeType>>,
15+
): Promise<string> {
16+
return await format(file, {
17+
...defaultOptions,
18+
...pluginOptions,
19+
parser: 'ember-template-tag',
20+
plugins: ['./dist-for-testing/src/main.js'],
21+
});
22+
}

tests/helpers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './format-file.js';
2+
export * from './run-prettier.js';

tests/helpers/run-prettier.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { readFileSync, writeFileSync } from 'node:fs';
2+
// eslint-disable-next-line unicorn/import-style
3+
import { join } from 'node:path';
4+
5+
import { findFiles } from '@codemod-utils/files';
6+
import { assertFixture, loadFixture } from '@codemod-utils/tests';
7+
8+
import type { PluginOptions } from '../../src/options.js';
9+
import { formatFile } from './format-file.js';
10+
11+
type DirectoryJSON = Parameters<typeof loadFixture>[0];
12+
13+
type Options = {
14+
fixturePath: string;
15+
pluginOptions?: Partial<PluginOptions>;
16+
};
17+
18+
export async function runPrettier(options: Options): Promise<void> {
19+
const { fixturePath, pluginOptions } = options;
20+
21+
const { inputProject, outputProject } = (await import(
22+
join('../fixtures', fixturePath, 'index.js')
23+
)) as {
24+
inputProject: DirectoryJSON;
25+
outputProject: DirectoryJSON;
26+
};
27+
28+
const projectRoot = join('tmp', fixturePath);
29+
30+
loadFixture(inputProject, { projectRoot });
31+
32+
const filePaths = findFiles('**/*.{gjs,gts}', {
33+
projectRoot,
34+
});
35+
36+
await Promise.all(
37+
filePaths.map(async (filePath) => {
38+
const oldFile = readFileSync(join(projectRoot, filePath), 'utf8');
39+
const newFile = await formatFile(oldFile, pluginOptions);
40+
41+
writeFileSync(join(projectRoot, filePath), newFile, 'utf8');
42+
}),
43+
);
44+
45+
assertFixture(outputProject, { projectRoot });
46+
}

tests/main/example.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { test } from '@codemod-utils/tests';
2+
3+
import { runPrettier } from '../helpers/index.js';
4+
5+
test('main > example', async function () {
6+
await runPrettier({
7+
fixturePath: 'example',
8+
});
9+
10+
// Check idempotence
11+
await runPrettier({
12+
fixturePath: 'example',
13+
});
14+
});

0 commit comments

Comments
 (0)