a9f3fb07a0
These tests didn't work correctly in ANSI build because the conversion parameter of wxFile::Write() isn't used there, the contents of an ANSI wxString is always written to the file as is -- hence reading it back using UTF-16 or UTF-32 conversion fails. The test would need to be totally rewritten for ANSI build of wx and it wouldn't test wxFile but rather conversion functions already tested elsewhere so just disable it instead. This fixes a crash (due to passing NULL pointer to memcmp()) which prevented the test suite from running to completion in ANSI build. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65834 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
107 lines
2.9 KiB
C++
107 lines
2.9 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/file/filetest.cpp
|
|
// Purpose: wxFile unit test
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2009-09-12
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "testprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#if wxUSE_FILE
|
|
|
|
#include "wx/file.h"
|
|
|
|
#include "testfile.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// test class
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class FileTestCase : public CppUnit::TestCase
|
|
{
|
|
public:
|
|
FileTestCase() { }
|
|
|
|
private:
|
|
CPPUNIT_TEST_SUITE( FileTestCase );
|
|
#if wxUSE_UNICODE
|
|
CPPUNIT_TEST( RoundTripUTF8 );
|
|
CPPUNIT_TEST( RoundTripUTF16 );
|
|
CPPUNIT_TEST( RoundTripUTF32 );
|
|
#endif // wxUSE_UNICODE
|
|
CPPUNIT_TEST( TempFile );
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
#if wxUSE_UNICODE
|
|
void RoundTripUTF8() { DoRoundTripTest(wxConvUTF8); }
|
|
void RoundTripUTF16() { DoRoundTripTest(wxMBConvUTF16()); }
|
|
void RoundTripUTF32() { DoRoundTripTest(wxMBConvUTF32()); }
|
|
#endif // wxUSE_UNICODE
|
|
|
|
void DoRoundTripTest(const wxMBConv& conv);
|
|
void TempFile();
|
|
|
|
wxDECLARE_NO_COPY_CLASS(FileTestCase);
|
|
};
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// CppUnit macros
|
|
// ----------------------------------------------------------------------------
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( FileTestCase );
|
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FileTestCase, "FileTestCase" );
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// tests implementation
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#if wxUSE_UNICODE
|
|
|
|
void FileTestCase::DoRoundTripTest(const wxMBConv& conv)
|
|
{
|
|
TestFile tf;
|
|
|
|
const wxString data = "Hello\0UTF";
|
|
|
|
{
|
|
wxFile fout(tf.GetName(), wxFile::write);
|
|
CPPUNIT_ASSERT( fout.IsOpened() );
|
|
|
|
CPPUNIT_ASSERT( fout.Write(data, conv) );
|
|
}
|
|
|
|
{
|
|
wxFile fin(tf.GetName(), wxFile::read);
|
|
CPPUNIT_ASSERT( fin.IsOpened() );
|
|
|
|
const ssize_t len = fin.Length();
|
|
wxCharBuffer buf(len);
|
|
CPPUNIT_ASSERT_EQUAL( len, fin.Read(buf.data(), len) );
|
|
|
|
wxWCharBuffer wbuf(conv.cMB2WC(buf));
|
|
CPPUNIT_ASSERT_EQUAL( data, wbuf );
|
|
}
|
|
}
|
|
|
|
#endif // wxUSE_UNICODE
|
|
|
|
void FileTestCase::TempFile()
|
|
{
|
|
wxTempFile tmpFile;
|
|
CPPUNIT_ASSERT( tmpFile.Open(wxT("test2")) && tmpFile.Write(wxT("the answer is 42")) );
|
|
CPPUNIT_ASSERT( tmpFile.Commit() );
|
|
CPPUNIT_ASSERT( wxRemoveFile(wxT("test2")) );
|
|
}
|
|
|
|
#endif // wxUSE_FILE
|