https://github.com/tbeseda/tap-reader
smol streaming TAP parser
https://github.com/tbeseda/tap-reader
nodejs tap tape testing
Last synced: 6 months ago
JSON representation
smol streaming TAP parser
- Host: GitHub
- URL: https://github.com/tbeseda/tap-reader
- Owner: tbeseda
- Created: 2023-10-12T04:01:36.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-07-29T20:36:09.000Z (almost 2 years ago)
- Last Synced: 2025-03-14T00:47:08.234Z (over 1 year ago)
- Topics: nodejs, tap, tape, testing
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/tap-reader
- Size: 437 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
tap-reader ๐
A smol, streaming TAP parser. Works well with tape.
tap-reader on npmjs.org ยป
Documentation soon...
Sample reporter that leverages `tap-reader`:
```js
#!/usr/bin/env node
import { stdin } from 'node:process';
import TapReader from 'tap-reader'
const write = console.log
const reader = TapReader({ input: stdin });
reader.on('version', ({ version }) => {
write('VERSION', version);
});
reader.on('pass', ({ id, desc, skip, todo }) => {
write('PASS', id, desc, todo ? 'TODO' : skip ? 'SKIP' : '');
});
reader.on('fail', ({ id, desc, skip, todo, diag }) => {
write('FAIL', id, desc, todo ? 'TODO' : skip ? 'SKIP' : '');
for (const key in diag)
write(` ${key}: ${diag[key]}`);
});
reader.on('plan', ({ plan, comment, todo }) => {
write(`plan: ${plan[0]} โ ${plan[1]} ${comment || ''} ${todo ? 'TODO' :''}`);
})
reader.on('comment', ({ comment, todo, skip }) => {
write('COMMENT', comment, todo ? 'TODO' : skip ? 'SKIP' : '');
})
reader.on('other', ({ line }) => {
if (line.trim().length > 0) write('OTHER', line);
})
reader.on('done', ({ summary, ok }) => {
const { total, pass, fail, skip, todo } = summary;
write('DONE')
write(`total: ${total}`)
write(`pass: ${pass}`)
write(`fail: ${fail}`)
write(`skip: ${skip}`)
write(`todo: ${todo}`)
write(`OK ${ok}`)
})
reader.on('end', ({ ok }) => {
process.exit(ok ? 0 : 1);
})
```
Also see `examples/table-reporter.js` for another example.
## Coming next:
- [ ] More TAP features like subtests, +pragmas, etc.
- [ ] Documentation for config and events
- [ ] Intellisense via `.d.ts`
## FAQ:
**Why is `yaml` vendored?**
Because the published module is large. `tap-reader` should install and run as quickly as possible in a CI environment.
I'm not stoked on it so this may change in the future.
**Why not use `tap-parser`?**
`tap-parser` is great but... see above.