name: Test

on:
  [pull_request, push]
  
jobs:

  build_test:
    name: test-${{ matrix.os }}-${{ matrix.test-framework }}
    runs-on: ${{ matrix.os }}
    env:
      configuration: Release
      artifacts: ${{ github.workspace }}/artifacts
      DOTNET_NOLOGO : 1
    strategy:
      matrix:
        os: [windows-latest, ubuntu-20.04, macos-latest]
        test-framework: [netcoreapp3.1, net5.0]
        include:
          - os: ubuntu-20.04
            test-framework: netcoreapp3.1
            installSnap7: true
            dotnet-sdk: '3.1.x'
          - os: ubuntu-20.04
            test-framework: net5.0
            installSnap7: true
            dotnet-sdk: '5.0.x'
          - os: macos-latest
            test-framework: netcoreapp3.1
            installSnap7: true
            dotnet-sdk: '3.1.x'
          - os: macos-latest
            test-framework: net5.0
            installSnap7: true
            dotnet-sdk: '5.0.x'
          - os: windows-latest
            test-framework: netcoreapp3.1
            dotnet-sdk: '3.1.x'
          - os: windows-latest
            test-framework: net5.0
            dotnet-sdk: '5.0.x'
          - os: windows-latest
            test-framework: net452
            dotnet-sdk: '5.0.x'
      fail-fast: false

    steps:
      - uses: actions/checkout@v2

      - name: Install Snap7 Linux
        if: ${{ matrix.installSnap7 && matrix.os == 'ubuntu-20.04' }}
        run: |
          sudo add-apt-repository ppa:gijzelaar/snap7
          sudo apt-get update
          sudo apt-get install libsnap7-1 libsnap7-dev
          
      - name: Install Snap7 MacOs
        if: ${{ matrix.installSnap7 && matrix.os == 'macos-latest' }}
        run: |
          brew install snap7

      - name: Setup Dotnet
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ matrix.dotnet-sdk }}
          
      - name: Nuget Cache
        uses: actions/cache@v2
        with:
          path: ~/.nuget/packages
          # Look to see if there is a cache hit for the corresponding requirements file
          key: ${{ runner.os }}-${{ matrix.test-framework }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-${{ matrix.test-framework }}-nuget

      - name: Restore
        run: dotnet restore S7.Net.UnitTest
        
      - name: Test
        run: dotnet test --no-restore --nologo --verbosity normal --logger GitHubActions --framework ${{ matrix.test-framework }}
