Skip to content

Commit

Permalink
Merge pull request #1426 from UV-CDAT/vtk_ui_test_coverage
Browse files Browse the repository at this point in the history
Vtk ui test coverage
  • Loading branch information
doutriaux1 committed Aug 5, 2015
2 parents 6da0879 + 32a434f commit d137f6e
Show file tree
Hide file tree
Showing 40 changed files with 1,277 additions and 72 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -60,3 +60,5 @@ sources/
version
/.hooks-config
/.idea
.coverage
covhtml
19 changes: 17 additions & 2 deletions Packages/vcs/Lib/vtk_ui/slider.py
Expand Up @@ -41,7 +41,7 @@ def __init__(self, interactor, value=0, min_val=0, max_val=1, point1=(
self.repr.SetMinimumValue(float(min_val))
self.repr.SetMaximumValue(float(max_val))
if callable(value):
self.repr.SetValue(float(value()))
self.set_value(value())
self.value_func = value
else:
self.repr.SetValue(float(value))
Expand All @@ -66,10 +66,25 @@ def __init__(self, interactor, value=0, min_val=0, max_val=1, point1=(
def place(self):
self.repr.GetPoint1Coordinate().SetValue((self.x1, self.y1, 0))
self.repr.GetPoint2Coordinate().SetValue((self.x2, self.y2, 0))
self.repr.Modified()

def set_value(self, value):
f = float(value) # Ensure value is floating-point
minimum = self.repr.GetMinimumValue()
maximum = self.repr.GetMaximumValue()

# Make sure value is between min and max
if f < minimum:
raise ValueError("Value for slider should be >= %f; received %f" % (minimum, f))
if f > maximum:
raise ValueError("Value for slider should be <= %f; received %f" % (maximum, f))

self.repr.SetValue(f)

def show(self):
if self.value_func:
self.repr.SetValue(float(self.value_func()))
f = self.value_func()
self.set_value(f)
super(Slider, self).show()

def end_slide(self, obj, event):
Expand Down
25 changes: 15 additions & 10 deletions Packages/vcs/Lib/vtk_ui/textbox.py
Expand Up @@ -53,6 +53,7 @@ def blink_cursor(self, obj, event):

self.last_blink = datetime.now()
if self.editing:
self.place_cursor()
if self.cursor.showing:
self.cursor.hide()
else:
Expand All @@ -61,6 +62,7 @@ def blink_cursor(self, obj, event):

def show_cursor(self):
self.last_blink = datetime.now()
self.place_cursor()
self.cursor.show()
self.manager.queue_render()

Expand All @@ -76,11 +78,11 @@ def add_character(self, character):
row = rows[self.row]

if self.column >= len(row):
if self.blank:
self.blank = False
row = character
else:
row += character
# It shouldn't be possible for self.blank to be true here
# self.column will only be >= len(row) if we're navigating
# up from another row (indicating that blank is false, because
# there's text on another line)
row += character
rows[self.row] = row
if character == "\n":
self.column = 0
Expand Down Expand Up @@ -122,7 +124,7 @@ def delete_character(self):
self.column -= 1
else:
rows[self.row] = row[:-1]
self.column = len(row)
self.column = len(row) - 1

self.text = "\n".join(rows)
if self.text == "":
Expand Down Expand Up @@ -170,8 +172,10 @@ def typed(self, obj, event):
else:
self.column = min(self.column + 1, len(rows[self.row]))
elif c == "Up":
self.row = max(0, self.row - 1)
self.column = min(len(rows[self.row]), self.column)
if self.row == 0:
self.column = 0
else:
self.row = self.row - 1
elif c == "Down":
if self.row == len(rows) - 1:
self.column = len(rows[self.row])
Expand Down Expand Up @@ -321,7 +325,7 @@ def row_col_at_point(self, x, y):
row_at_point = rows.index(row)

if row_at_point is None:
row_at_point = len(rows) - 1
row_at_point = 0

# List was assembled backwards
row_bounds.reverse()
Expand Down Expand Up @@ -360,7 +364,8 @@ def row_col_at_point(self, x, y):
# Start from left
w = 0
ind = 1
while row_left + w < x:

while row_left + w < x and ind < len(text):
w, _ = text_dimensions(text[:ind], prop, dpi)
ind += 1

Expand Down
15 changes: 9 additions & 6 deletions Packages/vcs/Lib/vtk_ui/widget.py
Expand Up @@ -21,22 +21,25 @@ def log(self, message):

def subscribe(self, event, action):
if event in self.subscriptions:
raise Exception(
"%s already subscribed to %s's %s event." %
(action, self.widget, event))
raise KeyError("%s already subscribed to %s's %s event." %
(action, self.widget, event)
)

self.subscriptions[event] = self.widget.AddObserver(event, action)

def place(self):
pass

def unsubscribe(self, *events):
"""
Will unsubscribe from all or none events. If any events are not subscribed to, there will be an exception.
"""

for event in events:
if event not in self.subscriptions:
raise Exception(
"%s not subscribed to %s's %s event." %
(self, self.widget, event))
raise KeyError("%s not subscribed to %s's %s event." %
(self, self.widget, event)
)

for event in events:
self.widget.RemoveObserver(self.subscriptions[event])
Expand Down
182 changes: 154 additions & 28 deletions testing/vcs/vtk_ui/CMakeLists.txt
@@ -1,7 +1,10 @@
set(BASELINE_DIR "${UVCDAT_GIT_TESTDATA_DIR}/baselines/vcs/vtk_ui")
set(TEST_DIR "${cdat_SOURCE_DIR}/testing/vcs/vtk_ui")

# WIDGET TESTS

# Button tests

cdat_add_test(test_vtk_ui_button_draw
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_button_draw.py
Expand Down Expand Up @@ -66,37 +69,92 @@ cdat_add_test(test_vtk_ui_button_tooltip_hide
${BASELINE_DIR}/test_vtk_ui_button_tooltip_hide.png
)

cdat_add_test(test_vtk_ui_slider_jumps
cdat_add_test(test_vtk_ui_button_state_advance
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_slider_jumps.py
${BASELINE_DIR}/test_vtk_ui_slider_jumps.png
${TEST_DIR}/test_vtk_ui_button_state_advance.py
)

cdat_add_test(test_vtk_ui_toggle_button_get_text
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_toggle_button_get_text.py
)

# Handle tests

cdat_add_test(test_vtk_ui_handle_appearance
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_handle_appearance.py
${BASELINE_DIR}/test_vtk_ui_handle_appearance.png
)

cdat_add_test(test_vtk_ui_handle_normalize
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_handle_normalize.py
)

cdat_add_test(test_vtk_ui_handle_sizing
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_handle_sizing.py
${BASELINE_DIR}/test_vtk_ui_handle_sizing.png
)

cdat_add_test(test_vtk_ui_handle_interaction
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_handle_interaction.py
)

# Textbox Tests

cdat_add_test(test_vtk_ui_textbox_highlight
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_textbox_highlight.py
${BASELINE_DIR}/test_vtk_ui_textbox_highlight.png
)

cdat_add_test(test_vtk_ui_label_top
cdat_add_test(test_vtk_ui_textbox_appearance
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_label_top.py
${BASELINE_DIR}/test_vtk_ui_label_top.png
${TEST_DIR}/test_vtk_ui_textbox_appearance.py
${BASELINE_DIR}/test_vtk_ui_textbox_appearance.png
)
cdat_add_test(test_vtk_ui_label_y

cdat_add_test(test_vtk_ui_textbox_blank_text
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_label_y.py
${BASELINE_DIR}/test_vtk_ui_label_y.png
${TEST_DIR}/test_vtk_ui_textbox_blank_text.py
)

cdat_add_test(test_vtk_ui_contrasting_colors
cdat_add_test(test_vtk_ui_textbox_cursor
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_contrasting_colors.py
${TEST_DIR}/test_vtk_ui_textbox_cursor.py
${BASELINE_DIR}/test_vtk_ui_textbox_cursor.png
)

cdat_add_test(test_vtk_ui_hsv_rgb
cdat_add_test(test_vtk_ui_textbox_typing
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_hsv_rgb.py
${TEST_DIR}/test_vtk_ui_textbox_typing.py
)

cdat_add_test(test_vtk_ui_textbox_coordinate_editing
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_textbox_coordinate_editing.py
)

cdat_add_test(test_vtk_ui_textbox_detach
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_textbox_detach.py
)

# Label tests

cdat_add_test(test_vtk_ui_label_top
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_label_top.py
${BASELINE_DIR}/test_vtk_ui_label_top.png
)

cdat_add_test(test_vtk_ui_label_y
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_label_y.py
${BASELINE_DIR}/test_vtk_ui_label_y.png
)

cdat_add_test(test_vtk_ui_label_behaviors
Expand Down Expand Up @@ -153,6 +211,18 @@ cdat_add_test(test_vtk_ui_label_x
${BASELINE_DIR}/test_vtk_ui_label_x.png
)

# Text Utility Tests

cdat_add_test(test_vtk_ui_contrasting_colors
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_contrasting_colors.py
)

cdat_add_test(test_vtk_ui_hsv_rgb
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_hsv_rgb.py
)

cdat_add_test(test_vtk_ui_set_font
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_set_font.py
Expand All @@ -168,14 +238,18 @@ cdat_add_test(test_vtk_ui_white_or_black
${TEST_DIR}/test_vtk_ui_white_or_black.py
)

cdat_add_test(test_vtk_ui_manager_resize
# Toolbar Tests

cdat_add_test(test_vtk_ui_toolbar_in_toolbar_open
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_manager_resize.py
${BASELINE_DIR}/test_vtk_ui_manager_resize.png
${TEST_DIR}/test_vtk_ui_toolbar_in_toolbar_open.py
${BASELINE_DIR}/test_vtk_ui_toolbar_in_toolbar_open.png
)
cdat_add_test(test_vtk_ui_textbox_blank_text

cdat_add_test(test_vtk_ui_toolbar_in_toolbar_closed
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_textbox_blank_text.py
${TEST_DIR}/test_vtk_ui_toolbar_in_toolbar_closed.py
${BASELINE_DIR}/test_vtk_ui_toolbar_in_toolbar_closed.png
)

cdat_add_test(test_vtk_ui_toolbar_label
Expand All @@ -196,24 +270,76 @@ cdat_add_test(test_vtk_ui_toolbar_close
${BASELINE_DIR}/test_vtk_ui_toolbar_close.png
)

cdat_add_test(test_vtk_ui_toggle_button_get_text
# Slider tests

cdat_add_test(test_vtk_ui_slider_value_func
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_toggle_button_get_text.py
${TEST_DIR}/test_vtk_ui_slider_value_func.py
${BASELINE_DIR}/test_vtk_ui_slider_value_func.png
)

cdat_add_test(test_vtk_ui_toolbar_in_toolbar_open
cdat_add_test(test_vtk_ui_slider_values
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_toolbar_in_toolbar_open.py
${BASELINE_DIR}/test_vtk_ui_toolbar_in_toolbar_open.png
${TEST_DIR}/test_vtk_ui_slider_values.py
${BASELINE_DIR}/test_vtk_ui_slider_values.png
)

cdat_add_test(test_vtk_ui_toolbar_in_toolbar_closed
cdat_add_test(test_vtk_ui_slider_appearance
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_toolbar_in_toolbar_closed.py
${BASELINE_DIR}/test_vtk_ui_toolbar_in_toolbar_closed.png
${TEST_DIR}/test_vtk_ui_slider_appearance.py
${BASELINE_DIR}/test_vtk_ui_slider_appearance.png
)

cdat_add_test(test_vtk_ui_button_state_advance
cdat_add_test(test_vtk_ui_slider_callbacks
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_button_state_advance.py
${TEST_DIR}/test_vtk_ui_slider_callbacks.py
)

cdat_add_test(test_vtk_ui_slider_place
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_slider_place.py
${BASELINE_DIR}/test_vtk_ui_slider_place.png
)

cdat_add_test(test_vtk_ui_slider_jumps
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_slider_jumps.py
${BASELINE_DIR}/test_vtk_ui_slider_jumps.png
)

# Manager Tests

cdat_add_test(test_vtk_ui_manager_resize
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_manager_resize.py
${BASELINE_DIR}/test_vtk_ui_manager_resize.png
)

# Base class tests

cdat_add_test(test_vtk_ui_behavior_keyable
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_behavior_keyable.py
)

cdat_add_test(test_vtk_ui_widget_init
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_widget_init.py
)

cdat_add_test(test_vtk_ui_widget_show_hide
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_widget_show_hide.py
${BASELINE_DIR}/test_vtk_ui_widget_show.png
${BASELINE_DIR}/test_vtk_ui_widget_hide.png
)

cdat_add_test(test_vtk_ui_widget_subscribe_unsubscribe
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_widget_subscribe_unsubscribe.py
)

cdat_add_test(test_vtk_ui_widget_detach
"${PYTHON_EXECUTABLE}"
${TEST_DIR}/test_vtk_ui_widget_detach.py
)

0 comments on commit d137f6e

Please sign in to comment.