From ba8546912daa12cea8076e08f1694a03e520dfe2 Mon Sep 17 00:00:00 2001 From: Ryan Norton Date: Sun, 21 Nov 2004 18:26:38 +0000 Subject: [PATCH] wxTextOutputStream::PutChar and text stream test git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30681 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/txtstrm.h | 2 + src/common/txtstrm.cpp | 22 ++++---- tests/streams/textstreamtest.cpp | 89 ++++++++++++++++++++++++++++++++ tests/test.bkl | 1 + 4 files changed, 103 insertions(+), 11 deletions(-) create mode 100644 tests/streams/textstreamtest.cpp diff --git a/include/wx/txtstrm.h b/include/wx/txtstrm.h index 014136cb74..3d4b11a581 100644 --- a/include/wx/txtstrm.h +++ b/include/wx/txtstrm.h @@ -121,6 +121,8 @@ public: virtual void WriteDouble(double d); virtual void WriteString(const wxString& string); + wxTextOutputStream& PutChar(wxChar c); + wxTextOutputStream& operator<<(const wxChar *string); wxTextOutputStream& operator<<(const wxString& string); wxTextOutputStream& operator<<(char c); diff --git a/src/common/txtstrm.cpp b/src/common/txtstrm.cpp index 0f23ce65ab..93bc7ad912 100644 --- a/src/common/txtstrm.cpp +++ b/src/common/txtstrm.cpp @@ -417,6 +417,16 @@ void wxTextOutputStream::WriteString(const wxString& string) #endif } +wxTextOutputStream& wxTextOutputStream::PutChar(wxChar c) +{ +#if wxUSE_UNICODE + WriteString( wxString(&c, m_conv, 1) ); +#else + WriteString( wxString(&c, wxConvLocal, 1) ); +#endif + return *this; +} + wxTextOutputStream& wxTextOutputStream::operator<<(const wxChar *string) { WriteString( wxString(string) ); @@ -497,17 +507,7 @@ wxTextOutputStream& wxTextOutputStream::operator<<(float f) wxTextOutputStream &endl( wxTextOutputStream &stream ) { - //RN: Normally a single char on builds without a real - //wchar_t will call the version that corresponds to the - //numeric value of wchar_t itself (wxUint16 if 2 bytes etc.), - //which is not what we want (will print a 10 numeric value, - //not a newline). Thus, we need to send it a string in that - // case instead so that it correctly prints the newline. -#if !wxUSE_UNICODE || wxWCHAR_T_IS_REAL_TYPE - return stream << wxT('\n'); -#else - return stream << wxT("\n"); -#endif + return stream.PutChar(wxT('\n')); } #endif diff --git a/tests/streams/textstreamtest.cpp b/tests/streams/textstreamtest.cpp new file mode 100644 index 0000000000..54bcf3fd82 --- /dev/null +++ b/tests/streams/textstreamtest.cpp @@ -0,0 +1,89 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: tests/uris/uris.cpp +// Purpose: wxTextXXXStream unit test +// Author: Ryan Norton +// Created: 2004-08-14 +// RCS-ID: $Id$ +// Copyright: (c) 2004 Ryan Norton +/////////////////////////////////////////////////////////////////////////////// + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif // WX_PRECOMP + +#include "wx/txtstrm.h" +#include "wx/wfstream.h" + +#include "wx/cppunit.h" + +// ---------------------------------------------------------------------------- +// test class +// ---------------------------------------------------------------------------- + +class TextStreamTestCase : public CppUnit::TestCase +{ +public: + TextStreamTestCase(); + +private: + CPPUNIT_TEST_SUITE( TextStreamTestCase ); + CPPUNIT_TEST( Endline ); + CPPUNIT_TEST_SUITE_END(); + + void Endline(); + + + DECLARE_NO_COPY_CLASS(TextStreamTestCase) +}; + +// register in the unnamed registry so that these tests are run by default +CPPUNIT_TEST_SUITE_REGISTRATION( TextStreamTestCase ); + +// also include in it's own registry so that these tests can be run alone +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TextStreamTestCase, "TextStreamTestCase" ); + +TextStreamTestCase::TextStreamTestCase() +{ +} + +#if defined(__WXMSW__) || defined(__WXPM__) +# define NEWLINE "\r\n" +# define NEWLINELEN 2 +#elif defined(__WXMAC__) && !defined(__DARWIN__) +# define NEWLINE "\r" +# define NEWLINELEN 1 +#else +# define NEWLINE "\n" +# define NEWLINELEN 1 +#endif + +void TextStreamTestCase::Endline() +{ + wxFileOutputStream* pOutFile = new wxFileOutputStream(_T("test.txt")); + wxTextOutputStream* pOutText = new wxTextOutputStream(*pOutFile); + *pOutText << _T("Test text") << endl + << _T("More Testing Text (There should be newline before this)"); + + delete pOutText; + delete pOutFile; + + wxFileInputStream* pInFile = new wxFileInputStream(_T("test.txt")); + + char szIn[9 + NEWLINELEN]; + + pInFile->Read(szIn, 9 + NEWLINELEN); + + CPPUNIT_ASSERT( memcmp(&szIn[9], NEWLINE, NEWLINELEN) == 0 ); + + delete pInFile; +} diff --git a/tests/test.bkl b/tests/test.bkl index 6b03777e68..65c8391c83 100644 --- a/tests/test.bkl +++ b/tests/test.bkl @@ -31,6 +31,7 @@ streams/filestream.cpp streams/memstream.cpp streams/sstream.cpp + streams/textstreamtest.cpp streams/zlibstream.cpp uris/uris.cpp -- 2.45.2