]> git.saurik.com Git - wxWidgets.git/blobdiff - tests/file/filetest.cpp
Write correct number of bytes in wxFile::Write(wxString).
[wxWidgets.git] / tests / file / filetest.cpp
diff --git a/tests/file/filetest.cpp b/tests/file/filetest.cpp
new file mode 100644 (file)
index 0000000..dc3c286
--- /dev/null
@@ -0,0 +1,95 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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 );
+        CPPUNIT_TEST( RoundTripUTF8 );
+        CPPUNIT_TEST( RoundTripUTF16 );
+        CPPUNIT_TEST( RoundTripUTF32 );
+    CPPUNIT_TEST_SUITE_END();
+
+    void RoundTripUTF8() { DoRoundTripTest(wxConvUTF8); }
+    void RoundTripUTF16() { DoRoundTripTest(wxMBConvUTF16()); }
+    void RoundTripUTF32() { DoRoundTripTest(wxMBConvUTF32()); }
+
+    void DoRoundTripTest(const wxMBConv& conv);
+
+    wxDECLARE_NO_COPY_CLASS(FileTestCase);
+};
+
+// ----------------------------------------------------------------------------
+// CppUnit macros
+// ----------------------------------------------------------------------------
+
+CPPUNIT_TEST_SUITE_REGISTRATION( FileTestCase );
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FileTestCase, "FileTestCase" );
+
+// ----------------------------------------------------------------------------
+// tests implementation
+// ----------------------------------------------------------------------------
+
+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 wxFileOffset len = fin.Length();
+        wxCharBuffer buf(len);
+        CPPUNIT_ASSERT_EQUAL( len, fin.Read(buf.data(), len) );
+
+        wxWCharBuffer wbuf(conv.cMB2WC(buf));
+#if wxUSE_UNICODE
+        CPPUNIT_ASSERT_EQUAL( data, wbuf );
+#else // !wxUSE_UNICODE
+        CPPUNIT_ASSERT
+        (
+            memcmp(wbuf, L"Hello\0UTF", data.length()*sizeof(wchar_t)) == 0
+        );
+#endif // wxUSE_UNICODE/!wxUSE_UNICODE
+    }
+}
+
+#endif // wxUSE_FILE