name: Tests

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  test:
    name: Test

    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        build: [linux-stable, macos-stable, windows-stable]
        include:
          - build: linux-stable
            os: ubuntu-latest
            rust: stable
          - build: macos-stable
            os: macos-latest
            rust: stable
          - build: windows-stable
            os: windows-latest
            rust: stable

    steps:
      - uses: actions/checkout@v3
      - uses: nanasess/setup-chromedriver@master
      - if: matrix.os == 'macos-latest'
        run: brew install --cask firefox
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{ matrix.rust }}
          targets: wasm32-unknown-unknown
      - uses: actions/setup-node@v2

      - name: Cache dependencies
        uses: actions/cache@v3
        env:
          cache-name: cache-dependencies
        with:
          path: |
            ~/.cargo/.crates.toml
            ~/.cargo/.crates2.json
            ~/.cargo/bin
            ~/.cargo/registry/index
            ~/.cargo/registry/cache
            target
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Cargo.lock') }}

      - name: Run Tests
        run: cargo test --all --locked
        env:
          RUST_BACKTRACE: 1

      - name: Clippy
        run: cargo clippy

      - name: Cargo fmt
        run: cargo fmt --all -- --check