Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-06-28 20:30:34 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-06-28 20:30:34 +0400
commit86515e5086c833125409756cba51d7d0ec4de007 (patch)
tree869eafe42b46a2ce0fb42b88c140c2997fe4143c /source/tests
parent8b96383b8fa0bb50020bdfa4453cc8de28d64e7f (diff)
test operator script, add ability to load files from a path while testing operators.
Diffstat (limited to 'source/tests')
-rw-r--r--source/tests/bl_run_operators.py81
1 files changed, 71 insertions, 10 deletions
diff --git a/source/tests/bl_run_operators.py b/source/tests/bl_run_operators.py
index e6f1cc56eb0..effc06cd15f 100644
--- a/source/tests/bl_run_operators.py
+++ b/source/tests/bl_run_operators.py
@@ -27,9 +27,13 @@ import bpy
import sys
USE_ATTRSET = False
+USE_FILES = "" # "/mango/"
USE_RANDOM = False
+USE_RANDOM_SCREEN = False
RANDOM_SEED = [1] # so we can redo crashes
-RANDOM_RESET = 0.1 # 10% chance of resetting on each mew operator
+RANDOM_RESET = 0.1 # 10% chance of resetting on each new operator
+RANDOM_MULTIPLY = 10
+
op_blacklist = (
"script.reload",
@@ -50,8 +54,13 @@ op_blacklist = (
"nla.bake", # OK but slow
"*.*_export",
"*.*_import",
+ "ed.undo",
"ed.undo_push",
+ "script.autoexec_warn_clear",
+ "screen.delete", # already used for random screens
"wm.blenderplayer_start",
+ "wm.recover_auto_save",
+ "wm.quit_blender",
"wm.url_open",
"wm.doc_view",
"wm.doc_edit",
@@ -78,6 +87,33 @@ op_blacklist = (
)
+def blend_list(mainpath):
+ import os
+ from os.path import join, splitext
+
+ def file_list(path, filename_check=None):
+ for dirpath, dirnames, filenames in os.walk(path):
+
+ # skip '.svn'
+ if dirpath.startswith("."):
+ continue
+
+ for filename in filenames:
+ filepath = join(dirpath, filename)
+ if filename_check is None or filename_check(filepath):
+ yield filepath
+
+ def is_blend(filename):
+ ext = splitext(filename)[1]
+ return (ext in {".blend",})
+
+ return list(sorted(file_list(mainpath, is_blend)))
+
+if USE_FILES:
+ USE_FILES_LS = blend_list(USE_FILES)
+ # print(USE_FILES_LS)
+
+
def filter_op_list(operators):
from fnmatch import fnmatchcase
@@ -98,6 +134,18 @@ def reset_blend():
scene.frame_start = 1
scene.frame_end = 5
+ if USE_RANDOM_SCREEN:
+ import random
+ for i in range(random.randint(0, len(bpy.data.screens))):
+ bpy.ops.screen.delete()
+ print("Scree IS", bpy.context.screen)
+
+
+def reset_file():
+ import random
+ f = USE_FILES_LS[random.randint(0, len(USE_FILES_LS) - 1)]
+ bpy.ops.wm.open_mainfile(filepath=f)
+
if USE_ATTRSET:
def build_property_typemap(skip_classes):
@@ -167,12 +215,14 @@ if USE_ATTRSET:
# main function
_random_values = (
- None, object,
- 1, 0.1, -1,
+ None, object, type,
+ 1, 0.1, -1, # float("nan"),
"", "test", b"", b"test",
(), [], {},
(10,), (10, 20), (0, 0, 0),
- {},
+ {0: "", 1: "hello", 2: "test"}, {"": 0, "hello": 1, "test": 2},
+ set(), {"", "test", "."}, {None, ..., type},
+ range(10), (" " * i for i in range(10)),
)
def attrset_data():
@@ -194,11 +244,6 @@ if USE_ATTRSET:
def run_ops(operators, setup_func=None, reset=True):
print("\ncontext:", setup_func.__name__)
- if USE_RANDOM:
- import random
- if random.random() < (1.0 - RANDOM_RESET):
- reset = False
-
# first invoke
for op_id, op in operators:
if op.poll():
@@ -207,7 +252,18 @@ def run_ops(operators, setup_func=None, reset=True):
# disable will get blender in a bad state and crash easy!
if reset:
- reset_blend()
+ reset_test = True
+ if USE_RANDOM:
+ import random
+ if random.random() < (1.0 - RANDOM_RESET):
+ reset_test = False
+
+ if reset_test:
+ if USE_FILES:
+ reset_file()
+ else:
+ reset_blend()
+ del reset_test
if USE_RANDOM:
# we can't be sure it will work
@@ -386,12 +442,17 @@ def main():
if USE_RANDOM:
import random
random.seed(RANDOM_SEED[0])
+ operators = operators * RANDOM_MULTIPLY
random.shuffle(operators)
# 2 passes, first just run setup_func to make sure they are ok
for operators_test in ((), operators):
# Run the operator tests in different contexts
run_ops(operators_test, setup_func=lambda: None)
+
+ if USE_FILES:
+ continue
+
run_ops(operators_test, setup_func=ctx_clear_scene)
# object modes
run_ops(operators_test, setup_func=ctx_object_empty)