Bevel Factor Mapping
[blender.git] / source / tests / bl_rna_wiki_reference.py
index 2018c4327a39e4a7aa681a82e3cef1b5a8e8ae0c..c394107d8d177ac7cc204443c4c520704ac5f512 100644 (file)
 # Use for validating our wiki interlinking.
 #  ./blender.bin --background -noaudio --python source/tests/bl_rna_wiki_reference.py
 #
-# 1) test_lookup_coverage()   -- ensure that we have lookups for _every_ RNA path
-# 2) test_urls()              -- ensure all the URL's are correct
-# 3) test_language_coverage() -- ensure language lookup table is complete
+# 1) test_data()              -- ensure the data we have is correct format
+# 2) test_lookup_coverage()   -- ensure that we have lookups for _every_ RNA path
+# 3) test_urls()              -- ensure all the URL's are correct
+# 4) test_language_coverage() -- ensure language lookup table is complete
 #
 
 import bpy
 
-# a stripped down version of api_dump() in rna_info_dump.py
+
+def test_data():
+    import rna_wiki_reference
+
+    assert(isinstance(rna_wiki_reference.url_manual_mapping, tuple))
+    for i, value in enumerate(rna_wiki_reference.url_manual_mapping):
+        try:
+            assert(len(value) == 2)
+            assert(isinstance(value[0], str))
+            assert(isinstance(value[1], str))
+        except:
+            print("Expected a tuple of 2 strings, instead item %d is a %s: %r" % (i, type(value), value))
+            import traceback
+            traceback.print_exc()
+            raise
 
 
+# a stripped down version of api_dump() in rna_info_dump.py
 def test_lookup_coverage():
 
     def rna_ids():
-        
         import rna_info
         struct = rna_info.BuildRNAInfo()[0]
         for struct_id, v in sorted(struct.items()):
             props = [(prop.identifier, prop) for prop in v.properties]
+            struct_path = "bpy.types.%s" % struct_id[1]
             for prop_id, prop in props:
-                yield "bpy.types.%s.%s" % (struct_id[1], prop_id)
+                yield (struct_path, "%s.%s" % (struct_path, prop_id))
 
         for submod_id in dir(bpy.ops):
+            op_path = "bpy.ops.%s" % submod_id
             for op_id in dir(getattr(bpy.ops, submod_id)):
-                yield "bpy.ops.%s.%s" % (submod_id, op_id)
+                yield (op_path, "%s.%s" % (op_path, op_id))
 
     # check coverage
     from bl_operators import wm
 
-    for rna_id in rna_ids():
+    set_group_all = set()
+    set_group_doc = set()
+
+    for rna_group, rna_id in rna_ids():
         url = wm.WM_OT_doc_view_manual._lookup_rna_url(rna_id, verbose=False)
         print(rna_id, "->", url)
 
+        set_group_all.add(rna_group)
+        if url is not None:
+            set_group_doc.add(rna_group)
 
-def test_urls():
-    pass  # TODO
+    # finally report undocumented groups
+    print("")
+    print("---------------------")
+    print("Undocumented Sections")
+
+    for rna_group in sorted(set_group_all):
+        if rna_group not in set_group_doc:
+            print("%s.*" % rna_group)
 
 
 def test_language_coverage():
     pass  # TODO
 
 
+def test_urls():
+    import sys
+    import rna_wiki_reference
+
+    import urllib.error
+    from urllib.request import urlopen
+
+    prefix = rna_wiki_reference.url_manual_prefix
+    urls = {suffix for (rna_id, suffix) in rna_wiki_reference.url_manual_mapping}
+
+    urls_len = "%d" % len(urls)
+    print("")
+    print("-------------" + "-" * len(urls_len))
+    print("Testing URLS %s" % urls_len)
+    print("")
+
+    color_red = '\033[0;31m'
+    color_green = '\033[1;32m'
+    color_normal = '\033[0m'
+
+    urls_fail = []
+
+    for url in sorted(urls):
+        url_full = prefix + url
+        print("  %s ... " % url_full, end="")
+        sys.stdout.flush()
+        try:
+            urllib.request.urlopen(url_full)
+            print(color_green + "OK" + color_normal)
+        except urllib.error.HTTPError:
+            print(color_red + "FAIL!" + color_normal)
+            urls_fail.append(url)
+
+    if urls_fail:
+        urls_len = "%d" % len(urls_fail)
+        print("")
+        print("------------" + "-" * len(urls_len))
+        print("Failed URLS %s" % urls_len)
+        print("")
+        for url in urls_fail:
+            print("  %s%s%s" % (color_red, url, color_normal))
+
+
 def main():
+    test_data()
     test_lookup_coverage()
     test_language_coverage()
+    test_urls()
 
 if __name__ == "__main__":
     main()