Commit 56716de
test: add initial unit test suite (#321)
* some unit tests
modifications made by agilgur5 to brekk's original commit:
- rebase with `master` that is 3 years newer
- fix conflicts with newer code, esp the `tsModule`/`tsProxy` changes
in this commit
- move `jest` config to the bottom and don't reformat `package.json`
with tabs
* more
modifications made by agilgur5 to brekk's original commit:
- fix merge conflicts with code that is 3 years newer
* fix tests for windows
* flip that test
* deps: upgrade Jest to v28
- and ts-jest to v28
- @types/jest doesn't have a v28 yet
- look ma, no more vulns!
* refactor: split jest config to jest.config.js
- and add JSDoc typings to it
- per https://jestjs.io/docs/configuration
* clean: remove redundant jest config
- most of these options are either unused (like `modulePaths` etc) or
covered by Jest's defaults (`moduleFileExtensions`, `testMatch`, etc)
- also use `ts-jest` preset per its docs and migration docs
- https://kulshekhar.github.io/ts-jest/docs/migration
* refactor: move tests into __tests__ dir
- per ezolenko's request, though I also prefer to separate them
- fix all relative imports to use `../src/` now
formatting changes:
- improve ordering of imports in tests -- externals first, newline, then
internal imports
- do this **consistently**
- consistently put spaces around braces in destructured imports
- really need better linting (and update to ESLint)
- consistently add newline after imports and before declarations
- in general, add more newlines for readability in several files
* deps: import from @jest/globals instead of using globals
- no config needed and uses standard imports too
- also required for future Jest ESM support I believe
- I created the `jest-without-globals` package before this feature was
released in Jest core and contributed a PR for it too, so might have
a bias toward not using globals
* fix(test): update get-options-overrides spec to match latest file
- basically to match the changes I made when fixing declaration map
sources ~1.5 years ago in ec0568b
- also to add `cwd` to options
- fix: use `toStrictEqual` everywhere, in order to actually check
`undefined` properties, as this is necessary for some of the checks
- I believe the original author may have intended to actually check
`undefined` given that they wrote it in the test, but maybe did not
know to use `toStrictEqual` instead of `toEqual`
* refactor(test): use obj spread in get-options-overrides
- instead of re-writing the options multiple times, write up some
defaults and use object spread
- and refactor `makeDefaultConfig()` to just use
`{ ...defaultConfig }` instead to match the rest
- re-write normalizePaths to be a `for ... of` loop instead of using
`Array.map`
- simpler / more straightforward than a function with side-effects
- feat: add typings in several places
- that's why we're using TS and ts-jest right??
* fix(test): update host spec to match latest source
- LanguageServiceHost now requires 3rd argument, cwd, so add that to
all usage
- add afterDecalarations to transformers
- Jest's test.skip can now use async/await, so do that
- it was also giving a type error, and this is simpler anyway
- change expected to use `__tests__` directory now
- fix: use `expect.arrayContaining` for `host.getDirectories` test as
there are more temp directories that get added here, such as
`build-self` and `coverage`
- in general, might be less fragile if this used a generated directory
instead of an actual one
- but save bigger refactors for later
* refactor(test): use async/await, remove truncate func in host spec
- instead of using Promises with `done()`, use async/await for clearer
code and less indentation too
- remove the `truncateName` function as it's not needed; `local` will
result in the same name
- remove commented out test code
- this seemed to just be there for testing the code, and not
ready-for-production comments
* refactor: use consts in host spec instead of locals
- basically using pre-defined fixture vars instead of ones defined
inside the test
- which is more straightforward, easier to read, and less fragile
- shorter names too
- also use a __temp dir for auto-generated files instead of creating
them in the same dir and confusing the editor file tree and potential
watchers
- change jest config to make sure only spec files are being watched
- gitignore __tests__/__temp/ dir in case tests crash etc
* fix(test): update rollupcontext spec to match latest source
- use PluginContext and IContext types instead of `any`
- we're using TypeScript right??
- add `debug` level logging in a few places where it was missing
- update stubbedContext to have latest PluginContext properties
- watcher isn't in there anymore and a few new properties were added
- fix type errors with stubbedContext
- give it an intersection with IContext for `info` and `debug`
verbosity levels
- force the logging funcs to `any` as they don't quite match the
Rollup types
- force them to `any` when deleting them as well because they're not
optional properties
- Note: would be good to not force so much `any` if possible, but this
may be difficult without more advanced internal Rollup mocks
- couldn't find any testing packages for this :/
- test: add verbosity expect for debug too
- refactor: context2 -> context
- there wasn't another one, so just use the same name consistently
- I'm guessing there was another one at some point in the
development of this and then it was removed but not renamed
* lint: add __tests__ to lint dirs, fix lint errors
- surprisingly only in jest.config.js?
- really need to update to @typescript-eslint ...
* ci: add unit tests to matrix
- run after all the builds for now
- it can be done in parallel as a separate job, but then have to
duplicate the NPM install etc, so may not be optimal that way
- refactor: add test:watch and test:coverage scripts
- shortcut scripts so don't have to `npm test -- --coverage" etc
- also remove `--verbose` from `test` as that's not necessary
* test: add unit tests for createFilter
- increases coverage of get-options-overrides significantly
- couldn't figure out `rootDirs` -- either the code or my tests are
wrong, so just skip that one for now
- refactor: move makeStubbedContext etc into a shared fixtures dir so
that it can be used for both rollupcontext tests _and_
createFilter tests
- in my stylistic opinion, I prefer to put nearly _all_ consts like
these into fixtures dir
- configure jest to ignore test helpers in coverage reporting such as
fixture files
- format: '' -> "", add semicolon in some places
- I use single quotes and no semicolons, so missed that in a few
places
- lint didn't check for that and no prettier auto-format :/
* refactor: use consts, async/await, etc in rollingcache spec
- basically using pre-defined fixture vars instead of ones defined
inside the test
- which is more straightforward, easier to read, and less fragile
- shorter names too
- left a couple of ones as is where they were only used once very
quickly -- could make them fixture vars too but 🤷
- use async/await instead of Promises with `done()` etc
- also use more `fs-extra` functions that support Promises instead of
synchronous `fs` functions (e.g. `existsSync` -> `pathExists`)
- async should be a small optimization for tests too
- fix: use __temp dir for auto-generated files instead of creating
them in a fixtures dir and breaking actual fixtures
- format: a few multi-line statements were able to be condensed to a
single line, so do so
- esp as multi-line was not helping readability since this is just
irrelevant test data (may have hampered readability actually)
* docs: add a testing section to CONTRIBUTING.md
- goes over the different ways of running the tests (watch + coverage)
- line about unit and integration tests was moved into this section
- and altered to reflect the current state of the repo now that a good
amount of unit tests exist
- also move "Linting and Style" into its own section with a list
- move "fix any failed PR checks" to the top as overall guidance on
making a PR
- previously it was in the middle of linting and style, which felt a
bit disjointed (maybe made sense earlier before builds were in CI?)
- name the last section "Building and Self-Build"; leave content as is
- well mostly, change the first line as "fastest way to test" is not
necessarily accurate anymore now that there are actual tests
* fix(test): undo tsTypes -> tsModules changes in source code
- original author, brekk, had made these changes, likely because without
them, the tests would throw in the source lines where `tsModule` was
used with things like "Cannot read property 'ModuleKind' of undefined"
- the actual fix for this is to instead use `setTypescriptModule` from
tsproxy as this is how it is used in the source
- it's mainly needed for when an alternate TS is substituted
- brekk probably didn't know the codebase well enough to know that
- add `setTypescriptModule` to all specs that need it
- 100% test coverage of tsproxy now too!
- this should hopefully fix the build errors we were getting as well
* test: get host spec customTransformers test working
- it seemed incomplete and that's why it was skipped, no comment there
stating otherwise, so just modified it a bit to get it to work and
pass properly
* ci: add Node 14, 16, 18, and macOS, Windows to matrix
- drop Node 10 testing
- Node 10 went EoL a while ago and was causing the latest version of
Jest to throw an error
- still test Node 12 since it only went EoL recently, but could drop it
as well if wanted
- may want to set `package.json#engines` or update min requirements in
the README if so, though it likely still works on older Node, we
just can't easily test it
- add macOS and Windows testing to the matrix since TS and Rollup both
behave differently on different OSes, in particular with regard to the
filesystem
- POSIX paths on Windows, case-insensitivity on macOS
- give the job a name that appears in the PR checks and Actions tab
* refactor: use __temp dir in options-overrides spec
- similar to previous commits, don't use the actual fixtures dir, use
the `__temp` dir and a subfolder within for this spec file
specifically so as to not interfere with other tests
* test: 100% coverage for host.ts, refactor host.spec.ts
- test: get the skipped `readFile` test to work
- `ts.sys.readFile` definitely returns stuff, it's used for snapshots
- it wasn't working because it was testing the wrong extension,
`.js` instead of `.ts`
- I thought this was intentional when I first added consts here, but
turns out that was actually a mistake by the original author
- refactor: merge the `readFile` tests with the main test suite
- first I merged them together, but as they were just one-liners, I
merged them with the first set, since it wasn't particularly
different from those
- refactor: split up the main test suite into a few commented sections
- core snapshot functionality, fs functionality, misc
- a lot less random now
- refactor: use `getDirectories` on the testDir instead of project root
- much less fragile to use the dir generated here, and no hack-ish
`arrayContaining()` either
- refactor: one-line the case-insensitive test
- that simplifies it a lot!
- refactor: use fixed consts for the repetitive default config
- and use a `testOpts` variable for less fragile testing
- test: add tests for version 2 branches of snapshot funcs
- these weren't tested before so it had only tested the `|| 0` branch
of the conditional
- also actually test `reset` instead of calling it at the beginning
- refactor: no more "dirty checking" of instances' private interfaces
- we're testing it all through the public interfaces instead!
- test: add a simple test for the new `trace` method
- test: coverage for `after` and `afterDeclarations` transformers
- test: coverage for different `undefined` states of transformers
- refactor the two test suites as one for `undefined` and one for
all 3 transformers
- and put the working one first for naming purposes
- refactor the `setLanguageService` call as a simpler type coercion
- remove the transformer interactions in the main test suite
- yea, this is a big commit, but I was refactoring everything anyway and
this is probably gonna be squashed anyway
* refactor: remove remaining "dirty checking of instance as any"
- no need to check private interfaces in these remaining tests, the
functionality itself is already tested via the public interface
* fix(test): get tests working on Ubuntu and Windows
- host is only case-sensitive on Linux
- prev was everything except Windows; so flipped the conditional a bit
- host and TS itself use "/" normalized paths, so use those
- and add a hacky workaround for a TS bug I managed to find
- formatHost will use OS separators, so no "/"
- make the test more accurate and less fragile by comparing to
`process.cwd()` as well -- which should normalize on Windows
* refactor: use consts and shrink check-tsconfig
- think it's a bit easier to read this way, it's only 3 tests after all
* refactor: remove normalizePaths func from get-options-overrides spec
- this isn't necessary and added some complexity (and verbosity)
- only one dir that needs normalization anymore, and that's just the
cache dir, so just add it to the const/var fixture instead
- shrink the code a bit as a result too
- and use a bit different code style to shrink it too
- annnd found a Windows bug in get-options-overrides.ts here too...
- leave a `// TODO: ` comment here to fix the source as this PR is
solely focused on tests (i.e. no source changes)
Co-authored-by: Brekk <[email protected]>
Co-authored-by: bbockrath <[email protected]>1 parent e28d2f0 commit 56716de
File tree
16 files changed
+10208
-1300
lines changed- .github/workflows
- __tests__
- fixtures
- src
16 files changed
+10208
-1300
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
14 | | - | |
15 | | - | |
| 13 | + | |
| 14 | + | |
16 | 15 | | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
| 34 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
22 | 38 | | |
23 | 39 | | |
24 | 40 | | |
| |||
28 | 44 | | |
29 | 45 | | |
30 | 46 | | |
31 | | - | |
32 | | - | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
0 commit comments