mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 04:12:13 +00:00
Add Approval Tests for cpp
* Add testcase using https://github.com/approvals/ApprovalTests.cpp and google test. * Change google test to be downloaded if not installed with cmake * Add a run-once-cmake.sh script to build and test with cmake * Add a run-approval-once.sh script to build and run approval test
This commit is contained in:
parent
a788fae859
commit
c503bf8a2b
@ -6,25 +6,62 @@ project(cpp)
|
|||||||
set(CMAKE_THREAD_LIBS_INIT pthread)
|
set(CMAKE_THREAD_LIBS_INIT pthread)
|
||||||
|
|
||||||
enable_testing()
|
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(${GTEST_INCLUDE_DIRS})
|
||||||
|
include_directories(${CMAKE_BINARY_DIR}/aprovaltest/src)
|
||||||
|
|
||||||
set(GILDED_ROSE_SOURCE_FILES
|
add_executable(GildedRose
|
||||||
GildedRose.cc
|
GildedRose.cc
|
||||||
GildedRose.h
|
GildedRose.h
|
||||||
GildedRoseUnitTests.cc)
|
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})
|
|
||||||
target_link_libraries(GildedRose ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
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})
|
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)
|
||||||
|
|||||||
2
cpp/GildedRoseApprovalMain.cc
Normal file
2
cpp/GildedRoseApprovalMain.cc
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#define APPROVALS_GOOGLETEST
|
||||||
|
#include "ApprovalTests.v.2.0.0.hpp"
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
(Foo, 1, 1) => name: Foo, sellIn: 0, quality: 0
|
||||||
|
|
||||||
28
cpp/GildedRoseApprovalTests.cc
Normal file
28
cpp/GildedRoseApprovalTests.cc
Normal 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
8
cpp/run-approval-once.sh
Executable 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
8
cpp/run-once-cmake.sh
Executable 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
|
||||||
Loading…
Reference in New Issue
Block a user