Thread: [Pydev-cvs] org.python.pydev.parser/tests/org/python/pydev/parser/fastparser FastDefinitionsParser
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2008-07-05 21:52:53
|
Update of /cvsroot/pydev/org.python.pydev.parser/tests/org/python/pydev/parser/fastparser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21875/tests/org/python/pydev/parser/fastparser Modified Files: FastDefinitionsParserTest.java Log Message: FastParser handling attributes (still needs more testing). Index: FastDefinitionsParserTest.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.parser/tests/org/python/pydev/parser/fastparser/FastDefinitionsParserTest.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** FastDefinitionsParserTest.java 5 Jul 2008 19:50:16 -0000 1.4 --- FastDefinitionsParserTest.java 5 Jul 2008 21:53:00 -0000 1.5 *************** *** 6,13 **** import org.python.pydev.core.REF; ! import org.python.pydev.core.performanceeval.Timer; import org.python.pydev.parser.jython.ast.ClassDef; import org.python.pydev.parser.jython.ast.FunctionDef; import org.python.pydev.parser.jython.ast.Module; import org.python.pydev.parser.jython.ast.NameTok; --- 6,15 ---- import org.python.pydev.core.REF; ! import org.python.pydev.parser.jython.ast.Assign; ! import org.python.pydev.parser.jython.ast.Attribute; import org.python.pydev.parser.jython.ast.ClassDef; import org.python.pydev.parser.jython.ast.FunctionDef; import org.python.pydev.parser.jython.ast.Module; + import org.python.pydev.parser.jython.ast.Name; import org.python.pydev.parser.jython.ast.NameTok; *************** *** 28,31 **** --- 30,47 ---- test.setUp(); test.testDefinitionsParser11(); + + + //only loading files + //java6: time elapsed: 0.593 + //java5: time elapsed: 0.984 + + //fast parser + //java6: time elapsed: 0.844 + //java5: time elapsed: 1.375 + + //regular parser + //java6: time elapsed: 9.25 + //java5: time elapsed: 6.89 + // Timer timer = new Timer(); // test.parseFilesInDir(new File("D:/bin/Python251/Lib/site-packages/wx-2.8-msw-unicode"), true); *************** *** 57,61 **** if(f.getAbsolutePath().toLowerCase().endsWith(".py")){ String fileContents = REF.getFileContents(f); ! FastDefinitionsParser.parse(fileContents); }else if(recursive && f.isDirectory()){ --- 73,82 ---- if(f.getAbsolutePath().toLowerCase().endsWith(".py")){ String fileContents = REF.getFileContents(f); ! try{ ! FastDefinitionsParser.parse(fileContents); ! }catch(Exception e){ ! System.out.println("Error parsing:"+f); ! // e.printStackTrace(); ! } }else if(recursive && f.isDirectory()){ *************** *** 66,69 **** --- 87,242 ---- + public void testAttributes() { + Module m = (Module) FastDefinitionsParser.parse( + "class Bar:\n" + + " ATTRIBUTE = 10\n" + + "\n" + + ""); + assertEquals(1, m.body.length); + ClassDef classDef = ((ClassDef)m.body[0]); + assertEquals("Bar", ((NameTok)classDef.name).id); + assertEquals(1, classDef.body.length); + Assign assign = (Assign) classDef.body[0]; + assertEquals(1, assign.targets.length); + Name name = (Name) assign.targets[0]; + assertEquals("ATTRIBUTE", name.id); + } + + + public void testAttributes2() { + Module m = (Module) FastDefinitionsParser.parse( + "class Bar:\n" + + " XXX.ATTRIBUTE = 10\n" + //we're assigning an attribute, that's not related to the class + "\n" + + ""); + assertEquals(1, m.body.length); + ClassDef classDef = ((ClassDef)m.body[0]); + assertEquals("Bar", ((NameTok)classDef.name).id); + assertEquals(0, classDef.body.length); //no attribute + } + + + public void testAttributes3() { + Module m = (Module) FastDefinitionsParser.parse( + "class Bar:\n" + + " def m1(self):\n" + + " ATTRIBUTE = 10\n" + //local scope: don't get it + "\n" + + ""); + assertEquals(1, m.body.length); + ClassDef classDef = ((ClassDef)m.body[0]); + assertEquals("Bar", ((NameTok)classDef.name).id); + assertEquals(1, classDef.body.length); //method + + FunctionDef funcDef = (FunctionDef)classDef.body[0]; + assertEquals("m1", ((NameTok)funcDef.name).id); + assertNull(funcDef.body); + } + + + + public void testAttributes4() { + Module m = (Module) FastDefinitionsParser.parse( + "class Bar:\n" + + " def m1(self):\n" + + " self.ATTRIBUTE = 10\n" + //local scope: get it because of self. + "\n" + + ""); + assertEquals(1, m.body.length); + ClassDef classDef = ((ClassDef)m.body[0]); + assertEquals("Bar", ((NameTok)classDef.name).id); + assertEquals(1, classDef.body.length); //method + + FunctionDef funcDef = (FunctionDef)classDef.body[0]; + assertEquals("m1", ((NameTok)funcDef.name).id); + + assertNull(funcDef.body[1]); + Assign assign = (Assign) funcDef.body[0]; + assertEquals(1, assign.targets.length); + Attribute attribute = (Attribute) assign.targets[0]; + NameTok attr = (NameTok) attribute.attr; + assertEquals("ATTRIBUTE", attr.id.toString()); + } + + public void testAttributes5() { + Module m = (Module) FastDefinitionsParser.parse( + "class Bar:\n" + + " def m1(self):\n" + + " self.ATTRIBUTE0 = 10\n" + //local scope: get it because of self. + " self.ATTRIBUTE1 = 10\n" + //local scope: get it because of self. + " self.ATTRIBUTE2 = 10\n" + //local scope: get it because of self. + "\n" + + ""); + assertEquals(1, m.body.length); + ClassDef classDef = ((ClassDef)m.body[0]); + assertEquals("Bar", ((NameTok)classDef.name).id); + assertEquals(1, classDef.body.length); //method + + FunctionDef funcDef = (FunctionDef)classDef.body[0]; + assertEquals("m1", ((NameTok)funcDef.name).id); + + for(int i=0;i<3;i++){ + Assign assign = (Assign) funcDef.body[i]; + assertEquals(1, assign.targets.length); + Attribute attribute = (Attribute) assign.targets[0]; + NameTok attr = (NameTok) attribute.attr; + assertEquals("ATTRIBUTE"+i, attr.id.toString()); + } + assertNull(funcDef.body[3]); + } + + + public void testAttributes6() { + Module m = (Module) FastDefinitionsParser.parse( + "class Bar:\n" + + " def m1(self):\n" + + " call(ATTRIBUTE = 10)\n" + //inside function call: don't get it + "\n" + + ""); + assertEquals(1, m.body.length); + ClassDef classDef = ((ClassDef)m.body[0]); + assertEquals("Bar", ((NameTok)classDef.name).id); + assertEquals(1, classDef.body.length); //method + + FunctionDef funcDef = (FunctionDef)classDef.body[0]; + assertEquals("m1", ((NameTok)funcDef.name).id); + assertNull(funcDef.body); + } + + public void testAttributes7() { + Module m = (Module) FastDefinitionsParser.parse( + "class Bar:\n" + + " call(ATTRIBUTE = 10)\n" + //inside function call: don't get it + "\n" + + ""); + assertEquals(1, m.body.length); + ClassDef classDef = ((ClassDef)m.body[0]); + assertEquals("Bar", ((NameTok)classDef.name).id); + assertEquals(0, classDef.body.length); //method + + } + + public void testAttributes8() { + Module m = (Module) FastDefinitionsParser.parse( + "class Bar:\n" + + " ATTRIBUTE = dict(\n" + //inside function call: don't get it + " b=20,\n" + + " c=30\n" + + " )\n" + + "\n" + + "\n" + + "\n" + + "\n" + + ""); + assertEquals(1, m.body.length); + ClassDef classDef = ((ClassDef)m.body[0]); + assertEquals("Bar", ((NameTok)classDef.name).id); + assertEquals(1, classDef.body.length); + Assign assign = (Assign) classDef.body[0]; + assertEquals(1, assign.targets.length); + Name name = (Name) assign.targets[0]; + assertEquals("ATTRIBUTE", name.id); + } + public void testDefinitionsParser() { Module m = (Module) FastDefinitionsParser.parse("class Bar:pass"); *************** *** 269,272 **** --- 442,454 ---- } + public void testEmpty() { + Module m = (Module) FastDefinitionsParser.parse( + "# This file was created automatically by SWIG 1.3.29.\n" + + "" + + "" //empty + ); + assertEquals(0, m.body.length); + } + |