Merge pull request #368 from skyedeving/add-tests
Add a CMakeLists, tests, and pipeline to automatically test with Github actions
This commit is contained in:
		
						commit
						097220f11a
					
				
							
								
								
									
										173
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,173 @@
 | 
			
		||||
name: build
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - add-tests
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
 | 
			
		||||
  BUILD_TYPE: Release
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  windows:
 | 
			
		||||
    runs-on: windows-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
    - name: Install Catch2
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        curl -L https://github.com/catchorg/Catch2/archive/v2.13.4.tar.gz -o catch2.tar.gz
 | 
			
		||||
        tar xvf catch2.tar.gz
 | 
			
		||||
        cd Catch2-2.13.4
 | 
			
		||||
        cmake -Bbuild -H. -DBUILD_TESTING=OFF
 | 
			
		||||
        cmake --build build/ --target install
 | 
			
		||||
 | 
			
		||||
    - name: Fetch external libs
 | 
			
		||||
      run: |
 | 
			
		||||
        # QtApng
 | 
			
		||||
        curl -L https://github.com/Skycoder42/QtApng/releases/download/1.1.4/qtapng-msvc2017_64-5.14.1.zip -o apng.zip
 | 
			
		||||
        unzip apng.zip
 | 
			
		||||
 | 
			
		||||
        # discord-rpc
 | 
			
		||||
        curl -L https://github.com/discordapp/discord-rpc/releases/download/v3.4.0/discord-rpc-win.zip -o discord_rpc_win.zip
 | 
			
		||||
        unzip discord_rpc_win.zip
 | 
			
		||||
        cp ./discord-rpc/win64-dynamic/lib/discord-rpc.lib ./lib
 | 
			
		||||
 | 
			
		||||
        # BASS
 | 
			
		||||
        curl http://www.un4seen.com/files/bass24.zip -o bass.zip
 | 
			
		||||
        unzip bass.zip
 | 
			
		||||
        cp ./c/x64/bass.lib ./lib
 | 
			
		||||
 | 
			
		||||
        # BASS Opus
 | 
			
		||||
        curl http://www.un4seen.com/files/bassopus24.zip -o bassopus.zip
 | 
			
		||||
        unzip bassopus.zip
 | 
			
		||||
        cp ./c/x64/bassopus.lib ./lib
 | 
			
		||||
 | 
			
		||||
    - name: Cache Qt
 | 
			
		||||
      id: cache-qt
 | 
			
		||||
      uses: actions/cache@v1
 | 
			
		||||
      with:
 | 
			
		||||
        path: ../Qt
 | 
			
		||||
        key: ${{ runner.os }}-qt5
 | 
			
		||||
 | 
			
		||||
    - name: Install Qt
 | 
			
		||||
      uses: jurplel/install-qt-action@v2
 | 
			
		||||
      with:
 | 
			
		||||
        version: '5.15.2'
 | 
			
		||||
        cached: ${{steps.cache-qt.outputs.cache-hit}}
 | 
			
		||||
 | 
			
		||||
    - name: Create Build Environment
 | 
			
		||||
      run: cmake -E make_directory ${{github.workspace}}/build
 | 
			
		||||
 | 
			
		||||
    - name: Configure CMake
 | 
			
		||||
      shell: bash
 | 
			
		||||
      working-directory: ${{github.workspace}}/build
 | 
			
		||||
      run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
 | 
			
		||||
 | 
			
		||||
    - name: Build
 | 
			
		||||
      working-directory: ${{github.workspace}}/build
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: cmake --build . --config $BUILD_TYPE --target Attorney_Online
 | 
			
		||||
 | 
			
		||||
    - name: Deploy
 | 
			
		||||
      working-directory: ${{github.workspace}}/build/Release
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        windeployqt .
 | 
			
		||||
        cp ../../msvc2017_64/plugins/imageformats/qapng.dll ./imageformats/
 | 
			
		||||
        cp ../../discord-rpc/win64-dynamic/bin/discord-rpc.dll .
 | 
			
		||||
        cp ../../x64/bass.dll .
 | 
			
		||||
        cp ../../x64/bassopus.dll .
 | 
			
		||||
 | 
			
		||||
    - name: Upload Artifact
 | 
			
		||||
      uses: actions/upload-artifact@v2
 | 
			
		||||
      with:
 | 
			
		||||
        name: Attorney_Online-x64
 | 
			
		||||
        path: ${{github.workspace}}/build/Release/
 | 
			
		||||
 | 
			
		||||
  # linux:
 | 
			
		||||
  #   # The CMake configure and build commands are platform agnostic and should work equally
 | 
			
		||||
  #   # well on Windows or Mac.  You can convert this to a matrix build if you need
 | 
			
		||||
  #   # cross-platform coverage.
 | 
			
		||||
  #   # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
 | 
			
		||||
  #   runs-on: ubuntu-20.04
 | 
			
		||||
 | 
			
		||||
  #   steps:
 | 
			
		||||
  #   - uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
  #   - name: Install catch2
 | 
			
		||||
  #     run: |
 | 
			
		||||
  #       curl -L https://github.com/catchorg/Catch2/archive/v2.13.4.tar.gz -o catch2.tar.gz
 | 
			
		||||
  #       tar xvf catch2.tar.gz
 | 
			
		||||
  #       cd Catch2-2.13.4
 | 
			
		||||
  #       cmake -Bbuild -H. -DBUILD_TESTING=OFF
 | 
			
		||||
  #       sudo cmake --build build/ --target install
 | 
			
		||||
 | 
			
		||||
  #   - name: Fetch external libs
 | 
			
		||||
  #     run: |
 | 
			
		||||
  #       # Download
 | 
			
		||||
  #       curl http://www.un4seen.com/files/bass24-linux.zip -o bass_linux.zip
 | 
			
		||||
  #       curl http://www.un4seen.com/files/bassopus24-linux.zip -o bassopus_linux.zip
 | 
			
		||||
  #       curl -L https://github.com/discordapp/discord-rpc/releases/download/v3.4.0/discord-rpc-linux.zip -o discord_rpc_linux.zip
 | 
			
		||||
  #       # Extract
 | 
			
		||||
  #       unzip bass_linux.zip
 | 
			
		||||
  #       unzip bassopus_linux.zip
 | 
			
		||||
  #       unzip discord_rpc_linux.zip
 | 
			
		||||
  #       # Copy
 | 
			
		||||
  #       cp x64/libbass.so lib
 | 
			
		||||
  #       cp x64/libbassopus.so lib
 | 
			
		||||
  #       cp discord-rpc/linux-dynamic/lib/libdiscord-rpc.so lib
 | 
			
		||||
 | 
			
		||||
  #   - name: Install Qt5
 | 
			
		||||
  #     run: sudo apt update -y && sudo apt install -y qt5-default
 | 
			
		||||
 | 
			
		||||
  #   - name: Install QtApng
 | 
			
		||||
  #     run: |
 | 
			
		||||
  #       git clone https://github.com/Skycoder42/QtApng
 | 
			
		||||
  #       cd QtApng
 | 
			
		||||
  #       qmake
 | 
			
		||||
  #       make
 | 
			
		||||
  #       sudo make install
 | 
			
		||||
 | 
			
		||||
  #   - name: Create Build Environment
 | 
			
		||||
  #     # Some projects don't allow in-source building, so create a separate build directory
 | 
			
		||||
  #     # We'll use this as our working directory for all subsequent commands
 | 
			
		||||
  #     run: cmake -E make_directory ${{github.workspace}}/build
 | 
			
		||||
 | 
			
		||||
  #   - name: Configure CMake
 | 
			
		||||
  #     # Use a bash shell so we can use the same syntax for environment variable
 | 
			
		||||
  #     # access regardless of the host operating system
 | 
			
		||||
  #     shell: bash
 | 
			
		||||
  #     env:
 | 
			
		||||
  #       CC: gcc-10
 | 
			
		||||
  #       CXX: g++-10
 | 
			
		||||
  #     working-directory: ${{github.workspace}}/build
 | 
			
		||||
  #     # Note the current convention is to use the -S and -B options here to specify source
 | 
			
		||||
  #     # and build directories, but this is only available with CMake 3.13 and higher.
 | 
			
		||||
  #     # The CMake binaries on the Github Actions machines are (as of this writing) 3.12
 | 
			
		||||
  #     run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
 | 
			
		||||
 | 
			
		||||
  #   - name: Build
 | 
			
		||||
  #     working-directory: ${{github.workspace}}/build
 | 
			
		||||
  #     shell: bash
 | 
			
		||||
  #     # Execute the build.  You can specify a specific target with "--target <NAME>"
 | 
			
		||||
  #     run: cmake --build . --config $BUILD_TYPE --target Attorney_Online
 | 
			
		||||
 | 
			
		||||
  #   - name: Strip
 | 
			
		||||
  #     working-directory: ${{github.workspace}}/build
 | 
			
		||||
  #     shell: bash
 | 
			
		||||
  #     run: strip -s Attorney_Online
 | 
			
		||||
 | 
			
		||||
  #   - name: Compress
 | 
			
		||||
  #     working-directory: ${{github.workspace}}/build
 | 
			
		||||
  #     shell: bash
 | 
			
		||||
  #     run: tar czvf Attorney_Online-linux-x86_64.tgz Attorney_Online
 | 
			
		||||
 | 
			
		||||
  #   - name: Upload Artifact
 | 
			
		||||
  #     uses: actions/upload-artifact@v2
 | 
			
		||||
  #     with:
 | 
			
		||||
  #       name: Attorney_Online
 | 
			
		||||
  #       path: ${{github.workspace}}/build/Attorney_Online-linux-x86_64.tgz
 | 
			
		||||
							
								
								
									
										87
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,87 @@
 | 
			
		||||
