[commit] r1722 - in trunk: GME/Core GME/XmlBackEnd Tests/GPyUnit
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Fri Dec 2 12:13:07 CST 2011
Author: ksmyth
Date: Fri Dec 2 12:13:07 2011
New Revision: 1722
Log:
Support Dict Core attributes in MU Backend (used for regnodes now). Dont chdir; it locks the directory. Fix crash under MU without SVN
Modified:
trunk/GME/Core/CoreDictionaryAttributeValue.h
trunk/GME/XmlBackEnd/CoreXmlFile.cpp
trunk/GME/XmlBackEnd/CoreXmlFile.h
trunk/GME/XmlBackEnd/StdAfx.h
trunk/GME/XmlBackEnd/XmlBackEnd.vcxproj
trunk/GME/XmlBackEnd/XmlBackEnd.vcxproj.filters
trunk/Tests/GPyUnit/test_registry.py
Modified: trunk/GME/Core/CoreDictionaryAttributeValue.h
==============================================================================
--- trunk/GME/Core/CoreDictionaryAttributeValue.h Fri Dec 2 12:12:47 2011 (r1721)
+++ trunk/GME/Core/CoreDictionaryAttributeValue.h Fri Dec 2 12:13:07 2011 (r1722)
@@ -1,7 +1,5 @@
#pragma once
-#include "StdAfx.h"
-
#include <unordered_map>
struct CComBSTR_Length {
Modified: trunk/GME/XmlBackEnd/CoreXmlFile.cpp
==============================================================================
--- trunk/GME/XmlBackEnd/CoreXmlFile.cpp Fri Dec 2 12:12:47 2011 (r1721)
+++ trunk/GME/XmlBackEnd/CoreXmlFile.cpp Fri Dec 2 12:13:07 2011 (r1722)
@@ -271,6 +271,10 @@
xmlattr = new XmlAttrReal();
break;
+ case VALTYPE_DICT:
+ xmlattr = new XmlAttrDict();
+ break;
+
default:
HR_THROW(E_METAPROJECT);
}
@@ -289,6 +293,39 @@
{
}
+XmlAttrDict::XmlAttrDict()
+{
+ CCoreDictionaryAttributeValue *val = NULL;
+ typedef CComObject< CCoreDictionaryAttributeValue > COMTYPE;
+ HRESULT hr = COMTYPE::CreateInstance((COMTYPE **)&val);
+ COMTHROW(hr);
+ m_value = val;
+}
+
+void XmlAttrDict::fromVariant(VARIANT v)
+{
+ ASSERT(v.vt = VT_DISPATCH);
+ m_value = 0;
+ v.pdispVal->QueryInterface(&m_value);
+}
+
+void XmlAttrDict::toVariant(VARIANT* v) const
+{
+ CComVariant ret = m_value;
+ COMTHROW(ret.Detach(v));
+}
+
+void XmlAttrDict::fromString(const char* str)
+{
+ DebugBreak();
+}
+
+void XmlAttrDict::toString(std::string& str) const
+{
+ DebugBreak();
+}
+
+
////////////////////////////////////////////////////////////////////////////////
// XmlAttrLong class
////////////////////////////////////////////////////////////////////////////////
@@ -1333,7 +1370,7 @@
//TODO: if locks go down to 0 it could be written out to the file
}
- else // VALTYPE_BIN, VALTYPE_STR, VALTYPE_LONG, VALTYPE_REAL
+ else // VALTYPE_BIN, VALTYPE_STR, VALTYPE_LONG, VALTYPE_REAL, VALTYPE_DICT
{
#ifdef _DEBUG
#if(DETAILS_ABOUT_XMLBACKEND)
@@ -1578,7 +1615,8 @@
HR_THROW(E_FILEOPEN);
}
// add to server
- succ = addSVN( sessionFolder, true /*=recursive*/);
+ if (m_sourceControl == SC_SUBVERSION)
+ succ = addSVN( sessionFolder, true /*=recursive*/);
if( !succ) {
sendMsg( "Exception: Could not add session folder to server.", MSG_ERROR);
AfxMessageBox( "Could not add session folder to server.");
@@ -1586,7 +1624,8 @@
}
// initial commit
- succ = commitSVN( m_contentPath, std::string("auto: OpenProject()"), true);
+ if (m_sourceControl == SC_SUBVERSION)
+ succ = commitSVN( m_contentPath, std::string("auto: OpenProject()"), true);
if( !succ) {
sendMsg( "Exception: Could not commit session folder.", MSG_ERROR);
AfxMessageBox( "Could not commit session folder.");
@@ -3297,15 +3336,11 @@
// upon Open, the connection string might not have the full URL in it, so
// that information is only available after readProjectFile (m_svnUrl)
-
- _chdir( m_folderPath.c_str()); // change to the newly created local dir
}
}
void CCoreXmlFile::writeAll()
{
- chdir( m_folderPath.c_str()); // change to the local main dir (a file dialog may have changed the local dir)
-
for( XmlObjVecIter it=m_objects.begin(); it!=m_objects.end(); ++it )
{
XmlObject * obj = (*it);
@@ -3486,7 +3521,8 @@
guid2str( pointer->m_parent->m_guid, attrVal );
}
}
- else if( attr->getType() != VALTYPE_COLLECTION && attr->getType() != VALTYPE_LOCK )
+ else if( attr->getType() != VALTYPE_COLLECTION && attr->getType() != VALTYPE_LOCK
+ && attr->getType() != VALTYPE_DICT)
{
XmlAttrBase * attr = it->second;
attr->toString(attrVal);
@@ -3546,7 +3582,30 @@
writeObject( obj2, ofs, false, newPrefix.c_str(), lastWriteTime );
}
}
+ }
+ else if (attr->getType() == VALTYPE_DICT)
+ {
+ CComObjPtr<ICoreMetaAttribute> metaAttrib;
+ CComBSTR attribToken;
+ std::string attrVal;
+
+ COMTHROW( metaobject->get_Attribute( it->first, PutOut(metaAttrib) ) );
+ metaAttrib->get_Token( &attribToken );
+ XmlAttrDict* dict = (XmlAttrDict*)it->second;
+ CCoreDictionaryAttributeValue* dictValue = (CCoreDictionaryAttributeValue*)(ICoreDictionaryAttributeValue*)dict->m_value;
+ ofs << Transcoder::NoEscape << "<Dict token=\"" << attribToken << "\">";
+ for (auto i = dictValue->m_dict.begin(); i != dictValue->m_dict.end(); i++)
+ {
+ ofs << Transcoder::NoEscape << "<Key>";
+ ofs << Transcoder::StdEscape << static_cast<const char*>(_bstr_t(i->first));
+ ofs << Transcoder::NoEscape << "</Key>";
+ ofs << Transcoder::NoEscape << "<Value>";
+ ofs << Transcoder::StdEscape << static_cast<const char*>(_bstr_t(i->second));
+ ofs << Transcoder::NoEscape << "</Value>";
+ }
+ ofs << Transcoder::NoEscape << "</Dict>";
}
+
}
ofs << Transcoder::NoEscape << prefix << "</" << metaToken << ">\n";
@@ -3781,7 +3840,8 @@
p.m_pointedObjGuid = str2guid( attrVal );
pointers.push_back( p );
}
- else if( attr->getType() != VALTYPE_LOCK && attr->getType() != VALTYPE_COLLECTION )
+ else if( attr->getType() != VALTYPE_LOCK && attr->getType() != VALTYPE_COLLECTION
+ && attr->getType() != VALTYPE_DICT)
{
it2->second->fromString(attrVal);
@@ -3820,7 +3880,41 @@
DOMNode * node = children->item(i);
//if spec_care was true the first child was CDATA, but we process anyway the ELEMENTs only
if( node->getNodeType() == DOMNode::ELEMENT_NODE )
- readObject( (DOMElement*)node, pointers, obj, fullLoad, lastWriteTime );
+ {
+ if (wcscmp(node->getLocalName(), L"Dict") == 0)
+ {
+ // TODO: read token attribute (but only regnodes are stored in Dict for now)
+ auto it = obj->m_attributes.find(ATTRID_REGNODE);
+ if (it == obj->m_attributes.end())
+ COMTHROW(E_FILEOPEN);
+ XmlAttrDict* dict = (XmlAttrDict*)it->second;
+ CCoreDictionaryAttributeValue* dictValue = (CCoreDictionaryAttributeValue*)(ICoreDictionaryAttributeValue*)dict->m_value;
+ DOMNodeList* dictEntries = node->getChildNodes();
+ for (XMLSize_t i = 0; i+1 < dictEntries->getLength(); i += 2)
+ {
+ if (dictEntries->item(i)->getNodeType() != DOMNode::ELEMENT_NODE)
+ COMTHROW(E_FILEOPEN);
+ if (dictEntries->item(i+1)->getNodeType() != DOMNode::ELEMENT_NODE)
+ COMTHROW(E_FILEOPEN);
+ if (((DOMElement*)dictEntries->item(i))->getChildNodes()->getLength() != 1)
+ COMTHROW(E_FILEOPEN);
+ CComBSTR value;
+ if (((DOMElement*)dictEntries->item(i+1))->getChildNodes()->getLength() == 1)
+ {
+ if (((DOMElement*)dictEntries->item(i+1))->getChildNodes()->item(0)->getNodeType() != DOMNode::TEXT_NODE)
+ COMTHROW(E_FILEOPEN);
+ DOMText* valueText = (DOMText*)((DOMElement*)dictEntries->item(i+1))->getChildNodes()->item(0);
+ value = valueText->getData();
+ }
+ if (((DOMElement*)dictEntries->item(i))->getChildNodes()->item(0)->getNodeType() != DOMNode::TEXT_NODE)
+ COMTHROW(E_FILEOPEN);
+ DOMText* key = (DOMText*)((DOMElement*)dictEntries->item(i))->getChildNodes()->item(0);
+ dictValue->m_dict.insert(CCoreDictionaryAttributeValue::map_type::value_type(key->getData(), std::move(value)));
+ }
+ }
+ else
+ readObject( (DOMElement*)node, pointers, obj, fullLoad, lastWriteTime );
+ }
}
}
@@ -4161,7 +4255,6 @@
if( !m_parent->makeSureFileExistsInVerSys( m_fileName, p_initialContent))
{
m_parent->sendMsg( "Could not find files in Versioning System", MSG_ERROR);
- ASSERT(0);
return;
}
@@ -5139,7 +5232,6 @@
{
char buff[200]; sprintf( buff, "Could not get \"%s\" file from source control. Exception code: 0x%x", fulllocalfname.c_str(), e.hr);
sendMsg( buff, MSG_ERROR);
- AfxMessageBox( buff);
return false;
}
return found;
@@ -5380,8 +5472,6 @@
}
- chdir( m_folderPath.c_str()); // change to the newly created local dir
-
// session folder
std::string sessionFolder = m_folderPath + "\\" + HelperFiles::sessionFolderName;
BOOL succ = ::CreateDirectory( sessionFolder.c_str(), NULL);
@@ -5582,8 +5672,6 @@
void CCoreXmlFile::findAllRwObjs( const std::string& p_folderPath, std::vector< std::string>& rw_file_vec)
{
- chdir( m_folderPath.c_str()); // change to the local main dir (a file dialog may have changed the local dir)
-
for( XmlObjVecIter it=m_objects.begin(); it!=m_objects.end(); ++it )
{
XmlObject * obj = (*it);
Modified: trunk/GME/XmlBackEnd/CoreXmlFile.h
==============================================================================
--- trunk/GME/XmlBackEnd/CoreXmlFile.h Fri Dec 2 12:12:47 2011 (r1721)
+++ trunk/GME/XmlBackEnd/CoreXmlFile.h Fri Dec 2 12:13:07 2011 (r1722)
@@ -1,5 +1,7 @@
#ifndef MGA_COREXMLFILE_H
#define MGA_COREXMLFILE_H
+
+#include "StdAfx.h"
#include "resource.h"
#include <fstream>//fstream.h
#include <list>
@@ -8,6 +10,7 @@
#include <set>
#include <xercesc/dom/dom.hpp>
#include "..\Mga\MgaGeneric.h"
+#include "CoreDictionaryAttributeValue.h"
#include "XmlBackEnd.h" // for EXTERN_C const CLSID CLSID_CoreXmlFile;
#include "OperOptions.h"
#include "MsgConsole.h"
@@ -178,6 +181,23 @@
};
////////////////////////////////////////////////////////////////////////////////
+// XmlAttrDict class
+////////////////////////////////////////////////////////////////////////////////
+
+class XmlAttrDict: public XmlAttrBase
+{
+public:
+ XmlAttrDict();
+
+ virtual valtype_type getType() const { return VALTYPE_DICT; };
+ virtual void fromVariant(VARIANT p);
+ virtual void toVariant(VARIANT *p) const;
+ virtual void fromString(const char * str);
+ virtual void toString(std::string& str) const;
+ CComPtr<ICoreDictionaryAttributeValue> m_value;
+};
+
+////////////////////////////////////////////////////////////////////////////////
// XmlAttrString class
////////////////////////////////////////////////////////////////////////////////
Modified: trunk/GME/XmlBackEnd/StdAfx.h
==============================================================================
--- trunk/GME/XmlBackEnd/StdAfx.h Fri Dec 2 12:12:47 2011 (r1721)
+++ trunk/GME/XmlBackEnd/StdAfx.h Fri Dec 2 12:13:07 2011 (r1722)
@@ -39,6 +39,9 @@
#include "CommonStl.h"
#include "CoreUtilities.h"
+#include "Core.h"
+#include "CoreLib.h"
+
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
Modified: trunk/GME/XmlBackEnd/XmlBackEnd.vcxproj
==============================================================================
--- trunk/GME/XmlBackEnd/XmlBackEnd.vcxproj Fri Dec 2 12:12:47 2011 (r1721)
+++ trunk/GME/XmlBackEnd/XmlBackEnd.vcxproj Fri Dec 2 12:13:07 2011 (r1722)
@@ -73,7 +73,6 @@
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
@@ -97,6 +96,7 @@
<CustomBuildAfterTargets Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CustomBuildAfterTargets Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CustomBuildAfterTargets Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<CustomBuildStep />
@@ -106,7 +106,7 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>../Interfaces;../Common;../Core;../Include;../Include/subversion;../Include/apr;../Include/apr-util;svncode;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>.;../Interfaces;../Common;../Core;../Include;../Include/subversion;../Include/apr;../Include/apr-util;svncode;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -117,7 +117,7 @@
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
- <AdditionalDependencies>xerces-c_3D.lib;comsvcs.lib;setargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>mfcs100d.lib;xerces-c_3.lib;comsvcs.lib;setargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\lib\subv_$(Configuration);../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ModuleDefinitionFile>.\XmlBackEnd.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
@@ -148,7 +148,7 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>../Interfaces;../Common;../Core;../Include;../Include/subversion;../Include/apr;../Include/apr-util;svncode;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>.;../Interfaces;../Common;../Core;../Include;../Include/subversion;../Include/apr;../Include/apr-util;svncode;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -192,7 +192,7 @@
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
- <AdditionalIncludeDirectories>../Interfaces;../Common;../Core;../Include;../Include/subversion;../Include/apr;../Include/apr-util;svncode;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>.;../Interfaces;../Common;../Core;../Include;../Include/subversion;../Include/apr;../Include/apr-util;svncode;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -206,7 +206,7 @@
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
- <AdditionalDependencies>xerces-c_3.lib;comsvcs.lib;setargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>mfcs100.lib;xerces-c_3.lib;comsvcs.lib;setargv.obj;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\lib\subv_$(Configuration);../lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>
</IgnoreSpecificDefaultLibraries>
@@ -242,7 +242,7 @@
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
- <AdditionalIncludeDirectories>../Interfaces;../Common;../Core;../Include;../Include/subversion;../Include/apr;../Include/apr-util;svncode;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories>.;../Interfaces;../Common;../Core;../Include;../Include/subversion;../Include/apr;../Include/apr-util;svncode;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -305,6 +305,7 @@
</Midl>
</ItemGroup>
<ItemGroup>
+ <ClCompile Include="..\Core\CoreDictionaryAttributeValue.cpp" />
<ClCompile Include="CertificateDlg.cpp" />
<ClCompile Include="CommitDialog.cpp" />
<ClCompile Include="..\Common\CommonError.cpp" />
Modified: trunk/GME/XmlBackEnd/XmlBackEnd.vcxproj.filters
==============================================================================
--- trunk/GME/XmlBackEnd/XmlBackEnd.vcxproj.filters Fri Dec 2 12:12:47 2011 (r1721)
+++ trunk/GME/XmlBackEnd/XmlBackEnd.vcxproj.filters Fri Dec 2 12:13:07 2011 (r1722)
@@ -110,6 +110,9 @@
<ClCompile Include="SVNCode\Util.cpp">
<Filter>Source Files\SVNCode</Filter>
</ClCompile>
+ <ClCompile Include="..\Core\CoreDictionaryAttributeValue.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="XmlBackEnd.def">
Modified: trunk/Tests/GPyUnit/test_registry.py
==============================================================================
--- trunk/Tests/GPyUnit/test_registry.py Fri Dec 2 12:12:47 2011 (r1721)
+++ trunk/Tests/GPyUnit/test_registry.py Fri Dec 2 12:13:07 2011 (r1722)
@@ -8,16 +8,25 @@
def __init__(self, name, **kwds):
super(TestRegistry, self).__init__(name, **kwds)
self.output_file = "TestRegistry-output.mga"
+
+ def tearDown(self):
+ if not self.project is None:
+ self.project.Close(True)
+
+ def _adjacent_file(file):
+ import os.path
+ return os.path.join(os.path.dirname(__file__), file)
+
+ @property
+ def connstr(self):
+ return "MGA=" + self._adjacent_file(self.output_file)
def test(self):
- def _adjacent_file(file):
- import os.path
- return os.path.join(os.path.dirname(__file__), file)
from GPyUnit import util
util.register_xmp('MetaGME')
with util.disable_early_binding():
self.project = win32com.client.DispatchEx("Mga.MgaProject")
- self.project.Create("MGA=" + _adjacent_file(self.output_file), "MetaGME")
+ self.project.Create(self.connstr, "MetaGME")
self.project.BeginTransactionInNewTerr()
rootregs = self.project.RootFolder.GetRegistryDisp(True)
@@ -71,7 +80,7 @@
self.project.CommitTransaction()
terr = self.project.BeginTransactionInNewTerr()
- self.project.RootFolder.GetRegistryNodeDisp('xtest123').Value = 'xxx'
+ self.project.RootFolder.GetRegistryNodeDisp('xtest123').Value = 'xxx&<'
self.project.RootFolder.GetRegistryNodeDisp('ytest123').Value = 'yyy'
self.project.RootFolder.GetRegistryNodeDisp('xtest123/ztest').Value = 'zzz'
self.project.RootFolder.GetRegistryNodeDisp('xtest123/ztest/blank').Value = ''
@@ -80,10 +89,10 @@
self.project.Save()
self.project.Close(True)
- self.project.Open("MGA=" + _adjacent_file(self.output_file))
+ self.project.Open(self.connstr)
terr = self.project.BeginTransactionInNewTerr()
def testxtest():
- self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('xtest123').Value, 'xxx')
+ self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('xtest123').Value, 'xxx&<')
self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('ytest123').Value, 'yyy')
self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('xtest123/ztest').Value, 'zzz')
self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('xtest123/ztest/blank').Value, '')
@@ -96,15 +105,15 @@
self.assertEqual(self.project.RootFolder.GetRegistryDisp(False).Count, 2)
self.project.CommitTransaction()
self.project.Close(True)
-
- import util.gme
- util.gme.mga2xme(_adjacent_file(self.output_file))
- util.gme.xme2mga(os.path.splitext(_adjacent_file(self.output_file))[0] + ".xme")
- self.project.Open("MGA=" + _adjacent_file(self.output_file))
- terr = self.project.BeginTransactionInNewTerr()
- testxtest()
- self.project.CommitTransaction()
- self.project.Close(True)
+ if self.connstr.find("MGA=") == 0:
+ import util.gme
+ util.gme.mga2xme(_adjacent_file(self.output_file))
+ util.gme.xme2mga(os.path.splitext(_adjacent_file(self.output_file))[0] + ".xme")
+ self.project.Open(self.connstr)
+ terr = self.project.BeginTransactionInNewTerr()
+ testxtest()
+ self.project.CommitTransaction()
+ self.project.Close(True)
def test_derived(self):
def _adjacent_file(file):
@@ -114,7 +123,7 @@
util.register_xmp('MetaGME')
with util.disable_early_binding():
self.project = win32com.client.DispatchEx("Mga.MgaProject")
- self.project.Create("MGA=" + _adjacent_file(self.output_file), "MetaGME")
+ self.project.Create(self.connstr, "MetaGME")
self.project.BeginTransactionInNewTerr()
for i in range(1, self.project.RootMeta.RootFolder.DefinedFCOs.Count+1):
@@ -146,7 +155,7 @@
util.register_xmp('MetaGME')
with util.disable_early_binding():
self.project = win32com.client.DispatchEx("Mga.MgaProject")
- self.project.Create("MGA=" + _adjacent_file(self.output_file), "MetaGME")
+ self.project.Create(self.connstr, "MetaGME")
self.project.BeginTransactionInNewTerr()
for i in range(1, self.project.RootMeta.RootFolder.DefinedFCOs.Count+1):
@@ -172,5 +181,23 @@
self.project.BeginTransactionInNewTerr()
self.project.RootFolder.ChildFolders
+class TestMURegistry(TestRegistry):
+ def __init__(self, name, **kwds):
+ super(TestMURegistry, self).__init__(name, **kwds)
+ import os.path
+ self.mgxdir = os.path.abspath(os.path.join(os.path.dirname(__file__), "TestMURegistry"))
+
+ def setUp(self):
+ import os.path
+ if os.path.isdir(self.mgxdir):
+ import shutil
+ assert len(self.mgxdir) > 10 # sanity check
+ shutil.rmtree(self.mgxdir)
+
+ @property
+ def connstr(self):
+ return "MGX=\"" + self.mgxdir + "\""
+
+
if __name__ == "__main__":
unittest.main()
More information about the gme-commit
mailing list