From 6504f38ebe7e0c24c5f3802ed492daf2aad00309 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Tue, 2 Oct 2018 20:58:01 +0300 Subject: [PATCH 01/95] RED --- tdd_intro/homework/01_leap_year/test.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index 4f186c8b..5e457262 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -13,3 +13,11 @@ If your language provides a method in the standard library that does this look-u */ #include + + + + +TEST(LeapYear, DevidedBy4) +{ + ASSERT_TRUE(LeapYear(4)); +} From 1fba6cee2919b17fac1614f642e1fc95f8090511 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Tue, 2 Oct 2018 21:00:54 +0300 Subject: [PATCH 02/95] RED --- tdd_intro/homework/01_leap_year/test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index 5e457262..c8e11e76 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -16,7 +16,6 @@ If your language provides a method in the standard library that does this look-u - TEST(LeapYear, DevidedBy4) { ASSERT_TRUE(LeapYear(4)); From c035067f6b7b6f3e2136a9528864e5685506cfae Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Tue, 2 Oct 2018 21:07:15 +0300 Subject: [PATCH 03/95] Green --- tdd_intro/homework/01_leap_year/test.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index c8e11e76..9c8a77bb 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -14,7 +14,13 @@ If your language provides a method in the standard library that does this look-u #include - +bool LeapYear(int year) +{ + if (year%4 == 0) + { + return true; + } +} TEST(LeapYear, DevidedBy4) { From b7958867fb7b6883f71df9091e4189bad479ea0d Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Tue, 2 Oct 2018 21:14:42 +0300 Subject: [PATCH 04/95] Red --- tdd_intro/homework/01_leap_year/test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index 9c8a77bb..693796f0 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -20,9 +20,15 @@ bool LeapYear(int year) { return true; } + return false; } TEST(LeapYear, DevidedBy4) { ASSERT_TRUE(LeapYear(4)); } + +TEST(LeapYear, DevidedBy100) +{ + ASSERT_FALSE(LeapYear(100)); +} From 553eac29dd0ad0953ca2ee04aa8e9bffb119b0aa Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Tue, 2 Oct 2018 21:15:39 +0300 Subject: [PATCH 05/95] Green --- tdd_intro/homework/01_leap_year/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index 693796f0..f986a8cd 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -16,6 +16,10 @@ If your language provides a method in the standard library that does this look-u bool LeapYear(int year) { + if (year%100 == 0) + { + return false; + } if (year%4 == 0) { return true; From 6e72467fac2f530a4c9d1de212409fec6e1f438e Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Tue, 2 Oct 2018 21:17:15 +0300 Subject: [PATCH 06/95] Red --- tdd_intro/homework/01_leap_year/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index f986a8cd..9ca987c2 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -36,3 +36,8 @@ TEST(LeapYear, DevidedBy100) { ASSERT_FALSE(LeapYear(100)); } + +TEST(LeapYear, DevidedBy400) +{ + ASSERT_TRUE(LeapYear(400)); +} From 03397ddbe6618046fedca06287b69808cf50705a Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Tue, 2 Oct 2018 21:18:27 +0300 Subject: [PATCH 07/95] Green --- tdd_intro/homework/01_leap_year/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index 9ca987c2..436c9b13 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -16,6 +16,10 @@ If your language provides a method in the standard library that does this look-u bool LeapYear(int year) { + if (year%400 == 0) + { + return true; + } if (year%100 == 0) { return false; From 35d5e67675b3eed09006f146361b9fb444e7c42c Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Tue, 2 Oct 2018 21:21:17 +0300 Subject: [PATCH 08/95] Green --- tdd_intro/homework/01_leap_year/test.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index 436c9b13..6b243f52 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -45,3 +45,13 @@ TEST(LeapYear, DevidedBy400) { ASSERT_TRUE(LeapYear(400)); } + +TEST(LeapYear, RandomYearsTest) +{ + ASSERT_TRUE(LeapYear(2000)); + ASSERT_FALSE(LeapYear(1000)); + ASSERT_TRUE(LeapYear(1996)); + ASSERT_FALSE(LeapYear(1997)); + ASSERT_TRUE(LeapYear(2020)); + ASSERT_FALSE(LeapYear(2018)); +} From c823ffb6e5c99f911504914a2a09221b522fd818 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Tue, 2 Oct 2018 21:22:26 +0300 Subject: [PATCH 09/95] Green --- tdd_intro/homework/01_leap_year/test.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index 6b243f52..9f60fafd 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -54,4 +54,6 @@ TEST(LeapYear, RandomYearsTest) ASSERT_FALSE(LeapYear(1997)); ASSERT_TRUE(LeapYear(2020)); ASSERT_FALSE(LeapYear(2018)); + ASSERT_TRUE(LeapYear(-2000)); + ASSERT_FALSE(LeapYear(-1000)); } From 1161ec0f440dcae85c8b0c60ac3d59fa34801307 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:01:32 +0300 Subject: [PATCH 10/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 17503028..0f7b983f 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -16,3 +16,11 @@ The last place in a ternary number is the 1's place. The second to last is the 3 If your language provides a method in the standard library to perform the conversion, pretend it doesn't exist and implement it yourself. */ + +#include + + +TEST(TernaryNumbers, EmptyString) +{ + ASSERT_EQ(0, DemicalView("")); +} From 20c6e9d92eecf5e1c2ccb846743b8c081c88082d Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:18:21 +0300 Subject: [PATCH 11/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 0f7b983f..c5123bed 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -19,6 +19,10 @@ If your language provides a method in the standard library to perform the conver #include +int DemicalView(std::string str) +{ + return 0; +} TEST(TernaryNumbers, EmptyString) { From 5a8042ed03e7acb85bad01dac4938b93d4887600 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:20:23 +0300 Subject: [PATCH 12/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index c5123bed..081a6554 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -28,3 +28,8 @@ TEST(TernaryNumbers, EmptyString) { ASSERT_EQ(0, DemicalView("")); } + +TEST(TernaryNumbers, EqualOne) +{ + ASSERT_EQ(1, DemicalView("1")); +} From 86ac94c65cf03721bd2fe3450035e3a6690e9533 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:22:25 +0300 Subject: [PATCH 13/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 081a6554..c68f93f1 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -21,6 +21,10 @@ If your language provides a method in the standard library to perform the conver int DemicalView(std::string str) { + if (str == "1") + { + return 1; + } return 0; } From d3940b85f12e0d44bad0f5a984ea042752916377 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:23:18 +0300 Subject: [PATCH 14/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index c68f93f1..50e53d79 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -37,3 +37,8 @@ TEST(TernaryNumbers, EqualOne) { ASSERT_EQ(1, DemicalView("1")); } + +TEST(TernaryNumbers, EqualTwo) +{ + ASSERT_EQ(2, DemicalView("2")); +} From 37b3eca7bc71fd4ea94fc6601db57b8b9c823de6 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:25:07 +0300 Subject: [PATCH 15/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 50e53d79..e6abe59e 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -25,6 +25,15 @@ int DemicalView(std::string str) { return 1; } + if (str == "2") + { + return 2; + } + if (str == "0") + { + return 0; + } + return 0; } From 420c40f7905d0e700edc16a232564b257007feb5 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:27:38 +0300 Subject: [PATCH 16/95] Refactored Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index e6abe59e..96be080f 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -21,19 +21,10 @@ If your language provides a method in the standard library to perform the conver int DemicalView(std::string str) { - if (str == "1") + if (str == "1" || str == "2" || str == "3") { - return 1; + return std::stoi( str ); } - if (str == "2") - { - return 2; - } - if (str == "0") - { - return 0; - } - return 0; } From bce290fe7908731cd674dbbab01eb8e7ff52ddac Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:29:20 +0300 Subject: [PATCH 17/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 96be080f..386ed64b 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -42,3 +42,8 @@ TEST(TernaryNumbers, EqualTwo) { ASSERT_EQ(2, DemicalView("2")); } + +TEST(TernaryNumbers, TwoCharString) +{ + ASSERT_EQ(1, DemicalView("01")); +} From d7cec8e51322ad7035ad0228fc6c477573f9bb9b Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:53:00 +0300 Subject: [PATCH 18/95] Green Signed-off-by: Alexander Potapov --- .../homework/02_ternary_numbers/test.cpp | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 386ed64b..d9afaa21 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -19,13 +19,26 @@ If your language provides a method in the standard library to perform the conver #include -int DemicalView(std::string str) +int OneSignDemicalView(const std::string& oneSign) { - if (str == "1" || str == "2" || str == "3") + if (oneSign == "1" || oneSign == "2" || oneSign == "0") { - return std::stoi( str ); + + return std::stoi( oneSign ); } - return 0; + return -1; +} + +int DemicalView(const std::string& str) +{ + if (str.empty()) + { + return 0; + } + int answer = 0; + answer += OneSignDemicalView(str.substr(str.size() - 1 , 1)); + + return (answer > 0)? answer : 0; } TEST(TernaryNumbers, EmptyString) @@ -43,7 +56,7 @@ TEST(TernaryNumbers, EqualTwo) ASSERT_EQ(2, DemicalView("2")); } -TEST(TernaryNumbers, TwoCharString) +TEST(TernaryNumbers, TwoSignString) { ASSERT_EQ(1, DemicalView("01")); } From 826c85ee20ba0672bea63dad63da9820bf1411e5 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 14:53:58 +0300 Subject: [PATCH 19/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index d9afaa21..f9444b83 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -36,6 +36,7 @@ int DemicalView(const std::string& str) return 0; } int answer = 0; + answer += OneSignDemicalView(str.substr(str.size() - 1 , 1)); return (answer > 0)? answer : 0; @@ -56,7 +57,12 @@ TEST(TernaryNumbers, EqualTwo) ASSERT_EQ(2, DemicalView("2")); } -TEST(TernaryNumbers, TwoSignString) +TEST(TernaryNumbers, TwoSignString01) { ASSERT_EQ(1, DemicalView("01")); } + +TEST(TernaryNumbers, TwoSignString11) +{ + ASSERT_EQ(4, DemicalView("11")); +} From dba60a2602eea7bf8c3b6156955fab9a43d914b9 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 15:02:11 +0300 Subject: [PATCH 20/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index f9444b83..d530018c 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -36,10 +36,11 @@ int DemicalView(const std::string& str) return 0; } int answer = 0; - - answer += OneSignDemicalView(str.substr(str.size() - 1 , 1)); - - return (answer > 0)? answer : 0; + for(size_t i = 1; i <= str.size(); ++i) + { + answer += OneSignDemicalView(str.substr(str.size() - i , 1)) * pow(3, i - 1) ; + } + return (answer > 0) ? answer : 0; } TEST(TernaryNumbers, EmptyString) @@ -62,6 +63,7 @@ TEST(TernaryNumbers, TwoSignString01) ASSERT_EQ(1, DemicalView("01")); } + TEST(TernaryNumbers, TwoSignString11) { ASSERT_EQ(4, DemicalView("11")); From 8a30a05e2932c10cc3322c5327ee4ae95cc812e9 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 10 Oct 2018 15:03:11 +0300 Subject: [PATCH 21/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/02_ternary_numbers/test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index d530018c..8ab93634 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -68,3 +68,9 @@ TEST(TernaryNumbers, TwoSignString11) { ASSERT_EQ(4, DemicalView("11")); } + + +TEST(TernaryNumbers, SpecifcationTest) +{ + ASSERT_EQ(302, DemicalView("102012")); +} From 9ebf07fba3b1be8e53fb9ae7bff0ee84cbef025f Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 09:53:53 +0300 Subject: [PATCH 22/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index cb4b28cb..6b45b100 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -194,3 +194,28 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", " | _| _||_||_ |_ ||_||_|", " ||_ _| | _||_| ||_| _|" }; + +// parse 1 number 0-9 +// right numbers +// wrong numbers + +// parse line +// more than 27 symbols in string +// less than 27 symbols in string +// 27 symbols in string + +// parse several structs + + + +// assumptions: +// one function, take vector of Display and return vector of int +// second function, take 1 Display and return one int. +// third function, take 1 Digit and return one int. +// No infirmation about wrong entry* + + +TEST(Bank, NumberZero) +{ + ASSERT_EQ(0, ZipNumberParser(s_digit0)); +} From 19f4597d8213da8396d3f2d58a1f9a6da220260b Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 09:55:37 +0300 Subject: [PATCH 23/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 6b45b100..a934041a 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -215,6 +215,13 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", // No infirmation about wrong entry* +int ZipNumberParser(const Digit& digit) +{ + return 0; +} + + + TEST(Bank, NumberZero) { ASSERT_EQ(0, ZipNumberParser(s_digit0)); From ac52868b6d05d2ff8d71630c13f9bdf56b3d6fba Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 09:57:16 +0300 Subject: [PATCH 24/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index a934041a..0a670e9f 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -226,3 +226,8 @@ TEST(Bank, NumberZero) { ASSERT_EQ(0, ZipNumberParser(s_digit0)); } + +TEST(Bank, NumberOne) +{ + ASSERT_EQ(1, ZipNumberParser(s_digit1)); +} From e2af60ab5befd947511f5abe431b68ec694f9b85 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:02:07 +0300 Subject: [PATCH 25/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 0a670e9f..abc2320d 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -212,12 +212,19 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", // one function, take vector of Display and return vector of int // second function, take 1 Display and return one int. // third function, take 1 Digit and return one int. -// No infirmation about wrong entry* +// No information about wrong entry* int ZipNumberParser(const Digit& digit) { - return 0; + if(digit.lines[0] == s_digit0.lines[0] && digit.lines[1] == s_digit0.lines[1] && digit.lines[2] == s_digit0.lines[2]) + { + return 0; + } + if(digit.lines[0] == s_digit1.lines[0] && digit.lines[1] == s_digit1.lines[1] && digit.lines[2] == s_digit1.lines[2]) + { + return 1; + } } From ff3a01feda8d796ff0cbbea373ac65a46bbb34be Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:05:11 +0300 Subject: [PATCH 26/95] REFACTORING Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index abc2320d..0c251fc9 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -214,14 +214,18 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", // third function, take 1 Digit and return one int. // No information about wrong entry* +bool CompareDigits(const Digit& left, const Digit& right) +{ + return left.lines[0] == right.lines[0] && left.lines[1] == right.lines[1] && left.lines[2] == right.lines[2]; +} int ZipNumberParser(const Digit& digit) { - if(digit.lines[0] == s_digit0.lines[0] && digit.lines[1] == s_digit0.lines[1] && digit.lines[2] == s_digit0.lines[2]) + if( CompareDigits(digit, s_digit0) ) { return 0; } - if(digit.lines[0] == s_digit1.lines[0] && digit.lines[1] == s_digit1.lines[1] && digit.lines[2] == s_digit1.lines[2]) + if( CompareDigits(digit, s_digit1) ) { return 1; } From 42618c4e3fd661a8146750c99f223631478e469a Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:14:38 +0300 Subject: [PATCH 27/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 0c251fc9..cf1edc5e 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -86,6 +86,7 @@ Example input and output */ #include #include +#include const unsigned short g_linesInDigit = 3; struct Digit @@ -242,3 +243,8 @@ TEST(Bank, NumberOne) { ASSERT_EQ(1, ZipNumberParser(s_digit1)); } + +TEST(Bank, NumberThree) +{ + ASSERT_EQ(3, ZipNumberParser(s_digit3)); +} From 2bba6aa8cdca6c1a442e7a574765a8fa0545b206 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:15:17 +0300 Subject: [PATCH 28/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index cf1edc5e..4c57cbdf 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -230,6 +230,10 @@ int ZipNumberParser(const Digit& digit) { return 1; } + if( CompareDigits(digit, s_digit3) ) + { + return 3; + } } From a2bfbbc2daa09c5c944bc992ed8c3c4da86a7990 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:29:27 +0300 Subject: [PATCH 29/95] REFACTORED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 30 ++++++++++++++++--------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 4c57cbdf..078ea226 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -87,6 +87,7 @@ Example input and output #include #include #include +#include const unsigned short g_linesInDigit = 3; struct Digit @@ -222,18 +223,27 @@ bool CompareDigits(const Digit& left, const Digit& right) int ZipNumberParser(const Digit& digit) { - if( CompareDigits(digit, s_digit0) ) + std::vector allNumbers; + allNumbers.reserve(10); + allNumbers.push_back(s_digit0); + allNumbers.push_back(s_digit1); + allNumbers.push_back(s_digit2); + allNumbers.push_back(s_digit3); + allNumbers.push_back(s_digit4); + allNumbers.push_back(s_digit5); + allNumbers.push_back(s_digit6); + allNumbers.push_back(s_digit7); + allNumbers.push_back(s_digit8); + allNumbers.push_back(s_digit9); + + for (int i = 0; i < allNumbers.size(); ++i) { - return 0; - } - if( CompareDigits(digit, s_digit1) ) - { - return 1; - } - if( CompareDigits(digit, s_digit3) ) - { - return 3; + if ( CompareDigits(digit, allNumbers[i]) ) + { + return i; + } } + return -1; } From 7682935c4631e0d50d67da2730ac50533d99176f Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:32:42 +0300 Subject: [PATCH 30/95] GREEN wrongNumber Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 078ea226..0a1df499 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -141,6 +141,10 @@ const Digit s_digit9 = { " _ ", "|_|", " _|" }; +const Digit s_noDigit = { " _ ", + "|_|", + " _ " + }; const Display s_displayAll0 = { " _ _ _ _ _ _ _ _ _ ", "| || || || || || || || || |", @@ -262,3 +266,8 @@ TEST(Bank, NumberThree) { ASSERT_EQ(3, ZipNumberParser(s_digit3)); } + +TEST(Bank, WrongNumber) +{ + ASSERT_EQ(-1, ZipNumberParser(s_noDigit)); +} From 02f2d9cba203f854a0d128f9c77d5b39149883c5 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:34:37 +0300 Subject: [PATCH 31/95] GREEN EmptyDigit Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 0a1df499..d02ba0bd 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -271,3 +271,9 @@ TEST(Bank, WrongNumber) { ASSERT_EQ(-1, ZipNumberParser(s_noDigit)); } + +TEST(Bank, EmptyDigit) +{ + Digit emptyDigit{"", "", ""}; + ASSERT_EQ(-1, ZipNumberParser(emptyDigit)); +} From 9c8e7874140ed24227a40c320960695ac7fead30 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:37:37 +0300 Subject: [PATCH 32/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index d02ba0bd..c2d903b8 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -216,7 +216,7 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", // assumptions: // one function, take vector of Display and return vector of int -// second function, take 1 Display and return one int. +// second function, take 1 Display and return one string with 9 digit. // third function, take 1 Digit and return one int. // No information about wrong entry* @@ -277,3 +277,8 @@ TEST(Bank, EmptyDigit) Digit emptyDigit{"", "", ""}; ASSERT_EQ(-1, ZipNumberParser(emptyDigit)); } + +TEST(Bank, LineOfZero) +{ + ASSERT_EQ("000000000", ZipLineParser(s_displayAll0)); +} From d2109260688cdb764af8f36b6a53730b56b5c9f7 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:39:02 +0300 Subject: [PATCH 33/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index c2d903b8..e4528000 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -250,6 +250,10 @@ int ZipNumberParser(const Digit& digit) return -1; } +std::string ZipLineParser(const Display& display) +{ + return "000000000"; +} TEST(Bank, NumberZero) From 6b116930f50d3830cfea098283b2c42805f75745 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:40:48 +0300 Subject: [PATCH 34/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index e4528000..15739637 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -286,3 +286,8 @@ TEST(Bank, LineOfZero) { ASSERT_EQ("000000000", ZipLineParser(s_displayAll0)); } + +TEST(Bank, LineOfOne) +{ + ASSERT_EQ("111111111", ZipLineParser(s_displayAll1)); +} From 77c0cc5f2752d1003bf1cfe659a916db885dc0fd Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:48:44 +0300 Subject: [PATCH 35/95] RED Change test. So large step. Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 15739637..f44f77eb 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -278,7 +278,7 @@ TEST(Bank, WrongNumber) TEST(Bank, EmptyDigit) { - Digit emptyDigit{"", "", ""}; + const Digit emptyDigit{"", "", ""}; ASSERT_EQ(-1, ZipNumberParser(emptyDigit)); } @@ -287,7 +287,8 @@ TEST(Bank, LineOfZero) ASSERT_EQ("000000000", ZipLineParser(s_displayAll0)); } -TEST(Bank, LineOfOne) +TEST(Bank, emptyDisplay) { - ASSERT_EQ("111111111", ZipLineParser(s_displayAll1)); + Display emptyDisplay{"", "", ""}; + ASSERT_EQ("-1", ZipLineParser(emptyDisplay)); } From 1dba3c5ba3e05b964fe53d003ffcf0f885e7d8d5 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:50:40 +0300 Subject: [PATCH 36/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index f44f77eb..51ffc586 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -252,6 +252,10 @@ int ZipNumberParser(const Digit& digit) std::string ZipLineParser(const Display& display) { + if (display.lines[0].size() != 27 || display.lines[1].size() != 27 || display.lines[2].size() != 27) + { + return "-1"; + } return "000000000"; } From cd01843d9e711295b3365a77fa27ea226628714f Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:52:50 +0300 Subject: [PATCH 37/95] GREEN largeDisplay Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 51ffc586..6b3ae258 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -296,3 +296,11 @@ TEST(Bank, emptyDisplay) Display emptyDisplay{"", "", ""}; ASSERT_EQ("-1", ZipLineParser(emptyDisplay)); } + +TEST(Bank, largeDisplay) +{ + Display largeDisplay{"______________________________", + "___________________________", + "___________________________"}; + ASSERT_EQ("-1", ZipLineParser(largeDisplay)); +} From 0ff6185171051a87beb763bc1497ba51ce324bc5 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 10:54:58 +0300 Subject: [PATCH 38/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 6b3ae258..79e889cd 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -204,6 +204,7 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", // parse 1 number 0-9 // right numbers // wrong numbers +// empty digit // parse line // more than 27 symbols in string @@ -304,3 +305,7 @@ TEST(Bank, largeDisplay) "___________________________"}; ASSERT_EQ("-1", ZipLineParser(largeDisplay)); } +TEST(Bank, LineOf1) +{ + ASSERT_EQ("111111111", ZipLineParser(s_displayAll1)); +} From 379997a37a0a8666adf13113c40a7bc4026d2dc6 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:05:46 +0300 Subject: [PATCH 39/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 79e889cd..74f1e907 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -257,6 +257,10 @@ std::string ZipLineParser(const Display& display) { return "-1"; } + if (display.lines[0] == s_displayAll1.lines[0] && display.lines[1] == s_displayAll1.lines[1] && display.lines[2] == s_displayAll1.lines[2] ) + { + return "111111111"; + } return "000000000"; } From b4bcbf1e0561ebb644c155174a6179a033212faa Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:06:29 +0300 Subject: [PATCH 40/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 74f1e907..1515cb4c 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -313,3 +313,8 @@ TEST(Bank, LineOf1) { ASSERT_EQ("111111111", ZipLineParser(s_displayAll1)); } + +TEST(Bank, LineOf2) +{ + ASSERT_EQ("222222222", ZipLineParser(s_displayAll2)); +} From 8988a66b64ade595c13ee6f74c6ad54924e43be7 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:07:14 +0300 Subject: [PATCH 41/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 1515cb4c..af1c246d 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -261,6 +261,10 @@ std::string ZipLineParser(const Display& display) { return "111111111"; } + if (display.lines[0] == s_displayAll2.lines[0] && display.lines[1] == s_displayAll2.lines[1] && display.lines[2] == s_displayAll2.lines[2] ) + { + return "222222222"; + } return "000000000"; } From 210e8a5fccab90396ea56d70d101a932727b6ae5 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:24:21 +0300 Subject: [PATCH 42/95] REFACTORING Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index af1c246d..b00085ab 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -257,15 +257,23 @@ std::string ZipLineParser(const Display& display) { return "-1"; } - if (display.lines[0] == s_displayAll1.lines[0] && display.lines[1] == s_displayAll1.lines[1] && display.lines[2] == s_displayAll1.lines[2] ) + std::string answer=""; + for(int i = 0; i < 27; i+=3) { - return "111111111"; - } - if (display.lines[0] == s_displayAll2.lines[0] && display.lines[1] == s_displayAll2.lines[1] && display.lines[2] == s_displayAll2.lines[2] ) - { - return "222222222"; + Digit tempDigit{ std::string(display.lines[0].begin(),display.lines[0].begin()+3), + std::string(display.lines[1].begin(),display.lines[1].begin()+3), + std::string(display.lines[2].begin(),display.lines[2].begin()+3)}; + int temp = ZipNumberParser(tempDigit); + if(temp == -1) + { + return "-1"; + } + else + { + answer = answer + std::to_string(temp); + } } - return "000000000"; + return answer; } From f937abc77d3015ede76fb512520ee653de019f20 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:27:41 +0300 Subject: [PATCH 43/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index b00085ab..9ed254ab 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -330,3 +330,10 @@ TEST(Bank, LineOf2) { ASSERT_EQ("222222222", ZipLineParser(s_displayAll2)); } + +TEST(Bank, Line123456789) +{ + ASSERT_EQ("123456789", ZipLineParser(s_display123456789)); +} + + From 0de9281f761eeb5bc4c867f675d9ebbf5ac4b1d4 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:28:31 +0300 Subject: [PATCH 44/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 9ed254ab..24c466f0 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -260,9 +260,9 @@ std::string ZipLineParser(const Display& display) std::string answer=""; for(int i = 0; i < 27; i+=3) { - Digit tempDigit{ std::string(display.lines[0].begin(),display.lines[0].begin()+3), - std::string(display.lines[1].begin(),display.lines[1].begin()+3), - std::string(display.lines[2].begin(),display.lines[2].begin()+3)}; + Digit tempDigit{ std::string(display.lines[0].begin() + i,display.lines[0].begin()+3 + i), + std::string(display.lines[1].begin() + i,display.lines[1].begin()+3 + i), + std::string(display.lines[2].begin() + i,display.lines[2].begin()+3 + i)}; int temp = ZipNumberParser(tempDigit); if(temp == -1) { From 3e9433da608b9919f52c8d183804884981621b9d Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:32:43 +0300 Subject: [PATCH 45/95] GREEN wrongDisplay Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 24c466f0..81e25639 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -200,6 +200,10 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ", " | _| _||_||_ |_ ||_||_|", " ||_ _| | _||_| ||_| _|" }; +const Display s_wrongDisplay = { " _ _ _ _ _ _ _ _ _ ", + "|_||_||_||_||_||_||_||_||_|", + " _| _| _| _ _| _| _| _| _|" +}; // parse 1 number 0-9 // right numbers @@ -336,4 +340,10 @@ TEST(Bank, Line123456789) ASSERT_EQ("123456789", ZipLineParser(s_display123456789)); } +TEST(Bank, WrongDispley) +{ + ASSERT_EQ("-1", ZipLineParser(s_wrongDisplay)); +} + + From 523f777cda3af6cfd609ac930e3e62cd33d29e7f Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:35:48 +0300 Subject: [PATCH 46/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 81e25639..bc71b9ca 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -220,7 +220,7 @@ const Display s_wrongDisplay = { " _ _ _ _ _ _ _ _ _ ", // assumptions: -// one function, take vector of Display and return vector of int +// one function, take vector of Display and return vector of string // second function, take 1 Display and return one string with 9 digit. // third function, take 1 Digit and return one int. // No information about wrong entry* @@ -345,5 +345,16 @@ TEST(Bank, WrongDispley) ASSERT_EQ("-1", ZipLineParser(s_wrongDisplay)); } +TEST(Bank, TwoLines) +{ + std::vector linesOfDisplay; + linesOfDisplay.push_back(s_displayAll0); + linesOfDisplay.push_back(s_displayAll1); + std::vector answer; + answer.push_back("000000000"); + answer.push_back("111111111"); + ASSERT_EQ(answer, ZipVectorParser(linesOfDisplay)); +} + From b3d10004e0fc1ff95f49b55fa4b22667da42625a Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:38:01 +0300 Subject: [PATCH 47/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index bc71b9ca..22095330 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -280,6 +280,14 @@ std::string ZipLineParser(const Display& display) return answer; } +std::vector ZipVectorParser(std::vector displays) +{ + std::vector answer; + answer.push_back("000000000"); + answer.push_back("111111111"); + return answer; +} + TEST(Bank, NumberZero) { From c7b98329a2d80d14485cbfaf4047844b4e8922a5 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:39:43 +0300 Subject: [PATCH 48/95] RED Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 22095330..ef1d3667 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -364,5 +364,18 @@ TEST(Bank, TwoLines) ASSERT_EQ(answer, ZipVectorParser(linesOfDisplay)); } +TEST(Bank, ThreeLines) +{ + std::vector linesOfDisplay; + linesOfDisplay.push_back(s_displayAll0); + linesOfDisplay.push_back(s_displayAll1); + linesOfDisplay.push_back(s_display123456789); + std::vector answer; + answer.push_back("000000000"); + answer.push_back("111111111"); + answer.push_back("123456789"); + ASSERT_EQ(answer, ZipVectorParser(linesOfDisplay)); +} + From ed19e6358bfd300de2f256dcf8090ea99fc4e1ce Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:46:05 +0300 Subject: [PATCH 49/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index ef1d3667..7faab400 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -283,8 +283,19 @@ std::string ZipLineParser(const Display& display) std::vector ZipVectorParser(std::vector displays) { std::vector answer; - answer.push_back("000000000"); - answer.push_back("111111111"); + if(displays.size() == 2) + { + answer.push_back("000000000"); + answer.push_back("111111111"); + } + else + { + answer.push_back("000000000"); + answer.push_back("111111111"); + answer.push_back("123456789"); + } + + return answer; } From b484a4b60f8f38a027f6f96bc00ce904cf9a2e20 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:47:42 +0300 Subject: [PATCH 50/95] REFACTORING Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 7faab400..2ec85bc8 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -283,19 +283,10 @@ std::string ZipLineParser(const Display& display) std::vector ZipVectorParser(std::vector displays) { std::vector answer; - if(displays.size() == 2) + for(auto disp:displays) { - answer.push_back("000000000"); - answer.push_back("111111111"); + answer.push_back(ZipLineParser(disp)); } - else - { - answer.push_back("000000000"); - answer.push_back("111111111"); - answer.push_back("123456789"); - } - - return answer; } From f10a8dd7c47a0faa5d119d1298bc6ea010189d78 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 17 Oct 2018 11:49:23 +0300 Subject: [PATCH 51/95] GREEN Signed-off-by: Alexander Potapov --- tdd_intro/homework/03_bank_ocr/test.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/03_bank_ocr/test.cpp b/tdd_intro/homework/03_bank_ocr/test.cpp index 2ec85bc8..06d3f3cc 100644 --- a/tdd_intro/homework/03_bank_ocr/test.cpp +++ b/tdd_intro/homework/03_bank_ocr/test.cpp @@ -379,5 +379,16 @@ TEST(Bank, ThreeLines) ASSERT_EQ(answer, ZipVectorParser(linesOfDisplay)); } - +TEST(Bank, ThreeLinesWithWrongDisplay) +{ + std::vector linesOfDisplay; + linesOfDisplay.push_back(s_displayAll0); + linesOfDisplay.push_back(s_wrongDisplay); + linesOfDisplay.push_back(s_display123456789); + std::vector answer; + answer.push_back("000000000"); + answer.push_back("-1"); + answer.push_back("123456789"); + ASSERT_EQ(answer, ZipVectorParser(linesOfDisplay)); +} From 679c5d59ff0e5f638e9ef807ff6670bfb48eb5be Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 31 Oct 2018 11:49:01 +0200 Subject: [PATCH 52/95] Add files Signed-off-by: Alexander Potapov --- .../homework/05_word_wrapp/05_word_wrapp.pro | 9 ++ tdd_intro/homework/05_word_wrapp/test.cpp | 96 +++++++++++++++++++ .../{05_coffee => 06_coffee}/05_coffee.pro | 0 .../{05_coffee => 06_coffee}/test.cpp | 0 tdd_intro/homework/homework.pro | 3 +- 5 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro create mode 100644 tdd_intro/homework/05_word_wrapp/test.cpp rename tdd_intro/homework/{05_coffee => 06_coffee}/05_coffee.pro (100%) rename tdd_intro/homework/{05_coffee => 06_coffee}/test.cpp (100%) diff --git a/tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro b/tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro new file mode 100644 index 00000000..c7fec38c --- /dev/null +++ b/tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro @@ -0,0 +1,9 @@ +include(../../gtest.pri) + +TEMPLATE = app +CONFIG += console c++11 +CONFIG -= app_bundle +CONFIG -= qt + +SOURCES += \ + test.cpp diff --git a/tdd_intro/homework/05_word_wrapp/test.cpp b/tdd_intro/homework/05_word_wrapp/test.cpp new file mode 100644 index 00000000..77e47210 --- /dev/null +++ b/tdd_intro/homework/05_word_wrapp/test.cpp @@ -0,0 +1,96 @@ +/* +Write a function, that is given a string and a length limit, splits provided string into sequence of string, +where length of each string is not more, than provided limit. If there are spaces under provided limit - +last space should be used to wrapp this line. If there are no spaces - wrapp it on provided length limit. + +Example: +When pos is specified, the search only includes sequences of characters that begin at or before position pos, +ignoring any possible match beginning after pos + +"When pos is specified, the", +"search only includes sequences", +"of characters that begin at or", +"before position pos, ignoring", +"any possible match beginning", +"after pos." +*/ + +#include +#include + +// empty string +// string shorter than wrap number +// word longer than wrap number +// word much longer than wrap number (more than 2 strings) +// string longer than wrap number + +// string wrapped by several whitespaces (less than wrapLength) +// string wrapped by several whitespaces (more than wrapLength) +// only whitespaces in string + +using WrappedStrings = std::vector; + +WrappedStrings WrapString(const std::string& str, size_t wrapLength) +{ + WrappedStrings result; + for(size_t i = 0; i < str.length(); i += wrapLength) + { + std::string cur = str.substr(i, wrapLength); + if (cur.back() == ' ') + { + cur.pop_back(); + } + + if(!cur.empty() && cur.front() == ' ') + { + cur = cur.substr(1); + } + + if(!cur.empty()) + { + result.push_back(cur); + } + } + + return result; +} + +TEST(WrapString, EmptyString) +{ + ASSERT_EQ(WrappedStrings(), WrapString("", 25)); +} + +TEST(WrapString, StringShorterWrapNumber) +{ + ASSERT_EQ(WrappedStrings{"asdf"}, WrapString("asdf", 8)); +} + +TEST(WrapString, StringLongerThanWrapNumber) +{ + WrappedStrings expected = {"asd", "f"}; + ASSERT_EQ(expected, WrapString("asdf", 3)); +} + +TEST(WrapString, StringLongerThanWrapNumberSeveralParts) +{ + WrappedStrings expected = {"12", "34", "56"}; + ASSERT_EQ(expected, WrapString("123456", 2)); +} + +TEST(WrapString, MultipleWordsLonger) +{ + WrappedStrings expected = {"1", "2"}; + ASSERT_EQ(expected, WrapString("1 2", 1)); +} + +TEST(WrapString, SpaceStringEnd) +{ + WrappedStrings expected = {"1", "2"}; + ASSERT_EQ(expected, WrapString("1 2", 2)); +} + +TEST(WrapString, StringWrappedBySeveralWhitespace) +{ + WrappedStrings expected = {"12", "34"}; + ASSERT_EQ(expected, WrapString("12 34", 3)); +} diff --git a/tdd_intro/homework/05_coffee/05_coffee.pro b/tdd_intro/homework/06_coffee/05_coffee.pro similarity index 100% rename from tdd_intro/homework/05_coffee/05_coffee.pro rename to tdd_intro/homework/06_coffee/05_coffee.pro diff --git a/tdd_intro/homework/05_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp similarity index 100% rename from tdd_intro/homework/05_coffee/test.cpp rename to tdd_intro/homework/06_coffee/test.cpp diff --git a/tdd_intro/homework/homework.pro b/tdd_intro/homework/homework.pro index 5824b2ae..cf6c01b9 100644 --- a/tdd_intro/homework/homework.pro +++ b/tdd_intro/homework/homework.pro @@ -5,4 +5,5 @@ SUBDIRS += \ 02_ternary_numbers \ 03_bank_ocr \ 04_weather_client \ - 05_coffee + 05_word_wrapp \ + 06_coffee From 372a4e5327abe105df918e11b28266f15a14f055 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 14:48:30 +0200 Subject: [PATCH 53/95] add changes from lesson Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 92 +++++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 4 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 919530d9..0b1d87f5 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -1,16 +1,13 @@ /* We have to develop a coffee machine with TDD. The machine uses the automated source of ingredients, which implements the interface ISourceOfIngredients. - Our machine should be able to produce the coffee accordingly to the next receipts: - americano: water & coffee 1:2 or 1:3. Water temp 60C - cappuccino - milk & coffee & milk foam 1:3, 1:3, 1:3. Water temp 80C - latte - milk & coffee & milk foam 1:4, 1:2, 1:4. Water temp 90C - marochino - chocolate & coffee & milk foam, 1:4, 1:4, 1:4 and 1:4 is empty - We have 2 possible sizes of the cup: - little 100 gram - big 140 gram - Implement worked coffee machine using ISourceOfIngredients to controll the process of coffee production. */ @@ -20,7 +17,7 @@ Implement worked coffee machine using ISourceOfIngredients to controll the proce class ISourceOfIngredients { public: - ~ISourceOfIngredients() {} + virtual ~ISourceOfIngredients() {} virtual void SetCupSize(int gram) = 0; virtual void AddWater(int gram, int temperature) = 0; virtual void AddSugar(int gram) = 0; @@ -30,3 +27,90 @@ class ISourceOfIngredients virtual void AddChocolate(int gram) = 0; virtual void AddCream(int gram) = 0; }; + + +enum Cup +{ + Normal, + Big +}; + +enum Coffee +{ + Americano +}; + +class MockSourceOfIngredients : public ISourceOfIngredients +{ +public: + MOCK_METHOD1(SetCupSize, void(int)); + MOCK_METHOD2(AddWater, void(int, int)); + MOCK_METHOD1(AddSugar, void(int)); + MOCK_METHOD1(AddCoffee, void(int)); + MOCK_METHOD1(AddMilk, void(int)); + MOCK_METHOD1(AddMilkFoam, void(int)); + MOCK_METHOD1(AddChocolate, void(int)); + MOCK_METHOD1(AddCream, void(int)); +}; + +class CoffeeMachine +{ +public: + CoffeeMachine(ISourceOfIngredients& source) : m_source(source) + { + + } + void CreateCoffee(const Cup cup, const Coffee coffee) + { + m_source.AddCoffee(0); + m_source.SetCupSize(0); + m_source.AddWater(0, 0); + } +private: + ISourceOfIngredients& m_source; +}; + + +// Architecture +// Class CoffeMachine +// Class-Mock SourceOfIngredients + +// - americano: water & coffee 1:2 or 1:3. Water temp 60C + +// Tests list: +// 1. americano + 100 gram = 1 coffe +// 2. americano + 140 gram = 1 large coffee +// 3. AddCoffee, SetCupSize and AddWater calls once +// 4. Check parameters +// 5. Same for each recipe + +TEST(CoffeeMachine, CoffemachineIsHere) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); +} + +TEST(CoffeeMachine, CallsImportantThings) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(::testing::_)).Times(1); + EXPECT_CALL(si, SetCupSize(::testing::_)).Times(1); + EXPECT_CALL(si, AddWater(::testing::_, ::testing::_)).Times(1); + + cm.CreateCoffee(Cup::Normal, Coffee::Americano); +} + +//- americano: water & coffee 1:3 Water temp 60C +TEST(CoffeeMachine, Americano) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(75)).Times(1); + EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, AddWater(25, 60)).Times(1); + + cm.CreateCoffee(Cup::Normal, Coffee::Americano); +} From b6fa14bcdf4f2871f3c486eb39cd6fe1a91db4eb Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 14:55:42 +0200 Subject: [PATCH 54/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 0b1d87f5..5088e236 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -31,8 +31,8 @@ class ISourceOfIngredients enum Cup { - Normal, - Big + Normal = 100, + Big = 140 }; enum Coffee @@ -62,9 +62,9 @@ class CoffeeMachine } void CreateCoffee(const Cup cup, const Coffee coffee) { - m_source.AddCoffee(0); - m_source.SetCupSize(0); - m_source.AddWater(0, 0); + m_source.AddCoffee(75); + m_source.SetCupSize(cup); + m_source.AddWater(25, 60); } private: ISourceOfIngredients& m_source; @@ -103,6 +103,7 @@ TEST(CoffeeMachine, CallsImportantThings) } //- americano: water & coffee 1:3 Water temp 60C +// cup size = 100 ml: 25 coffee + 75 water with 60C TEST(CoffeeMachine, Americano) { MockSourceOfIngredients si; From 5afdc6bec4fa7b63ef90a75fbc452f41ed99fdb0 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:02:27 +0200 Subject: [PATCH 55/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 5088e236..b0407d12 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -37,7 +37,8 @@ enum Cup enum Coffee { - Americano + Americano, + Cappuccino }; class MockSourceOfIngredients : public ISourceOfIngredients @@ -104,7 +105,7 @@ TEST(CoffeeMachine, CallsImportantThings) //- americano: water & coffee 1:3 Water temp 60C // cup size = 100 ml: 25 coffee + 75 water with 60C -TEST(CoffeeMachine, Americano) +TEST(CoffeeMachine, Americano100ml) { MockSourceOfIngredients si; CoffeeMachine cm(si); @@ -115,3 +116,19 @@ TEST(CoffeeMachine, Americano) cm.CreateCoffee(Cup::Normal, Coffee::Americano); } + +// cappuccino - milk & coffee & milk foam 1:3, 1:3, 1:3. Water temp 80C +// cup size = 100 ml: 25 milk + 25 coffee + 25 milk foam + 25 water 80C +TEST(CoffeeMachine, Cappuccino100ml) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(25)).Times(1); + EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, AddWater(25, 80)).Times(1); + EXPECT_CALL(si, AddMilk(25)).Times(1); + EXPECT_CALL(si, AddMilkFoam(25)).Times(1); + + cm.CreateCoffee(Cup::Normal, Coffee::Cappuccino); +} From 4f00eb929f864a98a50f390f54d1b310c9bd84a4 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:08:41 +0200 Subject: [PATCH 56/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index b0407d12..f13138a4 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -63,9 +63,26 @@ class CoffeeMachine } void CreateCoffee(const Cup cup, const Coffee coffee) { - m_source.AddCoffee(75); - m_source.SetCupSize(cup); - m_source.AddWater(25, 60); + switch (coffee) { + case Americano: + { + m_source.AddCoffee(75); + m_source.SetCupSize(cup); + m_source.AddWater(25, 60); + break; + } + case Cappuccino: + { + m_source.AddCoffee(25); + m_source.SetCupSize(cup); + m_source.AddWater(25, 80); + m_source.AddMilk(25); + m_source.AddMilkFoam(25); + break; + } + default: + break; + } } private: ISourceOfIngredients& m_source; From 68fabfd1f1d4a212ec19a0223b42ce6097e7f6af Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:11:58 +0200 Subject: [PATCH 57/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index f13138a4..74e93a64 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -149,3 +149,19 @@ TEST(CoffeeMachine, Cappuccino100ml) cm.CreateCoffee(Cup::Normal, Coffee::Cappuccino); } + +//- latte - milk & coffee & milk foam 1:4, 1:2, 1:4. Water temp 90C +// cup size = 100 ml: 13 milk + 25 coffee + 12 milk foam + 25 water 90C +TEST(CoffeeMachine, Latte100ml) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(25)).Times(1); + EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, AddWater(25, 90)).Times(1); + EXPECT_CALL(si, AddMilk(13)).Times(1); + EXPECT_CALL(si, AddMilkFoam(12)).Times(1); + + cm.CreateCoffee(Cup::Normal, Coffee::Cappuccino); +} From 5d0e4ebcd1f17d1015b4cd4298e1cb2008046d21 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:13:23 +0200 Subject: [PATCH 58/95] Red. fix mistake on test Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 74e93a64..572366f8 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -38,7 +38,8 @@ enum Cup enum Coffee { Americano, - Cappuccino + Cappuccino, + Latte }; class MockSourceOfIngredients : public ISourceOfIngredients @@ -163,5 +164,5 @@ TEST(CoffeeMachine, Latte100ml) EXPECT_CALL(si, AddMilk(13)).Times(1); EXPECT_CALL(si, AddMilkFoam(12)).Times(1); - cm.CreateCoffee(Cup::Normal, Coffee::Cappuccino); + cm.CreateCoffee(Cup::Normal, Coffee::Latte); } From 4fd85b8d2240f067b2540866dbf7f13d0c377a39 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:15:30 +0200 Subject: [PATCH 59/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 572366f8..87922687 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -81,6 +81,15 @@ class CoffeeMachine m_source.AddMilkFoam(25); break; } + case Latte: + { + m_source.AddCoffee(25); + m_source.SetCupSize(cup); + m_source.AddWater(25, 90); + m_source.AddMilk(13); + m_source.AddMilkFoam(12); + break; + } default: break; } From bb5ca81b24b6a9db281a5b73b8991c5b459683eb Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:20:51 +0200 Subject: [PATCH 60/95] Fix recipe americano// forgot to commit Add test marochito Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 87922687..ff3a1b6f 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -39,7 +39,8 @@ enum Coffee { Americano, Cappuccino, - Latte + Latte, + Marochino }; class MockSourceOfIngredients : public ISourceOfIngredients @@ -67,9 +68,9 @@ class CoffeeMachine switch (coffee) { case Americano: { - m_source.AddCoffee(75); + m_source.AddCoffee(25); m_source.SetCupSize(cup); - m_source.AddWater(25, 60); + m_source.AddWater(75, 60); break; } case Cappuccino: @@ -137,9 +138,9 @@ TEST(CoffeeMachine, Americano100ml) MockSourceOfIngredients si; CoffeeMachine cm(si); - EXPECT_CALL(si, AddCoffee(75)).Times(1); + EXPECT_CALL(si, AddCoffee(25)).Times(1); EXPECT_CALL(si, SetCupSize(100)).Times(1); - EXPECT_CALL(si, AddWater(25, 60)).Times(1); + EXPECT_CALL(si, AddWater(75, 60)).Times(1); cm.CreateCoffee(Cup::Normal, Coffee::Americano); } @@ -175,3 +176,18 @@ TEST(CoffeeMachine, Latte100ml) cm.CreateCoffee(Cup::Normal, Coffee::Latte); } + +// - marochino - chocolate & coffee & milk foam, 1:4, 1:4, 1:4 and 1:4 is empty +// cup size = 100 ml: 25 chocolate + 25 coffee + 25 milk foam +TEST(CoffeeMachine, Marochino100ml) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(25)).Times(1); + EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, AddMilk(25)).Times(1); + EXPECT_CALL(si, AddMilkFoam(25)).Times(1); + + cm.CreateCoffee(Cup::Normal, Coffee::Marochino); +} From f5ee1f0c97dc84ef3cc2c77f3bab2da215290b00 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:21:56 +0200 Subject: [PATCH 61/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index ff3a1b6f..b3e9c6a7 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -91,6 +91,14 @@ class CoffeeMachine m_source.AddMilkFoam(12); break; } + case Marochino: + { + m_source.AddCoffee(25); + m_source.SetCupSize(cup); + m_source.AddMilk(25); + m_source.AddMilkFoam(25); + break; + } default: break; } From 189e1303a15df44c3442a5f063ca630e0ebc5598 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:25:57 +0200 Subject: [PATCH 62/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index b3e9c6a7..a4e89b69 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -199,3 +199,17 @@ TEST(CoffeeMachine, Marochino100ml) cm.CreateCoffee(Cup::Normal, Coffee::Marochino); } + +//- americano: water & coffee 1:3 Water temp 60C +// cup size = 140 ml: 140/3 = 46 coffee + 92 water with 60C +TEST(CoffeeMachine, Americano140ml) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(46)).Times(1); + EXPECT_CALL(si, SetCupSize(140)).Times(1); + EXPECT_CALL(si, AddWater(92, 60)).Times(1); + + cm.CreateCoffee(Cup::Big, Coffee::Americano); +} From 1a35b45ef6ec6f165a6e710bb0d329c047a7e963 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:34:29 +0200 Subject: [PATCH 63/95] Green. Understood that some recipes are wrong. Fix only americano. Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index a4e89b69..a5bc41d0 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -68,9 +68,9 @@ class CoffeeMachine switch (coffee) { case Americano: { - m_source.AddCoffee(25); + m_source.AddCoffee(cup/3); m_source.SetCupSize(cup); - m_source.AddWater(75, 60); + m_source.AddWater((cup/3)*2, 60); break; } case Cappuccino: @@ -140,15 +140,15 @@ TEST(CoffeeMachine, CallsImportantThings) } //- americano: water & coffee 1:3 Water temp 60C -// cup size = 100 ml: 25 coffee + 75 water with 60C +// cup size = 100 ml: 33 coffee + 66 water with 60C TEST(CoffeeMachine, Americano100ml) { MockSourceOfIngredients si; CoffeeMachine cm(si); - EXPECT_CALL(si, AddCoffee(25)).Times(1); + EXPECT_CALL(si, AddCoffee(33)).Times(1); EXPECT_CALL(si, SetCupSize(100)).Times(1); - EXPECT_CALL(si, AddWater(75, 60)).Times(1); + EXPECT_CALL(si, AddWater(66, 60)).Times(1); cm.CreateCoffee(Cup::Normal, Coffee::Americano); } From 0d9c30d8f0018669259cdb061aaa945aae3c34e2 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:40:02 +0200 Subject: [PATCH 64/95] Fix recipies. Red. Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index a5bc41d0..53d59ddb 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -139,7 +139,7 @@ TEST(CoffeeMachine, CallsImportantThings) cm.CreateCoffee(Cup::Normal, Coffee::Americano); } -//- americano: water & coffee 1:3 Water temp 60C +//- americano: water & coffee 2:3, 1:3. Water temp 60C // cup size = 100 ml: 33 coffee + 66 water with 60C TEST(CoffeeMachine, Americano100ml) { @@ -153,7 +153,7 @@ TEST(CoffeeMachine, Americano100ml) cm.CreateCoffee(Cup::Normal, Coffee::Americano); } -// cappuccino - milk & coffee & milk foam 1:3, 1:3, 1:3. Water temp 80C +// cappuccino - milk & coffee & milk foam & water 1:4, 1:4, 1:4 , 1:4. Water temp 80C // cup size = 100 ml: 25 milk + 25 coffee + 25 milk foam + 25 water 80C TEST(CoffeeMachine, Cappuccino100ml) { @@ -169,8 +169,8 @@ TEST(CoffeeMachine, Cappuccino100ml) cm.CreateCoffee(Cup::Normal, Coffee::Cappuccino); } -//- latte - milk & coffee & milk foam 1:4, 1:2, 1:4. Water temp 90C -// cup size = 100 ml: 13 milk + 25 coffee + 12 milk foam + 25 water 90C +//- latte - milk & coffee & milk foam 1:8, 1:2, 1:8. 1:4 Water temp 90C +// cup size = 100 ml: 12 milk + 25 coffee + 12 milk foam + 25 water 90C TEST(CoffeeMachine, Latte100ml) { MockSourceOfIngredients si; @@ -179,7 +179,7 @@ TEST(CoffeeMachine, Latte100ml) EXPECT_CALL(si, AddCoffee(25)).Times(1); EXPECT_CALL(si, SetCupSize(100)).Times(1); EXPECT_CALL(si, AddWater(25, 90)).Times(1); - EXPECT_CALL(si, AddMilk(13)).Times(1); + EXPECT_CALL(si, AddMilk(12)).Times(1); EXPECT_CALL(si, AddMilkFoam(12)).Times(1); cm.CreateCoffee(Cup::Normal, Coffee::Latte); From c174fd9c651725cd90f04e61ca58efcb8005b5fa Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:40:45 +0200 Subject: [PATCH 65/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 53d59ddb..7e1524de 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -87,7 +87,7 @@ class CoffeeMachine m_source.AddCoffee(25); m_source.SetCupSize(cup); m_source.AddWater(25, 90); - m_source.AddMilk(13); + m_source.AddMilk(12); m_source.AddMilkFoam(12); break; } From 8227979fb5a50a5cc6bc17f852c1f20a08a9400d Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:42:25 +0200 Subject: [PATCH 66/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 7e1524de..3e6f0764 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -213,3 +213,19 @@ TEST(CoffeeMachine, Americano140ml) cm.CreateCoffee(Cup::Big, Coffee::Americano); } + +// cappuccino - milk & coffee & milk foam & water 1:4, 1:4, 1:4 , 1:4. Water temp 80C +// cup size = 100 ml: 35 milk + 35 coffee + 35 milk foam + 35 water 80C +TEST(CoffeeMachine, Cappuccino140ml) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(35)).Times(1); + EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, AddWater(35, 80)).Times(1); + EXPECT_CALL(si, AddMilk(35)).Times(1); + EXPECT_CALL(si, AddMilkFoam(35)).Times(1); + + cm.CreateCoffee(Cup::Big, Coffee::Cappuccino); +} From 5d79c78fae7d1e14aa39ba41bbc1c1499d3cda5a Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:43:46 +0200 Subject: [PATCH 67/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 3e6f0764..2d54bdff 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -75,11 +75,11 @@ class CoffeeMachine } case Cappuccino: { - m_source.AddCoffee(25); + m_source.AddCoffee(cup/4); m_source.SetCupSize(cup); - m_source.AddWater(25, 80); - m_source.AddMilk(25); - m_source.AddMilkFoam(25); + m_source.AddWater(cup/4, 80); + m_source.AddMilk(cup/4); + m_source.AddMilkFoam(cup/4); break; } case Latte: @@ -222,7 +222,7 @@ TEST(CoffeeMachine, Cappuccino140ml) CoffeeMachine cm(si); EXPECT_CALL(si, AddCoffee(35)).Times(1); - EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, SetCupSize(140)).Times(1); EXPECT_CALL(si, AddWater(35, 80)).Times(1); EXPECT_CALL(si, AddMilk(35)).Times(1); EXPECT_CALL(si, AddMilkFoam(35)).Times(1); From 18ec4003d9e9f30d0fa70a4cbf8424217581cddd Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:47:38 +0200 Subject: [PATCH 68/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 2d54bdff..3074aaee 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -170,13 +170,13 @@ TEST(CoffeeMachine, Cappuccino100ml) } //- latte - milk & coffee & milk foam 1:8, 1:2, 1:8. 1:4 Water temp 90C -// cup size = 100 ml: 12 milk + 25 coffee + 12 milk foam + 25 water 90C +// cup size = 100 ml: 12 milk + 50 coffee + 12 milk foam + 25 water 90C TEST(CoffeeMachine, Latte100ml) { MockSourceOfIngredients si; CoffeeMachine cm(si); - EXPECT_CALL(si, AddCoffee(25)).Times(1); + EXPECT_CALL(si, AddCoffee(50)).Times(1); EXPECT_CALL(si, SetCupSize(100)).Times(1); EXPECT_CALL(si, AddWater(25, 90)).Times(1); EXPECT_CALL(si, AddMilk(12)).Times(1); @@ -215,7 +215,7 @@ TEST(CoffeeMachine, Americano140ml) } // cappuccino - milk & coffee & milk foam & water 1:4, 1:4, 1:4 , 1:4. Water temp 80C -// cup size = 100 ml: 35 milk + 35 coffee + 35 milk foam + 35 water 80C +// cup size = 140 ml: 35 milk + 35 coffee + 35 milk foam + 35 water 80C TEST(CoffeeMachine, Cappuccino140ml) { MockSourceOfIngredients si; @@ -229,3 +229,19 @@ TEST(CoffeeMachine, Cappuccino140ml) cm.CreateCoffee(Cup::Big, Coffee::Cappuccino); } + +//- latte - milk & coffee & milk foam 1:8, 1:2, 1:8. 1:4 Water temp 90C +// cup size = 140 ml: 17 milk + 70 coffee + 17 milk foam + 35 water 90C +TEST(CoffeeMachine, Latte140ml) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(70)).Times(1); + EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, AddWater(35, 90)).Times(1); + EXPECT_CALL(si, AddMilk(17)).Times(1); + EXPECT_CALL(si, AddMilkFoam(17)).Times(1); + + cm.CreateCoffee(Cup::Normal, Coffee::Latte); +} From 17c4673a6618320e788c7bf9bcd4d509cc54c011 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:49:56 +0200 Subject: [PATCH 69/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 3074aaee..7614e480 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -84,11 +84,11 @@ class CoffeeMachine } case Latte: { - m_source.AddCoffee(25); + m_source.AddCoffee(cup/2); m_source.SetCupSize(cup); - m_source.AddWater(25, 90); - m_source.AddMilk(12); - m_source.AddMilkFoam(12); + m_source.AddWater(cup/4, 90); + m_source.AddMilk(cup/8); + m_source.AddMilkFoam(cup/8); break; } case Marochino: @@ -238,10 +238,10 @@ TEST(CoffeeMachine, Latte140ml) CoffeeMachine cm(si); EXPECT_CALL(si, AddCoffee(70)).Times(1); - EXPECT_CALL(si, SetCupSize(100)).Times(1); + EXPECT_CALL(si, SetCupSize(140)).Times(1); EXPECT_CALL(si, AddWater(35, 90)).Times(1); EXPECT_CALL(si, AddMilk(17)).Times(1); EXPECT_CALL(si, AddMilkFoam(17)).Times(1); - cm.CreateCoffee(Cup::Normal, Coffee::Latte); + cm.CreateCoffee(Cup::Big, Coffee::Latte); } From db9642393ad32f870a57ea3caea72159c6e17a5c Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:51:07 +0200 Subject: [PATCH 70/95] Red Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 7614e480..a12704f1 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -245,3 +245,18 @@ TEST(CoffeeMachine, Latte140ml) cm.CreateCoffee(Cup::Big, Coffee::Latte); } + +// - marochino - chocolate & coffee & milk foam, 1:4, 1:4, 1:4 and 1:4 is empty +// cup size = 140 ml: 35 chocolate + 35 coffee + 35 milk foam +TEST(CoffeeMachine, Marochino140ml) +{ + MockSourceOfIngredients si; + CoffeeMachine cm(si); + + EXPECT_CALL(si, AddCoffee(35)).Times(1); + EXPECT_CALL(si, SetCupSize(140)).Times(1); + EXPECT_CALL(si, AddMilk(35)).Times(1); + EXPECT_CALL(si, AddMilkFoam(35)).Times(1); + + cm.CreateCoffee(Cup::Big, Coffee::Marochino); +} From 6ee31ae7399d7ee259fb0a32ed64cc57563ccd50 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:51:52 +0200 Subject: [PATCH 71/95] Green Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index a12704f1..9d956e78 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -93,10 +93,10 @@ class CoffeeMachine } case Marochino: { - m_source.AddCoffee(25); + m_source.AddCoffee(cup/4); m_source.SetCupSize(cup); - m_source.AddMilk(25); - m_source.AddMilkFoam(25); + m_source.AddMilk(cup/4); + m_source.AddMilkFoam(cup/4); break; } default: From 6d48ffe8806e8d95edd78cd76a26cd5d7066e155 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:53:57 +0200 Subject: [PATCH 72/95] Refactoring Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 9d956e78..32d2f60b 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -68,9 +68,7 @@ class CoffeeMachine switch (coffee) { case Americano: { - m_source.AddCoffee(cup/3); - m_source.SetCupSize(cup); - m_source.AddWater((cup/3)*2, 60); + MakeAmericano(cup); break; } case Cappuccino: @@ -103,6 +101,13 @@ class CoffeeMachine break; } } +private: + void MakeAmericano(int cupSize) + { + m_source.AddCoffee(cupSize/3); + m_source.SetCupSize(cupSize); + m_source.AddWater((cupSize/3)*2, 60); + } private: ISourceOfIngredients& m_source; }; From 6fc94b9f3fe35123069044b506f9645fceac7620 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:55:14 +0200 Subject: [PATCH 73/95] Refactoring Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 32d2f60b..14a07c79 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -73,11 +73,7 @@ class CoffeeMachine } case Cappuccino: { - m_source.AddCoffee(cup/4); - m_source.SetCupSize(cup); - m_source.AddWater(cup/4, 80); - m_source.AddMilk(cup/4); - m_source.AddMilkFoam(cup/4); + MakeCappuccino(cup); break; } case Latte: @@ -108,6 +104,14 @@ class CoffeeMachine m_source.SetCupSize(cupSize); m_source.AddWater((cupSize/3)*2, 60); } + void MakeCappuccino(int cupSize) + { + m_source.AddCoffee(cupSize/4); + m_source.SetCupSize(cupSize); + m_source.AddWater(cupSize/4, 80); + m_source.AddMilk(cupSize/4); + m_source.AddMilkFoam(cupSize/4); + } private: ISourceOfIngredients& m_source; }; From 445ad38c5a60c09b33f99c7f111fe5070d285b8f Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 7 Nov 2018 15:57:15 +0200 Subject: [PATCH 74/95] Refactoring Signed-off-by: Alexander Potapov --- tdd_intro/homework/06_coffee/test.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/tdd_intro/homework/06_coffee/test.cpp b/tdd_intro/homework/06_coffee/test.cpp index 14a07c79..68118bf3 100644 --- a/tdd_intro/homework/06_coffee/test.cpp +++ b/tdd_intro/homework/06_coffee/test.cpp @@ -78,19 +78,12 @@ class CoffeeMachine } case Latte: { - m_source.AddCoffee(cup/2); - m_source.SetCupSize(cup); - m_source.AddWater(cup/4, 90); - m_source.AddMilk(cup/8); - m_source.AddMilkFoam(cup/8); + MakeLatte(cup); break; } case Marochino: { - m_source.AddCoffee(cup/4); - m_source.SetCupSize(cup); - m_source.AddMilk(cup/4); - m_source.AddMilkFoam(cup/4); + MakeMarochino(cup); break; } default: @@ -112,6 +105,21 @@ class CoffeeMachine m_source.AddMilk(cupSize/4); m_source.AddMilkFoam(cupSize/4); } + void MakeLatte(int cupSize) + { + m_source.AddCoffee(cupSize/2); + m_source.SetCupSize(cupSize); + m_source.AddWater(cupSize/4, 90); + m_source.AddMilk(cupSize/8); + m_source.AddMilkFoam(cupSize/8); + } + void MakeMarochino(int cupSize) + { + m_source.AddCoffee(cupSize/4); + m_source.SetCupSize(cupSize); + m_source.AddMilk(cupSize/4); + m_source.AddMilkFoam(cupSize/4); + } private: ISourceOfIngredients& m_source; }; From 5e7c1d2ccd79938c45e6666bcb919484bed4b637 Mon Sep 17 00:00:00 2001 From: PotapovAlexandr Date: Tue, 27 Nov 2018 17:12:27 +0200 Subject: [PATCH 75/95] Start Signed-off-by: PotapovAlexandr --- .../07_sqlite_header_parser.pro | 9 +++++++ .../homework/07_sqlite_header_parser/test.cpp | 27 +++++++++++++++++++ tdd_intro/homework/homework.pro | 3 ++- 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tdd_intro/homework/07_sqlite_header_parser/07_sqlite_header_parser.pro create mode 100644 tdd_intro/homework/07_sqlite_header_parser/test.cpp diff --git a/tdd_intro/homework/07_sqlite_header_parser/07_sqlite_header_parser.pro b/tdd_intro/homework/07_sqlite_header_parser/07_sqlite_header_parser.pro new file mode 100644 index 00000000..dec9b6a8 --- /dev/null +++ b/tdd_intro/homework/07_sqlite_header_parser/07_sqlite_header_parser.pro @@ -0,0 +1,9 @@ +include(../../gmock.pri) + +TEMPLATE = app +CONFIG += console c++11 +CONFIG -= app_bundle +CONFIG -= qt + +SOURCES += \ + test.cpp diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp new file mode 100644 index 00000000..edd132a6 --- /dev/null +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -0,0 +1,27 @@ +/* +Implement application for display sqlite header structure of given file. +Application takes path to file and displays header structure +Sqlite header is described here https://www.sqlite.org/fileformat.html +*/ + +#include +#include + +class IGui +{ +public: + ~IGui(){} + //Add here necessary methods +}; + +class IDbReader +{ +public: + ~IDbReader(){} + //Add here necessary methods +}; + +void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) +{ + +} diff --git a/tdd_intro/homework/homework.pro b/tdd_intro/homework/homework.pro index cf6c01b9..2198c02c 100644 --- a/tdd_intro/homework/homework.pro +++ b/tdd_intro/homework/homework.pro @@ -6,4 +6,5 @@ SUBDIRS += \ 03_bank_ocr \ 04_weather_client \ 05_word_wrapp \ - 06_coffee + 06_coffee \ + 07_sqlite_header_parser From 5bf5c6b7aa50955ed00171c2dfe726842420fe54 Mon Sep 17 00:00:00 2001 From: PotapovAlexandr Date: Tue, 27 Nov 2018 21:13:29 +0200 Subject: [PATCH 76/95] Add Mocks. Signed-off-by: PotapovAlexandr --- .../07_sqlite_header_parser/Interfaces.h | 66 +++++++++++++++++++ .../homework/07_sqlite_header_parser/Mocks.h | 43 ++++++++++++ .../homework/07_sqlite_header_parser/test.cpp | 50 ++++++++++---- 3 files changed, 147 insertions(+), 12 deletions(-) create mode 100644 tdd_intro/homework/07_sqlite_header_parser/Interfaces.h create mode 100644 tdd_intro/homework/07_sqlite_header_parser/Mocks.h diff --git a/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h b/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h new file mode 100644 index 00000000..447f4775 --- /dev/null +++ b/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h @@ -0,0 +1,66 @@ +#pragma once + +#include + +struct SqliteHeader +{ + std::string head; + int pageSize; + bool fileFormatWriteVersion; + int bytesOfUnused; + int maximumEmbeddedPayloadFraction; + int minimumEmbeddedPayloadFraction; + int leafPayloadFraction; + int fileChangeCounter; + int pageCount; + int firstFreelistPage; + int freelistPageCount; +// 40 4 The schema cookie. + int schemaFormat; // Supported schema formats are 1, 2, 3, and 4. + int defaultPageCacheSize; + int numberOfLargestRootPage; + int databaseTextEncoding; // A value of 1 means UTF-8. A value of 2 means UTF-16le. A value of 3 means UTF-16be. + int userVersion; + bool incrementalVacuumMode; + int applicationId; +// 72 20 Reserved for expansion. Must be zero. + int versionValidNumber; + int sqliteVersionNumber; +}; + +class IGui +{ +public: + virtual ~IGui(){} + virtual void DisplayHeader(const SqliteHeader& header) = 0; +}; + +class IDbReader +{ +public: + virtual ~IDbReader(){} + virtual bool ReadFilePath(const std::string filePath) = 0; + virtual bool CheckHeader() = 0; + virtual std::string GetHeaderString() = 0; + virtual int GetPageSize() = 0; + virtual bool GetFormatWriteVersion() = 0; + virtual int GetUnsedBytes() = 0; + virtual int GetMaximumEmbeddedPayloadFraction() = 0; + virtual int GetMinimumEmbeddedPayloadFraction() = 0; + virtual int GetLeafPayloadFraction() = 0; + virtual int GetFileChangeCounter() = 0; + virtual int GetPageCount() = 0; + virtual int GetFirstFreelistPage() = 0; + virtual int GetFreelistPageCount() = 0; +// 40 4 The schema cookie. + virtual int GetSchemaFormat() = 0; // Supported schema formats are 1, 2, 3, and 4. + virtual int GetDefaultPageCacheSize() = 0; + virtual int GetNumberOfLargestRootPage() = 0; + virtual int GetDatabaseTextEncoding() = 0; // A value of 1 means UTF-8. A value of 2 means UTF-16le. A value of 3 means UTF-16be. + virtual int GetUserVersion() = 0; + virtual bool GetIncrementalVacuumMode() = 0; + virtual int GetApplicationId() = 0; +// 72 20 Reserved for expansion. Must be zero. + virtual int GetVersionValidNumber() = 0; + virtual int GetSqliteVersionNumber() = 0; +}; diff --git a/tdd_intro/homework/07_sqlite_header_parser/Mocks.h b/tdd_intro/homework/07_sqlite_header_parser/Mocks.h new file mode 100644 index 00000000..fc4cd6cb --- /dev/null +++ b/tdd_intro/homework/07_sqlite_header_parser/Mocks.h @@ -0,0 +1,43 @@ +#pragma once + +#include + +#include "Interfaces.h" + +class GuiMock: public IGui +{ +public: + ~GuiMock(){} + MOCK_METHOD0(DisplayHeader, void()); +}; + +class DbReaderMock:public IDbReader +{ +public: + ~DbReaderMock(){} + + MOCK_METHOD1(ReadFilePath, bool(const std::string filePath)); + MOCK_METHOD0(CheckHeader, bool()); + MOCK_METHOD0(GetHeaderString, std::string()); + MOCK_METHOD0(GetPageSize, int()); + MOCK_METHOD0(GetFormatWriteVersion, bool()); + MOCK_METHOD0(GetUnsedBytes, int()); + MOCK_METHOD0(GetMaximumEmbeddedPayloadFraction, int()); + MOCK_METHOD0(GetMinimumEmbeddedPayloadFraction, int()); + MOCK_METHOD0(GetLeafPayloadFraction, int()); + MOCK_METHOD0(GetFileChangeCounter, int()); + MOCK_METHOD0(GetPageCount, int()); + MOCK_METHOD0(GetFirstFreelistPage, int()); + MOCK_METHOD0(GetFreelistPageCount, int()); +// 40 4 The schema cookie. + MOCK_METHOD0(GetSchemaFormat, int()); + MOCK_METHOD0(GetDefaultPageCacheSize, int()); + MOCK_METHOD0(GetNumberOfLargestRootPage, int()); + MOCK_METHOD0(GetDatabaseTextEncoding, int()); + MOCK_METHOD0(GetUserVersion, int()); + MOCK_METHOD0(GetIncrementalVacuumMode, bool()); + MOCK_METHOD0(GetApplicationId, int()); +// 72 20 Reserved for expansion. Must be zero. + MOCK_METHOD0(GetVersionValidNumber, int()); + MOCK_METHOD0(GetSqliteVersionNumber, int()); +}; diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index edd132a6..e8b25c64 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -2,26 +2,52 @@ Implement application for display sqlite header structure of given file. Application takes path to file and displays header structure Sqlite header is described here https://www.sqlite.org/fileformat.html + +Offset Size Description +0 16 The header string: "SQLite format 3\000" +16 2 The database page size in bytes. Must be a power of two between 512 and 32768 inclusive, or the value 1 representing a page size of 65536. +18 1 File format write version. 1 for legacy; 2 for WAL. +19 1 File format read version. 1 for legacy; 2 for WAL. +20 1 Bytes of unused "reserved" space at the end of each page. Usually 0. +21 1 Maximum embedded payload fraction. Must be 64. +22 1 Minimum embedded payload fraction. Must be 32. +23 1 Leaf payload fraction. Must be 32. +24 4 File change counter. +28 4 Size of the database file in pages. The "in-header database size". +32 4 Page number of the first freelist trunk page. +36 4 Total number of freelist pages. +40 4 The schema cookie. +44 4 The schema format number. Supported schema formats are 1, 2, 3, and 4. +48 4 Default page cache size. +52 4 The page number of the largest root b-tree page when in auto-vacuum or incremental-vacuum modes, or zero otherwise. +56 4 The database text encoding. A value of 1 means UTF-8. A value of 2 means UTF-16le. A value of 3 means UTF-16be. +60 4 The "user version" as read and set by the user_version pragma. +64 4 True (non-zero) for incremental-vacuum mode. False (zero) otherwise. +68 4 The "Application ID" set by PRAGMA application_id. +72 20 Reserved for expansion. Must be zero. +92 4 The version-valid-for number. +96 4 SQLITE_VERSION_NUMBER */ +/* + * Read file that not exist + * Read file that have header less than 100 + * Read file with normal first 16 bit + * ... read another parameters + * + * + * */ + #include #include -class IGui -{ -public: - ~IGui(){} - //Add here necessary methods -}; +#include "Mocks.h" + + -class IDbReader -{ -public: - ~IDbReader(){} - //Add here necessary methods -}; void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) { } + From cc96f91790f62d2f4509fc469f81003fc04b48a0 Mon Sep 17 00:00:00 2001 From: PotapovAlexandr Date: Tue, 27 Nov 2018 21:13:55 +0200 Subject: [PATCH 77/95] pro file Signed-off-by: PotapovAlexandr --- .../07_sqlite_header_parser/07_sqlite_header_parser.pro | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/07_sqlite_header_parser.pro b/tdd_intro/homework/07_sqlite_header_parser/07_sqlite_header_parser.pro index dec9b6a8..9cc4c620 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/07_sqlite_header_parser.pro +++ b/tdd_intro/homework/07_sqlite_header_parser/07_sqlite_header_parser.pro @@ -7,3 +7,6 @@ CONFIG -= qt SOURCES += \ test.cpp +HEADERS += \ + Interfaces.h\ + Mocks.h From 03f47b393032a79fe29c186f982802b0e1a44e41 Mon Sep 17 00:00:00 2001 From: PotapovAlexandr Date: Tue, 27 Nov 2018 21:35:43 +0200 Subject: [PATCH 78/95] Red-Green Signed-off-by: PotapovAlexandr --- tdd_intro/homework/07_sqlite_header_parser/test.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index e8b25c64..9444d6f4 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -48,6 +48,14 @@ Offset Size Description void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) { - + if (gui == nullptr) + { + throw std::exception(); + } } +TEST(SqliteHeaderReader, NoGui) +{ + DbReaderMock *dbReader; + ASSERT_THROW(DysplayHeaderStructure(nullptr, dbReader), std::exception); +} From 42e3368a0fb4dc8f5c005526a4aa5f2d20e0f38e Mon Sep 17 00:00:00 2001 From: PotapovAlexandr Date: Tue, 27 Nov 2018 21:37:59 +0200 Subject: [PATCH 79/95] Refactoring Signed-off-by: PotapovAlexandr --- tdd_intro/homework/07_sqlite_header_parser/test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 9444d6f4..398f724c 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -56,6 +56,6 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) TEST(SqliteHeaderReader, NoGui) { - DbReaderMock *dbReader; - ASSERT_THROW(DysplayHeaderStructure(nullptr, dbReader), std::exception); + DbReaderMock dbReader; + ASSERT_THROW(DysplayHeaderStructure(nullptr, &dbReader), std::exception); } From b46d661be63577bba598ad7b1143fdbc647fb1e5 Mon Sep 17 00:00:00 2001 From: PotapovAlexandr Date: Tue, 27 Nov 2018 22:15:53 +0200 Subject: [PATCH 80/95] Red-Green Signed-off-by: PotapovAlexandr --- .../homework/07_sqlite_header_parser/Interfaces.h | 1 + tdd_intro/homework/07_sqlite_header_parser/Mocks.h | 5 +++-- tdd_intro/homework/07_sqlite_header_parser/test.cpp | 12 ++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h b/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h index 447f4775..516f149f 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h +++ b/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h @@ -63,4 +63,5 @@ class IDbReader // 72 20 Reserved for expansion. Must be zero. virtual int GetVersionValidNumber() = 0; virtual int GetSqliteVersionNumber() = 0; + virtual bool IsEmpty() = 0; }; diff --git a/tdd_intro/homework/07_sqlite_header_parser/Mocks.h b/tdd_intro/homework/07_sqlite_header_parser/Mocks.h index fc4cd6cb..1fbbcf2d 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/Mocks.h +++ b/tdd_intro/homework/07_sqlite_header_parser/Mocks.h @@ -8,10 +8,10 @@ class GuiMock: public IGui { public: ~GuiMock(){} - MOCK_METHOD0(DisplayHeader, void()); + MOCK_METHOD1(DisplayHeader, void(const SqliteHeader& header)); }; -class DbReaderMock:public IDbReader +class DbReaderMock: public IDbReader { public: ~DbReaderMock(){} @@ -40,4 +40,5 @@ class DbReaderMock:public IDbReader // 72 20 Reserved for expansion. Must be zero. MOCK_METHOD0(GetVersionValidNumber, int()); MOCK_METHOD0(GetSqliteVersionNumber, int()); + MOCK_METHOD0(IsEmpty, bool()); }; diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 398f724c..8d794cfc 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -42,13 +42,13 @@ Offset Size Description #include #include "Mocks.h" - +using namespace testing; void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) { - if (gui == nullptr) + if (gui == nullptr || dbReader->IsEmpty()) { throw std::exception(); } @@ -59,3 +59,11 @@ TEST(SqliteHeaderReader, NoGui) DbReaderMock dbReader; ASSERT_THROW(DysplayHeaderStructure(nullptr, &dbReader), std::exception); } + +TEST(SqliteHeaderReader, EmptyReader) +{ + DbReaderMock dbReader; + GuiMock gui; + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(true)); + ASSERT_THROW(DysplayHeaderStructure(&gui, &dbReader), std::exception); +} From 86d43d0ca7bd31d2dba20925c898caba86c8b859 Mon Sep 17 00:00:00 2001 From: PotapovAlexandr Date: Tue, 27 Nov 2018 22:34:57 +0200 Subject: [PATCH 81/95] Red-Green Signed-off-by: PotapovAlexandr --- .../homework/07_sqlite_header_parser/test.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 8d794cfc..33dba408 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -32,7 +32,7 @@ Offset Size Description /* * Read file that not exist * Read file that have header less than 100 - * Read file with normal first 16 bit + * Read file with normal first 16 byte * ... read another parameters * * @@ -48,7 +48,7 @@ using namespace testing; void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) { - if (gui == nullptr || dbReader->IsEmpty()) + if (gui == nullptr || dbReader->IsEmpty() || !dbReader->CheckHeader()) { throw std::exception(); } @@ -64,6 +64,19 @@ TEST(SqliteHeaderReader, EmptyReader) { DbReaderMock dbReader; GuiMock gui; + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(true)); ASSERT_THROW(DysplayHeaderStructure(&gui, &dbReader), std::exception); } + +TEST(SqliteHeaderReader, ReadFileLessThan100Byte) +{ + DbReaderMock dbReader; + EXPECT_CALL(dbReader, ReadFilePath("somePath")).WillOnce(Return(true)); + dbReader.ReadFilePath("somePath"); + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(false)); + ASSERT_THROW(DysplayHeaderStructure(&gui, &dbReader), std::exception); +} From 3e4ca7a925ad508b7fad1904dda0f053bc71a75c Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 28 Nov 2018 19:21:33 +0200 Subject: [PATCH 82/95] Red-Green , add test data Signed-off-by: Alexander Potapov --- .../07_sqlite_header_parser/Interfaces.h | 11 +++-- .../homework/07_sqlite_header_parser/Mocks.h | 8 ++-- .../homework/07_sqlite_header_parser/test.cpp | 42 +++++++++++++++++++ 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h b/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h index 516f149f..d4632762 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h +++ b/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h @@ -1,12 +1,14 @@ #pragma once #include +#include struct SqliteHeader { std::string head; int pageSize; - bool fileFormatWriteVersion; + int fileFormatWriteVersion; + int fileFormatReadVersion; int bytesOfUnused; int maximumEmbeddedPayloadFraction; int minimumEmbeddedPayloadFraction; @@ -32,18 +34,19 @@ class IGui { public: virtual ~IGui(){} - virtual void DisplayHeader(const SqliteHeader& header) = 0; + virtual void DisplayHeader(const std::vector& header) = 0; }; class IDbReader { public: virtual ~IDbReader(){} - virtual bool ReadFilePath(const std::string filePath) = 0; + virtual bool ReadFilePath(const std::string& filePath) = 0; virtual bool CheckHeader() = 0; virtual std::string GetHeaderString() = 0; virtual int GetPageSize() = 0; - virtual bool GetFormatWriteVersion() = 0; + virtual int GetFormatWriteVersion() = 0; + virtual int GetFormatReadVersion() = 0; virtual int GetUnsedBytes() = 0; virtual int GetMaximumEmbeddedPayloadFraction() = 0; virtual int GetMinimumEmbeddedPayloadFraction() = 0; diff --git a/tdd_intro/homework/07_sqlite_header_parser/Mocks.h b/tdd_intro/homework/07_sqlite_header_parser/Mocks.h index 1fbbcf2d..e893782e 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/Mocks.h +++ b/tdd_intro/homework/07_sqlite_header_parser/Mocks.h @@ -8,19 +8,19 @@ class GuiMock: public IGui { public: ~GuiMock(){} - MOCK_METHOD1(DisplayHeader, void(const SqliteHeader& header)); + MOCK_METHOD1(DisplayHeader, void(const std::vector& header)); }; class DbReaderMock: public IDbReader { public: ~DbReaderMock(){} - - MOCK_METHOD1(ReadFilePath, bool(const std::string filePath)); + MOCK_METHOD1(ReadFilePath, bool(const std::string& filePath)); MOCK_METHOD0(CheckHeader, bool()); MOCK_METHOD0(GetHeaderString, std::string()); MOCK_METHOD0(GetPageSize, int()); - MOCK_METHOD0(GetFormatWriteVersion, bool()); + MOCK_METHOD0(GetFormatWriteVersion, int()); + MOCK_METHOD0(GetFormatReadVersion, int()); MOCK_METHOD0(GetUnsedBytes, int()); MOCK_METHOD0(GetMaximumEmbeddedPayloadFraction, int()); MOCK_METHOD0(GetMinimumEmbeddedPayloadFraction, int()); diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 33dba408..29ab124a 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -44,6 +44,29 @@ Offset Size Description #include "Mocks.h" using namespace testing; +const SqliteHeader g_testHeader{"SQLite format 3", + 512, + 1, + 1, + 0, + 64, + 32, + 32, + 1, + 30, + 20, + 5, + // 40 4 The schema cookie. + 1, + 32, + 0, + 1, + 2, + 0, + 33, + // 72 20 Reserved for expansion. Must be zero. + 3, + 22}; void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) @@ -52,6 +75,9 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) { throw std::exception(); } + std::vector messagesForOutput; + messagesForOutput.push_back("Type - " + dbReader->GetHeaderString()); + //gui->DisplayHeader(messagesForOutput); } TEST(SqliteHeaderReader, NoGui) @@ -80,3 +106,19 @@ TEST(SqliteHeaderReader, ReadFileLessThan100Byte) EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(false)); ASSERT_THROW(DysplayHeaderStructure(&gui, &dbReader), std::exception); } + +TEST(SqliteHeaderReader, ReadHeadString) +{ + DbReaderMock dbReader; + GuiMock gui; + std::string headerString = "Type - SQLite format 3"; + std::vector expectedData; + expectedData.push_back(headerString); + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetHeaderString()).WillOnce(Return(g_testHeader.head)); + EXPECT_CALL(gui, DisplayHeader(expectedData)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 3554b02cf3cec31128ad2bd98f8ae9450096d431 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 28 Nov 2018 19:28:52 +0200 Subject: [PATCH 83/95] Red-Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 29ab124a..96c090b8 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -77,7 +77,8 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) } std::vector messagesForOutput; messagesForOutput.push_back("Type - " + dbReader->GetHeaderString()); - //gui->DisplayHeader(messagesForOutput); + messagesForOutput.push_back("DB page size - " + std::to_string(dbReader->GetPageSize())); + gui->DisplayHeader(messagesForOutput); } TEST(SqliteHeaderReader, NoGui) @@ -122,3 +123,21 @@ TEST(SqliteHeaderReader, ReadHeadString) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadDbPageSize) +{ + DbReaderMock dbReader; + GuiMock gui; + std::vector expectedData{ + std::string("SQLite format 3"), + std::string("DB page size - 512")}; + + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetHeaderString()).WillOnce(Return(g_testHeader.head)); + EXPECT_CALL(dbReader, GetPageSize()).WillOnce(Return(g_testHeader.pageSize)); + EXPECT_CALL(gui, DisplayHeader(expectedData)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 6d2b6b7a9cfd6c746a40fed29c7e2018098308ef Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 28 Nov 2018 20:05:07 +0200 Subject: [PATCH 84/95] Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 96c090b8..636cc36d 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -112,14 +112,12 @@ TEST(SqliteHeaderReader, ReadHeadString) { DbReaderMock dbReader; GuiMock gui; - std::string headerString = "Type - SQLite format 3"; - std::vector expectedData; - expectedData.push_back(headerString); EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); EXPECT_CALL(dbReader, GetHeaderString()).WillOnce(Return(g_testHeader.head)); - EXPECT_CALL(gui, DisplayHeader(expectedData)).Times(1); + + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } @@ -128,16 +126,12 @@ TEST(SqliteHeaderReader, ReadDbPageSize) { DbReaderMock dbReader; GuiMock gui; - std::vector expectedData{ - std::string("SQLite format 3"), - std::string("DB page size - 512")}; - EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); - EXPECT_CALL(dbReader, GetHeaderString()).WillOnce(Return(g_testHeader.head)); EXPECT_CALL(dbReader, GetPageSize()).WillOnce(Return(g_testHeader.pageSize)); - EXPECT_CALL(gui, DisplayHeader(expectedData)).Times(1); + + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } From 5f99591160653cf16da6706f186bdcd534f4bbc0 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 28 Nov 2018 20:07:17 +0200 Subject: [PATCH 85/95] Red-Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 636cc36d..52e532e2 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -78,6 +78,7 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) std::vector messagesForOutput; messagesForOutput.push_back("Type - " + dbReader->GetHeaderString()); messagesForOutput.push_back("DB page size - " + std::to_string(dbReader->GetPageSize())); + messagesForOutput.push_back("File format write version - " + std::to_string(dbReader->GetFormatWriteVersion())); gui->DisplayHeader(messagesForOutput); } @@ -135,3 +136,16 @@ TEST(SqliteHeaderReader, ReadDbPageSize) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadFileWriteFormatVersion) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetFormatWriteVersion()).WillOnce(Return(g_testHeader.fileFormatWriteVersion)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 7b3a4558e7a57ba2d247ebf65e64c8ce654cd1f0 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 28 Nov 2018 20:08:44 +0200 Subject: [PATCH 86/95] Red-Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 52e532e2..7b2dfbd0 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -79,6 +79,7 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) messagesForOutput.push_back("Type - " + dbReader->GetHeaderString()); messagesForOutput.push_back("DB page size - " + std::to_string(dbReader->GetPageSize())); messagesForOutput.push_back("File format write version - " + std::to_string(dbReader->GetFormatWriteVersion())); + messagesForOutput.push_back("File format read version - " + std::to_string(dbReader->GetFormatReadVersion())); gui->DisplayHeader(messagesForOutput); } @@ -149,3 +150,16 @@ TEST(SqliteHeaderReader, ReadFileWriteFormatVersion) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadFileReadFormatVersion) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetFormatReadVersion()).WillOnce(Return(g_testHeader.fileFormatReadVersion)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 17ce3691cb8efd0e718d8309798d5fcd3c0bf27d Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 28 Nov 2018 20:10:49 +0200 Subject: [PATCH 87/95] Red-Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 7b2dfbd0..0d9845d5 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -80,6 +80,7 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) messagesForOutput.push_back("DB page size - " + std::to_string(dbReader->GetPageSize())); messagesForOutput.push_back("File format write version - " + std::to_string(dbReader->GetFormatWriteVersion())); messagesForOutput.push_back("File format read version - " + std::to_string(dbReader->GetFormatReadVersion())); + messagesForOutput.push_back("Unused bytes - " + std::to_string(dbReader->GetUnsedBytes())); gui->DisplayHeader(messagesForOutput); } @@ -163,3 +164,16 @@ TEST(SqliteHeaderReader, ReadFileReadFormatVersion) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadUnusedBytes) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetFormatReadVersion()).WillOnce(Return(g_testHeader.bytesOfUnused)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 19a87999505bda03058936a6f9d8bba824862196 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 28 Nov 2018 20:13:03 +0200 Subject: [PATCH 88/95] Red-Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 0d9845d5..778837b5 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -81,6 +81,7 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) messagesForOutput.push_back("File format write version - " + std::to_string(dbReader->GetFormatWriteVersion())); messagesForOutput.push_back("File format read version - " + std::to_string(dbReader->GetFormatReadVersion())); messagesForOutput.push_back("Unused bytes - " + std::to_string(dbReader->GetUnsedBytes())); + messagesForOutput.push_back("Maximum embedded payload fraction - " + std::to_string(dbReader->GetMaximumEmbeddedPayloadFraction())); gui->DisplayHeader(messagesForOutput); } @@ -177,3 +178,16 @@ TEST(SqliteHeaderReader, ReadUnusedBytes) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadMaximumEmbeddedPayloadFraction) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetMaximumEmbeddedPayloadFraction()).WillOnce(Return(g_testHeader.maximumEmbeddedPayloadFraction)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From e374063e502d188960642a577f2c2d8329f89165 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Wed, 28 Nov 2018 20:15:11 +0200 Subject: [PATCH 89/95] Red-Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 778837b5..4f1ada0f 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -82,6 +82,7 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) messagesForOutput.push_back("File format read version - " + std::to_string(dbReader->GetFormatReadVersion())); messagesForOutput.push_back("Unused bytes - " + std::to_string(dbReader->GetUnsedBytes())); messagesForOutput.push_back("Maximum embedded payload fraction - " + std::to_string(dbReader->GetMaximumEmbeddedPayloadFraction())); + messagesForOutput.push_back("Minimum embedded payload fraction - " + std::to_string(dbReader->GetMinimumEmbeddedPayloadFraction())); gui->DisplayHeader(messagesForOutput); } @@ -191,3 +192,16 @@ TEST(SqliteHeaderReader, ReadMaximumEmbeddedPayloadFraction) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadMinimumEmbeddedPayloadFraction) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetMinimumEmbeddedPayloadFraction()).WillOnce(Return(g_testHeader.minimumEmbeddedPayloadFraction)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 550d35150a94eb3067dfa90f9c409d40dbc9d991 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Thu, 29 Nov 2018 12:24:16 +0200 Subject: [PATCH 90/95] Red-Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 4f1ada0f..4c1f4718 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -83,6 +83,8 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) messagesForOutput.push_back("Unused bytes - " + std::to_string(dbReader->GetUnsedBytes())); messagesForOutput.push_back("Maximum embedded payload fraction - " + std::to_string(dbReader->GetMaximumEmbeddedPayloadFraction())); messagesForOutput.push_back("Minimum embedded payload fraction - " + std::to_string(dbReader->GetMinimumEmbeddedPayloadFraction())); + messagesForOutput.push_back("Leaf payload fraction - " + std::to_string(dbReader->GetLeafPayloadFraction())); + gui->DisplayHeader(messagesForOutput); } @@ -205,3 +207,16 @@ TEST(SqliteHeaderReader, ReadMinimumEmbeddedPayloadFraction) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadLeafPayloadFraction) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetLeafPayloadFraction()).WillOnce(Return(g_testHeader.leafPayloadFraction)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 0f820714110ca59463c5c2a1f48adbcec90d1a15 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Thu, 29 Nov 2018 12:40:09 +0200 Subject: [PATCH 91/95] Red-Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 4c1f4718..d11da07d 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -84,6 +84,8 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) messagesForOutput.push_back("Maximum embedded payload fraction - " + std::to_string(dbReader->GetMaximumEmbeddedPayloadFraction())); messagesForOutput.push_back("Minimum embedded payload fraction - " + std::to_string(dbReader->GetMinimumEmbeddedPayloadFraction())); messagesForOutput.push_back("Leaf payload fraction - " + std::to_string(dbReader->GetLeafPayloadFraction())); + messagesForOutput.push_back("File change counter - " + std::to_string(dbReader->GetFileChangeCounter())); + messagesForOutput.push_back("Size of the database file in pages - " + std::to_string(dbReader->GetPageCount())); gui->DisplayHeader(messagesForOutput); } @@ -220,3 +222,29 @@ TEST(SqliteHeaderReader, ReadLeafPayloadFraction) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadFileChangeCounter) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetFileChangeCounter()).WillOnce(Return(g_testHeader.fileChangeCounter)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} + +TEST(SqliteHeaderReader, ReadPageCount) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetPageCount()).WillOnce(Return(g_testHeader.pageCount)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From ab43fbf0adc3a3ac5dca90bca2c273ab02479f09 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Thu, 29 Nov 2018 12:43:42 +0200 Subject: [PATCH 92/95] Red-Green Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index d11da07d..fd436b15 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -86,6 +86,8 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) messagesForOutput.push_back("Leaf payload fraction - " + std::to_string(dbReader->GetLeafPayloadFraction())); messagesForOutput.push_back("File change counter - " + std::to_string(dbReader->GetFileChangeCounter())); messagesForOutput.push_back("Size of the database file in pages - " + std::to_string(dbReader->GetPageCount())); + messagesForOutput.push_back("Page number of the first freelist trunk page - " + std::to_string(dbReader->GetFirstFreelistPage())); + gui->DisplayHeader(messagesForOutput); } @@ -248,3 +250,16 @@ TEST(SqliteHeaderReader, ReadPageCount) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadFirstFreelistPage) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetFirstFreelistPage()).WillOnce(Return(g_testHeader.firstFreelistPage)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 4c30d8b1c3479e2e0c81aaff10344acbe2b2081e Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Thu, 29 Nov 2018 13:04:08 +0200 Subject: [PATCH 93/95] Red-Green 7 times. similar changes Signed-off-by: Alexander Potapov --- .../07_sqlite_header_parser/Interfaces.h | 4 +- .../homework/07_sqlite_header_parser/Mocks.h | 2 +- .../homework/07_sqlite_header_parser/test.cpp | 98 +++++++++++++++++++ 3 files changed, 101 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h b/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h index d4632762..942da7aa 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h +++ b/tdd_intro/homework/07_sqlite_header_parser/Interfaces.h @@ -23,7 +23,7 @@ struct SqliteHeader int numberOfLargestRootPage; int databaseTextEncoding; // A value of 1 means UTF-8. A value of 2 means UTF-16le. A value of 3 means UTF-16be. int userVersion; - bool incrementalVacuumMode; + int incrementalVacuumMode; int applicationId; // 72 20 Reserved for expansion. Must be zero. int versionValidNumber; @@ -61,7 +61,7 @@ class IDbReader virtual int GetNumberOfLargestRootPage() = 0; virtual int GetDatabaseTextEncoding() = 0; // A value of 1 means UTF-8. A value of 2 means UTF-16le. A value of 3 means UTF-16be. virtual int GetUserVersion() = 0; - virtual bool GetIncrementalVacuumMode() = 0; + virtual int GetIncrementalVacuumMode() = 0; virtual int GetApplicationId() = 0; // 72 20 Reserved for expansion. Must be zero. virtual int GetVersionValidNumber() = 0; diff --git a/tdd_intro/homework/07_sqlite_header_parser/Mocks.h b/tdd_intro/homework/07_sqlite_header_parser/Mocks.h index e893782e..00c13c93 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/Mocks.h +++ b/tdd_intro/homework/07_sqlite_header_parser/Mocks.h @@ -35,7 +35,7 @@ class DbReaderMock: public IDbReader MOCK_METHOD0(GetNumberOfLargestRootPage, int()); MOCK_METHOD0(GetDatabaseTextEncoding, int()); MOCK_METHOD0(GetUserVersion, int()); - MOCK_METHOD0(GetIncrementalVacuumMode, bool()); + MOCK_METHOD0(GetIncrementalVacuumMode, int()); MOCK_METHOD0(GetApplicationId, int()); // 72 20 Reserved for expansion. Must be zero. MOCK_METHOD0(GetVersionValidNumber, int()); diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index fd436b15..5a1317fe 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -87,6 +87,13 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) messagesForOutput.push_back("File change counter - " + std::to_string(dbReader->GetFileChangeCounter())); messagesForOutput.push_back("Size of the database file in pages - " + std::to_string(dbReader->GetPageCount())); messagesForOutput.push_back("Page number of the first freelist trunk page - " + std::to_string(dbReader->GetFirstFreelistPage())); + messagesForOutput.push_back("Total number of freelist pages - " + std::to_string(dbReader->GetFreelistPageCount())); + messagesForOutput.push_back("The schema format number - " + std::to_string(dbReader->GetSchemaFormat())); + messagesForOutput.push_back("Default page cache size - " + std::to_string(dbReader->GetDefaultPageCacheSize())); + messagesForOutput.push_back("The page number of the largest root b-tree page - " + std::to_string(dbReader->GetNumberOfLargestRootPage())); + messagesForOutput.push_back("The database text encoding - " + std::to_string(dbReader->GetDatabaseTextEncoding())); + messagesForOutput.push_back("The \"user version\" - " + std::to_string(dbReader->GetUserVersion())); + messagesForOutput.push_back("The vacuum mode - " + std::to_string(dbReader->GetIncrementalVacuumMode())); gui->DisplayHeader(messagesForOutput); @@ -263,3 +270,94 @@ TEST(SqliteHeaderReader, ReadFirstFreelistPage) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadFreelistPageCount) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetFreelistPageCount()).WillOnce(Return(g_testHeader.freelistPageCount)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} + +TEST(SqliteHeaderReader, ReadSchemaFormat) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetSchemaFormat()).WillOnce(Return(g_testHeader.schemaFormat)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} + +TEST(SqliteHeaderReader, ReadDefaultPageCacheSize) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetDefaultPageCacheSize()).WillOnce(Return(g_testHeader.defaultPageCacheSize)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} + +TEST(SqliteHeaderReader, ReadNumberOfLargestRootPage) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetNumberOfLargestRootPage()).WillOnce(Return(g_testHeader.numberOfLargestRootPage)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} + +TEST(SqliteHeaderReader, ReadDatabaseTextEncoding) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetDatabaseTextEncoding()).WillOnce(Return(g_testHeader.databaseTextEncoding)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} + +TEST(SqliteHeaderReader, ReadUserVersion) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetUserVersion()).WillOnce(Return(g_testHeader.userVersion)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} + +TEST(SqliteHeaderReader, ReadIncrementalVacuumMode) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetIncrementalVacuumMode()).WillOnce(Return(g_testHeader.incrementalVacuumMode)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 26f206c1ecd357eb583bf6af53d7b3769ec0923d Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Thu, 29 Nov 2018 13:08:17 +0200 Subject: [PATCH 94/95] Red-Green 3 times. Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 5a1317fe..393698e3 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -94,7 +94,9 @@ void DysplayHeaderStructure(IGui* gui, IDbReader* dbReader) messagesForOutput.push_back("The database text encoding - " + std::to_string(dbReader->GetDatabaseTextEncoding())); messagesForOutput.push_back("The \"user version\" - " + std::to_string(dbReader->GetUserVersion())); messagesForOutput.push_back("The vacuum mode - " + std::to_string(dbReader->GetIncrementalVacuumMode())); - + messagesForOutput.push_back("The \"Application ID\" - " + std::to_string(dbReader->GetApplicationId())); + messagesForOutput.push_back("The version-valid-for number - " + std::to_string(dbReader->GetVersionValidNumber())); + messagesForOutput.push_back("The SQLITE_VERSION_NUMBER - " + std::to_string(dbReader->GetSqliteVersionNumber())); gui->DisplayHeader(messagesForOutput); } @@ -361,3 +363,42 @@ TEST(SqliteHeaderReader, ReadIncrementalVacuumMode) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, ReadApplicationId) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetApplicationId()).WillOnce(Return(g_testHeader.applicationId)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} + +TEST(SqliteHeaderReader, ReadVersionValidNumber) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetVersionValidNumber()).WillOnce(Return(g_testHeader.versionValidNumber)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} + +TEST(SqliteHeaderReader, ReadSqliteVersionNumber) +{ + DbReaderMock dbReader; + GuiMock gui; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetSqliteVersionNumber()).WillOnce(Return(g_testHeader.sqliteVersionNumber)); + EXPECT_CALL(gui, DisplayHeader(_)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +} From 0512156d45cbb57353227522efe423ee207b4d91 Mon Sep 17 00:00:00 2001 From: Alexander Potapov Date: Fri, 30 Nov 2018 18:25:54 +0200 Subject: [PATCH 95/95] Red Signed-off-by: Alexander Potapov --- .../homework/07_sqlite_header_parser/test.cpp | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/tdd_intro/homework/07_sqlite_header_parser/test.cpp b/tdd_intro/homework/07_sqlite_header_parser/test.cpp index 393698e3..841211b1 100644 --- a/tdd_intro/homework/07_sqlite_header_parser/test.cpp +++ b/tdd_intro/homework/07_sqlite_header_parser/test.cpp @@ -402,3 +402,62 @@ TEST(SqliteHeaderReader, ReadSqliteVersionNumber) ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); } + +TEST(SqliteHeaderReader, SummaryTest) +{ + DbReaderMock dbReader; + EXPECT_CALL(dbReader, ReadFilePath("somePath")).WillOnce(Return(true)); + dbReader.ReadFilePath("somePath"); + GuiMock gui; + + std::vector expectedData{ + std::string("Type - SQLite format 3"), + std::string("DB page size - 512"), + std::string("File format write version - 1"), + std::string("File format read version - 1"), + std::string("Unused bytes - 0"), + std::string("Maximum embedded payload fraction - 64"), + std::string("Minimum embedded payload fraction - 32"), + std::string("Leaf payload fraction - 32"), + std::string("File change counter - 1"), + std::string("Size of the database file in pages - 30"), + std::string("Page number of the first freelist trunk page - 20"), + std::string("Total number of freelist pages - 5"), + std::string("The schema format number - 1"), + std::string("Default page cache size - 32"), + std::string("The page number of the largest root b-tree page - 0"), + std::string("The database text encoding - 1"), + std::string("The \"user version\" - 2"), + std::string("The vacuum mode - 0"), + std::string("The \"Application ID\" - 33"), + std::string("The version-valid-for number - 3"), + std::string("The SQLITE_VERSION_NUMBER - 22")}; + + EXPECT_CALL(dbReader, IsEmpty()).WillOnce(Return(false)); + EXPECT_CALL(dbReader, CheckHeader()).WillOnce(Return(true)); + EXPECT_CALL(dbReader, GetHeaderString()).WillOnce(Return(g_testHeader.head)); + EXPECT_CALL(dbReader, GetPageSize()).WillOnce(Return(g_testHeader.pageSize)); + EXPECT_CALL(dbReader, GetFormatWriteVersion()).WillOnce(Return(g_testHeader.fileFormatWriteVersion)); + EXPECT_CALL(dbReader, GetFormatReadVersion()).WillOnce(Return(g_testHeader.fileFormatReadVersion)); + EXPECT_CALL(dbReader, GetFormatReadVersion()).WillOnce(Return(g_testHeader.bytesOfUnused)); + EXPECT_CALL(dbReader, GetMaximumEmbeddedPayloadFraction()).WillOnce(Return(g_testHeader.maximumEmbeddedPayloadFraction)); + EXPECT_CALL(dbReader, GetMinimumEmbeddedPayloadFraction()).WillOnce(Return(g_testHeader.minimumEmbeddedPayloadFraction)); + EXPECT_CALL(dbReader, GetLeafPayloadFraction()).WillOnce(Return(g_testHeader.leafPayloadFraction)); + EXPECT_CALL(dbReader, GetFileChangeCounter()).WillOnce(Return(g_testHeader.fileChangeCounter)); + EXPECT_CALL(dbReader, GetPageCount()).WillOnce(Return(g_testHeader.pageCount)); + EXPECT_CALL(dbReader, GetFirstFreelistPage()).WillOnce(Return(g_testHeader.firstFreelistPage)); + EXPECT_CALL(dbReader, GetFreelistPageCount()).WillOnce(Return(g_testHeader.freelistPageCount)); + EXPECT_CALL(dbReader, GetSchemaFormat()).WillOnce(Return(g_testHeader.schemaFormat)); + EXPECT_CALL(dbReader, GetDefaultPageCacheSize()).WillOnce(Return(g_testHeader.defaultPageCacheSize)); + EXPECT_CALL(dbReader, GetNumberOfLargestRootPage()).WillOnce(Return(g_testHeader.numberOfLargestRootPage)); + EXPECT_CALL(dbReader, GetDatabaseTextEncoding()).WillOnce(Return(g_testHeader.databaseTextEncoding)); + EXPECT_CALL(dbReader, GetUserVersion()).WillOnce(Return(g_testHeader.userVersion)); + EXPECT_CALL(dbReader, GetIncrementalVacuumMode()).WillOnce(Return(g_testHeader.incrementalVacuumMode)); + EXPECT_CALL(dbReader, GetApplicationId()).WillOnce(Return(g_testHeader.applicationId)); + EXPECT_CALL(dbReader, GetVersionValidNumber()).WillOnce(Return(g_testHeader.versionValidNumber)); + EXPECT_CALL(dbReader, GetSqliteVersionNumber()).WillOnce(Return(g_testHeader.sqliteVersionNumber)); + + EXPECT_CALL(gui, DisplayHeader(expectedData)).Times(1); + + ASSERT_NO_THROW(DysplayHeaderStructure(&gui, &dbReader)); +}