#!/usr/bin/env node // Copyright 2019 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ============================================================================= /** * This script generates the tests.ts file which enumerates all the * backend-agonstic tests. These are the tests that get executed from other * packages (e.g. WebGPU). */ // Call this script from the root of the repo. const LICENSE = `/** * @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ `; const AUTOGEN_CLAUSE = `///// DO NOT EDIT: This file is auto-generated by ` + `/scripts/enumerate-tests.js `; const fs = require('fs'); const path = require('path').posix; const argv = require('yargs').argv; function findTestFiles(dir, files) { files = files || []; fs.readdirSync(dir).forEach(file => { const filePath = path.join(dir, file); if (!file.endsWith('node_modules') && !filePath.endsWith('src/backends') && !file.startsWith('.') && fs.statSync(filePath).isDirectory() && !fs.existsSync(path.join(filePath, 'package.json'))) { files = findTestFiles(filePath, files); } else if ( filePath.endsWith('_test.ts') && filePath !== 'src/setup_test.ts') { files.push(filePath.replace('src/', './').replace('.ts', '')); } }); return files; }; let files = findTestFiles('./src'); files = files.map(f => `import '${f}';`); const newContent = `${LICENSE} ${AUTOGEN_CLAUSE} ${files.sort().join('\n')} `; const testsPath = path.join('src', 'tests.ts'); const oldContent = fs.readFileSync(testsPath); if (argv.ci && newContent != oldContent) { throw new Error( 'Looks like you added a new test file. Please run `yarn build` to ' + 'regenerate src/tests.ts'); } fs.writeFileSync(testsPath, newContent);