tunit - Reference Guide  1.0.0
Modern c++17 unit testing framework on Windows, macOS, Linux, iOS and android.
file_assert.h
Go to the documentation of this file.
1 #pragma once
4 #include "directory_assert.h"
5 
7 namespace tunit {
12  class file_assert final : private base_assert {
13  public:
15  file_assert() = delete;
17 
35  template<typename Char>
36  static void are_equal(const std::basic_istream<Char>& expected, const std::basic_istream<Char>& actual) {are_equal(expected, actual, "", line_info());}
37 
56  template<typename Char>
57  static void are_equal(const std::basic_istream<Char>& expected, const std::basic_istream<Char>& actual, const tunit::line_info& line_info) {are_equal(expected, actual, "", line_info);}
58 
77  template<typename Char>
78  static void are_equal(const std::basic_istream<Char>& expected, const std::basic_istream<Char>& actual, const std::string& message) {are_equal(expected, actual, message, line_info());}
79 
99  template<typename Char>
100  static void are_equal(const std::basic_istream<Char>& expected, const std::basic_istream<Char>& actual, const std::string& message, const tunit::line_info& line_info) {
101  std::basic_istream<Char> if_expected(expected.rdbuf());
102  std::basic_istream<Char> if_actual(actual.rdbuf());
103 
104  if_expected.seekg(0, std::ios::end);
105  if_actual.seekg(0, std::ios::end);
106  size_t size_expected = if_expected.tellg();
107  size_t size_actual = if_actual.tellg();
108  if (size_expected != size_actual) {
109  base_assert::fail("istream length " + base_assert::to_string(size_expected), base_assert::to_string(size_actual), message, line_info);
110  return;
111  }
112 
113  if_expected.seekg(0, std::ios::beg);
114  if_actual.seekg(0, std::ios::beg);
115  for (size_t offset = 0; offset < size_actual; ++offset) {
116  Char value_expected = if_expected.get();
117  Char value_actual = if_actual.get();
118  if (value_expected != value_actual) {
119  base_assert::fail("istream at offset " + base_assert::to_string(offset) + " value " + base_assert::to_string(value_expected), base_assert::to_string(value_actual), message, line_info);
120  return;
121  }
122  }
123  assert::succeed(message, line_info);
124  }
125 
143  template<typename Char>
144  static void are_equal(const std::basic_string<Char>& expected, const std::basic_string<Char>& actual) {are_equal(expected, actual, "", line_info());}
145 
164  template<typename Char>
165  static void are_equal(const std::basic_string<Char>& expected, const std::basic_string<Char>& actual, const tunit::line_info& line_info) {are_equal(expected, actual, "", line_info);}
166 
185  template<typename Char>
186  static void are_equal(const std::basic_string<Char>& expected, const std::basic_string<Char>& actual, const std::string& message) {are_equal(expected, actual, message, line_info());}
187 
207  template<typename Char>
208  static void are_equal(const std::basic_string<Char>& expected, const std::basic_string<Char>& actual, const std::string& message, const tunit::line_info& line_info) {are_equal(std::basic_ifstream<Char>(expected), std::basic_ifstream<Char>(actual), message, line_info);}
209 
211  template<typename Char>
212  static void are_equal(const std::basic_string<Char>& expected, const Char* actual) {are_equal(expected, actual, "", line_info());}
213  template<typename Char>
214  static void are_equal(const std::basic_string<Char>& expected, const Char* actual, const tunit::line_info& line_info) {are_equal(expected, actual, "", line_info);}
215  template<typename Char>
216  static void are_equal(const std::basic_string<Char>& expected, const Char* actual, const std::string& message) {are_equal(expected, actual, message, line_info());}
217  template<typename Char>
218  static void are_equal(const std::basic_string<Char>& expected, const Char* actual, const std::string& message, const tunit::line_info& line_info) {are_equal(std::basic_ifstream<Char>(expected), std::basic_ifstream<Char>(actual), message, line_info);}
219  template<typename Char>
220  static void are_equal(const Char* expected, const std::basic_string<Char>& actual) {are_equal(expected, actual, "", line_info());}
221  template<typename Char>
222  static void are_equal(const Char* expected, const std::basic_string<Char>& actual, const tunit::line_info& line_info) {are_equal(expected, actual, "", line_info);}
223  template<typename Char>
224  static void are_equal(const Char* expected, const std::basic_string<Char>& actual, const std::string& message) {are_equal(expected, actual, message, line_info());}
225  template<typename Char>
226  static void are_equal(const Char* expected, const std::basic_string<Char>& actual, const std::string& message, const tunit::line_info& line_info) {are_equal(std::basic_ifstream<Char>(expected), std::basic_ifstream<Char>(actual), message, line_info);}
227  template<typename Char>
228  static void are_equal(const Char* expected, const Char* actual) {are_equal(expected, actual, "", line_info());}
229  template<typename Char>
230  static void are_equal(const Char* expected, const Char* actual, const tunit::line_info& line_info) {are_equal(expected, actual, "", line_info);}
231  template<typename Char>
232  static void are_equal(const Char* expected, const Char* actual, const std::string& message) {are_equal(expected, actual, message, line_info());}
233  template<typename Char>
234  static void are_equal(const Char* expected, const Char* actual, const std::string& message, const tunit::line_info& line_info) {are_equal(std::basic_ifstream<Char>(expected), std::basic_ifstream<Char>(actual), message, line_info);}
236 
254  template<typename Char>
255  static void are_not_equal(const std::basic_istream<Char>& expected, const std::basic_istream<Char>& actual) {are_not_equal(expected, actual, "", line_info());}
256 
275  template<typename Char>
276  static void are_not_equal(const std::basic_istream<Char>& expected, const std::basic_istream<Char>& actual, const tunit::line_info& line_info) {are_not_equal(expected, actual, "", line_info);}
277 
296  template<typename Char>
297  static void are_not_equal(const std::basic_istream<Char>& expected, const std::basic_istream<Char>& actual, const std::string& message) {are_not_equal(expected, actual, message, line_info());}
298 
318  template<typename Char>
319  static void are_not_equal(const std::basic_istream<Char>& expected, const std::basic_istream<Char>& actual, const std::string& message, const tunit::line_info& line_info) {
320  std::basic_istream<Char> if_expected(expected.rdbuf());
321  std::basic_istream<Char> if_actual(actual.rdbuf());
322 
323  if_expected.seekg(0, std::ios::end);
324  if_actual.seekg(0, std::ios::end);
325  size_t size_expected = if_expected.tellg();
326  size_t size_actual = if_actual.tellg();
327  if (size_expected != size_actual) {
328  assert::succeed(message, line_info);
329  return;
330  }
331 
332  if_expected.seekg(0, std::ios::beg);
333  if_actual.seekg(0, std::ios::beg);
334  for (size_t offset = 0; offset < size_actual; ++offset) {
335  Char value_expected = if_expected.get();
336  Char value_actual = if_actual.get();
337  if (value_expected != value_actual) {
338  assert::succeed(message, line_info);
339  return;
340  }
341  }
342  base_assert::fail("not equal <" + __tunit_demangle(typeid(expected).name()) + ">", "<" + __tunit_demangle(typeid(expected).name()) + ">", message, line_info);
343  }
344 
362  template<typename Char>
363  static void are_not_equal(const std::basic_string<Char>& expected, const std::basic_string<Char>& actual) {are_not_equal(expected, actual, "", line_info());}
364 
383  template<typename Char>
384  static void are_not_equal(const std::basic_string<Char>& expected, const std::basic_string<Char>& actual, const tunit::line_info& line_info) {are_not_equal(expected, actual, "", line_info);}
385 
404  template<typename Char>
405  static void are_not_equal(const std::basic_string<Char>& expected, const std::basic_string<Char>& actual, const std::string& message) {are_not_equal(expected, actual, message, line_info());}
406 
426  template<typename Char>
427  static void are_not_equal(const std::basic_string<Char>& expected, const std::basic_string<Char>& actual, const std::string& message, const tunit::line_info& line_info) {are_not_equal(std::basic_ifstream<Char>(expected), std::basic_ifstream<Char>(actual), message, line_info);}
428 
430  template<typename Char>
431  static void are_not_equal(const std::basic_string<Char>& expected, const Char* actual) {are_not_equal(expected, actual, "", line_info());}
432  template<typename Char>
433  static void are_not_equal(const std::basic_string<Char>& expected, const Char* actual, const tunit::line_info& line_info) {are_not_equal(expected, actual, "", line_info);}
434  template<typename Char>
435  static void are_not_equal(const std::basic_string<Char>& expected, const Char* actual, const std::string& message) {are_not_equal(expected, actual, message, line_info());}
436  template<typename Char>
437  static void are_not_equal(const std::basic_string<Char>& expected, const Char* actual, const std::string& message, const tunit::line_info& line_info) {are_not_equal(std::basic_ifstream<Char>(expected), std::basic_ifstream<Char>(actual), message, line_info);}
438  template<typename Char>
439  static void are_not_equal(const Char* expected, const std::basic_string<Char>& actual) {are_not_equal(expected, actual, "", line_info());}
440  template<typename Char>
441  static void are_not_equal(const Char* expected, const std::basic_string<Char>& actual, const tunit::line_info& line_info) {are_not_equal(expected, actual, "", line_info);}
442  template<typename Char>
443  static void are_not_equal(const Char* expected, const std::basic_string<Char>& actual, const std::string& message) {are_not_equal(expected, actual, message, line_info());}
444  template<typename Char>
445  static void are_not_equal(const Char* expected, const std::basic_string<Char>& actual, const std::string& message, const tunit::line_info& line_info) {are_not_equal(std::basic_ifstream<Char>(expected), std::basic_ifstream<Char>(actual), message, line_info);}
446  template<typename Char>
447  static void are_not_equal(const Char* expected, const Char* actual) {are_not_equal(expected, actual, "", line_info());}
448  template<typename Char>
449  static void are_not_equal(const Char* expected, const Char* actual, const tunit::line_info& line_info) {are_not_equal(expected, actual, "", line_info);}
450  template<typename Char>
451  static void are_not_equal(const Char* expected, const Char* actual, const std::string& message) {are_not_equal(expected, actual, message, line_info());}
452  template<typename Char>
453  static void are_not_equal(const Char* expected, const Char* actual, const std::string& message, const tunit::line_info& line_info) {are_not_equal(std::basic_ifstream<Char>(expected), std::basic_ifstream<Char>(actual), message, line_info);}
455 
467  template<typename Char>
468  static void exists(const std::basic_string<Char>& file) {exists(file, "", line_info());}
469 
482  template<typename Char>
483  static void exists(const std::basic_string<Char>& file, const tunit::line_info& line_info) {exists(file, "", line_info);}
484 
497  template<typename Char>
498  static void exists(const std::basic_string<Char>& file, const std::string& message) {exists(file, message, line_info());}
499 
513  template<typename Char>
514  static void exists(const std::basic_string<Char>& file, const std::string& message, const tunit::line_info& line_info) {
515  if (std::basic_ifstream<Char>(file).good() == false)
516  base_assert::fail("file exists", base_assert::to_string(file), message, line_info);
517  else
518  assert::succeed(message, line_info);
519  }
520 
522  template<typename Char>
523  static void exists(const Char* file) {exists(file, "", line_info());}
524  template<typename Char>
525  static void exists(const Char* file, const tunit::line_info& line_info) {exists(file, "", line_info);}
526  template<typename Char>
527  static void exists(const Char* file, const std::string& message) {exists(file, message, line_info());}
528  template<typename Char>
529  static void exists(const Char* file, const std::string& message, const tunit::line_info& line_info) {exists(std::basic_string<Char>(file), message, line_info);}
531 
543  template<typename Char>
544  static void does_not_exist(const std::basic_string<Char>& file) {does_not_exist(file, "", line_info());}
545 
558  template<typename Char>
559  static void does_not_exist(const std::basic_string<Char>& file, const tunit::line_info& line_info) {does_not_exist(file, "", line_info);}
560 
573  template<typename Char>
574  static void does_not_exist(const std::basic_string<Char>& file, const std::string& message) {does_not_exist(file, message, line_info());}
575 
589  template<typename Char>
590  static void does_not_exist(const std::basic_string<Char>& file, const std::string& message, const tunit::line_info& line_info) {
591  if (std::basic_ifstream<Char>(file).good() == true)
592  base_assert::fail("not file exists", base_assert::to_string(file), message, line_info);
593  else
594  assert::succeed(message, line_info);
595  }
596 
598  template<typename Char>
599  static void does_not_exist(const Char* file) {does_not_exist(file, "", line_info());}
600  template<typename Char>
601  static void does_not_exist(const Char* file, const tunit::line_info& line_info) {does_not_exist(file, "", line_info);}
602  template<typename Char>
603  static void does_not_exist(const Char* file, const std::string& message) {does_not_exist(file, message, line_info());}
604  template<typename Char>
605  static void does_not_exist(const Char* file, const std::string& message, const tunit::line_info& line_info) {does_not_exist(std::basic_string<Char>(file), message, line_info);}
607  };
608 }
static void are_not_equal(const std::basic_string< Char > &expected, const std::basic_string< Char > &actual, const std::string &message)
Asserts that two files are not equal.
Definition: file_assert.h:405
static void exists(const std::basic_string< Char > &file)
Asserts that file exists.
Definition: file_assert.h:468
static void are_equal(const std::basic_string< Char > &expected, const std::basic_string< Char > &actual, const tunit::line_info &line_info)
Asserts that two files are equal.
Definition: file_assert.h:165
static void are_equal(const std::basic_string< Char > &expected, const std::basic_string< Char > &actual, const std::string &message, const tunit::line_info &line_info)
Asserts that two files are equal.
Definition: file_assert.h:208
static void are_not_equal(const std::basic_istream< Char > &expected, const std::basic_istream< Char > &actual, const std::string &message)
Asserts that two files are not equal.
Definition: file_assert.h:297
Contains tunit::directory_assert class.
static void are_equal(const std::basic_istream< Char > &expected, const std::basic_istream< Char > &actual)
Asserts that two files are equal.
Definition: file_assert.h:36
static void exists(const std::basic_string< Char > &file, const tunit::line_info &line_info)
Asserts that file exists.
Definition: file_assert.h:483
static void does_not_exist(const std::basic_string< Char > &file, const std::string &message)
Asserts that file not exists.
Definition: file_assert.h:574
static void are_equal(const std::basic_string< Char > &expected, const std::basic_string< Char > &actual)
Asserts that two files are equal.
Definition: file_assert.h:144
line_info information class is used to store current file, current line and current function informat...
Definition: line_info.h:13
static void does_not_exist(const std::basic_string< Char > &file, const std::string &message, const tunit::line_info &line_info)
Asserts that file not exists.
Definition: file_assert.h:590
static void are_equal(const std::basic_istream< Char > &expected, const std::basic_istream< Char > &actual, const std::string &message, const tunit::line_info &line_info)
Asserts that two files are equal.
Definition: file_assert.h:100
static void fail()
Throws an tunit::assertion_error exception.
Definition: base_assert.h:60
static void are_not_equal(const std::basic_istream< Char > &expected, const std::basic_istream< Char > &actual)
Asserts that two files are not equal.
Definition: file_assert.h:255
static void exists(const std::basic_string< Char > &file, const std::string &message)
Asserts that file exists.
Definition: file_assert.h:498
static void does_not_exist(const std::basic_string< Char > &file, const tunit::line_info &line_info)
Asserts that file not exists.
Definition: file_assert.h:559
The file_assert class contains a collection of static methods that implement the most file assertions...
Definition: file_assert.h:12
static void are_equal(const std::basic_string< Char > &expected, const std::basic_string< Char > &actual, const std::string &message)
Asserts that two files are equal.
Definition: file_assert.h:186
Definition: base_assert.h:15
static void succeed()
Generates a success with a generic message.
Definition: base_assert.h:130
The tunit namespace contains a unit test library.
Definition: abort_error.h:8
static void are_not_equal(const std::basic_istream< Char > &expected, const std::basic_istream< Char > &actual, const std::string &message, const tunit::line_info &line_info)
Asserts that two files are not equal.
Definition: file_assert.h:319
static void are_not_equal(const std::basic_string< Char > &expected, const std::basic_string< Char > &actual, const tunit::line_info &line_info)
Asserts that two files are not equal.
Definition: file_assert.h:384
static void are_equal(const std::basic_istream< Char > &expected, const std::basic_istream< Char > &actual, const std::string &message)
Asserts that two files are equal.
Definition: file_assert.h:78
static void are_not_equal(const std::basic_string< Char > &expected, const std::basic_string< Char > &actual, const std::string &message, const tunit::line_info &line_info)
Asserts that two files are not equal.
Definition: file_assert.h:427
static void does_not_exist(const std::basic_string< Char > &file)
Asserts that file not exists.
Definition: file_assert.h:544
static void are_not_equal(const std::basic_istream< Char > &expected, const std::basic_istream< Char > &actual, const tunit::line_info &line_info)
Asserts that two files are not equal.
Definition: file_assert.h:276
static void are_not_equal(const std::basic_string< Char > &expected, const std::basic_string< Char > &actual)
Asserts that two files are not equal.
Definition: file_assert.h:363
static void are_equal(const std::basic_istream< Char > &expected, const std::basic_istream< Char > &actual, const tunit::line_info &line_info)
Asserts that two files are equal.
Definition: file_assert.h:57
static void exists(const std::basic_string< Char > &file, const std::string &message, const tunit::line_info &line_info)
Asserts that file exists.
Definition: file_assert.h:514