Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: add initial unit test suite #321

Merged
merged 29 commits into from
May 10, 2022

Commits on May 9, 2022

  1. 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
    brekk authored and agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    aa04d77 View commit details
    Browse the repository at this point in the history
  2. more

    modifications made by agilgur5 to brekk's original commit:
    - fix merge conflicts with code that is 3 years newer
    brekk authored and agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    b217694 View commit details
    Browse the repository at this point in the history
  3. fix tests for windows

    bbockrath authored and agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    ceae7fa View commit details
    Browse the repository at this point in the history
  4. flip that test

    brekk authored and agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    c3cfe41 View commit details
    Browse the repository at this point in the history
  5. deps: upgrade Jest to v28

    - and ts-jest to v28
    - @types/jest doesn't have a v28 yet
    
    - look ma, no more vulns!
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    b73370a View commit details
    Browse the repository at this point in the history
  6. refactor: split jest config to jest.config.js

    - and add JSDoc typings to it
      - per https://jestjs.io/docs/configuration
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    6719c0c View commit details
    Browse the repository at this point in the history
  7. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    3c9b59c View commit details
    Browse the repository at this point in the history
  8. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    08637a4 View commit details
    Browse the repository at this point in the history
  9. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    c2b9ffc View commit details
    Browse the repository at this point in the history
  10. 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`
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    e9ddccc View commit details
    Browse the repository at this point in the history
  11. 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??
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    1c9b1cb View commit details
    Browse the repository at this point in the history
  12. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    0049f16 View commit details
    Browse the repository at this point in the history
  13. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    c197219 View commit details
    Browse the repository at this point in the history
  14. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    7d9e362 View commit details
    Browse the repository at this point in the history
  15. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    30e5b32 View commit details
    Browse the repository at this point in the history
  16. lint: add __tests__ to lint dirs, fix lint errors

    - surprisingly only in jest.config.js?
    
    - really need to update to @typescript-eslint ...
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    20f66e9 View commit details
    Browse the repository at this point in the history
  17. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    4dfb8ce View commit details
    Browse the repository at this point in the history
  18. 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 :/
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    dc1895f View commit details
    Browse the repository at this point in the history
  19. 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)
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    335b4bf View commit details
    Browse the repository at this point in the history
  20. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    bcce6d6 View commit details
    Browse the repository at this point in the history
  21. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    d31a3fa View commit details
    Browse the repository at this point in the history
  22. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    bf4419e View commit details
    Browse the repository at this point in the history
  23. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    5e1b246 View commit details
    Browse the repository at this point in the history
  24. 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
    agilgur5 committed May 9, 2022
    Configuration menu
    Copy the full SHA
    6584949 View commit details
    Browse the repository at this point in the history

Commits on May 10, 2022

  1. 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
    agilgur5 committed May 10, 2022
    Configuration menu
    Copy the full SHA
    a118655 View commit details
    Browse the repository at this point in the history
  2. 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
    agilgur5 committed May 10, 2022
    Configuration menu
    Copy the full SHA
    a61eace View commit details
    Browse the repository at this point in the history
  3. 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
    agilgur5 committed May 10, 2022
    Configuration menu
    Copy the full SHA
    2762e22 View commit details
    Browse the repository at this point in the history
  4. refactor: use consts and shrink check-tsconfig

    - think it's a bit easier to read this way, it's only 3 tests after all
    agilgur5 committed May 10, 2022
    Configuration menu
    Copy the full SHA
    500616e View commit details
    Browse the repository at this point in the history
  5. 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)
    agilgur5 committed May 10, 2022
    Configuration menu
    Copy the full SHA
    7e07a2e View commit details
    Browse the repository at this point in the history