File indexing completed on 2024-12-08 04:20:21
0001 # -*- coding: utf-8 -*- 0002 # Copyright 2009 Simon Edwards <simon@simonzone.com> 0003 # 0004 # This program is free software; you can redistribute it and/or modify 0005 # it under the terms of the GNU General Public License as published by 0006 # the Free Software Foundation; either version 2 of the License, or 0007 # (at your option) any later version. 0008 # 0009 # This program is distributed in the hope that it will be useful, 0010 # but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0012 # GNU General Public License for more details. 0013 # 0014 # You should have received a copy of the GNU General Public License 0015 # along with this program; if not, write to the 0016 # Free Software Foundation, Inc., 0017 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 0018 0019 import unittest 0020 import sipparser 0021 import sipsymboldata 0022 import sipmerger 0023 0024 class TestSipMerger(unittest.TestCase): 0025 def merge(self, primarySipText, updateSipText): 0026 parser = sipparser.SipParser() 0027 syms = sipsymboldata.SymbolData() 0028 primaryScope = parser.parse(syms,primarySipText) 0029 updateScope = parser.parse(syms,updateSipText) 0030 0031 print("Primary Sip -------------------------------------") 0032 print(primaryScope.format()) 0033 print("Update Sip -------------------------------------") 0034 print(updateScope.format()) 0035 0036 sipmerger.MergeSipScope(syms,primaryScope,updateScope) 0037 0038 print("Result --------------------------------------") 0039 print(primaryScope.format()) 0040 return primaryScope 0041 0042 def testNewFunction(self): 0043 newScope = self.merge(""" 0044 void foo(); 0045 """,""" 0046 void foo(); 0047 void bar(); 0048 """) 0049 self.assertTrue(len(newScope)==3) 0050 0051 def testDeleteFunction(self): 0052 newScope = self.merge(""" 0053 void foo(); 0054 void bar(); 0055 """,""" 0056 void foo(); 0057 """) 0058 self.assertTrue(len(newScope)==2) 0059 0060 def testFunctionIgnore(self): 0061 newScope = self.merge(""" 0062 //ig void foo(); 0063 """,""" 0064 void foo(); 0065 """) 0066 fooFunc = newScope[1] 0067 self.assertTrue(fooFunc.name()=="foo") 0068 self.assertTrue(fooFunc.ignore()) 0069 0070 def testFunctionIgnore2(self): 0071 newScope = self.merge(""" 0072 //ig void foo(); 0073 void foo(int x); 0074 """,""" 0075 void foo(); 0076 void foo(int x); 0077 """) 0078 fooFunc = newScope[1] 0079 self.assertTrue(fooFunc.name()=="foo") 0080 self.assertTrue(fooFunc.ignore()) 0081 fooFunc = newScope[2] 0082 self.assertTrue(fooFunc.name()=="foo") 0083 self.assertTrue(not fooFunc.ignore()) 0084 0085 def testFunctionAnnotations(self): 0086 newScope = self.merge(""" 0087 void foo() /PyName=Foozor/; 0088 """,""" 0089 void foo() /Factory/; 0090 """) 0091 fooFunc = newScope[1] 0092 self.assertTrue(len(fooFunc.annotations())==2) 0093 0094 def testFunctionForce(self): 0095 newScope = self.merge(""" 0096 //force 0097 void foo(); 0098 //end 0099 """,""" 0100 void bar(); 0101 """) 0102 fooFunc = newScope[1] 0103 self.assertTrue(fooFunc.force()) 0104 0105 def testFunctionMethodCode(self): 0106 newScope = self.merge(""" 0107 void foo(); 0108 %MethodCode 0109 // Method code goes here. 0110 %End 0111 """,""" 0112 void foo(); 0113 """) 0114 fooFunc = newScope[1] 0115 self.assertTrue(len(fooFunc.blocks())==1) 0116 0117 def testFunctionArguments(self): 0118 newScope = self.merge(""" 0119 void foo(int &x /Out/); 0120 """,""" 0121 void foo(int &x); 0122 """) 0123 fooFunc = newScope[1] 0124 #self.assertTrue(len(fooFunc.blocks())==1) 0125 0126 def testConstructor(self): 0127 newScope = self.merge(""" 0128 class Foo { 0129 Foo() /Default/; 0130 }; 0131 """,""" 0132 class Foo { 0133 Foo(); 0134 }; 0135 """) 0136 fooCtor = newScope[1][0] 0137 self.assertTrue(len(fooCtor.annotations())==1) 0138 0139 def testClass(self): 0140 newScope = self.merge(""" 0141 class Foo /Abstract/ { 0142 }; 0143 """,""" 0144 class Foo { 0145 }; 0146 """) 0147 fooClass = newScope[1] 0148 self.assertTrue(len(fooClass.annotations())==1) 0149 0150 def testClassFunction(self): 0151 newScope = self.merge(""" 0152 class Foo { 0153 void bar() /Factory/; 0154 }; 0155 """,""" 0156 class Foo { 0157 void bar(); 0158 }; 0159 """) 0160 fooCtor = newScope[1][0] 0161 self.assertTrue(len(fooCtor.annotations())==1) 0162 0163 def testClassDestructor(self): 0164 newScope = self.merge(""" 0165 class Foo { 0166 Foo(); 0167 ~Foo(); 0168 }; 0169 """,""" 0170 class Foo { 0171 Foo(); 0172 ~Foo(); 0173 }; 0174 """) 0175 self.assertTrue(len(newScope[1])==2) 0176 0177 def testNamespace(self): 0178 newScope = self.merge(""" 0179 namespace Foo { 0180 void bar() /Factory/; 0181 }; 0182 """,""" 0183 namespace Foo { 0184 void bar(); 0185 }; 0186 """) 0187 0188 def testForceFunction(self): 0189 newScope = self.merge(""" 0190 void foo(); 0191 //force 0192 void bar(); 0193 //end 0194 """,""" 0195 void foo(); 0196 """) 0197 0198 def testEnum(self): 0199 newScope = self.merge(""" 0200 enum Foo { 0201 bar, 0202 zyzz 0203 }; 0204 """,""" 0205 enum Foo { 0206 bar, 0207 zyzz, 0208 fooz 0209 }; 0210 """) 0211 0212 def testEnum2(self): 0213 newScope = self.merge(""" 0214 enum Foo { 0215 bar, 0216 zyzz 0217 }; 0218 """,""" 0219 enum Barz { 0220 bar, 0221 zyzz, 0222 fooz 0223 }; 0224 """) 0225 0226 def testOptionalArguments(self): 0227 newScope = self.merge(""" 0228 //ig static void invokeTerminal (const QString& command, const QByteArray& startup_id = ""); 0229 """,""" 0230 static void invokeTerminal (const QString& command, const QString& workdir = QString(), const QByteArray& startup_id = ""); 0231 """) 0232 0233 if __name__ == '__main__': 0234 unittest.main()