mirror of
				https://github.com/coolaj86/ajquery.js.git
				synced 2024-11-16 17:29:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| let ChildProcess = require("child_process");
 | |
| let Fs = require("node:fs/promises");
 | |
| let Path = require("node:path");
 | |
| 
 | |
| async function main() {
 | |
|   console.info("TAP version 13");
 | |
| 
 | |
|   let dirents = await Fs.readdir(__dirname, { withFileTypes: true });
 | |
| 
 | |
|   let failures = 0;
 | |
|   let count = 0;
 | |
|   for (let dirent of dirents) {
 | |
|     if (dirent.name === "index.js") {
 | |
|       continue;
 | |
|     }
 | |
| 
 | |
|     count += 1;
 | |
|     let direntPath = Path.join(__dirname, dirent.name);
 | |
|     let relPath = Path.relative(".", direntPath);
 | |
| 
 | |
|     let success = await handleEach(count, relPath);
 | |
|     if (!success) {
 | |
|       failures += 1;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   let start = 1;
 | |
|   if (count < 1) {
 | |
|     start = 0;
 | |
|   }
 | |
| 
 | |
|   let passes = count - failures;
 | |
|   console.info(``);
 | |
|   console.info(`${start}..${count}`);
 | |
|   console.info(`# tests ${count}`);
 | |
|   console.info(`# pass  ${passes}`);
 | |
|   console.info(`# fail  ${failures}`);
 | |
|   console.info(`# skip  0`);
 | |
| 
 | |
|   if (failures !== 0) {
 | |
|     process.exit(1);
 | |
|   }
 | |
| }
 | |
| 
 | |
| async function handleEach(count, relPath) {
 | |
|   let success = await exec("node", [relPath])
 | |
|     .then(function (result) {
 | |
|       console.info(`ok ${count} - ${relPath}`);
 | |
|       return true;
 | |
|     })
 | |
|     .catch(function (err) {
 | |
|       console.info(`not ok ${count} - ${relPath}`);
 | |
|       if (err.code) {
 | |
|         console.info(`  # Error: ${err.code}`);
 | |
|       }
 | |
|       if (err.stderr) {
 | |
|         console.info(`  # Stderr: ${err.stderr}`);
 | |
|       }
 | |
|       return false;
 | |
|     });
 | |
| 
 | |
|   return success;
 | |
| }
 | |
| 
 | |
| async function exec(exe, args) {
 | |
|   return new Promise(function (resolve, reject) {
 | |
|     let cmd = ChildProcess.spawn(exe, args);
 | |
| 
 | |
|     let stdout = [];
 | |
|     let stderr = [];
 | |
| 
 | |
|     cmd.stdout.on("data", function (data) {
 | |
|       stdout.push(data.toString("utf8"));
 | |
|     });
 | |
| 
 | |
|     cmd.stderr.on("data", function (data) {
 | |
|       stderr.push(data.toString("utf8"));
 | |
|     });
 | |
| 
 | |
|     cmd.on("close", function (code) {
 | |
|       let result = {
 | |
|         code: code,
 | |
|         stdout: stdout.join(""),
 | |
|         stderr: stderr.join(""),
 | |
|       };
 | |
| 
 | |
|       if (!code) {
 | |
|         resolve(result);
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       let err = new Error(result.stderr);
 | |
|       Object.assign(err, result);
 | |
|       reject(err);
 | |
|     });
 | |
|   });
 | |
| }
 | |
| 
 | |
| main()
 | |
|   .then(function () {
 | |
|     process.exit(0);
 | |
|   })
 | |
|   .catch(function (err) {
 | |
|     console.error("Fail:");
 | |
|     console.error(err.stack || err);
 | |
|     process.exit(1);
 | |
|   });
 |