name: test
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - add-tests
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
 | 
			
		||||
  BUILD_TYPE: Release
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    # The CMake configure and build commands are platform agnostic and should work equally
 | 
			
		||||
    # well on Windows or Mac.  You can convert this to a matrix build if you need
 | 
			
		||||
    # cross-platform coverage.
 | 
			
		||||
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
 | 
			
		||||
    runs-on: ubuntu-20.04
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
    - name: Install catch2
 | 
			
		||||
      run: |
 | 
			
		||||
        curl -L https://github.com/catchorg/Catch2/archive/v2.13.4.tar.gz -o catch2.tar.gz
 | 
			
		||||
        tar xvf catch2.tar.gz
 | 
			
		||||
        cd Catch2-2.13.4
 | 
			
		||||
        cmake -Bbuild -H. -DBUILD_TESTING=OFF
 | 
			
		||||
        sudo cmake --build build/ --target install
 | 
			
		||||
 | 
			
		||||
    - name: Fetch external libs
 | 
			
		||||
      run: |
 | 
			
		||||
        # Download
 | 
			
		||||
        curl http://www.un4seen.com/files/bass24-linux.zip -o bass_linux.zip
 | 
			
		||||
        curl http://www.un4seen.com/files/bassopus24-linux.zip -o bassopus_linux.zip
 | 
			
		||||
        curl -L https://github.com/discordapp/discord-rpc/releases/download/v3.4.0/discord-rpc-linux.zip -o discord_rpc_linux.zip
 | 
			
		||||
        # Extract
 | 
			
		||||
        unzip bass_linux.zip
 | 
			
		||||
        unzip bassopus_linux.zip
 | 
			
		||||
        unzip discord_rpc_linux.zip
 | 
			
		||||
        # Copy
 | 
			
		||||
        cp x64/libbass.so lib
 | 
			
		||||
        cp x64/libbassopus.so lib
 | 
			
		||||
        cp discord-rpc/linux-dynamic/lib/libdiscord-rpc.so lib
 | 
			
		||||
 | 
			
		||||
    - name: Install Qt5
 | 
			
		||||
      run: sudo apt update -y && sudo apt install -y qt5-default
 | 
			
		||||
 | 
			
		||||
    - name: Install QtApng
 | 
			
		||||
      run: |
 | 
			
		||||
        git clone https://github.com/Skycoder42/QtApng
 | 
			
		||||
        cd QtApng
 | 
			
		||||
        qmake
 | 
			
		||||
        make
 | 
			
		||||
        sudo make install
 | 
			
		||||
 | 
			
		||||
    - name: Create Build Environment
 | 
			
		||||
      # Some projects don't allow in-source building, so create a separate build directory
 | 
			
		||||
      # We'll use this as our working directory for all subsequent commands
 | 
			
		||||
      run: cmake -E make_directory ${{github.workspace}}/build
 | 
			
		||||
 | 
			
		||||
    - name: Configure CMake
 | 
			
		||||
      # Use a bash shell so we can use the same syntax for environment variable
 | 
			
		||||
      # access regardless of the host operating system
 | 
			
		||||
      shell: bash
 | 
			
		||||
      env:
 | 
			
		||||
        CC: gcc-10
 | 
			
		||||
        CXX: g++-10
 | 
			
		||||
      working-directory: ${{github.workspace}}/build
 | 
			
		||||
      # Note the current convention is to use the -S and -B options here to specify source
 | 
			
		||||
      # and build directories, but this is only available with CMake 3.13 and higher.
 | 
			
		||||
      # The CMake binaries on the Github Actions machines are (as of this writing) 3.12
 | 
			
		||||
      run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
 | 
			
		||||
 | 
			
		||||
    - name: Build
 | 
			
		||||
      working-directory: ${{github.workspace}}/build
 | 
			
		||||
      shell: bash
 | 
			
		||||
      # Execute the build.  You can specify a specific target with "--target <NAME>"
 | 
			
		||||
      run: cmake --build . --config $BUILD_TYPE --target test
 | 
			
		||||
 | 
			
		||||
    - name: Test
 | 
			
		||||
      working-directory: ${{github.workspace}}/build/test
 | 
			
		||||
      shell: bash
 | 
			
		||||
      env:
 | 
			
		||||
        QT_QPA_PLATFORM: offscreen
 | 
			
		||||
      run: |
 | 
			
		||||
        ln -s ../../test/*.png .
 | 
			
		||||
        ./test ~[noci]
 | 
			
		||||
							
								
								
									
										43
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,43 @@
 | 
			
		||||
# Configure cmake
 | 
			
		||||
cmake_minimum_required(VERSION 3.1.0)
 | 
			
		||||
cmake_policy(SET CMP0076 NEW) # silence warning
 | 
			
		||||
 | 
			
		||||
project(AttorneyOnline)
 | 
			
		||||
 | 
			
		||||
set(CMAKE_CXX_STANDARD 20)
 | 
			
		||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
			
		||||
 | 
			
		||||
set(CMAKE_AUTOMOC ON)
 | 
			
		||||
set(CMAKE_AUTORCC ON)
 | 
			
		||||
set(CMAKE_AUTOUIC ON)
 | 
			
		||||
 | 
			
		||||
if(CMAKE_VERSION VERSION_LESS "3.7.0")
 | 
			
		||||
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# AO
 | 
			
		||||
add_executable(Attorney_Online resources.qrc)
 | 
			
		||||
 | 
			
		||||
# WIN32
 | 
			
		||||
if(WIN32)
 | 
			
		||||
    if(CMAKE_BUILD_TYPE STREQUAL "Release")
 | 
			
		||||
        set_property(TARGET Attorney_Online PROPERTY WIN32_EXECUTABLE true)
 | 
			
		||||
        set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/resource/logo_ao2.rc")
 | 
			
		||||
        target_sources(Attorney_Online PRIVATE ${APP_ICON_RESOURCE_WINDOWS})
 | 
			
		||||
    endif()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Target Include
 | 
			
		||||
target_include_directories(Attorney_Online PRIVATE include)
 | 
			
		||||
 | 
			
		||||
# Target Lib
 | 
			
		||||
find_package(Qt5 COMPONENTS Core Gui Network Widgets REQUIRED)
 | 
			
		||||
target_link_directories(Attorney_Online PRIVATE lib)
 | 
			
		||||
target_link_libraries(Attorney_Online PRIVATE Qt5::Core Qt5::Gui Qt5::Network Qt5::Widgets
 | 
			
		||||
    bass bassopus discord-rpc)
 | 
			
		||||
target_compile_definitions(Attorney_Online PRIVATE DISCORD)
 | 
			
		||||
 | 
			
		||||
# Subdirectories
 | 
			
		||||
add_subdirectory(test)
 | 
			
		||||
add_subdirectory(src)
 | 
			
		||||
add_subdirectory(include)
 | 
			
		||||
							
								
								
									
										17
									
								
								README_TEST.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								README_TEST.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
Running tests requires Catch2 and cmake
 | 
			
		||||
 | 
			
		||||
# Running Tests
 | 
			
		||||
```sh
 | 
			
		||||
mkdir cbuild && cd cbuild
 | 
			
		||||
cmake ..
 | 
			
		||||
make test
 | 
			
		||||
 | 
			
		||||
# usage: run all tests
 | 
			
		||||
./test/test
 | 
			
		||||
 | 
			
		||||
# usage: Optionally specify tests and success verbosity
 | 
			
		||||
./test/test [bass] --success
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# Writing Tests
 | 
			
		||||
`[noci]` tag is used to disable a test on Github actions
 | 
			
		||||
							
								
								
									
										38
									
								
								include/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								include/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
			
		||||
target_sources(Attorney_Online PRIVATE
 | 
			
		||||
aoapplication.h
 | 
			
		||||
aoblipplayer.h
 | 
			
		||||
aobutton.h
 | 
			
		||||
aocaseannouncerdialog.h
 | 
			
		||||
aocharbutton.h
 | 
			
		||||
aoclocklabel.h
 | 
			
		||||
aoemotebutton.h
 | 
			
		||||
aoevidencebutton.h
 | 
			
		||||
aoevidencedisplay.h
 | 
			
		||||
aoimage.h
 | 
			
		||||
aolayer.h
 | 
			
		||||
aolineedit.h
 | 
			
		||||
aomusicplayer.h
 | 
			
		||||
aooptionsdialog.h
 | 
			
		||||
aopacket.h
 | 
			
		||||
aosfxplayer.h
 | 
			
		||||
aotextarea.h
 | 
			
		||||
aotextedit.h
 | 
			
		||||
bass.h
 | 
			
		||||
bassopus.h
 | 
			
		||||
chatlogpiece.h
 | 
			
		||||
courtroom.h
 | 
			
		||||
datatypes.h
 | 
			
		||||
debug_functions.h
 | 
			
		||||
demoserver.h
 | 
			
		||||
discord-rpc.h
 | 
			
		||||
discord_register.h
 | 
			
		||||
discord_rich_presence.h
 | 
			
		||||
discord_rpc.h
 | 
			
		||||
file_functions.h
 | 
			
		||||
hardware_functions.h
 | 
			
		||||
lobby.h
 | 
			
		||||
misc_functions.h
 | 
			
		||||
networkmanager.h
 | 
			
		||||
scrolltext.h
 | 
			
		||||
text_file_functions.h
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										1
									
								
								resource/logo_ao2.rc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								resource/logo_ao2.rc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
IDI_ICON1               ICON    "logo_ao2.ico"
 | 
			
		||||
							
								
								
									
										38
									
								
								src/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
			
		||||
target_sources(Attorney_Online PRIVATE
 | 
			
		||||
aoapplication.cpp
 | 
			
		||||
aoblipplayer.cpp
 | 
			
		||||
aobutton.cpp
 | 
			
		||||
aocaseannouncerdialog.cpp
 | 
			
		||||
aocharbutton.cpp
 | 
			
		||||
aoclocklabel.cpp
 | 
			
		||||
aoemotebutton.cpp
 | 
			
		||||
aoevidencebutton.cpp
 | 
			
		||||
aoevidencedisplay.cpp
 | 
			
		||||
aoimage.cpp
 | 
			
		||||
aolayer.cpp
 | 
			
		||||
aolineedit.cpp
 | 
			
		||||
aomusicplayer.cpp
 | 
			
		||||
aooptionsdialog.cpp
 | 
			
		||||
aopacket.cpp
 | 
			
		||||
aosfxplayer.cpp
 | 
			
		||||
aotextarea.cpp
 | 
			
		||||
aotextedit.cpp
 | 
			
		||||
charselect.cpp
 | 
			
		||||
chatlogpiece.cpp
 | 
			
		||||
courtroom.cpp
 | 
			
		||||
debug_functions.cpp
 | 
			
		||||
demoserver.cpp
 | 
			
		||||
discord_rich_presence.cpp
 | 
			
		||||
emotes.cpp
 | 
			
		||||
evidence.cpp
 | 
			
		||||
file_functions.cpp
 | 
			
		||||
hardware_functions.cpp
 | 
			
		||||
lobby.cpp
 | 
			
		||||
main.cpp
 | 
			
		||||
misc_functions.cpp
 | 
			
		||||
networkmanager.cpp
 | 
			
		||||
packet_distribution.cpp
 | 
			
		||||
path_functions.cpp
 | 
			
		||||
scrolltext.cpp
 | 
			
		||||
text_file_functions.cpp
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										8
									
								
								test/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								test/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 | 
			
		||||
find_package(Catch2 REQUIRED)
 | 
			
		||||
 | 
			
		||||
add_executable(test test_aopacket.cpp test_caseloading.cpp test_apng.cpp test_bass.cpp ../include/aopacket.h ../src/aopacket.cpp)
 | 
			
		||||
target_include_directories(test PRIVATE ../include)
 | 
			
		||||
target_link_directories(test PRIVATE ../lib)
 | 
			
		||||
target_link_libraries(test PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Catch2::Catch2 bass bassopus discord-rpc)
 | 
			
		||||
target_compile_definitions(Attorney_Online PRIVATE DISCORD)
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								test/missle.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/missle.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 54 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								test/snackoo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/snackoo.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 90 KiB  | 
							
								
								
									
										45
									
								
								test/test_aopacket.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								test/test_aopacket.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,45 @@
 | 
			
		||||
#define CATCH_CONFIG_MAIN
 | 
			
		||||
#include <catch2/catch.hpp>
 | 
			
		||||
 | 
			
		||||
#include "aopacket.h"
 | 
			
		||||
 | 
			
		||||
TEST_CASE("AOPacket construct", "[aopacket]") {
 | 
			
		||||
  // Parameters
 | 
			
		||||
  QString packet_string = "CT#MY_OOC_NAME#/doc https://docs.google.com/document/d/123/edit##%";
 | 
			
		||||
 | 
			
		||||
  SECTION("Packet string") {
 | 
			
		||||
    AOPacket p(packet_string);
 | 
			
		||||
    REQUIRE(p.to_string() == packet_string);
 | 
			
		||||
  }
 | 
			
		||||
  SECTION("Header and contents") {
 | 
			
		||||
    QStringList contents = {"MY_OOC_NAME", "/doc https://docs.google.com/document/d/123/edit#"};
 | 
			
		||||
    AOPacket p("CT", contents);
 | 
			
		||||
    REQUIRE(p.to_string() == packet_string);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_CASE("AOPacket encode/decode", "[aopacket]") {
 | 
			
		||||
  // Parameters
 | 
			
		||||
  QString packet_string = "CT#MY_OOC_NAME#/doc https://docs.google.com/document/d/%$&/edit##%";
 | 
			
		||||
  QString good_encode = "CT#MY_OOC_NAME#/doc https://docs.google.com/document/d/<percent><dollar><and>/edit<num>#%";
 | 
			
		||||
 | 
			
		||||
  SECTION("Bad encode/decode because packet string constructor splits the '#' after 'edit'") {
 | 
			
		||||
    AOPacket p(packet_string);
 | 
			
		||||
    p.net_encode();
 | 
			
		||||
    REQUIRE(p.to_string() != good_encode);
 | 
			
		||||
 | 
			
		||||
    p.net_decode();
 | 
			
		||||
    REQUIRE(p.to_string() == packet_string);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SECTION("Good encode/decode with header and contents constructor") {
 | 
			
		||||
    QStringList contents = {"MY_OOC_NAME", "/doc https://docs.google.com/document/d/%$&/edit#"};
 | 
			
		||||
    AOPacket p("CT", contents);
 | 
			
		||||
 | 
			
		||||
    p.net_encode();
 | 
			
		||||
    REQUIRE(p.to_string() == good_encode);
 | 
			
		||||
 | 
			
		||||
    p.net_decode();
 | 
			
		||||
    REQUIRE(p.to_string() == packet_string);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								test/test_apng.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								test/test_apng.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,61 @@
 | 
			
		||||
#include <catch2/catch.hpp>
 | 
			
		||||
 | 
			
		||||
#include <QPluginLoader>
 | 
			
		||||
#include <QImageReader>
 | 
			
		||||
#include <QCoreApplication>
 | 
			
		||||
#include <QGuiApplication>
 | 
			
		||||
#include <QPixmap>
 | 
			
		||||
 | 
			
		||||
TEST_CASE("Support APNG Plugin", "[apng]") {
 | 
			
		||||
  // Check paths for libs
 | 
			
		||||
  QCoreApplication::addLibraryPath(".");
 | 
			
		||||
  QCoreApplication::addLibraryPath("lib");
 | 
			
		||||
 | 
			
		||||
  // Either it's loaded from system or we load local
 | 
			
		||||
  QPluginLoader apngPlugin("qapng");
 | 
			
		||||
  apngPlugin.load();
 | 
			
		||||
 | 
			
		||||
  INFO(QImageReader::supportedImageFormats().join(' ').toStdString());
 | 
			
		||||
  REQUIRE(QImageReader::supportedImageFormats().contains("apng"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_CASE("Detect png animation", "[apng]") {
 | 
			
		||||
  // Required for QPixmap methods
 | 
			
		||||
  int argc = 1;
 | 
			
		||||
  char bin[] = "test";
 | 
			
		||||
  char *argv[] = { bin };
 | 
			
		||||
  QGuiApplication app(argc, argv);
 | 
			
		||||
 | 
			
		||||
  // Instantiate reader
 | 
			
		||||
  QImageReader reader;
 | 
			
		||||
 | 
			
		||||
  SECTION("Decide format from content fails on apng") {
 | 
			
		||||
    reader.setFileName("snackoo.png");
 | 
			
		||||
    reader.setDecideFormatFromContent(true);
 | 
			
		||||
    REQUIRE(!reader.supportsAnimation());
 | 
			
		||||
    REQUIRE(!QPixmap::fromImage(reader.read()).isNull());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SECTION("Auto detect fails on apng") {
 | 
			
		||||
    reader.setFileName("snackoo.png");
 | 
			
		||||
    reader.setAutoDetectImageFormat(true);
 | 
			
		||||
    REQUIRE(!reader.supportsAnimation());
 | 
			
		||||
    REQUIRE(!QPixmap::fromImage(reader.read()).isNull());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SECTION("Detect apng supports animation") {
 | 
			
		||||
    reader.setFileName("snackoo.png");
 | 
			
		||||
    reader.setFormat("apng");
 | 
			
		||||
    REQUIRE(reader.supportsAnimation());
 | 
			
		||||
    REQUIRE(!QPixmap::fromImage(reader.read()).isNull());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SECTION("Detect png frame has no animation") {
 | 
			
		||||
    reader.setFileName("missle.png");
 | 
			
		||||
    reader.setFormat("apng");
 | 
			
		||||
    REQUIRE(!reader.supportsAnimation());
 | 
			
		||||
    reader.setFormat("png");
 | 
			
		||||
    REQUIRE(!reader.supportsAnimation());
 | 
			
		||||
    REQUIRE(!QPixmap::fromImage(reader.read()).isNull());
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								test/test_bass.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								test/test_bass.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
#include <catch2/catch.hpp>
 | 
			
		||||
#include <QString>
 | 
			
		||||
 | 
			
		||||
#include "bass.h"
 | 
			
		||||
#include "bassopus.h"
 | 
			
		||||
 | 
			
		||||
TEST_CASE("BASS URL streaming", "[bass][noci]") {
 | 
			
		||||
  // Sample
 | 
			
		||||
  QString url = "https://raw.githubusercontent.com/skyedeving/aocharedit/master/Attorney%20Online%20Character%20Editor/Resources/about.mp3";
 | 
			
		||||
 | 
			
		||||
  // initialize
 | 
			
		||||
  BASS_Init(-1, 44100, 0, 0, nullptr);
 | 
			
		||||
 | 
			
		||||
  // create stream from url
 | 
			
		||||
  HSTREAM stream;
 | 
			
		||||
  unsigned int flags = BASS_STREAM_AUTOFREE | BASS_STREAM_STATUS;
 | 
			
		||||
  if (url.endsWith(".opus")) {
 | 
			
		||||
    stream = BASS_OPUS_StreamCreateURL(url.toStdString().c_str(), 0, flags, nullptr, 0);
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
    stream = BASS_StreamCreateURL(url.toStdString().c_str(), 0, flags, nullptr, 0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Log http status
 | 
			
		||||
  const char *tags = BASS_ChannelGetTags(stream, BASS_TAG_HTTP);
 | 
			
		||||
  if (tags) {
 | 
			
		||||
    while(*tags) {
 | 
			
		||||
      UNSCOPED_INFO(tags);
 | 
			
		||||
      tags += strlen(tags) + 1;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Test
 | 
			
		||||
  REQUIRE(stream != 0);
 | 
			
		||||
  REQUIRE(BASS_ChannelPlay(stream, TRUE) == TRUE);
 | 
			
		||||
  // while (BASS_ChannelIsActive(stream) != BASS_ACTIVE_STOPPED); // block test to listen
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								test/test_caseloading.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								test/test_caseloading.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
#include <catch2/catch.hpp>
 | 
			
		||||
 | 
			
		||||
#include <QStringList>
 | 
			
		||||
 | 
			
		||||
TEST_CASE("Sort case evidence numerically", "[case]") {
 | 
			
		||||
  // Parameters
 | 
			
		||||
  QStringList case_evidence = {"1", "10", "11", "2", "3", "4", "5", "6", "7", "8", "9"};
 | 
			
		||||
  QStringList case_evidence_sorted = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"};
 | 
			
		||||
 | 
			
		||||
  // Sort
 | 
			
		||||
  std::sort(case_evidence.begin(), case_evidence.end(),
 | 
			
		||||
            [] (const QString &a, const QString &b) {
 | 
			
		||||
              return a.toInt() < b.toInt();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
  // Test
 | 
			
		||||
  REQUIRE(case_evidence == case_evidence_sorted);
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user