mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 12:22:12 +00:00
new cpp version with just catch2 and approvals. Builds faster than the version in the cpp folder
This commit is contained in:
parent
59fa896633
commit
3ee479a731
4
cpp-catch2/.gitignore
vendored
Normal file
4
cpp-catch2/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/build_meson/
|
||||||
|
/subprojects/Catch2-*/
|
||||||
|
/subprojects/packagecache/
|
||||||
|
/cmake-build-*/
|
||||||
47
cpp-catch2/CMakeLists.txt
Normal file
47
cpp-catch2/CMakeLists.txt
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.14..3.16)
|
||||||
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||||
|
project(GildedRoseKata VERSION 1.0
|
||||||
|
DESCRIPTION "The GildedRose Refactoring kata for an approval testing approach"
|
||||||
|
LANGUAGES CXX)
|
||||||
|
include(FetchContent)
|
||||||
|
|
||||||
|
FetchContent_Declare(
|
||||||
|
catch2
|
||||||
|
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
||||||
|
GIT_TAG v2.12.2
|
||||||
|
)
|
||||||
|
FetchContent_MakeAvailable(catch2)
|
||||||
|
LIST(APPEND CMAKE_MODULE_PATH
|
||||||
|
${catch2_SOURCE_DIR}/contrib
|
||||||
|
)
|
||||||
|
|
||||||
|
FetchContent_Declare(
|
||||||
|
approvaltests_ho
|
||||||
|
URL https://github.com/approvals/ApprovalTests.cpp/releases/download/v.10.0.0/ApprovalTests.v.10.0.0.hpp
|
||||||
|
DOWNLOAD_NO_EXTRACT TRUE
|
||||||
|
DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/approvaltests
|
||||||
|
DOWNLOAD_NAME ApprovalTests.v.10.0.0.hpp
|
||||||
|
)
|
||||||
|
FetchContent_GetProperties(approvaltests_ho)
|
||||||
|
if (NOT approvaltests_ho_POPULATED)
|
||||||
|
FetchContent_Populate(approvaltests_ho)
|
||||||
|
endif ()
|
||||||
|
add_library(approvaltests INTERFACE)
|
||||||
|
target_include_directories(approvaltests
|
||||||
|
INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/approvaltests
|
||||||
|
INTERFACE ${catch2_SOURCE_DIR}/single_include/catch2
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(gildedrose_catch2
|
||||||
|
src/GildedRose.h
|
||||||
|
src/GildedRose.cc
|
||||||
|
test/gildedrose_catch.cpp
|
||||||
|
test/main.cpp)
|
||||||
|
set_target_properties(gildedrose_catch2 PROPERTIES CXX_STANDARD 11)
|
||||||
|
target_include_directories(gildedrose_catch2
|
||||||
|
PUBLIC src)
|
||||||
|
target_link_libraries(gildedrose_catch2 Catch2::Catch2 approvaltests)
|
||||||
|
|
||||||
|
include(CTest)
|
||||||
|
include(ParseAndAddCatchTests)
|
||||||
|
ParseAndAddCatchTests(gildedrose_catch2)
|
||||||
20
cpp-catch2/README.md
Normal file
20
cpp-catch2/README.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
C++ version of Gilded Rose with Catch 2 and Approvals
|
||||||
|
======================================================
|
||||||
|
|
||||||
|
This is a C++ start of the ApprovalTest version of the Gilded Rose Refactoring Kata. See
|
||||||
|
the [top level readme](https://github.com/emilybache/GildedRose-Refactoring-Kata)
|
||||||
|
for a general description of the exercise.
|
||||||
|
|
||||||
|
|
||||||
|
CMake
|
||||||
|
-----
|
||||||
|
|
||||||
|
CMake is included in CLion from JetBrains. Without CMake files
|
||||||
|
CLion has a hard time to handle c-projects.
|
||||||
|
|
||||||
|
To install CMake (if you don't use CLion) on macOS using brew
|
||||||
|
|
||||||
|
brew install cmake
|
||||||
|
|
||||||
|
Tested on CMake 3.15.3 (included with CLion 2019.3) on macOS
|
||||||
|
|
||||||
80
cpp-catch2/src/GildedRose.cc
Normal file
80
cpp-catch2/src/GildedRose.cc
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#include "GildedRose.h"
|
||||||
|
|
||||||
|
GildedRose::GildedRose(vector<Item> & items) : items(items)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void GildedRose::updateQuality()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < items.size(); i++)
|
||||||
|
{
|
||||||
|
if (items[i].name != "Aged Brie" && items[i].name != "Backstage passes to a TAFKAL80ETC concert")
|
||||||
|
{
|
||||||
|
if (items[i].quality > 0)
|
||||||
|
{
|
||||||
|
if (items[i].name != "Sulfuras, Hand of Ragnaros")
|
||||||
|
{
|
||||||
|
items[i].quality = items[i].quality - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (items[i].quality < 50)
|
||||||
|
{
|
||||||
|
items[i].quality = items[i].quality + 1;
|
||||||
|
|
||||||
|
if (items[i].name == "Backstage passes to a TAFKAL80ETC concert")
|
||||||
|
{
|
||||||
|
if (items[i].sellIn < 11)
|
||||||
|
{
|
||||||
|
if (items[i].quality < 50)
|
||||||
|
{
|
||||||
|
items[i].quality = items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (items[i].sellIn < 6)
|
||||||
|
{
|
||||||
|
if (items[i].quality < 50)
|
||||||
|
{
|
||||||
|
items[i].quality = items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (items[i].name != "Sulfuras, Hand of Ragnaros")
|
||||||
|
{
|
||||||
|
items[i].sellIn = items[i].sellIn - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (items[i].sellIn < 0)
|
||||||
|
{
|
||||||
|
if (items[i].name != "Aged Brie")
|
||||||
|
{
|
||||||
|
if (items[i].name != "Backstage passes to a TAFKAL80ETC concert")
|
||||||
|
{
|
||||||
|
if (items[i].quality > 0)
|
||||||
|
{
|
||||||
|
if (items[i].name != "Sulfuras, Hand of Ragnaros")
|
||||||
|
{
|
||||||
|
items[i].quality = items[i].quality - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
items[i].quality = items[i].quality - items[i].quality;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (items[i].quality < 50)
|
||||||
|
{
|
||||||
|
items[i].quality = items[i].quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
cpp-catch2/src/GildedRose.h
Normal file
24
cpp-catch2/src/GildedRose.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class Item
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
string name;
|
||||||
|
int sellIn;
|
||||||
|
int quality;
|
||||||
|
Item(string name, int sellIn, int quality) : name(name), sellIn(sellIn), quality(quality)
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
class GildedRose
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
vector<Item> & items;
|
||||||
|
GildedRose(vector<Item> & items);
|
||||||
|
|
||||||
|
void updateQuality();
|
||||||
|
};
|
||||||
|
|
||||||
1
cpp-catch2/test/ApprovalTests.hpp
Normal file
1
cpp-catch2/test/ApprovalTests.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "ApprovalTests.v.10.0.0.hpp"
|
||||||
14
cpp-catch2/test/gildedrose_catch.cpp
Normal file
14
cpp-catch2/test/gildedrose_catch.cpp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include "catch2/catch.hpp"
|
||||||
|
#include "ApprovalTests.hpp"
|
||||||
|
|
||||||
|
#include "GildedRose.h"
|
||||||
|
|
||||||
|
TEST_CASE("Foo") {
|
||||||
|
|
||||||
|
vector<Item> items;
|
||||||
|
items.push_back(Item("foo", 0, 0));
|
||||||
|
GildedRose app(items);
|
||||||
|
app.updateQuality();
|
||||||
|
REQUIRE("fixme" == app.items[0].name);
|
||||||
|
|
||||||
|
}
|
||||||
5
cpp-catch2/test/main.cpp
Normal file
5
cpp-catch2/test/main.cpp
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#define CATCH_CONFIG_MAIN
|
||||||
|
#define APPROVALS_CATCH
|
||||||
|
|
||||||
|
#include "catch2/catch.hpp"
|
||||||
|
#include "ApprovalTests.hpp"
|
||||||
Loading…
Reference in New Issue
Block a user