name: Browser Tests

on:
  pull_request:
  push:
    branches:
      - main

env:
  NODE_VERSION: 22.x

jobs:
  test:
    runs-on: ubuntu-latest
    name: ${{ matrix.NAME || matrix.BROWSER }} (${{ matrix.MIGRATE_VERSION }} Migrate)
    strategy:
      fail-fast: false
      matrix:
        NAME: [""]
        BROWSER: ["chrome", "firefox"]
        MIGRATE_VERSION: ["min"]
        include:
          - NAME: ""
            BROWSER: "chrome"
            MIGRATE_VERSION: "esmodules"
          - NAME: "Firefox ESR (new)"
            BROWSER: "firefox"
            MIGRATE_VERSION: "min"
          - NAME: "Firefox ESR (old)"
            BROWSER: "firefox"
            MIGRATE_VERSION: "min"
    steps:
      - name: Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1

      - name: Use Node.js ${{ env.NODE_VERSION }}
        uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: npm
          cache-dependency-path: '**/package-lock.json'

      - name: Set download URL for Firefox ESR (old)
        run: |
            echo "FIREFOX_SOURCE_URL=https://download.mozilla.org/?product=firefox-esr-latest-ssl&lang=en-US&os=linux64" >> "$GITHUB_ENV"
        if: contains(matrix.NAME, 'Firefox ESR (old)')

      - name: Set download URL for Firefox ESR (new)
        run: |
            echo "FIREFOX_SOURCE_URL=https://download.mozilla.org/?product=firefox-esr-next-latest-ssl&lang=en-US&os=linux64" >> "$GITHUB_ENV"
        if: contains(matrix.NAME, 'Firefox ESR (new)')

      - name: Install Firefox ESR
        run: |
            # Support: Firefox <135 only
            # Older Firefox used to be compressed using bzip2, newer using xz. Try
            # to uncompress using xz, fall back to bzip2 if that fails.
            # Note: this will download the old Firefox ESR twice, but it will still work
            # when the current ESR version starts to use xz with no changes to the code.
            wget --no-verbose "$FIREFOX_SOURCE_URL" -O - | tar -Jx -C "$HOME" || \
            wget --no-verbose "$FIREFOX_SOURCE_URL" -O - | tar -jx -C "$HOME"
            echo "PATH=${HOME}/firefox:$PATH" >> "$GITHUB_ENV"
            echo "FIREFOX_BIN=${HOME}/firefox/firefox" >> "$GITHUB_ENV"
        if: contains(matrix.NAME, 'Firefox ESR')

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: |
            npm run pretest
            npm run build:all
            npm run test:unit -- -c jtr-local.yml \
              --headless -b ${{ matrix.BROWSER }} -f plugin=${{ matrix.MIGRATE_VERSION }}

  ie:
    runs-on: windows-latest
    name: Edge in IE mode (min Migrate)
    env:
      MIGRATE_VERSION: "min"
    steps:
      - name: Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1

      - name: Use Node.js ${{ env.NODE_VERSION }}
        uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: npm
          cache-dependency-path: '**/package-lock.json'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        shell: cmd
        run: npm run test:ie -- -c jtr-local.yml -f plugin=${{ env.MIGRATE_VERSION }}

  safari:
    runs-on: macos-latest
    name: Safari (min Migrate)
    env:
      MIGRATE_VERSION: "min"
    steps:
      - name: Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1

      - name: Use Node.js ${{ env.NODE_VERSION }}
        uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: npm
          cache-dependency-path: '**/package-lock.json'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm run test:safari -- -c jtr-local.yml -f plugin=${{ env.MIGRATE_VERSION }}
