00001 from __future__ import with_statement
00002
00003 import sys
00004 import os.path
00005 import unittest
00006 import GPyUnit.util
00007 import GPyUnit.util.gme
00008 from GPyUnit.util import DispatchEx
00009
00010 def _adjacent_file(file):
00011 import os.path
00012 return os.path.join(os.path.dirname(os.path.abspath(__file__)), file)
00013
00014 class TestRegistry(unittest.TestCase):
00015 def __init__(self, name, **kwds):
00016 super(TestRegistry, self).__init__(name, **kwds)
00017 self.output_file = "TestRegistry-output.mga"
00018 self.project = None
00019
00020 def tearDown(self):
00021 if not self.project is None:
00022 self.project.Close(True)
00023
00024 @property
00025 def connstr(self):
00026 return "MGA=" + _adjacent_file(self.output_file)
00027
00028 def test(self):
00029 from GPyUnit import util
00030 util.register_xmp('MetaGME')
00031 with util.disable_early_binding():
00032 self.project = DispatchEx("Mga.MgaProject")
00033 self.project.Create(self.connstr, "MetaGME")
00034 self.project.BeginTransactionInNewTerr(0)
00035
00036 rootregs = self.project.RootFolder.GetRegistryDisp(True)
00037 self.assertEqual(rootregs.Count, 0)
00038 self.project.RootFolder.GetRegistryNodeDisp('test123').Value = 'xxx'
00039 self.project.RootFolder.GetRegistryNodeDisp('test345').Value = 'yyy'
00040
00041 for i in range(1, self.project.RootMeta.RootFolder.DefinedFCOs.Count+1):
00042 if self.project.RootMeta.RootFolder.DefinedFCOs.Item(i).Name == 'ParadigmSheet':
00043 sheet_meta = self.project.RootMeta.RootFolder.DefinedFCOs.Item(i)
00044 sheet = self.project.RootFolder.CreateRootObject(sheet_meta)
00045 sheetregs = sheet.GetRegistryDisp(True)
00046 self.assertEqual(set([reg.Name for reg in sheetregs]), set(['namePosition', 'isTypeInfoShown']))
00047
00048 namePosition = sheet.GetRegistryNodeDisp('namePosition')
00049 self.assertEqual(namePosition.Name, 'namePosition')
00050 self.assertEqual(namePosition.Value, '0')
00051 self.assertEqual(namePosition.GetSubNodesDisp(True).Count, 0)
00052 self.assertEqual(namePosition.GetSubNodesDisp(False).Count, 0)
00053
00054 def keytest():
00055 newkey = sheet.GetRegistryNodeDisp('newkey')
00056 newkey.Value = 'newvalue'
00057 self.assertEqual(newkey.Value, 'newvalue')
00058 keytest()
00059 newkey = sheet.GetRegistryNodeDisp('newkey')
00060 self.assertEqual(newkey.GetSubNodesDisp(True).Count, 0)
00061
00062 def subkeytest():
00063 newsubkey = sheet.GetRegistryNodeDisp('newkey/subkey')
00064 newsubkey.Value = 'subvalue'
00065 self.assertEqual(newsubkey.Value, 'subvalue')
00066 self.assertEqual(newsubkey.GetSubNodesDisp(True).Count, 0)
00067 newkey = sheet.GetRegistryNodeDisp('newkey')
00068 self.assertEqual(newkey.GetSubNodesDisp(False).Count, 1)
00069 subkeytest()
00070
00071
00072
00073 self.project.CommitTransaction()
00074 terr = self.project.BeginTransactionInNewTerr()
00075 sheet = terr.OpenObj(sheet)
00076 keytest()
00077 subkeytest()
00078 self.project.CommitTransaction()
00079
00080 self.project.Undo()
00081 self.project.Undo()
00082 terr = self.project.BeginTransactionInNewTerr()
00083 self.assertEqual(self.project.RootFolder.GetRegistryDisp(False).Count, 0)
00084 self.project.CommitTransaction()
00085
00086 terr = self.project.BeginTransactionInNewTerr()
00087 self.project.RootFolder.GetRegistryNodeDisp('xtest123').Value = 'xxx&<'
00088 self.project.RootFolder.GetRegistryNodeDisp('ytest123').Value = 'yyy'
00089 self.project.RootFolder.GetRegistryNodeDisp('xtest123/ztest').Value = 'zzz'
00090 self.project.RootFolder.GetRegistryNodeDisp('xtest123/ztest/blank').Value = ''
00091 self.project.CommitTransaction()
00092
00093 self.project.Save()
00094 self.project.Close(True)
00095
00096 self.project.Open(self.connstr)
00097 terr = self.project.BeginTransactionInNewTerr()
00098 def testxtest():
00099 self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('xtest123').Value, 'xxx&<')
00100 self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('ytest123').Value, 'yyy')
00101 self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('xtest123/ztest').Value, 'zzz')
00102 self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('xtest123/ztest/blank').Value, '')
00103 ATTSTATUS_HERE = 0
00104 self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('xtest123/ztest/blank').Status(), ATTSTATUS_HERE)
00105 testxtest()
00106
00107 self.project.RootFolder.GetRegistryNodeDisp('xtest123/zt').Value = 'xxxx'
00108 self.assertEqual(self.project.RootFolder.GetRegistryNodeDisp('xtest123/zt').GetSubNodesDisp().Count, 0)
00109 self.assertEqual(self.project.RootFolder.GetRegistryDisp(False).Count, 2)
00110 self.project.CommitTransaction()
00111 self.project.Close(True)
00112 if self.connstr.find("MGA=") == 0:
00113 util.gme.mga2xme(_adjacent_file(self.output_file))
00114 util.gme.xme2mga(os.path.splitext(_adjacent_file(self.output_file))[0] + ".xme")
00115 self.project.Open(self.connstr)
00116 terr = self.project.BeginTransactionInNewTerr()
00117 testxtest()
00118 self.project.CommitTransaction()
00119 self.project.Close(True)
00120
00121 def test_derived(self):
00122 from GPyUnit import util
00123 util.register_xmp('MetaGME')
00124 with util.disable_early_binding():
00125 self.project = DispatchEx("Mga.MgaProject")
00126 self.project.Create(self.connstr, "MetaGME")
00127 self.project.BeginTransactionInNewTerr()
00128
00129 for i in range(1, self.project.RootMeta.RootFolder.DefinedFCOs.Count+1):
00130 if self.project.RootMeta.RootFolder.DefinedFCOs.Item(i).Name == 'ParadigmSheet':
00131 sheet_meta = self.project.RootMeta.RootFolder.DefinedFCOs.Item(i)
00132 sheet = self.project.RootFolder.CreateRootObject(sheet_meta)
00133 sheet.SetRegistryValueDisp('testcreation', 'testcreate')
00134 sheet2 = self.project.RootFolder.DeriveRootObject(sheet, False)
00135 sheet3 = self.project.RootFolder.DeriveRootObject(sheet2, False)
00136 sheet4 = self.project.RootFolder.DeriveRootObject(sheet3, False)
00137
00138 sheet.SetRegistryValueDisp('test123', 'test')
00139 self.assertEqual(sheet4.GetRegistryValueDisp('test123'), 'test')
00140 sheet3.DetachFromArcheType()
00141 self.assertEqual(sheet4.GetRegistryValueDisp('test123'), 'test')
00142 self.assertEqual(sheet.GetRegistryDisp(False).Count, 2)
00143 self.assertEqual(sheet4.GetRegistryDisp(False).Count, 0)
00144 self.assertEqual(sheet3.GetRegistryDisp(False).Count, 3)
00145 self.assertEqual(sheet4.GetRegistryDisp(False).Count, 0)
00146 self.assertEqual(sheet4.GetRegistryDisp(False).Count, 0)
00147 self.project.CommitTransaction()
00148 self.project.Save()
00149 self.project.Close()
00150
00151
00152 def test_copy(self):
00153 from GPyUnit import util
00154 util.register_xmp('MetaGME')
00155 with util.disable_early_binding():
00156 self.project = DispatchEx("Mga.MgaProject")
00157 self.project.Create(self.connstr, "MetaGME")
00158 self.project.BeginTransactionInNewTerr()
00159
00160 for i in range(1, self.project.RootMeta.RootFolder.DefinedFCOs.Count+1):
00161 if self.project.RootMeta.RootFolder.DefinedFCOs.Item(i).Name == 'ParadigmSheet':
00162 sheet_meta = self.project.RootMeta.RootFolder.DefinedFCOs.Item(i)
00163 sheet = self.project.RootFolder.CreateRootObject(sheet_meta)
00164 sheet.SetRegistryValueDisp('test123', 'test')
00165 sheet2 = self.project.RootFolder.CopyFCODisp(sheet)
00166 self.assertEqual(sheet2.GetRegistryValueDisp('test123'), 'test')
00167 self.project.CommitTransaction()
00168 self.project.Save()
00169 self.project.Close()
00170
00171 def test_subtree_removal(self):
00172 from GPyUnit import util
00173 util.register_xmp('MetaGME')
00174 with util.disable_early_binding():
00175 self.project = DispatchEx("Mga.MgaProject")
00176 self.project.Create(self.connstr, "MetaGME")
00177 self.project.BeginTransactionInNewTerr()
00178
00179 for i in range(1, self.project.RootMeta.RootFolder.DefinedFCOs.Count+1):
00180 if self.project.RootMeta.RootFolder.DefinedFCOs.Item(i).Name == 'ParadigmSheet':
00181 sheet_meta = self.project.RootMeta.RootFolder.DefinedFCOs.Item(i)
00182 sheet = self.project.RootFolder.CreateRootObject(sheet_meta)
00183
00184 sheet.SetRegistryValueDisp('test123', 'test')
00185 sheet.SetRegistryValueDisp('test123/123', 'test')
00186 sheet.SetRegistryValueDisp('test123456', 'test')
00187 sheet.SetRegistryValueDisp('test123456/123', 'test')
00188 sheet.GetRegistryNodeDisp('test123').RemoveTree()
00189 ATTSTATUS_UNDEFINED = -2
00190 self.assertEqual(sheet.GetRegistryNodeDisp('test123').Status(), ATTSTATUS_UNDEFINED)
00191 self.assertEqual(sheet.GetRegistryNodeDisp('test123/123').Status(), ATTSTATUS_UNDEFINED)
00192 self.assertEqual(sheet.GetRegistryValueDisp('test123456'), 'test')
00193 self.assertEqual(sheet.GetRegistryValueDisp('test123456/123'), 'test')
00194 self.project.CommitTransaction()
00195 self.project.Save()
00196 self.project.Close()
00197
00198 def xxxtestupgrade(self):
00199 from GPyUnit import util
00200 util.register_xmp('MetaGME')
00201 with util.disable_early_binding():
00202 self.project = DispatchEx("Mga.MgaProject")
00203 self.project.Open("MGA=" + r"C:\Users\ksmyth\Documents\META\meta\CyPhyML\CyPhyML.mga")
00204 self.project.BeginTransactionInNewTerr()
00205 self.project.RootFolder.ChildFolders
00206
00207 import GPyUnit.util
00208 GPyUnit.util.MUGenerator(globals(), TestRegistry)
00209
00210 if __name__ == "__main__":
00211 unittest.main()