@@ -63,8 +63,8 @@ invalid_graph = etree.parse(StringIO('''\
valid_graph = etree.parse(StringIO('''\
-
-
+
+
''')).getroot()
@@ -82,9 +82,10 @@ invalid_tree = etree.parse(StringIO('''\
valid_tree= etree.parse(StringIO('''\
-
-
-
+
+
+
+
''')).getroot()
@@ -104,22 +105,22 @@ class test_view_validation(unittest2.TestCase):
assert not valid_att_in_field(invalid_form)
assert valid_att_in_field(valid_form)
- assert not valid_field_view(invalid_form)
- assert valid_field_view(valid_form)
+ assert not valid_view(invalid_form)
+ assert valid_view(valid_form)
def test_all_label_validation(self):
assert not valid_att_in_label(invalid_form)
assert valid_att_in_label(valid_form)
- assert not valid_label_view(invalid_form)
- assert valid_label_view(valid_form)
+ assert not valid_view(invalid_form)
+ assert valid_view(valid_form)
def test_form_string_validation(self):
assert not valid_att_in_form(invalid_form)
assert valid_att_in_form(valid_form)
- assert not valid_form_view(invalid_form)
- assert valid_form_view(valid_form)
+ assert not valid_view(invalid_form)
+ assert valid_view(valid_form)
def test_graph_field_validation(self):
assert not valid_field_in_graph(invalid_graph)
@@ -129,11 +130,11 @@ class test_view_validation(unittest2.TestCase):
assert valid_view(valid_graph)
def test_graph_string_validation(self):
- assert not valid_att_in_graph(invalid_graph)
- assert valid_att_in_graph(valid_graph)
+ assert not valid_field_in_graph(invalid_graph)
+ assert valid_field_in_graph(valid_graph)
- assert not valid_graph_view(invalid_graph)
- assert valid_graph_view(valid_graph)
+ assert not valid_view(invalid_graph)
+ assert valid_view(valid_graph)
def test_tree_field_validation(self):
assert not valid_field_in_tree(invalid_tree)
@@ -143,25 +144,25 @@ class test_view_validation(unittest2.TestCase):
assert valid_view(valid_tree)
def test_tree_string_validation(self):
- assert not valid_att_in_tree(invalid_tree)
- assert valid_att_in_tree(valid_tree)
+ assert not valid_field_in_tree(invalid_tree)
+ assert valid_field_in_tree(valid_tree)
- assert not valid_tree_view(invalid_tree)
- assert valid_tree_view(valid_tree)
+ assert not valid_view(invalid_tree)
+ assert valid_view(valid_tree)
def test_colspan_datatype_validation(self):
assert not valid_type_in_colspan(invalid_form)
assert valid_type_in_colspan(valid_form)
- assert not valid_colspan_view(invalid_form)
- assert valid_colspan_view(valid_form)
+ assert not valid_view(invalid_form)
+ assert valid_view(valid_form)
def test_col_datatype_validation(self):
assert not valid_type_in_col(invalid_form)
assert valid_type_in_col(valid_form)
- assert not valid_col_view(invalid_form)
- assert valid_col_view(valid_form)
+ assert not valid_view(invalid_form)
+ assert valid_view(valid_form)
if __name__ == '__main__':
diff --git a/openerp/tools/view_validation.py b/openerp/tools/view_validation.py
index fb7ed9f9270..b9fef105579 100644
--- a/openerp/tools/view_validation.py
+++ b/openerp/tools/view_validation.py
@@ -1,36 +1,35 @@
""" View validation code (using assertions, not the RNG schema). """
+
def valid_page_in_book(arch):
"""A `page` node must be below a `book` node."""
return not arch.xpath('//page[not(ancestor::notebook)]')
+
def valid_field_in_graph(arch):
"""A `field` node must be below a `graph` node."""
- return not arch.xpath('//graph[not(field)]')
+ return not arch.xpath('//graph[not ((field) and (@string))]')
+
def valid_field_in_tree(arch):
"""A `field` and `button` node must be below a `tree` node."""
- return not arch.xpath('//tree[not((field) and (button))]')
+ return not arch.xpath('//tree[not((field) and (button) and (@string))]')
+
def valid_att_in_field(arch):
"""A `name` attribute must be in a `field` node."""
return not arch.xpath('//field[not (@name)]')
+
def valid_att_in_label(arch):
"""A `for` and `string` attribute must be in a `label` node."""
return not arch.xpath('//label[not ((@for) or (@string))]')
-
-def valid_att_in_tree(arch):
- """A `string` attribute must be in a `tree` node."""
- return not arch.xpath('//tree[not (@string)]')
+
def valid_att_in_form(arch):
"""A `string` attribute must be in a `form` node."""
return not arch.xpath('//form[not (@string)]')
-def valid_att_in_graph(arch):
- """A `string` attribute must be in a `graph` node."""
- return not arch.xpath('//graph[not (@string)]')
def valid_type_in_colspan(arch):
"""A `colspan` attribute must be an `integer` type."""
@@ -40,7 +39,8 @@ def valid_type_in_colspan(arch):
except:
return False
return True
-
+
+
def valid_type_in_col(arch):
"""A `col` attribute must be an `integer` type."""
for attrib in arch.xpath('//*/@col'):
@@ -49,65 +49,22 @@ def valid_type_in_col(arch):
except:
return False
return True
-
-def valid_colspan_view(arch):
- for pred in [valid_type_in_colspan]:
- if not pred(arch):
- return False
- return True
-
-def valid_col_view(arch):
- for pred in [valid_type_in_col]:
- if not pred(arch):
- return False
- return True
-def valid_field_view(arch):
- for pred in [valid_att_in_field]:
- if not pred(arch):
- return False
- return True
-
-def valid_label_view(arch):
- for pred in [valid_att_in_label]:
- if not pred(arch):
- return False
- return True
-def valid_tree_view(arch):
- if arch.tag == 'tree':
- for pred in [valid_att_in_tree]:
- if not pred(arch):
- return False
- return True
-
-def valid_form_view(arch):
- if arch.tag == 'form':
- for pred in [valid_att_in_form]:
- if not pred(arch):
- return False
- return True
-
-def valid_graph_view(arch):
- if arch.tag == 'graph':
- for pred in [valid_att_in_graph]:
- if not pred(arch):
- return False
- return True
-
-
def valid_view(arch):
if arch.tag == 'form':
- for pred in [valid_page_in_book]:
+ for pred in [valid_page_in_book,valid_att_in_form,valid_type_in_colspan,\
+ valid_type_in_col,valid_att_in_field,valid_att_in_label]:
if not pred(arch):
return False
elif arch.tag == 'graph':
- for pred in [valid_field_in_graph]:
+ for pred in [valid_field_in_graph,valid_type_in_colspan,valid_type_in_col,\
+ valid_att_in_field,valid_att_in_label]:
if not pred(arch):
return False
elif arch.tag == 'tree':
- for pred in [valid_field_in_tree]:
+ for pred in [valid_field_in_tree,valid_type_in_colspan,valid_type_in_col,\
+ valid_att_in_field,valid_att_in_label]:
if not pred(arch):
return False
return True
-