name: Integration tests

on: [push, pull_request]

env:
  CARGO_INCREMENTAL: 0

jobs:
  publish-test:
    name: node-api
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      # We explicitly do this to cache properly.
      - name: Install Rust
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal

      - uses: actions/setup-node@v2
        with:
          node-version: 14

      - name: Cache
        uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/
            **/target/
          key: ${{ runner.os }}-node-api-test

      - name: Set platform name
        run: |
          export NODE_PLATFORM_NAME=$(node -e "console.log(require('os').platform())")
          echo "PLATFORM_NAME=$NODE_PLATFORM_NAME" >> $GITHUB_ENV
        shell: bash

      - name: Prepare
        run: |
          npm config set prefix ~/npm
          npm i
          export PATH="$PATH:$HOME/npm/bin"

          npm run build:dev
          npm test

  integration-test:
    name: swc-cli
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - uses: actions/setup-node@v2
        with:
          node-version: 14

      - name: Cache
        uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/
            **/target/
          key: ${{ runner.os }}-cargo-integration

      - name: Set platform name
        run: |
          export NODE_PLATFORM_NAME=$(node -e "console.log(require('os').platform())")
          echo "PLATFORM_NAME=$NODE_PLATFORM_NAME" >> $GITHUB_ENV
        shell: bash

      - name: Prepare
        run: |
          npm config set prefix ~/npm
          npm i
          export PATH="$PATH:$HOME/npm/bin"

          npm run build:dev
          npm i -g @swc/cli@0.1.33
          npm link

      - name: (swc) three.js
        run: |
          export PATH="$PATH:$HOME/npm/bin"
          mkdir -p integration-tests/three-js
          npm i -g qunit failonlyreporter

          # Download three.js
          git clone --depth 1 https://github.com/mrdoob/three.js.git -b r117 integration-tests/three-js/repo

          swc --sync integration-tests/three-js/repo/ -d integration-tests/three-js/build/
          # swc integration-tests/three-js/repo/src/ -d integration-tests/three-js/repo/build/
          # swc integration-tests/three-js/repo/test/unit/**/*.js -d integration-tests/three-js/repo/test/unit/build/

          (cd integration-tests/three-js/build/test && qunit -r failonlyreporter unit/three.source.unit.js)

        # terser: contains with statement in test
        # Rome.js: I forgot the cause, but it didn't work.
        # jQuery: browser only (window.document is required)
      - name: (swc) redux
        run: |
          export PATH="$PATH:$HOME/npm/bin"
          mkdir -p integration-tests/redux
          npm i -g qunit failonlyreporter

          # Download
          git clone --depth 1 https://github.com/reduxjs/redux.git integration-tests/redux/repo
          swc --sync integration-tests/redux/repo/src/ -d integration-tests/redux/repo/lib/
          echo "module.exports=require('./index')" > integration-tests/redux/repo/lib/redux.js
          swc --sync integration-tests/redux/repo/src/ -d integration-tests/redux/repo/test/
          swc --sync integration-tests/redux/repo/test/ -d integration-tests/redux/repo/test/

          (cd integration-tests/redux/repo && npm i)
          (cd integration-tests/redux/repo && npx jest '.*.js' --modulePathIgnorePatterns 'typescript')
      - name: (spack) example react app
        run: |
          export PATH="$PATH:$HOME/npm/bin"
          (cd spack/integration-tests/react && npm i && npx spack)
