X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/975fb32b5cac366ad89be9c1d42cca9a789e1802..17beda75ef9780ebef5044e41889a9b598dcf186:/tests/config/fileconf.cpp?ds=inline diff --git a/tests/config/fileconf.cpp b/tests/config/fileconf.cpp index 4a354479b9..a92bdb6afe 100644 --- a/tests/config/fileconf.cpp +++ b/tests/config/fileconf.cpp @@ -71,6 +71,7 @@ private: CPPUNIT_TEST( Save ); CPPUNIT_TEST( DeleteEntry ); CPPUNIT_TEST( DeleteAndWriteEntry ); + CPPUNIT_TEST( DeleteLastRootEntry ); CPPUNIT_TEST( DeleteGroup ); CPPUNIT_TEST( DeleteAll ); CPPUNIT_TEST( RenameEntry ); @@ -82,6 +83,7 @@ private: CPPUNIT_TEST( AddToExistingRoot ); CPPUNIT_TEST( ReadNonExistent ); CPPUNIT_TEST( ReadEmpty ); + CPPUNIT_TEST( ReadFloat ); CPPUNIT_TEST_SUITE_END(); void Path(); @@ -94,6 +96,7 @@ private: void Save(); void DeleteEntry(); void DeleteAndWriteEntry(); + void DeleteLastRootEntry(); void DeleteGroup(); void DeleteAll(); void RenameEntry(); @@ -105,6 +108,7 @@ private: void AddToExistingRoot(); void ReadNonExistent(); void ReadEmpty(); + void ReadFloat(); static wxString ChangePath(wxFileConfig& fc, const wxChar *path) @@ -129,7 +133,7 @@ private: // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( FileConfigTestCase ); -// also include in it's own registry so that these tests can be run alone +// also include in its own registry so that these tests can be run alone CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FileConfigTestCase, "FileConfigTestCase" ); void FileConfigTestCase::Path() @@ -374,6 +378,24 @@ void FileConfigTestCase::DeleteAndWriteEntry() wxVERIFY_FILECONFIG( "", fc ); } +void FileConfigTestCase::DeleteLastRootEntry() +{ + // This tests for the bug which occurred when the last entry of the root + // group was deleted: this corrupted internal state and resulted in a crash + // after trying to write the just deleted entry again. + wxStringInputStream sis(""); + wxFileConfig fc(sis); + + fc.Write("key", "value"); + wxVERIFY_FILECONFIG( "key=value\n", fc ); + + fc.DeleteEntry("key"); + wxVERIFY_FILECONFIG( "", fc ); + + fc.Write("key", "value"); + wxVERIFY_FILECONFIG( "key=value\n", fc ); +} + void FileConfigTestCase::DeleteGroup() { wxStringInputStream sis(testconfig); @@ -659,5 +681,24 @@ void FileConfigTestCase::ReadEmpty() wxFileConfig fc(sis); } +void FileConfigTestCase::ReadFloat() +{ + static const char *confTest = + "x=1.234\n" + "y=-9876.5432\n" + "z=2e+308\n" + ; + + wxStringInputStream sis(confTest); + wxFileConfig fc(sis); + + float f; + CPPUNIT_ASSERT( fc.Read("x", &f) ); + CPPUNIT_ASSERT_EQUAL( 1.234f, f ); + + CPPUNIT_ASSERT( fc.Read("y", &f) ); + CPPUNIT_ASSERT_EQUAL( -9876.5432f, f ); +} + #endif // wxUSE_FILECONFIG