Merge pull request #98 from balp/master

Add ApprovalTests for cpp
This commit is contained in:
Emily Bache 2018-10-16 08:48:36 +02:00 committed by GitHub
commit 8a910c446d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 100 additions and 15 deletions

View File

@ -6,25 +6,62 @@ project(cpp)
set(CMAKE_THREAD_LIBS_INIT pthread)
enable_testing()
find_package(GTest REQUIRED)
find_package(GTest)
include(ExternalProject)
if(NOT ${GTEST_FOUND}) # Download gtest if not installed
message("No system gtest use external project")
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG master
SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src
${CMAKE_BINARY_DIR}/googletest-build
EXCLUDE_FROM_ALL)
set(GTEST_BOTH_LIBRARIES gtest gtest_main)
endif()
ExternalProject_Add(aprovaltest
PREFIX ${CMAKE_BINARY_DIR}/aprovaltest
URL https://github.com/approvals/ApprovalTests.cpp/releases/download/v.2.0.0/ApprovalTests.v.2.0.0.hpp
DOWNLOAD_NO_EXTRACT 1
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
include_directories(${GTEST_INCLUDE_DIRS})
include_directories(${CMAKE_BINARY_DIR}/aprovaltest/src)
set(GILDED_ROSE_SOURCE_FILES
add_executable(GildedRose
GildedRose.cc
GildedRose.h
GildedRoseUnitTests.cc)
set(GILDED_ROSE_TEXT_TESTS_SOURCE_FILES
GildedRose.cc
GildedRose.h
GildedRoseTextTests.cc)
set(SOURCE_FILES
${GILDED_ROSE_SOURCE_FILES}
${GILDED_ROSE_TEXT_TESTS_SOURCE_FILES})
add_executable(GildedRose ${GILDED_ROSE_SOURCE_FILES})
GildedRoseUnitTests.cc
)
target_link_libraries(GildedRose ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
add_test(NAME GildedRose COMMAND GildedRose)
add_executable(GildedRoseTextTests ${GILDED_ROSE_TEXT_TESTS_SOURCE_FILES})
add_executable(GildedRoseTextTests
GildedRose.cc
GildedRose.h
GildedRoseTextTests.cc
)
target_link_libraries(GildedRoseTextTests ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
add_test(NAME GildedRoseTextTests COMMAND GildedRoseTextTests)
add_executable(GildedRoseApprovalTests
GildedRose.cc
GildedRose.h
GildedRoseApprovalTests.cc
GildedRoseApprovalMain.cc
)
target_link_libraries(GildedRoseApprovalTests ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
set_property(TARGET GildedRoseApprovalTests PROPERTY CXX_STANDARD 14)
add_dependencies(GildedRoseApprovalTests aprovaltest)
add_test(NAME GildedRoseApprovalTests COMMAND GildedRoseApprovalTests)

View File

@ -0,0 +1,2 @@
#define APPROVALS_GOOGLETEST
#include "ApprovalTests.v.2.0.0.hpp"

View File

@ -0,0 +1,2 @@
(Foo, 1, 1) => name: Foo, sellIn: 0, quality: 0

View File

@ -0,0 +1,28 @@
#include "ApprovalTests.v.2.0.0.hpp"
#include <gtest/gtest.h>
#include "GildedRose.h"
std::ostream& operator<<(std::ostream& os, const Item& obj)
{
return os
<< "name: " << obj.name
<< ", sellIn: " << obj.sellIn
<< ", quality: " << obj.quality;
}
TEST(GildedRoseApprovalTests, VerifyCombinations)
{
std::vector<string> names { "Foo" };
std::vector<int> sellIns { 1 };
std::vector<int> qualities { 1 };
CombinationApprovals::verifyAllCombinations<
std::vector<string>, std::vector<int>, std::vector<int>, Item>(
[](string name, int sellIn, int quality) {
vector<Item> items = {Item(name, sellIn, quality)};
GildedRose app(items);
app.updateQuality();
return items[0];
},
names, sellIns, qualities);
}

8
cpp/run-approval-once.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
if [[ ! -d build ]]; then
mkdir -p build
fi
cd build
cmake .. -DCMAKE_BUILD_TYPE=DEBUG && cmake --build . && ctest --output-on-failure -R GildedRoseApprovalTests

8
cpp/run-once-cmake.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
if [[ ! -d build ]]; then
mkdir -p build
fi
cd build
cmake .. -DCMAKE_BUILD_TYPE=DEBUG && cmake --build . && ctest --output-on-failure