Java API: fixed script for coverage calculation
authorAndrey Kamaev <no@email>
Fri, 5 Aug 2011 13:04:14 +0000 (13:04 +0000)
committerAndrey Kamaev <no@email>
Fri, 5 Aug 2011 13:04:14 +0000 (13:04 +0000)
modules/java/check-tests.py

index fdb96f7..b898772 100644 (file)
@@ -4,12 +4,13 @@ classes_ignore_list = (
     'OpenCV(Test)?Case',\r
     'OpenCV(Test)?Runner',\r
     'CvException',\r
-    'CvType'\r
 )\r
 \r
 funcs_ignore_list = (\r
     '\w+--HashCode',\r
     'Mat--MatLong',\r
+    '\w+--Equals',\r
+    'Core--MinMaxLocResult',\r
 )\r
 \r
 class JavaParser:\r
@@ -19,6 +20,8 @@ class JavaParser:
     def clear(self):\r
         self.mdict = {}\r
         self.tdict = {}\r
+        self.mwhere = {}\r
+        self.twhere = {}\r
         self.empty_stubs_cnt = 0\r
         self.r1 = re.compile("\s*public\s+(?:static\s+)?(\w+)\(([^)]*)\)") # c-tor\r
         self.r2 = re.compile("\s*(?:(?:public|static|final)\s+){1,3}\S+\s+(\w+)\(([^)]*)\)")\r
@@ -47,28 +50,52 @@ class JavaParser:
     def get_not_tested(self):\r
         mset = self.dict2set(self.mdict)\r
         tset = self.dict2set(self.tdict)\r
-        return mset - tset\r
+        nottested = mset - tset\r
+        out = set()\r
+\r
+        for name in nottested:\r
+            out.add(name + "   " + self.mwhere[name])\r
+\r
+        return out\r
 \r
 \r
     def parse(self, path):\r
         if ".svn" in path:\r
             return\r
         if os.path.isfile(path):\r
-            parser.parse_file(path)\r
+            if path.endswith("FeatureDetector.java"):\r
+                for prefix1 in ("", "Grid", "Pyramid", "Dynamic"):\r
+                    for prefix2 in ("FAST", "STAR", "MSER", "ORB", "SIFT", "SURF", "GFTT", "HARRIS"):\r
+                        parser.parse_file(path,prefix1+prefix2)\r
+            elif path.endswith("DescriptorExtractor.java"):\r
+                for prefix1 in ("", "Opponent"):\r
+                    for prefix2 in ("BRIEF", "ORB", "SIFT", "SURF"):\r
+                        parser.parse_file(path,prefix1+prefix2)\r
+            elif path.endswith("GenericDescriptorMatcher.java"):\r
+                for prefix in ("OneWay", "Fern"):\r
+                    parser.parse_file(path,prefix)\r
+            elif path.endswith("DescriptorMatcher.java"):\r
+                for prefix in ("BruteForce", "BruteForceHamming", "BruteForceHammingLUT", "BruteForceL1", "FlannBased"):\r
+                    parser.parse_file(path,prefix)\r
+            else:\r
+                parser.parse_file(path)\r
         elif os.path.isdir(path):\r
             for x in os.listdir(path):\r
                 self.parse(path + "/" + x)\r
         return\r
 \r
 \r
-    def parse_file(self, fname):\r
+    def parse_file(self, fname, prefix = ""):\r
+        istest = fname.endswith("Test.java")\r
         clsname = os.path.basename(fname).replace("Test", "").replace(".java", "")\r
-        clsname = clsname[0].upper() + clsname[1:]\r
+        clsname = prefix + clsname[0].upper() + clsname[1:]\r
         for cls in classes_ignore_list:\r
             if re.match(cls, clsname):\r
                 return\r
         f = open(fname, "rt")\r
+        linenum = 0\r
         for line in f:\r
+            linenum += 1\r
             m1 = self.r1.match(line)\r
             m2 = self.r2.match(line)\r
             m3 = self.r3.match(line)\r
@@ -89,13 +116,16 @@ class JavaParser:
                 #if "public" in line:\r
                     #print "UNRECOGNIZED: " + line\r
                 continue\r
-            d = (self.mdict, self.tdict)["test" in func]\r
+            d = (self.mdict, self.tdict)[istest]\r
+            w = (self.mwhere, self.twhere)[istest]\r
             func = re.sub(r"^test", "", func)\r
             func = clsname + "--" + func[0].upper() + func[1:]\r
             args_str = args_str.replace("[]", "Array").replace("...", "Array ")\r
             args_str = re.sub(r"List<(\w+)>", "ListOf\g<1>", args_str)\r
+            args_str = re.sub(r"List<(\w+)>", "ListOf\g<1>", args_str)\r
             args = [a.split()[0] for a in args_str.split(",") if a]\r
             func_ex = func + "".join([a[0].upper() + a[1:] for a in args])\r
+            func_loc = fname + " (line: " + str(linenum)  + ")"\r
             skip = False\r
             for fi in funcs_ignore_list:\r
                 if re.match(fi, func_ex):\r
@@ -107,6 +137,9 @@ class JavaParser:
                 d[func].append(func_ex)\r
             else:\r
                 d[func] = [func_ex]\r
+            w[func_ex] = func_loc\r
+            w[func] = func_loc\r
+\r
         f.close()\r
         return\r
 \r