| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*============================================================================
- KWSys - Kitware System Library
- Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
- ============================================================================*/
- #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;
- }
|