From 45526d54a82ce3486005d616311e6c33c7c1e928 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 19 Jun 2018 03:24:37 +0300 Subject: [PATCH 01/17] Creating interface and mock --- tdd_intro/homework/07_filecopier/test.cpp | 12 ++++ tdd_intro/tdd_intro.pro.user | 74 +++++++++++------------ 2 files changed, 49 insertions(+), 37 deletions(-) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index be20cab..627997b 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -20,3 +20,15 @@ You can start with GMock from https://goo.gl/j7EkQX, good luck! #include #include +class IFileCopier +{ +public: + ~IFileCopier(); + virtual void Copy(const std::string& src, const std::string& dst) = 0; +}; + +class FileCopierMock : public IFileCopier +{ +public: + MOCK_METHOD2(Copy, void(const std::string&, const std::string&)); +}; diff --git a/tdd_intro/tdd_intro.pro.user b/tdd_intro/tdd_intro.pro.user index a2f1674..784a476 100644 --- a/tdd_intro/tdd_intro.pro.user +++ b/tdd_intro/tdd_intro.pro.user @@ -1,10 +1,10 @@ - + EnvironmentId - {a9e7f687-ac9f-466e-a5b0-c81b575a0a1d} + {950e75d0-15c4-4cbb-8e75-9217fe27f405} ProjectExplorer.Project.ActiveTarget @@ -59,14 +59,14 @@ ProjectExplorer.Project.Target.0 - Qt 5.7.0 (windows) - Qt 5.7.0 (windows) - {bb54e87c-a17e-4f34-bfa2-da2794ff8a10} + Desktop Qt 5.10.0 MSVC2015 32bit + Desktop Qt 5.10.0 MSVC2015 32bit + qt.qt5.5100.win32_msvc2015_kit 0 0 - 11 + 0 - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug + C:/Users/ertev/Desktop/TDD course/tdd-course-2/build-tdd_intro-Desktop_Qt_5_10_0_MSVC2015_32bit-Debug true @@ -120,7 +120,7 @@ true - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Release + C:/Users/ertev/Desktop/TDD course/tdd-course-2/build-tdd_intro-Desktop_Qt_5_10_0_MSVC2015_32bit-Release true @@ -174,7 +174,7 @@ true - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Profile + C:/Users/ertev/Desktop/TDD course/tdd-course-2/build-tdd_intro-Desktop_Qt_5_10_0_MSVC2015_32bit-Profile true @@ -286,13 +286,13 @@ chatclient - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/cleanroom/chatclient/chatclient.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/cleanroom/chatclient/chatclient.pro true cleanroom/chatclient/chatclient.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/cleanroom/chatclient + 3768 false true @@ -344,13 +344,13 @@ 01_bob - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/01_bob/01_bob.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/01_bob/01_bob.pro true homework/01_bob/01_bob.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/01_bob + 3768 false true @@ -402,13 +402,13 @@ 02_word_count - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/02_word_count/02_word_count.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/02_word_count/02_word_count.pro true workshops/02_word_count/02_word_count.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/02_word_count + 3768 false true @@ -460,13 +460,13 @@ 03_anagram 03_anagram2 - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/03_anagram/03_anagram.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/03_anagram/03_anagram.pro true workshops/03_anagram/03_anagram.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/03_anagram + 3768 false true @@ -518,13 +518,13 @@ 04_trinary_numbers 04_trinary_numbers2 - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/04_trinary_numbers/04_trinary_numbers.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/04_trinary_numbers/04_trinary_numbers.pro true workshops/04_trinary_numbers/04_trinary_numbers.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/04_trinary_numbers + 3768 false true @@ -576,13 +576,13 @@ 05_word_wrapp 05_word_wrapp2 - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/05_word_wrapp/05_word_wrapp.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/05_word_wrapp/05_word_wrapp.pro true workshops/05_word_wrapp/05_word_wrapp.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/05_word_wrapp + 3768 false true @@ -634,13 +634,13 @@ 02_leap_year - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/02_leap_year/02_leap_year.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/02_leap_year/02_leap_year.pro true homework/02_leap_year/02_leap_year.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/02_leap_year + 3768 false true @@ -692,13 +692,13 @@ 03_anagram - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/03_anagram/03_anagram.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/03_anagram/03_anagram.pro true homework/03_anagram/03_anagram.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/03_anagram + 3768 false true @@ -750,13 +750,13 @@ 04_trinary_numbers - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/04_trinary_numbers/04_trinary_numbers.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/04_trinary_numbers/04_trinary_numbers.pro true homework/04_trinary_numbers/04_trinary_numbers.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/04_trinary_numbers + 3768 false true @@ -808,13 +808,13 @@ 05_word_wrapp - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/05_word_wrapp/05_word_wrapp.pro true homework/05_word_wrapp/05_word_wrapp.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/05_word_wrapp + 3768 false true @@ -866,13 +866,13 @@ 06_bank_ocr - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/06_bank_ocr/06_bank_ocr.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/06_bank_ocr/06_bank_ocr.pro true homework/06_bank_ocr/06_bank_ocr.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/06_bank_ocr + 3768 false true @@ -924,13 +924,13 @@ 07_filecopier - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/07_filecopier/07_filecopier.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/07_filecopier/07_filecopier.pro true homework/07_filecopier/07_filecopier.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/07_filecopier + 3768 false true @@ -982,13 +982,13 @@ 08_timer - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/homework/08_timer/08_timer.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/homework/08_timer/08_timer.pro true homework/08_timer/08_timer.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/homework/08_timer + 3768 false true @@ -1040,13 +1040,13 @@ 01_fizz_buzz - Qt4ProjectManager.Qt4RunConfiguration:D:/Study/tdd-course-2/tdd_intro/workshops/01_fizz_buzz/01_fizz_buzz.pro + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/ertev/Desktop/TDD course/tdd-course-2/tdd_intro/workshops/01_fizz_buzz/01_fizz_buzz.pro true workshops/01_fizz_buzz/01_fizz_buzz.pro false - D:/Study/tdd-course-2/build-tdd_intro-Qt_5_7_0_windows-Debug/workshops/01_fizz_buzz + 3768 false true From 350da26040d67b62204bc9a38d00f3cfa6b1517a Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:22:46 +0300 Subject: [PATCH 02/17] Added test list --- tdd_intro/homework/07_filecopier/test.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 627997b..524c6d7 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -20,6 +20,14 @@ You can start with GMock from https://goo.gl/j7EkQX, good luck! #include #include +/* 1. Copy single file + 2. Attempt to copy unexistant file + 3. Copy folder with single file + 4. Copy empty folder + 5. Attempt to copy unexistant folder + 6. Copy folder with several files + 7. Copy folder with several files and other folders */ + class IFileCopier { public: From bcfe20922877d79017926114cfb2f02ad347adff Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:32:21 +0300 Subject: [PATCH 03/17] CopySingleFile - red --- tdd_intro/homework/07_filecopier/test.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 524c6d7..9551137 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -28,15 +28,28 @@ You can start with GMock from https://goo.gl/j7EkQX, good luck! 6. Copy folder with several files 7. Copy folder with several files and other folders */ +const std::string s_singleFileSrcPath("C://singleFile"); +const std::string s_singleFileDstPath("D://singleFile"); + class IFileCopier { public: ~IFileCopier(); virtual void Copy(const std::string& src, const std::string& dst) = 0; + virtual void CopyFile(const std::string& src, const std::string& dst) = 0; }; class FileCopierMock : public IFileCopier { public: MOCK_METHOD2(Copy, void(const std::string&, const std::string&)); + MOCK_METHOD2(CopyFile, void(const std::string&, const std::string&)); }; + +TEST(FileCopier, CopySingleFile) +{ + FileCopierMock mock; + + EXPECT_CALL(mock, CopyFile(s_singleFileSrcPath, testing::_)).Times(1); + mock.Copy(s_singleFileSrcPath, s_singleFileDstPath); +} From 51242554142f2eab02d4d06a001ad6601d868d79 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:39:21 +0300 Subject: [PATCH 04/17] Fixed CopySingleFile test. Added impl class --- tdd_intro/homework/07_filecopier/test.cpp | 26 ++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 9551137..e2aadd9 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -34,8 +34,7 @@ const std::string s_singleFileDstPath("D://singleFile"); class IFileCopier { public: - ~IFileCopier(); - virtual void Copy(const std::string& src, const std::string& dst) = 0; + ~IFileCopier(){} virtual void CopyFile(const std::string& src, const std::string& dst) = 0; }; @@ -46,10 +45,31 @@ class FileCopierMock : public IFileCopier MOCK_METHOD2(CopyFile, void(const std::string&, const std::string&)); }; +class FileCopier +{ +public: + FileCopier(IFileCopier& fileCopier); + void Copy(const std::string& src, const std::string& dst); +private: + IFileCopier& m_fileCopier; +}; + +FileCopier::FileCopier(IFileCopier &fileCopier) + : m_fileCopier(fileCopier) +{ +} + +void FileCopier::Copy(const std::string &src, const std::string &dst) +{ + +} + TEST(FileCopier, CopySingleFile) { FileCopierMock mock; + FileCopier fileCopier(mock); EXPECT_CALL(mock, CopyFile(s_singleFileSrcPath, testing::_)).Times(1); - mock.Copy(s_singleFileSrcPath, s_singleFileDstPath); + + fileCopier.Copy(s_singleFileSrcPath, s_singleFileDstPath); } From 2ab11e6c78cf59951cacdaaba0924fb6556a63df Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:40:01 +0300 Subject: [PATCH 05/17] CopySingleFile - green --- tdd_intro/homework/07_filecopier/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index e2aadd9..be58056 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -61,7 +61,7 @@ FileCopier::FileCopier(IFileCopier &fileCopier) void FileCopier::Copy(const std::string &src, const std::string &dst) { - + m_fileCopier.CopyFile(src, dst); } TEST(FileCopier, CopySingleFile) From 9e3229fc9e0b0c1acd9be062dc29008c7ecfa8bd Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:43:07 +0300 Subject: [PATCH 06/17] CopyUnexistantFile - green --- tdd_intro/homework/07_filecopier/test.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index be58056..6d29a23 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -31,6 +31,9 @@ You can start with GMock from https://goo.gl/j7EkQX, good luck! const std::string s_singleFileSrcPath("C://singleFile"); const std::string s_singleFileDstPath("D://singleFile"); +const std::string s_unexistantFileSrcPath("C://unexistantFile"); +const std::string s_unexistantFileDstPath("D://unexistantFile"); + class IFileCopier { public: @@ -73,3 +76,13 @@ TEST(FileCopier, CopySingleFile) fileCopier.Copy(s_singleFileSrcPath, s_singleFileDstPath); } + +TEST(FileCopier, CopyUnexistantFile) +{ + FileCopierMock mock; + FileCopier fileCopier(mock); + + EXPECT_CALL(mock, CopyFile(s_unexistantFileSrcPath, testing::_)).Times(0); + + fileCopier.Copy(s_unexistantFileSrcPath, s_unexistantFileDstPath); +} From 0f72dcff0419f8919022beabb0fa850fac5e37df Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:46:42 +0300 Subject: [PATCH 07/17] Fixed CopySingleFile test - still green --- tdd_intro/homework/07_filecopier/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 6d29a23..743f03a 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -72,7 +72,7 @@ TEST(FileCopier, CopySingleFile) FileCopierMock mock; FileCopier fileCopier(mock); - EXPECT_CALL(mock, CopyFile(s_singleFileSrcPath, testing::_)).Times(1); + EXPECT_CALL(mock, CopyFile(s_singleFileSrcPath, s_singleFileDstPath)).Times(1); fileCopier.Copy(s_singleFileSrcPath, s_singleFileDstPath); } From ac23ef5def5ceffb4edaeeb2261fbbd1c7676a0a Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:47:14 +0300 Subject: [PATCH 08/17] Removed Copy method from IFileCopier --- tdd_intro/homework/07_filecopier/test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 743f03a..e05fe0f 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -44,7 +44,6 @@ class IFileCopier class FileCopierMock : public IFileCopier { public: - MOCK_METHOD2(Copy, void(const std::string&, const std::string&)); MOCK_METHOD2(CopyFile, void(const std::string&, const std::string&)); }; From 6d07a1b48f0318b96bbe7ba7c76062f732f5b9e6 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:53:35 +0300 Subject: [PATCH 09/17] CopyUnexistantFile - green, but CopySingleFile - red --- tdd_intro/homework/07_filecopier/test.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index e05fe0f..27c27ca 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -39,12 +39,14 @@ class IFileCopier public: ~IFileCopier(){} virtual void CopyFile(const std::string& src, const std::string& dst) = 0; + virtual bool CheckFileExists(const std::string& file) = 0; }; class FileCopierMock : public IFileCopier { public: MOCK_METHOD2(CopyFile, void(const std::string&, const std::string&)); + MOCK_METHOD1(CheckFileExists, bool(const std::string&)); }; class FileCopier @@ -63,7 +65,10 @@ FileCopier::FileCopier(IFileCopier &fileCopier) void FileCopier::Copy(const std::string &src, const std::string &dst) { - m_fileCopier.CopyFile(src, dst); + if (m_fileCopier.CheckFileExists(src)) + { + m_fileCopier.CopyFile(src, dst); + } } TEST(FileCopier, CopySingleFile) @@ -81,6 +86,7 @@ TEST(FileCopier, CopyUnexistantFile) FileCopierMock mock; FileCopier fileCopier(mock); + EXPECT_CALL(mock, CheckFileExists(s_unexistantFileSrcPath)).WillOnce(testing::Return(false)); EXPECT_CALL(mock, CopyFile(s_unexistantFileSrcPath, testing::_)).Times(0); fileCopier.Copy(s_unexistantFileSrcPath, s_unexistantFileDstPath); From 9ee1ffba855f041b198cd3abd3fc92e9b2bcef44 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:54:18 +0300 Subject: [PATCH 10/17] Fixed CopySingleFile test --- tdd_intro/homework/07_filecopier/test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 27c27ca..99c1a40 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -76,6 +76,7 @@ TEST(FileCopier, CopySingleFile) FileCopierMock mock; FileCopier fileCopier(mock); + EXPECT_CALL(mock, CheckFileExists(s_singleFileSrcPath)).WillOnce(testing::Return(true)); EXPECT_CALL(mock, CopyFile(s_singleFileSrcPath, s_singleFileDstPath)).Times(1); fileCopier.Copy(s_singleFileSrcPath, s_singleFileDstPath); From c436c3f673a6e9bab587c3a072d26676bf4cb290 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:55:52 +0300 Subject: [PATCH 11/17] Modified test list --- tdd_intro/homework/07_filecopier/test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 99c1a40..b3f7da4 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -22,9 +22,9 @@ You can start with GMock from https://goo.gl/j7EkQX, good luck! /* 1. Copy single file 2. Attempt to copy unexistant file - 3. Copy folder with single file - 4. Copy empty folder - 5. Attempt to copy unexistant folder + 3. Copy empty folder + 4. Attempt to copy unexistant folder + 5. Copy folder with single file 6. Copy folder with several files 7. Copy folder with several files and other folders */ From dfda6fca36ea3f3abe8e15fedcd53dd158f69a0e Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 03:59:04 +0300 Subject: [PATCH 12/17] CopyEmptyFolder - red --- tdd_intro/homework/07_filecopier/test.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index b3f7da4..15fc4e7 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -34,6 +34,9 @@ const std::string s_singleFileDstPath("D://singleFile"); const std::string s_unexistantFileSrcPath("C://unexistantFile"); const std::string s_unexistantFileDstPath("D://unexistantFile"); +const std::string s_emptyFolderSrcPath("C://emptyFolder"); +const std::string s_emptyFolderDstPath("D://emptyFolder"); + class IFileCopier { public: @@ -92,3 +95,13 @@ TEST(FileCopier, CopyUnexistantFile) fileCopier.Copy(s_unexistantFileSrcPath, s_unexistantFileDstPath); } + +TEST(FileCopier, CopyEmptyFolder) +{ + FileCopierMock mock; + FileCopier fileCopier(mock); + + EXPECT_CALL(mock, CopyFolder(s_emptyFolderSrcPath, s_emptyFolderDstPath)).Times(1); + + fileCopier.Copy(s_emptyFolderSrcPath, s_emptyFolderDstPath); +} From a907351b17d1fdd4aeafc44d6e93d92228cbf58b Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 04:03:59 +0300 Subject: [PATCH 13/17] CopyEmptyFolder - green --- tdd_intro/homework/07_filecopier/test.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 15fc4e7..deee4b0 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -42,14 +42,20 @@ class IFileCopier public: ~IFileCopier(){} virtual void CopyFile(const std::string& src, const std::string& dst) = 0; + virtual void CopyFolder(const std::string& src, const std::string& dst) = 0; + virtual bool CheckFileExists(const std::string& file) = 0; + virtual bool IsFolder(const std::string& path) = 0; }; class FileCopierMock : public IFileCopier { public: MOCK_METHOD2(CopyFile, void(const std::string&, const std::string&)); + MOCK_METHOD2(CopyFolder, void(const std::string&, const std::string&)); + MOCK_METHOD1(CheckFileExists, bool(const std::string&)); + MOCK_METHOD1(IsFolder, bool(const std::string&)); }; class FileCopier @@ -68,6 +74,11 @@ FileCopier::FileCopier(IFileCopier &fileCopier) void FileCopier::Copy(const std::string &src, const std::string &dst) { + if (m_fileCopier.IsFolder(src)) + { + m_fileCopier.CopyFolder(src, dst); + } + if (m_fileCopier.CheckFileExists(src)) { m_fileCopier.CopyFile(src, dst); @@ -101,6 +112,7 @@ TEST(FileCopier, CopyEmptyFolder) FileCopierMock mock; FileCopier fileCopier(mock); + EXPECT_CALL(mock, IsFolder(s_emptyFolderSrcPath)).WillOnce(testing::Return(true)); EXPECT_CALL(mock, CopyFolder(s_emptyFolderSrcPath, s_emptyFolderDstPath)).Times(1); fileCopier.Copy(s_emptyFolderSrcPath, s_emptyFolderDstPath); From 5a93e352f2dbe147d198f84fc30e2c91a2b642d4 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 04:08:54 +0300 Subject: [PATCH 14/17] Refactoring --- tdd_intro/homework/07_filecopier/test.cpp | 27 ++++++++++++++--------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index deee4b0..3c0b2fe 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -44,7 +44,7 @@ class IFileCopier virtual void CopyFile(const std::string& src, const std::string& dst) = 0; virtual void CopyFolder(const std::string& src, const std::string& dst) = 0; - virtual bool CheckFileExists(const std::string& file) = 0; + virtual bool CheckIfExists(const std::string& file) = 0; virtual bool IsFolder(const std::string& path) = 0; }; @@ -54,7 +54,7 @@ class FileCopierMock : public IFileCopier MOCK_METHOD2(CopyFile, void(const std::string&, const std::string&)); MOCK_METHOD2(CopyFolder, void(const std::string&, const std::string&)); - MOCK_METHOD1(CheckFileExists, bool(const std::string&)); + MOCK_METHOD1(CheckIfExists, bool(const std::string&)); MOCK_METHOD1(IsFolder, bool(const std::string&)); }; @@ -74,14 +74,16 @@ FileCopier::FileCopier(IFileCopier &fileCopier) void FileCopier::Copy(const std::string &src, const std::string &dst) { - if (m_fileCopier.IsFolder(src)) + if (m_fileCopier.CheckIfExists(src)) { - m_fileCopier.CopyFolder(src, dst); - } - - if (m_fileCopier.CheckFileExists(src)) - { - m_fileCopier.CopyFile(src, dst); + if (m_fileCopier.IsFolder(src)) + { + m_fileCopier.CopyFolder(src, dst); + } + else + { + m_fileCopier.CopyFile(src, dst); + } } } @@ -90,7 +92,8 @@ TEST(FileCopier, CopySingleFile) FileCopierMock mock; FileCopier fileCopier(mock); - EXPECT_CALL(mock, CheckFileExists(s_singleFileSrcPath)).WillOnce(testing::Return(true)); + EXPECT_CALL(mock, CheckIfExists(s_singleFileSrcPath)).WillOnce(testing::Return(true)); + EXPECT_CALL(mock, IsFolder(s_singleFileSrcPath)).WillOnce(testing::Return(false)); EXPECT_CALL(mock, CopyFile(s_singleFileSrcPath, s_singleFileDstPath)).Times(1); fileCopier.Copy(s_singleFileSrcPath, s_singleFileDstPath); @@ -101,7 +104,8 @@ TEST(FileCopier, CopyUnexistantFile) FileCopierMock mock; FileCopier fileCopier(mock); - EXPECT_CALL(mock, CheckFileExists(s_unexistantFileSrcPath)).WillOnce(testing::Return(false)); + EXPECT_CALL(mock, CheckIfExists(s_unexistantFileSrcPath)).WillOnce(testing::Return(false)); + EXPECT_CALL(mock, IsFolder(testing::_)).Times(0); EXPECT_CALL(mock, CopyFile(s_unexistantFileSrcPath, testing::_)).Times(0); fileCopier.Copy(s_unexistantFileSrcPath, s_unexistantFileDstPath); @@ -112,6 +116,7 @@ TEST(FileCopier, CopyEmptyFolder) FileCopierMock mock; FileCopier fileCopier(mock); + EXPECT_CALL(mock, CheckIfExists(s_emptyFolderSrcPath)).WillOnce(testing::Return(true)); EXPECT_CALL(mock, IsFolder(s_emptyFolderSrcPath)).WillOnce(testing::Return(true)); EXPECT_CALL(mock, CopyFolder(s_emptyFolderSrcPath, s_emptyFolderDstPath)).Times(1); From c948ad6a27cb15197762e3da2b3c0896ed3d34ff Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 04:12:12 +0300 Subject: [PATCH 15/17] CopyUnexistantFolder - already greeb --- tdd_intro/homework/07_filecopier/test.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 3c0b2fe..4281cb4 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -37,6 +37,9 @@ const std::string s_unexistantFileDstPath("D://unexistantFile"); const std::string s_emptyFolderSrcPath("C://emptyFolder"); const std::string s_emptyFolderDstPath("D://emptyFolder"); +const std::string s_unexistantFolderSrcPath("C://unexistantFolder"); +const std::string s_unexistantFolderDstPath("D://unexistantFolder"); + class IFileCopier { public: @@ -122,3 +125,17 @@ TEST(FileCopier, CopyEmptyFolder) fileCopier.Copy(s_emptyFolderSrcPath, s_emptyFolderDstPath); } + +TEST(FileCopier, CopyUnexistantFolder) +{ + FileCopierMock mock; + FileCopier fileCopier(mock); + + EXPECT_CALL(mock, CheckIfExists(s_unexistantFolderSrcPath)).WillOnce(testing::Return(false)); + EXPECT_CALL(mock, IsFolder(testing::_)).Times(0); + EXPECT_CALL(mock, CopyFolder(s_unexistantFolderSrcPath, testing::_)).Times(0); + + fileCopier.Copy(s_unexistantFolderSrcPath, s_unexistantFolderDstPath); +} + + From bc905ba8f6be479c2c985849162ed1feb9394c02 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 04:14:02 +0300 Subject: [PATCH 16/17] Refactored tests --- tdd_intro/homework/07_filecopier/test.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 4281cb4..96ffcd3 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -98,6 +98,7 @@ TEST(FileCopier, CopySingleFile) EXPECT_CALL(mock, CheckIfExists(s_singleFileSrcPath)).WillOnce(testing::Return(true)); EXPECT_CALL(mock, IsFolder(s_singleFileSrcPath)).WillOnce(testing::Return(false)); EXPECT_CALL(mock, CopyFile(s_singleFileSrcPath, s_singleFileDstPath)).Times(1); + EXPECT_CALL(mock, CopyFolder(testing::_, testing::_)).Times(0); fileCopier.Copy(s_singleFileSrcPath, s_singleFileDstPath); } @@ -109,7 +110,8 @@ TEST(FileCopier, CopyUnexistantFile) EXPECT_CALL(mock, CheckIfExists(s_unexistantFileSrcPath)).WillOnce(testing::Return(false)); EXPECT_CALL(mock, IsFolder(testing::_)).Times(0); - EXPECT_CALL(mock, CopyFile(s_unexistantFileSrcPath, testing::_)).Times(0); + EXPECT_CALL(mock, CopyFile(testing::_, testing::_)).Times(0); + EXPECT_CALL(mock, CopyFolder(testing::_, testing::_)).Times(0); fileCopier.Copy(s_unexistantFileSrcPath, s_unexistantFileDstPath); } @@ -121,6 +123,7 @@ TEST(FileCopier, CopyEmptyFolder) EXPECT_CALL(mock, CheckIfExists(s_emptyFolderSrcPath)).WillOnce(testing::Return(true)); EXPECT_CALL(mock, IsFolder(s_emptyFolderSrcPath)).WillOnce(testing::Return(true)); + EXPECT_CALL(mock, CopyFile(testing::_, testing::_)).Times(0); EXPECT_CALL(mock, CopyFolder(s_emptyFolderSrcPath, s_emptyFolderDstPath)).Times(1); fileCopier.Copy(s_emptyFolderSrcPath, s_emptyFolderDstPath); @@ -133,7 +136,8 @@ TEST(FileCopier, CopyUnexistantFolder) EXPECT_CALL(mock, CheckIfExists(s_unexistantFolderSrcPath)).WillOnce(testing::Return(false)); EXPECT_CALL(mock, IsFolder(testing::_)).Times(0); - EXPECT_CALL(mock, CopyFolder(s_unexistantFolderSrcPath, testing::_)).Times(0); + EXPECT_CALL(mock, CopyFile(testing::_, testing::_)).Times(0); + EXPECT_CALL(mock, CopyFolder(testing::_, testing::_)).Times(0); fileCopier.Copy(s_unexistantFolderSrcPath, s_unexistantFolderDstPath); } From 09ccf021b3666b7f089d632864684e1643f64700 Mon Sep 17 00:00:00 2001 From: Raynare Date: Tue, 10 Jul 2018 04:44:59 +0300 Subject: [PATCH 17/17] CopyFolderWithSingleFile - red --- tdd_intro/homework/07_filecopier/test.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tdd_intro/homework/07_filecopier/test.cpp b/tdd_intro/homework/07_filecopier/test.cpp index 96ffcd3..7b16ddc 100644 --- a/tdd_intro/homework/07_filecopier/test.cpp +++ b/tdd_intro/homework/07_filecopier/test.cpp @@ -40,6 +40,12 @@ const std::string s_emptyFolderDstPath("D://emptyFolder"); const std::string s_unexistantFolderSrcPath("C://unexistantFolder"); const std::string s_unexistantFolderDstPath("D://unexistantFolder"); +const std::string s_singleFileFolderSrcPath("C://singleFileFolder"); +const std::string s_singleFileFolderDstPath("D://singleFileFolder"); +const std::string s_singleFileFolderFileName("file"); +const std::string s_singleFileFolderFileSrc("C://singleFileFolder//file"); +const std::string s_singleFileFolderFileDst("D://singleFileFolder//file"); + class IFileCopier { public: @@ -142,4 +148,16 @@ TEST(FileCopier, CopyUnexistantFolder) fileCopier.Copy(s_unexistantFolderSrcPath, s_unexistantFolderDstPath); } +TEST(FileCopier, CopyFolderWithSingleFile) +{ + FileCopierMock mock; + FileCopier fileCopier(mock); + + EXPECT_CALL(mock, CheckIfExists(s_unexistantFolderSrcPath)).WillOnce(testing::Return(true)); + EXPECT_CALL(mock, IsFolder(s_emptyFolderSrcPath)).WillOnce(testing::Return(true)); + EXPECT_CALL(mock, CopyFolder(s_singleFileFolderSrcPath, s_singleFileFolderDstPath)).Times(1); + EXPECT_CALL(mock, CopyFile(s_singleFileFolderFileSrc, s_singleFileFolderFileDst)).Times(1); + + fileCopier.Copy(s_singleFileFolderSrcPath, s_singleFileFolderDstPath); +}