name: Run Tests
on:
  push:
    branches:
      - master
  pull_request:

permissions:
  contents: read

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4.2.2
    - name: Install Go
      uses: actions/setup-go@v5.2.0
      with:
        go-version-file: 'go.mod'
    - name: Run linters
      uses: golangci/golangci-lint-action@v6
      with:
        version: "v1.58"

  test:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4.2.2
    - name: Install Go
      if: success()
      uses: actions/setup-go@v5.2.0
      with:
        go-version-file: 'go.mod'
    - run: go test -race ./...
    - run: go test -fuzz=. -fuzztime=30s
    - run: go test -fuzz=Plain -fuzztime=30s ./internal/charset
    - run: go test -fuzz=XML -fuzztime=30s ./internal/charset
    - run: go test -fuzz=HTML -fuzztime=30s ./internal/charset
