mirror of
https://github.com/codedread/bitjs
synced 2025-10-05 02:19:24 +02:00
For Issue #27, rewrite most tests to use mocha/chai via npm run test
This commit is contained in:
parent
83442ea837
commit
f195434de5
12 changed files with 1149 additions and 352 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
node_modules
|
|
@ -9,7 +9,6 @@ A set of dependency-free JavaScript modules to handle binary data in JS (using T
|
||||||
* bitjs/image: Conversion of WebP images to PNG or JPEG.
|
* bitjs/image: Conversion of WebP images to PNG or JPEG.
|
||||||
* bitjs/io: Low-level classes for interpreting binary data (BitStream, ByteStream). For example, reading or peeking at N bits at a time.
|
* bitjs/io: Low-level classes for interpreting binary data (BitStream, ByteStream). For example, reading or peeking at N bits at a time.
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Install it using your favourite package manager, the package is registered under `@codedread/bitjs`.
|
Install it using your favourite package manager, the package is registered under `@codedread/bitjs`.
|
||||||
|
@ -102,11 +101,11 @@ const crc = bstream.readBits(12); // read in 12 bits as CRC, advancing the point
|
||||||
const flagbits = bstream.peekBits(6); // look ahead at next 6 bits, but do not advance the pointer
|
const flagbits = bstream.peekBits(6); // look ahead at next 6 bits, but do not advance the pointer
|
||||||
```
|
```
|
||||||
|
|
||||||
## Tests
|
## Other Tests
|
||||||
|
|
||||||
|
Those that haven't been ported to mocha/chai/nodejs.
|
||||||
|
|
||||||
* [bitjs.archive tests](https://codedread.github.io/bitjs/tests/archive-test.html)
|
* [bitjs.archive tests](https://codedread.github.io/bitjs/tests/archive-test.html)
|
||||||
* [bitjs.file tests](https://codedread.github.io/bitjs/tests/file-sniifer-test.html)
|
|
||||||
* [bitjs.io tests](https://codedread.github.io/bitjs/tests/io-test.html)
|
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
|
|
||||||
|
|
811
package-lock.json
generated
811
package-lock.json
generated
|
@ -1,5 +1,814 @@
|
||||||
{
|
{
|
||||||
"name": "@codedread/bitjs",
|
"name": "@codedread/bitjs",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 1
|
"lockfileVersion": 1,
|
||||||
|
"requires": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@ungap/promise-all-settled": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ansi-colors": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ansi-regex": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ansi-styles": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"anymatch": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"normalize-path": "^3.0.0",
|
||||||
|
"picomatch": "^2.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"argparse": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"assertion-error": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"balanced-match": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"binary-extensions": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"balanced-match": "^1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"braces": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"fill-range": "^7.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"browser-stdout": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"camelcase": {
|
||||||
|
"version": "6.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
|
||||||
|
"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"chai": {
|
||||||
|
"version": "4.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
|
||||||
|
"integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"assertion-error": "^1.1.0",
|
||||||
|
"check-error": "^1.0.2",
|
||||||
|
"deep-eql": "^3.0.1",
|
||||||
|
"get-func-name": "^2.0.0",
|
||||||
|
"pathval": "^1.1.1",
|
||||||
|
"type-detect": "^4.0.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chalk": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^4.1.0",
|
||||||
|
"supports-color": "^7.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"supports-color": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"check-error": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"chokidar": {
|
||||||
|
"version": "3.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
|
||||||
|
"integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"anymatch": "~3.1.1",
|
||||||
|
"braces": "~3.0.2",
|
||||||
|
"fsevents": "~2.3.1",
|
||||||
|
"glob-parent": "~5.1.0",
|
||||||
|
"is-binary-path": "~2.1.0",
|
||||||
|
"is-glob": "~4.0.1",
|
||||||
|
"normalize-path": "~3.0.0",
|
||||||
|
"readdirp": "~3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cliui": {
|
||||||
|
"version": "7.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||||
|
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"string-width": "^4.2.0",
|
||||||
|
"strip-ansi": "^6.0.0",
|
||||||
|
"wrap-ansi": "^7.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-fullwidth-code-point": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"string-width": {
|
||||||
|
"version": "4.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
|
||||||
|
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"emoji-regex": "^8.0.0",
|
||||||
|
"is-fullwidth-code-point": "^3.0.0",
|
||||||
|
"strip-ansi": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strip-ansi": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-regex": "^5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-convert": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"color-name": "~1.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"color-name": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"concat-map": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "4.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
||||||
|
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"decamelize": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"deep-eql": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"type-detect": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"diff": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"emoji-regex": {
|
||||||
|
"version": "8.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
|
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"escalade": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"escape-string-regexp": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"fill-range": {
|
||||||
|
"version": "7.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||||
|
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"to-regex-range": "^5.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"find-up": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"locate-path": "^6.0.0",
|
||||||
|
"path-exists": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flat": {
|
||||||
|
"version": "5.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
|
||||||
|
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"fsevents": {
|
||||||
|
"version": "2.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
||||||
|
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"get-caller-file": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||||
|
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"get-func-name": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"glob": {
|
||||||
|
"version": "7.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||||
|
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"fs.realpath": "^1.0.0",
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "^3.0.4",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glob-parent": {
|
||||||
|
"version": "5.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||||
|
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-glob": "^4.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"growl": {
|
||||||
|
"version": "1.10.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
|
||||||
|
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"he": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-binary-path": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"binary-extensions": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-extglob": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-fullwidth-code-point": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-glob": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extglob": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-number": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-plain-obj": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"isexe": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"js-yaml": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"argparse": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"locate-path": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-locate": "^5.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"log-symbols": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"chalk": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimatch": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"brace-expansion": "^1.1.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mocha": {
|
||||||
|
"version": "8.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz",
|
||||||
|
"integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@ungap/promise-all-settled": "1.1.2",
|
||||||
|
"ansi-colors": "4.1.1",
|
||||||
|
"browser-stdout": "1.3.1",
|
||||||
|
"chokidar": "3.5.1",
|
||||||
|
"debug": "4.3.1",
|
||||||
|
"diff": "5.0.0",
|
||||||
|
"escape-string-regexp": "4.0.0",
|
||||||
|
"find-up": "5.0.0",
|
||||||
|
"glob": "7.1.6",
|
||||||
|
"growl": "1.10.5",
|
||||||
|
"he": "1.2.0",
|
||||||
|
"js-yaml": "4.0.0",
|
||||||
|
"log-symbols": "4.0.0",
|
||||||
|
"minimatch": "3.0.4",
|
||||||
|
"ms": "2.1.3",
|
||||||
|
"nanoid": "3.1.20",
|
||||||
|
"serialize-javascript": "5.0.1",
|
||||||
|
"strip-json-comments": "3.1.1",
|
||||||
|
"supports-color": "8.1.1",
|
||||||
|
"which": "2.0.2",
|
||||||
|
"wide-align": "1.1.3",
|
||||||
|
"workerpool": "6.1.0",
|
||||||
|
"yargs": "16.2.0",
|
||||||
|
"yargs-parser": "20.2.4",
|
||||||
|
"yargs-unparser": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"nanoid": {
|
||||||
|
"version": "3.1.20",
|
||||||
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
|
||||||
|
"integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"normalize-path": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-limit": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"yocto-queue": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-locate": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"p-limit": "^3.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path-exists": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"pathval": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"picomatch": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"randombytes": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"safe-buffer": "^5.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"readdirp": {
|
||||||
|
"version": "3.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
|
||||||
|
"integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"picomatch": "^2.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"require-directory": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"safe-buffer": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"serialize-javascript": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"randombytes": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string-width": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-fullwidth-code-point": "^2.0.0",
|
||||||
|
"strip-ansi": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strip-ansi": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
|
||||||
|
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-regex": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strip-json-comments": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"supports-color": {
|
||||||
|
"version": "8.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
|
||||||
|
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"to-regex-range": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-number": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type-detect": {
|
||||||
|
"version": "4.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
|
||||||
|
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"which": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"isexe": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wide-align": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
|
||||||
|
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"string-width": "^1.0.2 || 2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"workerpool": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"wrap-ansi": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^4.0.0",
|
||||||
|
"string-width": "^4.1.0",
|
||||||
|
"strip-ansi": "^6.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-fullwidth-code-point": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"string-width": {
|
||||||
|
"version": "4.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
|
||||||
|
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"emoji-regex": "^8.0.0",
|
||||||
|
"is-fullwidth-code-point": "^3.0.0",
|
||||||
|
"strip-ansi": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strip-ansi": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-regex": "^5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"y18n": {
|
||||||
|
"version": "5.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||||
|
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"yargs": {
|
||||||
|
"version": "16.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
|
||||||
|
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"cliui": "^7.0.2",
|
||||||
|
"escalade": "^3.1.1",
|
||||||
|
"get-caller-file": "^2.0.5",
|
||||||
|
"require-directory": "^2.1.1",
|
||||||
|
"string-width": "^4.2.0",
|
||||||
|
"y18n": "^5.0.5",
|
||||||
|
"yargs-parser": "^20.2.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"is-fullwidth-code-point": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"string-width": {
|
||||||
|
"version": "4.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
|
||||||
|
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"emoji-regex": "^8.0.0",
|
||||||
|
"is-fullwidth-code-point": "^3.0.0",
|
||||||
|
"strip-ansi": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"strip-ansi": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ansi-regex": "^5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"yargs-parser": {
|
||||||
|
"version": "20.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
|
||||||
|
"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"yargs-unparser": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"camelcase": "^6.0.0",
|
||||||
|
"decamelize": "^4.0.0",
|
||||||
|
"flat": "^5.0.2",
|
||||||
|
"is-plain-obj": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"yocto-queue": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
|
||||||
|
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,10 @@
|
||||||
"test": "tests"
|
"test": "tests"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "./node_modules/.bin/mocha tests/*.spec.js"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"chai": "^4.3.4",
|
||||||
|
"mocha": "^8.4.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Unit tests for bitjs.io.ByteStreamBitStream</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<script type="module">
|
|
||||||
import { findMimeType } from '../file/sniffer.js';
|
|
||||||
import { assertEquals, runTests } from './muther.js';
|
|
||||||
|
|
||||||
function sniffTest(mimeType, sig) {
|
|
||||||
const array = new Uint8Array(16);
|
|
||||||
array.set(sig);
|
|
||||||
assertEquals(mimeType, findMimeType(array.buffer));
|
|
||||||
}
|
|
||||||
|
|
||||||
runTests({
|
|
||||||
setUp: function() {},
|
|
||||||
tests: {
|
|
||||||
testBMP() { sniffTest('image/bmp', [0x42, 0x4D, 0x46]); },
|
|
||||||
testGIF() { sniffTest('image/gif', [0x47, 0x49, 0x46, 0x38, 0x20]); },
|
|
||||||
testJPG() { sniffTest('image/jpeg', [0xFF, 0xD8, 0xFF, 0x23]); },
|
|
||||||
testPNG() { sniffTest('image/png', [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0xFF]); },
|
|
||||||
testWebP() { sniffTest('image/webp', [0x52, 0x49, 0x46, 0x46, 0x01, 0x02, 0x03, 0x04, 0x57, 0x45, 0x42, 0x50, 0x81]); },
|
|
||||||
testZIP() { sniffTest('application/zip', [0x50, 0x4B, 0x03, 0x04, 0x20]); },
|
|
||||||
testZIP_empty() { sniffTest('application/zip', [0x50, 0x4B, 0x05, 0x06, 0x20]); },
|
|
||||||
testZIP_spanned() { sniffTest('application/zip', [0x50, 0x4B, 0x07, 0x08, 0x20]); },
|
|
||||||
test7Z() { sniffTest('application/x-7z-compressed', [0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C, 0x2B]); },
|
|
||||||
testRAR() { sniffTest('application/x-rar-compressed', [0x52, 0x61, 0x72, 0x21, 0x1A, 0x07, 0x23]); },
|
|
||||||
testBZ2() { sniffTest('application/x-bzip2', [0x42, 0x5A, 0x68, 0x19]); },
|
|
||||||
testPDF() { sniffTest('application/pdf', [0x25, 0x50, 0x44, 0x46, 0x2d, 0x55]); },
|
|
||||||
testMP3_1() { sniffTest('audio/mpeg', [0xFF, 0xFB]); },
|
|
||||||
testMP3_2() { sniffTest('audio/mpeg', [0xFF, 0xF3]); },
|
|
||||||
testMP3_3() { sniffTest('audio/mpeg', [0xFF, 0xF2]); },
|
|
||||||
testMP3_4() { sniffTest('audio/mpeg', [0x49, 0x44, 0x33]); },
|
|
||||||
testOGG() { sniffTest('application/ogg', [0x4F, 0x67, 0x67, 0x53]); },
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
37
tests/file-sniffer.spec.js
Normal file
37
tests/file-sniffer.spec.js
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* archive-test.js
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License
|
||||||
|
*
|
||||||
|
* Copyright(c) 2021 Google Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { findMimeType } from '../file/sniffer.js';
|
||||||
|
import 'mocha';
|
||||||
|
import { expect } from 'chai';
|
||||||
|
|
||||||
|
function sniffTest(mimeType, sig) {
|
||||||
|
const array = new Uint8Array(16);
|
||||||
|
array.set(sig);
|
||||||
|
expect(findMimeType(array.buffer)).equals(mimeType);
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('bitjs.file.sniffer', () => {
|
||||||
|
it('BMP', () => { sniffTest('image/bmp', [0x42, 0x4D, 0x46]); });
|
||||||
|
it('GIF', () => { sniffTest('image/gif', [0x47, 0x49, 0x46, 0x38, 0x20]); });
|
||||||
|
it('JPG', () => { sniffTest('image/jpeg', [0xFF, 0xD8, 0xFF, 0x23]); });
|
||||||
|
it('PNG', () => { sniffTest('image/png', [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0xFF]); });
|
||||||
|
it('WebP', () => { sniffTest('image/webp', [0x52, 0x49, 0x46, 0x46, 0x01, 0x02, 0x03, 0x04, 0x57, 0x45, 0x42, 0x50, 0x81]); });
|
||||||
|
it('ZIP', () => { sniffTest('application/zip', [0x50, 0x4B, 0x03, 0x04, 0x20]); });
|
||||||
|
it('ZIP_empty', () => { sniffTest('application/zip', [0x50, 0x4B, 0x05, 0x06, 0x20]); });
|
||||||
|
it('ZIP_spanned', () => { sniffTest('application/zip', [0x50, 0x4B, 0x07, 0x08, 0x20]); });
|
||||||
|
it('7Z()', () => { sniffTest('application/x-7z-compressed', [0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C, 0x2B]); });
|
||||||
|
it('RAR()', () => { sniffTest('application/x-rar-compressed', [0x52, 0x61, 0x72, 0x21, 0x1A, 0x07, 0x23]); });
|
||||||
|
it('BZ2()', () => { sniffTest('application/x-bzip2', [0x42, 0x5A, 0x68, 0x19]); });
|
||||||
|
it('PDF()', () => { sniffTest('application/pdf', [0x25, 0x50, 0x44, 0x46, 0x2d, 0x55]); });
|
||||||
|
it('MP3_1()', () => { sniffTest('audio/mpeg', [0xFF, 0xFB]); });
|
||||||
|
it('MP3_2()', () => { sniffTest('audio/mpeg', [0xFF, 0xF3]); });
|
||||||
|
it('MP3_3()', () => { sniffTest('audio/mpeg', [0xFF, 0xF2]); });
|
||||||
|
it('MP3_4()', () => { sniffTest('audio/mpeg', [0x49, 0x44, 0x33]); });
|
||||||
|
it('OGG', () => { sniffTest('application/ogg', [0x4F, 0x67, 0x67, 0x53]); });
|
||||||
|
});
|
|
@ -1,76 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Unit tests for bitjs.io.BitStream</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<script type="module">
|
|
||||||
import { BitStream } from '../io/bitstream.js';
|
|
||||||
import { assert, assertEquals, assertThrows, runTests } from './muther.js';
|
|
||||||
|
|
||||||
let array;
|
|
||||||
runTests({
|
|
||||||
setUp: function() {
|
|
||||||
array = new Uint8Array(4);
|
|
||||||
for (let i = 0; i < 4; ++i) {
|
|
||||||
array[i] = Number('0b01100101');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
tests: {
|
|
||||||
testBitPeekAndRead_RTL() {
|
|
||||||
const stream = new BitStream(array.buffer, true /* rtl */);
|
|
||||||
// 0110 = 2 + 4 = 6
|
|
||||||
assertEquals(6, stream.readBits(4));
|
|
||||||
// 0101 011 = 1 + 2 + 8 + 32 = 43
|
|
||||||
assertEquals(43, stream.readBits(7));
|
|
||||||
// 00101 01100101 01 = 1 + 4 + 16 + 128 + 256 + 1024 + 4096 = 5525
|
|
||||||
assertEquals(5525, stream.readBits(15));
|
|
||||||
// 10010 = 2 + 16 = 18
|
|
||||||
assertEquals(18, stream.readBits(5));
|
|
||||||
|
|
||||||
// Ensure the last bit is read, even if we flow past the end of the stream.
|
|
||||||
assertEquals(1, stream.readBits(2));
|
|
||||||
},
|
|
||||||
|
|
||||||
testBitPeekAndRead_LTR() {
|
|
||||||
const stream = new BitStream(array.buffer, false /* rtl */);
|
|
||||||
|
|
||||||
// 0101 = 2 + 4 = 6
|
|
||||||
assertEquals(5, stream.peekBits(4));
|
|
||||||
assertEquals(5, stream.readBits(4));
|
|
||||||
// 101 0110 = 2 + 4 + 16 + 64 = 86
|
|
||||||
assertEquals(86, stream.readBits(7));
|
|
||||||
// 01 01100101 01100 = 4 + 8 + 32 + 128 + 1024 + 2048 + 8192 = 11436
|
|
||||||
assertEquals(11436, stream.readBits(15));
|
|
||||||
// 11001 = 1 + 8 + 16 = 25
|
|
||||||
assertEquals(25, stream.readBits(5));
|
|
||||||
|
|
||||||
// Only 1 bit left in the buffer, make sure it reads in, even if we over-read.
|
|
||||||
assertEquals(0, stream.readBits(2));
|
|
||||||
},
|
|
||||||
|
|
||||||
testBitStreamReadBytes() {
|
|
||||||
array[1] = Number('0b01010110');
|
|
||||||
const stream = new BitStream(array.buffer);
|
|
||||||
|
|
||||||
let twoBytes = stream.peekBytes(2);
|
|
||||||
assert(twoBytes instanceof Uint8Array);
|
|
||||||
assertEquals(2, twoBytes.byteLength);
|
|
||||||
assertEquals(Number('0b01100101'), twoBytes[0]);
|
|
||||||
assertEquals(Number('0b01010110'), twoBytes[1]);
|
|
||||||
|
|
||||||
twoBytes = stream.readBytes(2);
|
|
||||||
assert(twoBytes instanceof Uint8Array);
|
|
||||||
assertEquals(2, twoBytes.byteLength);
|
|
||||||
assertEquals(Number('0b01100101'), twoBytes[0]);
|
|
||||||
assertEquals(Number('0b01010110'), twoBytes[1]);
|
|
||||||
|
|
||||||
assertThrows(() => stream.readBytes(3),
|
|
||||||
'Did not throw when trying to read bytes past the end of the stream');
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
72
tests/io-bitstream.spec.js
Normal file
72
tests/io-bitstream.spec.js
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* archive-test.js
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License
|
||||||
|
*
|
||||||
|
* Copyright(c) 2021 Google Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { BitStream } from '../io/bitstream.js';
|
||||||
|
import 'mocha';
|
||||||
|
import { expect } from 'chai';
|
||||||
|
|
||||||
|
describe('bitjs.io.BitStream', () => {
|
||||||
|
let array;
|
||||||
|
beforeEach(() => {
|
||||||
|
array = new Uint8Array(4);
|
||||||
|
for (let i = 0; i < 4; ++i) {
|
||||||
|
array[i] = Number('0b01100101');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('BitPeekAndRead_RTL', () => {
|
||||||
|
const stream = new BitStream(array.buffer, true /* rtl */);
|
||||||
|
// 0110 = 2 + 4 = 6
|
||||||
|
expect(stream.readBits(4)).equals(6);
|
||||||
|
// 0101 011 = 1 + 2 + 8 + 32 = 43
|
||||||
|
expect(stream.readBits(7)).equals(43);
|
||||||
|
// 00101 01100101 01 = 1 + 4 + 16 + 128 + 256 + 1024 + 4096 = 5525
|
||||||
|
expect(stream.readBits(15)).equals(5525);
|
||||||
|
// 10010 = 2 + 16 = 18
|
||||||
|
expect(stream.readBits(5)).equals(18);
|
||||||
|
|
||||||
|
// Ensure the last bit is read, even if we flow past the end of the stream.
|
||||||
|
expect(stream.readBits(2)).equals(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('BitPeekAndRead_LTR', () => {
|
||||||
|
const stream = new BitStream(array.buffer, false /* rtl */);
|
||||||
|
|
||||||
|
// 0101 = 2 + 4 = 6
|
||||||
|
expect(stream.peekBits(4)).equals(5);
|
||||||
|
expect(stream.readBits(4)).equals(5);
|
||||||
|
// 101 0110 = 2 + 4 + 16 + 64 = 86
|
||||||
|
expect(stream.readBits(7)).equals(86);
|
||||||
|
// 01 01100101 01100 = 4 + 8 + 32 + 128 + 1024 + 2048 + 8192 = 11436
|
||||||
|
expect(stream.readBits(15)).equals(11436);
|
||||||
|
// 11001 = 1 + 8 + 16 = 25
|
||||||
|
expect(stream.readBits(5)).equals(25);
|
||||||
|
|
||||||
|
// Only 1 bit left in the buffer, make sure it reads in, even if we over-read.
|
||||||
|
expect(stream.readBits(2)).equals(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('BitStreamReadBytes', () => {
|
||||||
|
array[1] = Number('0b01010110');
|
||||||
|
const stream = new BitStream(array.buffer);
|
||||||
|
|
||||||
|
let twoBytes = stream.peekBytes(2);
|
||||||
|
expect(twoBytes instanceof Uint8Array).true;
|
||||||
|
expect(twoBytes.byteLength).equals(2);
|
||||||
|
expect(twoBytes[0]).equals(Number('0b01100101'));
|
||||||
|
expect(twoBytes[1]).equals(Number('0b01010110'));
|
||||||
|
|
||||||
|
twoBytes = stream.readBytes(2);
|
||||||
|
expect(twoBytes instanceof Uint8Array).true;
|
||||||
|
expect(twoBytes.byteLength).equals(2);
|
||||||
|
expect(twoBytes[0]).equals(Number('0b01100101'));
|
||||||
|
expect(twoBytes[1]).equals(Number('0b01010110'));
|
||||||
|
|
||||||
|
expect(() => stream.readBytes(3)).throws();
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,58 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Unit tests for bitjs.io.ByteBufferBitStream</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<script type="module">
|
|
||||||
import { ByteBuffer } from '../io/bytebuffer.js';
|
|
||||||
import { ByteStream } from '../io/bytestream.js';
|
|
||||||
import { assertEquals, assertThrows, runTests } from './muther.js';
|
|
||||||
|
|
||||||
// TODO: Only test ByteBuffer here.
|
|
||||||
let buffer;
|
|
||||||
runTests({
|
|
||||||
setUp: function() {
|
|
||||||
buffer = new ByteBuffer(4);
|
|
||||||
},
|
|
||||||
tests: {
|
|
||||||
testWrite_SingleByte() {
|
|
||||||
buffer.writeNumber(192, 1);
|
|
||||||
assertEquals(1, buffer.ptr);
|
|
||||||
},
|
|
||||||
|
|
||||||
testWrite_SingleByteNegativeNumber() {
|
|
||||||
buffer.writeSignedNumber(-120, 1);
|
|
||||||
assertEquals(1, buffer.ptr);
|
|
||||||
},
|
|
||||||
|
|
||||||
testWrite_MultiByteNumber() {
|
|
||||||
buffer.writeNumber(1234, 4);
|
|
||||||
const stream = new ByteStream(buffer.data.buffer);
|
|
||||||
assertEquals(4, buffer.ptr);
|
|
||||||
},
|
|
||||||
|
|
||||||
testWrite_MultiByteNegativeNumber() {
|
|
||||||
buffer.writeSignedNumber(-1234, 4);
|
|
||||||
assertEquals(4, buffer.ptr);
|
|
||||||
},
|
|
||||||
|
|
||||||
testWriteOverflowUnsigned() {
|
|
||||||
assertThrows(() => buffer.writeNumber(256, 1),
|
|
||||||
'Did not throw when trying to write a number into too-few bytes');
|
|
||||||
},
|
|
||||||
|
|
||||||
testWriteOverflowSignedPositive() {
|
|
||||||
assertThrows(() => buffer.writeSignedNumber(128, 1),
|
|
||||||
'Did not throw when trying to write a signed number into too-few bytes');
|
|
||||||
},
|
|
||||||
|
|
||||||
testWriteOverflowSignedNegative() {
|
|
||||||
assertThrows(() => buffer.writeSignedNumber(-129, 1),
|
|
||||||
'Did not throw when trying to write a negative signed number into too-few bytes');
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
54
tests/io-bytebuffer.spec.js
Normal file
54
tests/io-bytebuffer.spec.js
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* archive-test.js
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License
|
||||||
|
*
|
||||||
|
* Copyright(c) 2021 Google Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { ByteBuffer } from '../io/bytebuffer.js';
|
||||||
|
import { ByteStream } from '../io/bytestream.js';
|
||||||
|
import 'mocha';
|
||||||
|
import { expect } from 'chai';
|
||||||
|
|
||||||
|
// TODO: Only test ByteBuffer here.
|
||||||
|
describe('bitjs.io.ByteBufferBitStream', () => {
|
||||||
|
let buffer;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
buffer = new ByteBuffer(4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Write_SingleByte', () => {
|
||||||
|
buffer.writeNumber(192, 1);
|
||||||
|
expect(buffer.ptr).equals(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Write_SingleByteNegativeNumber', () => {
|
||||||
|
buffer.writeSignedNumber(-120, 1);
|
||||||
|
expect(buffer.ptr).equals(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Write_MultiByteNumber', () => {
|
||||||
|
buffer.writeNumber(1234, 4);
|
||||||
|
const stream = new ByteStream(buffer.data.buffer);
|
||||||
|
expect(buffer.ptr).equals(4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Write_MultiByteNegativeNumber', () => {
|
||||||
|
buffer.writeSignedNumber(-1234, 4);
|
||||||
|
expect(buffer.ptr).equals(4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('WriteOverflowUnsigned', () => {
|
||||||
|
expect(() => buffer.writeNumber(256, 1)).throws();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('WriteOverflowSignedPositive', () => {
|
||||||
|
expect(() => buffer.writeSignedNumber(128, 1)).throws();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('WriteOverflowSignedNegative', () => {
|
||||||
|
expect(() => buffer.writeSignedNumber(-129, 1)).throws();
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,173 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Unit tests for bitjs.io.ByteStreamBitStream</title>
|
|
||||||
<script src="muther.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<script type="module">
|
|
||||||
import { ByteStream } from '../io/bytestream.js';
|
|
||||||
import { assertEquals, assertThrows, runTests } from './muther.js';
|
|
||||||
|
|
||||||
let array;
|
|
||||||
runTests({
|
|
||||||
setUp: function() {
|
|
||||||
array = new Uint8Array(4);
|
|
||||||
},
|
|
||||||
tests: {
|
|
||||||
testPeekAndRead_SingleByte() {
|
|
||||||
array[0] = 192;
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
assertEquals(192, stream.peekNumber(1));
|
|
||||||
assertEquals(192, stream.readNumber(1));
|
|
||||||
},
|
|
||||||
|
|
||||||
testPeekAndRead_MultiByteNumber() {
|
|
||||||
array[0] = (1234 & 0xff);
|
|
||||||
array[1] = ((1234 >> 8) & 0xff);
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
assertEquals(1234, stream.peekNumber(4));
|
|
||||||
assertEquals(1234, stream.readNumber(4));
|
|
||||||
assertThrows(() => stream.readNumber(1),
|
|
||||||
'Did not throw when trying to readNumber past end of stream');
|
|
||||||
},
|
|
||||||
|
|
||||||
testPeekAndRead_SingleByteSignedNumber() {
|
|
||||||
array[0] = -120;
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
assertEquals(-120, stream.peekSignedNumber(1));
|
|
||||||
assertEquals(-120, stream.readSignedNumber(1));
|
|
||||||
},
|
|
||||||
|
|
||||||
testPeekAndRead_SingleByteNegativeNumber() {
|
|
||||||
array[0] = -128;
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
assertEquals(-128, stream.peekSignedNumber(1));
|
|
||||||
assertEquals(-128, stream.readSignedNumber(1));
|
|
||||||
},
|
|
||||||
|
|
||||||
testPeekAndRead_MultiByteSignedNumber() {
|
|
||||||
array[0] = (1234 & 0xff);
|
|
||||||
array[1] = ((1234 >> 8) & 0xff);
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
assertEquals(1234, stream.peekSignedNumber(2));
|
|
||||||
assertEquals(1234, stream.readSignedNumber(2));
|
|
||||||
},
|
|
||||||
|
|
||||||
testPeekAndRead_MultiByteNegativeNumber() {
|
|
||||||
array[0] = (-1234 & 0xff);
|
|
||||||
array[1] = ((-1234 >> 8) & 0xff);
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
assertEquals(-1234, stream.peekSignedNumber(2));
|
|
||||||
assertEquals(-1234, stream.readSignedNumber(2));
|
|
||||||
},
|
|
||||||
|
|
||||||
testByteStreamReadBytesPastEnd() {
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
assertThrows(() => stream.readBytes(5),
|
|
||||||
'Did not throw when trying to readBytes past end of stream');
|
|
||||||
},
|
|
||||||
|
|
||||||
testReadStringPastEnd() {
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
assertThrows(() => stream.readString(5),
|
|
||||||
'Did not throw when trying to readString past end of stream');
|
|
||||||
},
|
|
||||||
|
|
||||||
testPushThenReadNumber() {
|
|
||||||
array = new Uint8Array(1);
|
|
||||||
array[0] = (1234 & 0xff);
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
|
|
||||||
const anotherArray = new Uint8Array(1);
|
|
||||||
anotherArray[0] = ((1234 >> 8) & 0xff);
|
|
||||||
stream.push(anotherArray.buffer);
|
|
||||||
|
|
||||||
assertEquals(1234, stream.readNumber(2), 'Could not read number across pages');
|
|
||||||
},
|
|
||||||
|
|
||||||
testReadBytesThenPushThenReadByte() {
|
|
||||||
for (let i = 0; i < 4; ++i) array[i] = i;
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
|
|
||||||
const bytes = stream.readBytes(4);
|
|
||||||
assertThrows(() => stream.readBytes(1),
|
|
||||||
'Did not throw when trying to readBytes past end of stream');
|
|
||||||
|
|
||||||
const anotherArray = new Uint8Array(1);
|
|
||||||
anotherArray[0] = 4;
|
|
||||||
stream.push(anotherArray.buffer);
|
|
||||||
|
|
||||||
assertEquals(4, stream.readNumber(1), 'Could not read in byte after pushing');
|
|
||||||
},
|
|
||||||
|
|
||||||
testPushThenReadBytesAcrossOnePage() {
|
|
||||||
for (let i = 0; i < 4; ++i) array[i] = i;
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
|
|
||||||
const anotherArray = new Uint8Array(1);
|
|
||||||
anotherArray[0] = 4;
|
|
||||||
stream.push(anotherArray.buffer);
|
|
||||||
|
|
||||||
const bytes = stream.readBytes(5);
|
|
||||||
assertEquals(5, bytes.length, 'Could not read bytes across pages');
|
|
||||||
for (let i = 0; i < 5; ++i) {
|
|
||||||
assertEquals(i, bytes[i], 'Byte ' + i + ' not right');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
testPushThenReadBytesAcrossMultiplePages() {
|
|
||||||
for (let i = 0; i < 4; ++i) array[i] = i;
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
|
|
||||||
const anotherArray = new Uint8Array(4);
|
|
||||||
for (let i = 0; i < 4; ++i) anotherArray[i] = i + 4;
|
|
||||||
|
|
||||||
const yetAnotherArray = new Uint8Array(4);
|
|
||||||
for (let i = 0; i < 4; ++i) yetAnotherArray[i] = i + 8;
|
|
||||||
|
|
||||||
stream.push(anotherArray.buffer);
|
|
||||||
stream.push(yetAnotherArray.buffer);
|
|
||||||
|
|
||||||
const bytes = stream.readBytes(12);
|
|
||||||
assertEquals(12, bytes.length, 'Could not read bytes across multiple pages');
|
|
||||||
for (let i = 0; i < 12; ++i) {
|
|
||||||
assertEquals(i, bytes[i], 'Byte ' + i + ' not right');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
testPushThenReadStringAcrossMultiplePages() {
|
|
||||||
for (let i = 0; i < 4; ++i) array[i] = 65 + i;
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
|
|
||||||
const anotherArray = new Uint8Array(4);
|
|
||||||
for (let i = 0; i < 4; ++i) anotherArray[i] = 69 + i;
|
|
||||||
|
|
||||||
const yetAnotherArray = new Uint8Array(4);
|
|
||||||
for (let i = 0; i < 4; ++i) yetAnotherArray[i] = 73 + i;
|
|
||||||
|
|
||||||
stream.push(anotherArray.buffer);
|
|
||||||
stream.push(yetAnotherArray.buffer);
|
|
||||||
|
|
||||||
const str = stream.readString(12);
|
|
||||||
assertEquals('ABCDEFGHIJKL', str, 'String was ' + str);
|
|
||||||
},
|
|
||||||
|
|
||||||
testTee() {
|
|
||||||
for (let i = 0; i < 4; ++i) array[i] = 65 + i;
|
|
||||||
const stream = new ByteStream(array.buffer);
|
|
||||||
|
|
||||||
const anotherArray = new Uint8Array(4);
|
|
||||||
for (let i = 0; i < 4; ++i) anotherArray[i] = 69 + i;
|
|
||||||
stream.push(anotherArray.buffer);
|
|
||||||
|
|
||||||
const teed = stream.tee();
|
|
||||||
teed.readBytes(5);
|
|
||||||
assertEquals(8, stream.getNumBytesLeft());
|
|
||||||
assertEquals(3, teed.getNumBytesLeft());
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
167
tests/io-bytestream.spec.js
Normal file
167
tests/io-bytestream.spec.js
Normal file
|
@ -0,0 +1,167 @@
|
||||||
|
/*
|
||||||
|
* archive-test.js
|
||||||
|
*
|
||||||
|
* Licensed under the MIT License
|
||||||
|
*
|
||||||
|
* Copyright(c) 2021 Google Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { ByteStream } from '../io/bytestream.js';
|
||||||
|
import 'mocha';
|
||||||
|
import { expect } from 'chai';
|
||||||
|
|
||||||
|
describe('bitjs.io.ByteStream', () => {
|
||||||
|
|
||||||
|
let array;
|
||||||
|
beforeEach(() => {
|
||||||
|
array = new Uint8Array(4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PeekAndRead_SingleByte', () => {
|
||||||
|
array[0] = 192;
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
expect(stream.peekNumber(1)).equals(192);
|
||||||
|
expect(stream.readNumber(1)).equals(192);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PeekAndRead_MultiByteNumber', () => {
|
||||||
|
array[0] = (1234 & 0xff);
|
||||||
|
array[1] = ((1234 >> 8) & 0xff);
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
expect(stream.peekNumber(4)).equals(1234);
|
||||||
|
expect(stream.readNumber(4)).equals(1234);
|
||||||
|
expect(() => stream.readNumber(1)).to.throw();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PeekAndRead_SingleByteSignedNumber', () => {
|
||||||
|
array[0] = -120;
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
expect(stream.peekSignedNumber(1)).equals(-120);
|
||||||
|
expect(stream.readSignedNumber(1)).equals(-120);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PeekAndRead_SingleByteNegativeNumber', () => {
|
||||||
|
array[0] = -128;
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
expect(stream.peekSignedNumber(1)).equals(-128);
|
||||||
|
expect(stream.readSignedNumber(1)).equals(-128);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PeekAndRead_MultiByteSignedNumber', () => {
|
||||||
|
array[0] = (1234 & 0xff);
|
||||||
|
array[1] = ((1234 >> 8) & 0xff);
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
expect(stream.peekSignedNumber(2)).equals(1234);
|
||||||
|
expect(stream.peekSignedNumber(2)).equals(1234);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PeekAndRead_MultiByteNegativeNumber', () => {
|
||||||
|
array[0] = (-1234 & 0xff);
|
||||||
|
array[1] = ((-1234 >> 8) & 0xff);
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
expect(stream.peekSignedNumber(2)).equals(-1234);
|
||||||
|
expect(stream.peekSignedNumber(2)).equals(-1234);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('ByteStreamReadBytesPastEnd', () => {
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
expect(() => stream.readBytes(5)).to.throw();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('ReadStringPastEnd', () => {
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
expect(() => stream.readString(5)).to.throw();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PushThenReadNumber', () => {
|
||||||
|
array = new Uint8Array(1);
|
||||||
|
array[0] = (1234 & 0xff);
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
|
||||||
|
const anotherArray = new Uint8Array(1);
|
||||||
|
anotherArray[0] = ((1234 >> 8) & 0xff);
|
||||||
|
stream.push(anotherArray.buffer);
|
||||||
|
|
||||||
|
expect(stream.readNumber(2)).equals(1234);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('ReadBytesThenPushThenReadByte', () => {
|
||||||
|
for (let i = 0; i < 4; ++i) array[i] = i;
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
|
||||||
|
const bytes = stream.readBytes(4);
|
||||||
|
expect(() => stream.readBytes(1)).to.throw();
|
||||||
|
|
||||||
|
const anotherArray = new Uint8Array(1);
|
||||||
|
anotherArray[0] = 4;
|
||||||
|
stream.push(anotherArray.buffer);
|
||||||
|
|
||||||
|
expect(stream.readNumber(1), 'Could not read in byte after pushing').equals(4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PushThenReadBytesAcrossOnePage', () => {
|
||||||
|
for (let i = 0; i < 4; ++i) array[i] = i;
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
|
||||||
|
const anotherArray = new Uint8Array(1);
|
||||||
|
anotherArray[0] = 4;
|
||||||
|
stream.push(anotherArray.buffer);
|
||||||
|
|
||||||
|
const bytes = stream.readBytes(5);
|
||||||
|
expect(bytes.length).equals(5);
|
||||||
|
for (let i = 0; i < 5; ++i) {
|
||||||
|
expect(bytes[i]).equals(i);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PushThenReadBytesAcrossMultiplePages', () => {
|
||||||
|
for (let i = 0; i < 4; ++i) array[i] = i;
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
|
||||||
|
const anotherArray = new Uint8Array(4);
|
||||||
|
for (let i = 0; i < 4; ++i) anotherArray[i] = i + 4;
|
||||||
|
|
||||||
|
const yetAnotherArray = new Uint8Array(4);
|
||||||
|
for (let i = 0; i < 4; ++i) yetAnotherArray[i] = i + 8;
|
||||||
|
|
||||||
|
stream.push(anotherArray.buffer);
|
||||||
|
stream.push(yetAnotherArray.buffer);
|
||||||
|
|
||||||
|
const bytes = stream.readBytes(12);
|
||||||
|
expect(bytes.length).equals(12);
|
||||||
|
for (let i = 0; i < 12; ++i) {
|
||||||
|
expect(bytes[i]).equals(i);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('PushThenReadStringAcrossMultiplePages', () => {
|
||||||
|
for (let i = 0; i < 4; ++i) array[i] = 65 + i;
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
|
||||||
|
const anotherArray = new Uint8Array(4);
|
||||||
|
for (let i = 0; i < 4; ++i) anotherArray[i] = 69 + i;
|
||||||
|
|
||||||
|
const yetAnotherArray = new Uint8Array(4);
|
||||||
|
for (let i = 0; i < 4; ++i) yetAnotherArray[i] = 73 + i;
|
||||||
|
|
||||||
|
stream.push(anotherArray.buffer);
|
||||||
|
stream.push(yetAnotherArray.buffer);
|
||||||
|
|
||||||
|
const str = stream.readString(12);
|
||||||
|
expect(str).equals('ABCDEFGHIJKL');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Tee', () => {
|
||||||
|
for (let i = 0; i < 4; ++i) array[i] = 65 + i;
|
||||||
|
const stream = new ByteStream(array.buffer);
|
||||||
|
|
||||||
|
const anotherArray = new Uint8Array(4);
|
||||||
|
for (let i = 0; i < 4; ++i) anotherArray[i] = 69 + i;
|
||||||
|
stream.push(anotherArray.buffer);
|
||||||
|
|
||||||
|
const teed = stream.tee();
|
||||||
|
teed.readBytes(5);
|
||||||
|
expect(stream.getNumBytesLeft()).equals(8);
|
||||||
|
expect(teed.getNumBytesLeft()).equals(3);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Add table
Add a link
Reference in a new issue