X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..968b44d37b9fcdc5232fb68312a65e4fc6b5f4ab:/tests/config/fileconf.cpp diff --git a/tests/config/fileconf.cpp b/tests/config/fileconf.cpp index d1cd56b40d..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 ); @@ -81,6 +82,8 @@ private: CPPUNIT_TEST( DeleteAndRecreateGroup ); CPPUNIT_TEST( AddToExistingRoot ); CPPUNIT_TEST( ReadNonExistent ); + CPPUNIT_TEST( ReadEmpty ); + CPPUNIT_TEST( ReadFloat ); CPPUNIT_TEST_SUITE_END(); void Path(); @@ -93,6 +96,7 @@ private: void Save(); void DeleteEntry(); void DeleteAndWriteEntry(); + void DeleteLastRootEntry(); void DeleteGroup(); void DeleteAll(); void RenameEntry(); @@ -103,6 +107,8 @@ private: void DeleteAndRecreateGroup(); void AddToExistingRoot(); void ReadNonExistent(); + void ReadEmpty(); + void ReadFloat(); static wxString ChangePath(wxFileConfig& fc, const wxChar *path) @@ -127,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() @@ -372,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); @@ -649,5 +673,32 @@ void FileConfigTestCase::ReadNonExistent() CPPUNIT_ASSERT( !fc.Read("URL", &url) ); } +void FileConfigTestCase::ReadEmpty() +{ + static const char *confTest = ""; + + wxStringInputStream sis(confTest); + 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