summaryrefslogtreecommitdiff
path: root/test/test.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-06-26 01:56:07 +0200
committerCarl Hetherington <cth@carlh.net>2023-06-27 00:10:53 +0200
commit113f1062f131577cb169fe1516d49d1f79fa16cf (patch)
treeb43a85bc04833f2ac9cca24e30765f040785049e /test/test.cc
parentc72e832423ceb81f30e8ca19bfeb87fca26298c1 (diff)
Move Editor class from verify_test.cc to test.cc
Diffstat (limited to 'test/test.cc')
-rw-r--r--test/test.cc111
1 files changed, 111 insertions, 0 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);