beef up partition view tests a bit

This commit is contained in:
Michael Hudson-Doyle 2017-12-21 14:41:05 +13:00
parent 4389c1636b
commit f972119126
2 changed files with 55 additions and 14 deletions

View File

@ -9,6 +9,7 @@ from subiquitycore.testing import view_helpers
from subiquity.controllers.filesystem import FilesystemController from subiquity.controllers.filesystem import FilesystemController
from subiquity.models.filesystem import ( from subiquity.models.filesystem import (
dehumanize_size,
Disk, Disk,
FilesystemModel, FilesystemModel,
Partition, Partition,
@ -43,6 +44,41 @@ class PartitionViewTests(unittest.TestCase):
view = self.make_view() view = self.make_view()
self.assertIsNone(view_helpers.find_button_matching(view, "Delete")) self.assertIsNone(view_helpers.find_button_matching(view, "Delete"))
def test_delete_present_for_partition(self): def test_delete_not_disabled_for_ordinary_partition(self):
view = self.make_view(Partition(size=50)) view = self.make_view(Partition(size=50))
self.assertIsNotNone(view_helpers.find_button_matching(view, "Delete")) but, path = view_helpers.find_button_matching(view, "Delete", return_path=True)
self.assertIsNotNone(but)
for w in path:
if isinstance(w, urwid.WidgetDisable):
self.fail("Delete button is disabled")
def test_delete_disabled_for_boot_partition(self):
view = self.make_view(Partition(size=50, flag="boot"))
but, path = view_helpers.find_button_matching(view, "Delete", return_path=True)
self.assertIsNotNone(but)
for w in path:
if isinstance(w, urwid.WidgetDisable):
return
else:
self.fail("Delete button not disabled")
def test_click_delete_button(self):
partition = Partition(size=50)
view = self.make_view(partition)
but = view_helpers.find_button_matching(view, "Delete")
view_helpers.click(but)
view.controller.delete_partition.assert_called_once_with(partition)
def test_create_partition(self):
valid_data = {
'partnum':1,
'size':"1M",
'fstype':FilesystemModel.fs_by_name["ext4"],
}
view = self.make_view()
view_helpers.enter_data(view.form, valid_data)
view_helpers.click(view.form.done_btn.base_widget)
valid_data['mount'] = '/'
valid_data['size'] = dehumanize_size(valid_data['size'])
view.controller.partition_disk_handler.assert_called_once_with(
view.disk, None, valid_data)

View File

@ -2,31 +2,36 @@ import re
import urwid import urwid
def find_with_pred(w, pred): def find_with_pred(w, pred, return_path=False):
def _walk(w): def _walk(w, path):
if pred(w): if pred(w):
return w return w, path
if hasattr(w, '_wrapped_widget'): if hasattr(w, '_wrapped_widget'):
return _walk(w._wrapped_widget) return _walk(w._wrapped_widget, (w,) + path)
if hasattr(w, 'original_widget'): if hasattr(w, 'original_widget'):
return _walk(w.original_widget) return _walk(w.original_widget, (w,) + path)
if isinstance(w, urwid.ListBox): if isinstance(w, urwid.ListBox):
for w in w.body: for w in w.body:
r = _walk(w) r, p = _walk(w, (w,) + path)
if r: if r:
return r return r, p
elif hasattr(w, 'contents'): elif hasattr(w, 'contents'):
contents = w.contents contents = w.contents
for w, _ in contents: for w, _ in contents:
r = _walk(w) r, p = _walk(w, (w,) + path)
if r: if r:
return r return r, p
return _walk(w) return None, None
r, p = _walk(w, ())
if return_path:
return r, p
else:
return r
def find_button_matching(w, pat): def find_button_matching(w, pat, return_path=False):
def pred(w): def pred(w):
return isinstance(w, urwid.Button) and re.match(pat, w.label) return isinstance(w, urwid.Button) and re.match(pat, w.label)
return find_with_pred(w, pred) return find_with_pred(w, pred, return_path)
def click(but): def click(but):
but._emit('click') but._emit('click')