123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file Copyright.txt or https://cmake.org/licensing#kwsys for details. */
- #include "kwsysPrivate.h"
- #if defined(_MSC_VER)
- #pragma warning(disable : 4786)
- #endif
- #include KWSYS_HEADER(FStream.hxx)
- #include <string.h>
- #ifdef __BORLANDC__
- #include <mem.h> /* memcmp */
- #endif
- // Work-around CMake dependency scanning limitation. This must
- // duplicate the above list of headers.
- #if 0
- #include "FStream.hxx.in"
- #endif
- #include <iostream>
- static int testNoFile()
- {
- kwsys::ifstream in_file("NoSuchFile.txt");
- if (in_file) {
- return 1;
- }
- return 0;
- }
- static const int num_test_files = 7;
- static const int max_test_file_size = 45;
- static kwsys::FStream::BOM expected_bom[num_test_files] = {
- kwsys::FStream::BOM_None, kwsys::FStream::BOM_None,
- kwsys::FStream::BOM_UTF8, kwsys::FStream::BOM_UTF16LE,
- kwsys::FStream::BOM_UTF16BE, kwsys::FStream::BOM_UTF32LE,
- kwsys::FStream::BOM_UTF32BE
- };
- static unsigned char expected_bom_data[num_test_files][5] = {
- { 0 },
- { 0 },
- { 3, 0xEF, 0xBB, 0xBF },
- { 2, 0xFF, 0xFE },
- { 2, 0xFE, 0xFF },
- { 4, 0xFF, 0xFE, 0x00, 0x00 },
- { 4, 0x00, 0x00, 0xFE, 0xFF },
- };
- static unsigned char file_data[num_test_files][max_test_file_size] = {
- { 1, 'H' },
- { 11, 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd' },
- { 11, 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd' },
- { 22, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x20,
- 0x00, 0x57, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6C, 0x00, 0x64, 0x00 },
- { 22, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00,
- 0x20, 0x00, 0x57, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6C, 0x00, 0x64 },
- { 44, 0x48, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00,
- 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
- 0x00, 0x57, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00,
- 0x00, 0x6C, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00 },
- { 44, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00,
- 0x6C, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00,
- 0x72, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x64 },
- };
- static int testBOM()
- {
- // test various encodings in binary mode
- for (int i = 0; i < num_test_files; i++) {
- {
- kwsys::ofstream out("bom.txt", kwsys::ofstream::binary);
- out.write(reinterpret_cast<const char*>(expected_bom_data[i] + 1),
- *expected_bom_data[i]);
- out.write(reinterpret_cast<const char*>(file_data[i] + 1),
- file_data[i][0]);
- }
- kwsys::ifstream in("bom.txt", kwsys::ofstream::binary);
- kwsys::FStream::BOM bom = kwsys::FStream::ReadBOM(in);
- if (bom != expected_bom[i]) {
- std::cout << "Unexpected BOM " << i << std::endl;
- return 1;
- }
- char data[max_test_file_size];
- in.read(data, file_data[i][0]);
- if (!in.good()) {
- std::cout << "Unable to read data " << i << std::endl;
- return 1;
- }
- if (memcmp(data, file_data[i] + 1, file_data[i][0]) != 0) {
- std::cout << "Incorrect read data " << i << std::endl;
- return 1;
- }
- }
- return 0;
- }
- int testFStream(int, char* [])
- {
- int ret = 0;
- ret |= testNoFile();
- ret |= testBOM();
- return ret;
- }
|