Persistence: Test cases for content dump

It turned our that the document could not be dumped as the xml specifier was used as first element. As the dumping added the <content> element around it was invalid. However, content is required to read properties. Hence the xml element generation was moved.
This commit is contained in:
ickby
2018-10-17 18:16:13 +02:00
committed by wmayer
parent 13bcf5fae4
commit d5cbee5543
3 changed files with 32 additions and 7 deletions

View File

@@ -1327,11 +1327,6 @@ std::string Document::getTransientDirectoryName(const std::string& uuid, const s
void Document::Save (Base::Writer &writer) const
{
writer.Stream() << "<?xml version='1.0' encoding='utf-8'?>" << endl
<< "<!--" << endl
<< " FreeCAD Document, see http://www.freecadweb.org for more information..." << endl
<< "-->" << endl;
writer.Stream() << "<Document SchemaVersion=\"4\" ProgramVersion=\""
<< App::Application::Config()["BuildVersionMajor"] << "."
<< App::Application::Config()["BuildVersionMinor"] << "R"
@@ -1696,6 +1691,10 @@ bool Document::saveToFile(const char* filename) const
if (hGrp->GetBool("SaveBinaryBrep", false))
writer.setMode("BinaryBrep");
writer.Stream() << "<?xml version='1.0' encoding='utf-8'?>" << endl
<< "<!--" << endl
<< " FreeCAD Document, see http://www.freecadweb.org for more information..." << endl
<< "-->" << endl;
Document::Save(writer);
// Special handling for Gui document.

View File

@@ -231,7 +231,7 @@ PyObject* PropertyContainerPy::dumpPropertyContent(PyObject *args, PyObject *kwd
int compression = 3;
char* property;
static char* kwds_def[] = {"Compression",NULL};
static char* kwds_def[] = {"Property", "Compression",NULL};
PyErr_Clear();
if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", kwds_def, &property, &compression)) {
return NULL;

View File

@@ -454,7 +454,33 @@ class DocumentSaveRestoreCases(unittest.TestCase):
self.failUnless(hasattr(Doc.Extension_2.ViewObject.ExtensionProxy, 'testFunction'))
FreeCAD.closeDocument("SaveRestoreExtensions")
def testPersistenceContentDump(self):
#test smallest level... property
self.Doc.Label_1.Vector = (1,2,3)
dump = self.Doc.Label_1.dumpPropertyContent('Vector', Compression = 9)
self.Doc.Label_2.restorePropertyContent('Vector', dump)
self.failUnless(self.Doc.Label_1.Vector == self.Doc.Label_2.Vector)
#next higher: object
self.Doc.Label_1.Distance = 12
self.Doc.Label_1.String = 'test'
dump = self.Doc.Label_1.dumpContent()
self.Doc.Label_3.restoreContent(dump)
self.failUnless( self.Doc.Label_1.Distance == self.Doc.Label_3.Distance)
self.failUnless( self.Doc.Label_1.String == self.Doc.Label_3.String)
#highest level: document
dump = self.Doc.dumpContent(9)
Doc = FreeCAD.newDocument("DumpTest")
Doc.restoreContent(dump)
self.failUnless(len(self.Doc.Objects) == len(Doc.Objects))
self.failUnless( self.Doc.Label_1.Distance == Doc.Label_1.Distance)
self.failUnless( self.Doc.Label_1.String == Doc.Label_1.String)
self.failUnless(self.Doc.Label_1.Vector == Doc.Label_1.Vector)
FreeCAD.closeDocument("DumpTest")
def tearDown(self):
#closing doc
FreeCAD.closeDocument("SaveRestoreTests")