diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-06-26 01:56:07 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-06-27 00:10:53 +0200 |
| commit | 113f1062f131577cb169fe1516d49d1f79fa16cf (patch) | |
| tree | b43a85bc04833f2ac9cca24e30765f040785049e /test | |
| parent | c72e832423ceb81f30e8ca19bfeb87fca26298c1 (diff) | |
Move Editor class from verify_test.cc to test.cc
Diffstat (limited to 'test')
| -rw-r--r-- | test/test.cc | 111 | ||||
| -rw-r--r-- | test/test.h | 46 | ||||
| -rw-r--r-- | test/verify_test.cc | 129 |
3 files changed, 157 insertions, 129 deletions
diff --git a/test/test.cc b/test/test.cc index 309d5225..fb8d8a3d 100644 --- a/test/test.cc +++ b/test/test.cc @@ -68,6 +68,7 @@ LIBDCP_ENABLE_WARNINGS LIBDCP_DISABLE_WARNINGS #include <libxml++/libxml++.h> LIBDCP_ENABLE_WARNINGS +#include <boost/algorithm/string.hpp> #include <boost/test/unit_test.hpp> #include <cstdio> #include <iostream> @@ -546,4 +547,114 @@ find_file (boost::filesystem::path dir, string filename_part) } +Editor::Editor(boost::filesystem::path path) + : _path(path) +{ + _content = dcp::file_to_string (_path); +} + + +Editor::~Editor() +{ + auto f = fopen(_path.string().c_str(), "w"); + BOOST_REQUIRE (f); + fwrite (_content.c_str(), _content.length(), 1, f); + fclose (f); +} + + +void +Editor::replace(string a, string b) +{ + ChangeChecker cc(this); + boost::algorithm::replace_all (_content, a, b); +} + + +void +Editor::delete_first_line_containing(string s) +{ + ChangeChecker cc(this); + auto lines = as_lines(); + _content = ""; + bool done = false; + for (auto i: lines) { + if (i.find(s) == string::npos || done) { + _content += i + "\n"; + } else { + done = true; + } + } +} + +void +Editor::delete_lines(string from, string to) +{ + ChangeChecker cc(this); + auto lines = as_lines(); + bool deleting = false; + _content = ""; + for (auto i: lines) { + if (i.find(from) != string::npos) { + deleting = true; + } + if (!deleting) { + _content += i + "\n"; + } + if (deleting && i.find(to) != string::npos) { + deleting = false; + } + } +} + + +void +Editor::insert(string after, string line) +{ + ChangeChecker cc(this); + auto lines = as_lines(); + _content = ""; + bool replaced = false; + for (auto i: lines) { + _content += i + "\n"; + if (!replaced && i.find(after) != string::npos) { + _content += line + "\n"; + replaced = true; + } + } +} + + +void +Editor::delete_lines_after(string after, int lines_to_delete) +{ + ChangeChecker cc(this); + auto lines = as_lines(); + _content = ""; + auto iter = std::find_if(lines.begin(), lines.end(), [after](string const& line) { + return line.find(after) != string::npos; + }); + int to_delete = 0; + for (auto i = lines.begin(); i != lines.end(); ++i) { + if (i == iter) { + to_delete = lines_to_delete; + _content += *i + "\n"; + } else if (to_delete == 0) { + _content += *i + "\n"; + } else { + --to_delete; + } + } +} + + +vector<string> +Editor::as_lines() const +{ + vector<string> lines; + boost::algorithm::split(lines, _content, boost::is_any_of("\r\n"), boost::token_compress_on); + return lines; +} + + BOOST_GLOBAL_FIXTURE (TestConfig); diff --git a/test/test.h b/test/test.h index 82e6afd5..bacb9311 100644 --- a/test/test.h +++ b/test/test.h @@ -26,6 +26,7 @@ #include "reel_asset.h" #include <boost/filesystem.hpp> #include <boost/optional.hpp> +#include <boost/test/unit_test.hpp> namespace xmlpp { class Element; @@ -85,3 +86,48 @@ public: RNGFixer (); ~RNGFixer (); }; + + +/** Class that can alter a file by searching and replacing strings within it. + * On destruction modifies the file whose name was given to the constructor. + */ +class Editor +{ +public: + Editor(boost::filesystem::path path); + ~Editor(); + + class ChangeChecker + { + public: + ChangeChecker(Editor* editor) + : _editor(editor) + { + _old_content = _editor->_content; + } + + ~ChangeChecker() + { + BOOST_REQUIRE(_old_content != _editor->_content); + } + private: + Editor* _editor; + std::string _old_content; + }; + + void replace(std::string a, std::string b); + void delete_first_line_containing(std::string s); + void delete_lines(std::string from, std::string to); + void insert(std::string after, std::string line); + void delete_lines_after(std::string after, int lines_to_delete); + +private: + friend class ChangeChecker; + + std::vector<std::string> as_lines() const; + + boost::filesystem::path _path; + std::string _content; +}; + + diff --git a/test/verify_test.cc b/test/verify_test.cc index bc76de75..d7d9aaae 100644 --- a/test/verify_test.cc +++ b/test/verify_test.cc @@ -153,135 +153,6 @@ write_dcp_with_single_asset (path dir, shared_ptr<dcp::ReelAsset> reel_asset, dc } -/** Class that can alter a file by searching and replacing strings within it. - * On destruction modifies the file whose name was given to the constructor. - */ -class Editor -{ -public: - Editor (path path) - : _path(path) - { - _content = dcp::file_to_string (_path); - } - - ~Editor () - { - auto f = fopen(_path.string().c_str(), "w"); - BOOST_REQUIRE (f); - fwrite (_content.c_str(), _content.length(), 1, f); - fclose (f); - } - - class ChangeChecker - { - public: - ChangeChecker(Editor* editor) - : _editor(editor) - { - _old_content = _editor->_content; - } - - ~ChangeChecker() - { - BOOST_REQUIRE(_old_content != _editor->_content); - } - private: - Editor* _editor; - std::string _old_content; - }; - - void replace (string a, string b) - { - ChangeChecker cc(this); - boost::algorithm::replace_all (_content, a, b); - } - - void delete_first_line_containing (string s) - { - ChangeChecker cc(this); - auto lines = as_lines(); - _content = ""; - bool done = false; - for (auto i: lines) { - if (i.find(s) == string::npos || done) { - _content += i + "\n"; - } else { - done = true; - } - } - } - - void delete_lines (string from, string to) - { - ChangeChecker cc(this); - auto lines = as_lines(); - bool deleting = false; - _content = ""; - for (auto i: lines) { - if (i.find(from) != string::npos) { - deleting = true; - } - if (!deleting) { - _content += i + "\n"; - } - if (deleting && i.find(to) != string::npos) { - deleting = false; - } - } - } - - void insert (string after, string line) - { - ChangeChecker cc(this); - auto lines = as_lines(); - _content = ""; - bool replaced = false; - for (auto i: lines) { - _content += i + "\n"; - if (!replaced && i.find(after) != string::npos) { - _content += line + "\n"; - replaced = true; - } - } - } - - void delete_lines_after(string after, int lines_to_delete) - { - ChangeChecker cc(this); - auto lines = as_lines(); - _content = ""; - auto iter = std::find_if(lines.begin(), lines.end(), [after](string const& line) { - return line.find(after) != string::npos; - }); - int to_delete = 0; - for (auto i = lines.begin(); i != lines.end(); ++i) { - if (i == iter) { - to_delete = lines_to_delete; - _content += *i + "\n"; - } else if (to_delete == 0) { - _content += *i + "\n"; - } else { - --to_delete; - } - } - } - -private: - friend class ChangeChecker; - - vector<string> as_lines() const - { - vector<string> lines; - boost::algorithm::split(lines, _content, boost::is_any_of("\r\n"), boost::token_compress_on); - return lines; - } - - path _path; - std::string _content; -}; - - LIBDCP_DISABLE_WARNINGS static void |
