Skip to content

Commit

Permalink
Allowed running automated and manual tests written in TS.
Browse files Browse the repository at this point in the history
  • Loading branch information
oleq committed Jun 7, 2022
1 parent 0234336 commit 5915dbf
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 46 deletions.
4 changes: 2 additions & 2 deletions packages/ckeditor5-dev-tests/lib/tasks/runautomatedtests.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ const transformFileOptionToTestGlob = require( '../utils/transformfileoptiontote
// that matches to these patterns, the file will be skipped.
const IGNORE_GLOBS = [
// Ignore files which are saved in `manual/` directory. There are manual tests.
path.join( '**', 'tests', '**', 'manual', '**', '*.js' ),
path.join( '**', 'tests', '**', 'manual', '**', '*.{js,ts}' ),
// Ignore `_utils` directory as well because there are saved utils for tests.
path.join( '**', 'tests', '**', '_utils', '**', '*.js' )
path.join( '**', 'tests', '**', '_utils', '**', '*.{js,ts}' )
];

// An absolute path to the entry file that will be passed to Karma.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ function getWebpackEntryPoints( entryFiles ) {
const entryObject = {};

entryFiles.forEach( file => {
entryObject[ getRelativeFilePath( file ).replace( /\.js$/, '' ) ] = file;
entryObject[ getRelativeFilePath( file ).replace( /\.[jt]s$/, '' ) ] = file;
} );

return entryObject;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@
* 1. all packages' files – '*'
* 2. given package files – 'engine'
* 3. everything except the given package – '!engine'
* 4. path – 'engine/view' -> 'ckeditor5-engine/tests/view/**\/*.js'
* 5. simplified glob – 'engine/view/**\/*.js' -> 'ckeditor5-engine/tests/view/**\/*.js'
* 4. path – 'engine/view' -> 'ckeditor5-engine/tests/view/**\/*.{js,ts}'
* 5. simplified glob:
* 'engine/view/**\/*.js' -> 'ckeditor5-engine/tests/view/**\/*.js'
* 'engine/view/**\/*.ts' -> 'ckeditor5-engine/tests/view/**\/*.ts'
* 'engine/view/**\/*.{js,ts}' -> 'ckeditor5-engine/tests/view/**\/*.{js,ts}'
*
* @param {String} globPattern A path or pattern to determine the tests to execute.
* @param {Boolean} [isManualTest=false] Whether the tests are manual or automated.
Expand Down Expand Up @@ -70,7 +73,7 @@ function transformSingleGlobPattern( globPattern, options ) {
globSuffix.push( 'manual', '**' );
}

globSuffix.push( '*.js' );
globSuffix.push( '*.{js,ts}' );

// 0.
if ( globPattern === 'ckeditor5' ) {
Expand All @@ -90,9 +93,11 @@ function transformSingleGlobPattern( globPattern, options ) {
// 5.
returnChunks.push( prefix + '-' + packageName, 'tests', ...chunks );

if ( !chunks[ chunks.length - 1 ].endsWith( '.js' ) ) {
const lastChunk = chunks[ chunks.length - 1 ];

if ( !lastChunk.endsWith( '.js' ) && !lastChunk.endsWith( '.ts' ) && !lastChunk.match( /\.\{.+\}$/ ) ) {
// 4.
returnChunks.push( '**', '*.js' );
returnChunks.push( '**', '*.{js,ts}' );
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -288,4 +288,38 @@ describe( 'compileManualTestScripts', () => {
expect( stubs.glob.firstCall.args[ 0 ] ).to.equal( 'manualTestPattern' );
} );
} );

it( 'should pass correct entries object to the webpack for both JS and TS files', () => {
stubs.glob.returns( [
'ckeditor5-foo/manual/file1.js',
'ckeditor5-foo/manual/file2.ts'
] );

return compileManualTestScripts( {
buildDir: 'buildDir',
patterns: [ 'manualTestPattern' ],
themePath: 'path/to/theme',
language: 'en',
additionalLanguages: [ 'pl', 'ar' ],
debug: [ 'CK_DEBUG' ],
disableWatch: false
} ).then( () => {
expect( stubs.getWebpackConfig.calledOnce ).to.equal( true );

expect( stubs.getWebpackConfig.firstCall.args[ 0 ] ).to.deep.include( {
entries: {
'ckeditor5-foo/manual/file1': 'ckeditor5-foo/manual/file1.js',
'ckeditor5-foo/manual/file2': 'ckeditor5-foo/manual/file2.ts'
}
} );

expect( stubs.webpack.calledOnce ).to.equal( true );
expect( stubs.webpack.firstCall.args[ 0 ] ).to.deep.include( {
entries: {
'ckeditor5-foo/manual/file1': 'ckeditor5-foo/manual/file1.js',
'ckeditor5-foo/manual/file2': 'ckeditor5-foo/manual/file2.ts'
}
} );
} );
} );
} );
Original file line number Diff line number Diff line change
Expand Up @@ -27,101 +27,101 @@ describe( 'dev-tests/utils', () => {

describe( 'converts "ckeditor5" to the root package tests', () => {
it( 'for automated tests', () => {
expect( transformFileOptionToTestGlob( 'ckeditor5' ) ).to.deep.equal( [ '/workspace/tests/**/*.js' ] );
expect( transformFileOptionToTestGlob( 'ckeditor5' ) ).to.deep.equal( [ '/workspace/tests/**/*.{js,ts}' ] );
} );

it( 'for manual tests', () => {
expect( transformFileOptionToTestGlob( 'ckeditor5', true ) ).to.deep.equal( [ '/workspace/tests/**/manual/**/*.js' ] );
expect( transformFileOptionToTestGlob( 'ckeditor5', true ) ).to.deep.equal( [ '/workspace/tests/**/manual/**/*.{js,ts}' ] );
} );
} );

describe( 'converts "*" to all packages\' files', () => {
it( 'for automated tests', () => {
expect( transformFileOptionToTestGlob( '*' ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-*/tests/**/*.js',
'/workspace/packages/ckeditor-*/tests/**/*.js',
'/workspace/external/*/packages/ckeditor5-*/tests/**/*.js',
'/workspace/external/*/packages/ckeditor-*/tests/**/*.js'
'/workspace/packages/ckeditor5-*/tests/**/*.{js,ts}',
'/workspace/packages/ckeditor-*/tests/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-*/tests/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-*/tests/**/*.{js,ts}'
] );
} );

it( 'for manual tests', () => {
expect( transformFileOptionToTestGlob( '*', true ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-*/tests/**/manual/**/*.js',
'/workspace/packages/ckeditor-*/tests/**/manual/**/*.js',
'/workspace/external/*/packages/ckeditor5-*/tests/**/manual/**/*.js',
'/workspace/external/*/packages/ckeditor-*/tests/**/manual/**/*.js'
'/workspace/packages/ckeditor5-*/tests/**/manual/**/*.{js,ts}',
'/workspace/packages/ckeditor-*/tests/**/manual/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-*/tests/**/manual/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-*/tests/**/manual/**/*.{js,ts}'
] );
} );
} );

describe( 'converts package name to its files', () => {
it( 'for automated tests', () => {
expect( transformFileOptionToTestGlob( 'engine' ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-engine/tests/**/*.js',
'/workspace/packages/ckeditor-engine/tests/**/*.js',
'/workspace/external/*/packages/ckeditor5-engine/tests/**/*.js',
'/workspace/external/*/packages/ckeditor-engine/tests/**/*.js'
'/workspace/packages/ckeditor5-engine/tests/**/*.{js,ts}',
'/workspace/packages/ckeditor-engine/tests/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-engine/tests/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-engine/tests/**/*.{js,ts}'
] );
} );

it( 'for manual tests', () => {
expect( transformFileOptionToTestGlob( 'engine', true ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-engine/tests/**/manual/**/*.js',
'/workspace/packages/ckeditor-engine/tests/**/manual/**/*.js',
'/workspace/external/*/packages/ckeditor5-engine/tests/**/manual/**/*.js',
'/workspace/external/*/packages/ckeditor-engine/tests/**/manual/**/*.js'
'/workspace/packages/ckeditor5-engine/tests/**/manual/**/*.{js,ts}',
'/workspace/packages/ckeditor-engine/tests/**/manual/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-engine/tests/**/manual/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-engine/tests/**/manual/**/*.{js,ts}'
] );
} );
} );

describe( 'ignores package starting with "!"', () => {
it( 'for automated tests', () => {
expect( transformFileOptionToTestGlob( '!engine' ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-!(engine)*/tests/**/*.js',
'/workspace/packages/ckeditor-!(engine)*/tests/**/*.js',
'/workspace/external/*/packages/ckeditor5-!(engine)*/tests/**/*.js',
'/workspace/external/*/packages/ckeditor-!(engine)*/tests/**/*.js'
'/workspace/packages/ckeditor5-!(engine)*/tests/**/*.{js,ts}',
'/workspace/packages/ckeditor-!(engine)*/tests/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-!(engine)*/tests/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-!(engine)*/tests/**/*.{js,ts}'
] );
} );

it( 'for manual tests', () => {
expect( transformFileOptionToTestGlob( '!engine', true ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-!(engine)*/tests/**/manual/**/*.js',
'/workspace/packages/ckeditor-!(engine)*/tests/**/manual/**/*.js',
'/workspace/external/*/packages/ckeditor5-!(engine)*/tests/**/manual/**/*.js',
'/workspace/external/*/packages/ckeditor-!(engine)*/tests/**/manual/**/*.js'
'/workspace/packages/ckeditor5-!(engine)*/tests/**/manual/**/*.{js,ts}',
'/workspace/packages/ckeditor-!(engine)*/tests/**/manual/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-!(engine)*/tests/**/manual/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-!(engine)*/tests/**/manual/**/*.{js,ts}'
] );
} );
} );

describe( 'converts path to files', () => {
it( 'for automated tests', () => {
expect( transformFileOptionToTestGlob( 'engine/view' ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-engine/tests/view/**/*.js',
'/workspace/packages/ckeditor-engine/tests/view/**/*.js',
'/workspace/external/*/packages/ckeditor5-engine/tests/view/**/*.js',
'/workspace/external/*/packages/ckeditor-engine/tests/view/**/*.js'
'/workspace/packages/ckeditor5-engine/tests/view/**/*.{js,ts}',
'/workspace/packages/ckeditor-engine/tests/view/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-engine/tests/view/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-engine/tests/view/**/*.{js,ts}'
] );
} );

it( 'for manual tests', () => {
expect( transformFileOptionToTestGlob( 'engine/view/manual', true ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-engine/tests/view/manual/**/*.js',
'/workspace/packages/ckeditor-engine/tests/view/manual/**/*.js',
'/workspace/external/*/packages/ckeditor5-engine/tests/view/manual/**/*.js',
'/workspace/external/*/packages/ckeditor-engine/tests/view/manual/**/*.js'
'/workspace/packages/ckeditor5-engine/tests/view/manual/**/*.{js,ts}',
'/workspace/packages/ckeditor-engine/tests/view/manual/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-engine/tests/view/manual/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-engine/tests/view/manual/**/*.{js,ts}'
] );
} );
} );

describe( 'converts simplified glob to all files', () => {
it( 'for automated tests', () => {
expect( transformFileOptionToTestGlob( 'engine/view/*' ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-engine/tests/view/*/**/*.js',
'/workspace/packages/ckeditor-engine/tests/view/*/**/*.js',
'/workspace/external/*/packages/ckeditor5-engine/tests/view/*/**/*.js',
'/workspace/external/*/packages/ckeditor-engine/tests/view/*/**/*.js'
'/workspace/packages/ckeditor5-engine/tests/view/*/**/*.{js,ts}',
'/workspace/packages/ckeditor-engine/tests/view/*/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-engine/tests/view/*/**/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-engine/tests/view/*/**/*.{js,ts}'
] );
} );

Expand All @@ -132,6 +132,20 @@ describe( 'dev-tests/utils', () => {
'/workspace/external/*/packages/ckeditor5-engine/tests/view/manual/*.js',
'/workspace/external/*/packages/ckeditor-engine/tests/view/manual/*.js'
] );

expect( transformFileOptionToTestGlob( 'engine/view/manual/*.ts', true ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-engine/tests/view/manual/*.ts',
'/workspace/packages/ckeditor-engine/tests/view/manual/*.ts',
'/workspace/external/*/packages/ckeditor5-engine/tests/view/manual/*.ts',
'/workspace/external/*/packages/ckeditor-engine/tests/view/manual/*.ts'
] );

expect( transformFileOptionToTestGlob( 'engine/view/manual/*.{js,ts}', true ) ).to.deep.equal( [
'/workspace/packages/ckeditor5-engine/tests/view/manual/*.{js,ts}',
'/workspace/packages/ckeditor-engine/tests/view/manual/*.{js,ts}',
'/workspace/external/*/packages/ckeditor5-engine/tests/view/manual/*.{js,ts}',
'/workspace/external/*/packages/ckeditor-engine/tests/view/manual/*.{js,ts}'
] );
} );
} );
} );

0 comments on commit 5915dbf

Please sign in to comment.