diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c51a6da38..ad1f5f116 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,8 @@ jobs: - name: 'Checkout source code' uses: actions/checkout@v2 + with: + submodules: true - name: 'Configure CMake' run: cmake -B ${{github.workspace}}/build -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=${{matrix.platform}}-windows -DCMAKE_GENERATOR_PLATFORM=${{matrix.generator_platform}} -DENABLE_SPICE=ON -DENABLE_TOOLS=ON -DENABLE_TESTS=ON -DENABLE_SDL=OFF -DENABLE_QT=ON -DENABLE_DATA=OFF @@ -56,7 +58,9 @@ jobs: - name: 'Copy DLL for tests' working-directory: ${{github.workspace}}/build - run: copy src\celestia\${{env.BUILD_TYPE}}\*.dll test\unit\${{env.BUILD_TYPE}}\ + run: | + copy src\celestia\${{env.BUILD_TYPE}}\*.dll test\unit\${{env.BUILD_TYPE}}\ + copy src\celestia\${{env.BUILD_TYPE}}\*.dll test\integration\${{env.BUILD_TYPE}}\ - name: Test working-directory: ${{github.workspace}}/build diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f136f5a5e..46571f97d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,2 +1,6 @@ add_subdirectory(common) + +include(TestCase) + +add_subdirectory(integration) add_subdirectory(unit) diff --git a/test/data/iss/models/iss.cmod b/test/data/iss/models/iss.cmod new file mode 100644 index 000000000..ef1fc059b Binary files /dev/null and b/test/data/iss/models/iss.cmod differ diff --git a/test/integration/CMakeLists.txt b/test/integration/CMakeLists.txt new file mode 100644 index 000000000..b49a753a5 --- /dev/null +++ b/test/integration/CMakeLists.txt @@ -0,0 +1,4 @@ +test_case(cmod_bin_ascii_roundtrip) + +file(COPY "${CMAKE_SOURCE_DIR}/test/data/iss/models/iss.cmod" + DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") diff --git a/test/integration/cmod_bin_ascii_roundtrip_test.cpp b/test/integration/cmod_bin_ascii_roundtrip_test.cpp new file mode 100644 index 000000000..b498e0306 --- /dev/null +++ b/test/integration/cmod_bin_ascii_roundtrip_test.cpp @@ -0,0 +1,36 @@ +#include +#include +#include +#include +#include + +#include + +#include + +TEST_CASE("CMOD binary to ASCII roundtrip", "[cmod] [integration]") +{ + std::ifstream f("iss.cmod", std::ios::in | std::ios::binary); + REQUIRE(f.good()); + std::stringstream sourceData; + sourceData << f.rdbuf(); + + cmod::Model* modelFromBinary = cmod::LoadModel(sourceData, nullptr); + REQUIRE(modelFromBinary != nullptr); + + std::stringstream asciiData; + REQUIRE(cmod::SaveModelAscii(modelFromBinary, asciiData)); + + cmod::Model* modelFromAscii = cmod::LoadModel(asciiData); + REQUIRE(modelFromAscii != nullptr); + + std::stringstream roundtrippedData; + REQUIRE(cmod::SaveModelBinary(modelFromAscii, roundtrippedData)); + + sourceData.clear(); + REQUIRE(sourceData.seekg(0, std::ios_base::beg).good()); + + std::istreambuf_iterator end; + REQUIRE(std::equal(std::istreambuf_iterator(sourceData), end, + std::istreambuf_iterator(roundtrippedData), end)); +} diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt index 488d6868b..0ed957ec6 100644 --- a/test/unit/CMakeLists.txt +++ b/test/unit/CMakeLists.txt @@ -1,5 +1,3 @@ -include(TestCase) - test_case(hash) if ((NOT HAVE_EXPERIMENTAL_FILESYSTEM) AND (NOT HAVE_FILESYSTEM)) test_case(fs)