Jigar Amin (OpenERP) has proposed merging
lp:~openerp-dev/openobject-server/trunk-sloppy-rng-jam into
lp:~openerp-dev/openobject-server/trunk-sloppy-rng-vmt.
Requested reviews:
Vo Minh Thu (OpenERP) (vmt-openerp)
Jigar Amin (OpenERP) (jam-openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-sloppy-rng-jam/+merge/117215
assertion-based checks on the view architecture:
-------------------------------------------------
> <field> must have a "name" attribute
> <notebook> must contain only <page> nodes as direct children
> <label> must have a "for" or "string" attribute
> <form> tags must have a "string" attribute
> <tree> tags must have a "string" attribute
> <graph> tags must have a "string" attribute
> colspan attribute's value must be an integer
> col attribute's value must be an integer
> <graph> direct children must be only <field> tags
> <tree> direct children must be only <field> and <button> tags
Kindly Review this,
Thank You.
--
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-sloppy-rng-jam/+merge/117215
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-server/trunk-sloppy-rng-vmt.
=== modified file 'openerp/tests/test_view_validation.py'
--- openerp/tests/test_view_validation.py 2012-06-22 13:10:04 +0000
+++ openerp/tests/test_view_validation.py 2012-07-30 05:45:29 +0000
@@ -6,39 +6,164 @@
import unittest2
import openerp
-from openerp.tools.view_validation import valid_page_in_book, valid_view
-
-invalid_page = etree.parse(StringIO('''\
-<form>
+from openerp.tools.view_validation import *
+
+invalid_form = etree.parse(StringIO('''\
+<form>
+ <label></label>
+ <group>
+ <div>
+ <page></page>
+ <label colspan="True"></label>
+ <field></field>
+ </div>
+ </group>
+ <notebook>
+ <page>
+ <group col="Two">
+ <div>
+ <label></label>
+ <field colspan="Five"> </field>
+ </div>
+ </group>
+ </page>
+ </notebook>
+</form>
+''')).getroot()
+
+valid_form = etree.parse(StringIO('''\
+<form string="">
+ <notebook>
+ <label for=""></label>
+ <page>
+ <field name=""></field>
+ <label string=""></label>
+ <field name=""></field>
+ </page>
+ <page>
+ <group colspan="5" col="2">
+ <label for=""></label>
+ <label string="" colspan="5"></label>
+ </group>
+ </page>
+ </notebook>
+</form>
+''')).getroot()
+
+invalid_graph = etree.parse(StringIO('''\
+<graph>
+ <group>
+ <div>
+ <field></field>
+ <field></field>
+ </div>
+ </group>
+</graph>
+''')).getroot()
+
+valid_graph = etree.parse(StringIO('''\
+<graph string="">
+ <field name=""></field>
+ <field name=""></field>
+</graph>
+''')).getroot()
+
+invalid_tree = etree.parse(StringIO('''\
+<tree>
<group>
<div>
- <page>
- </page>
+ <field></field>
+ <field></field>
</div>
</group>
-</form>
-''')).getroot()
-
-valid_page = etree.parse(StringIO('''\
-<form>
- <notebook>
- <div>
- <page>
- </page>
- </div>
- </notebook>
-</form>
-''')).getroot()
+</tree>
+''')).getroot()
+
+valid_tree= etree.parse(StringIO('''\
+<tree string="">
+ <button></button>
+ <label string=""></label>
+ <field name=""></field>
+ <field name=""></field>
+ <field name=""></field>
+ <button></button>
+</tree>
+''')).getroot()
+
class test_view_validation(unittest2.TestCase):
""" Test the view validation code (but not the views themselves). """
def test_page_validation(self):
- assert not valid_page_in_book(invalid_page)
- assert valid_page_in_book(valid_page)
-
- assert not valid_view(invalid_page)
- assert valid_view(valid_page)
+ assert not valid_page_in_book(invalid_form)
+ assert valid_page_in_book(valid_form)
+
+ assert not valid_view(invalid_form)
+ assert valid_view(valid_form)
+
+ def test_all_field_validation(self):
+ assert not valid_att_in_field(invalid_form)
+ assert valid_att_in_field(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_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_view(invalid_form)
+ assert valid_view(valid_form)
+
+ def test_graph_field_validation(self):
+ assert not valid_field_in_graph(invalid_graph)
+ assert valid_field_in_graph(valid_graph)
+
+ assert not valid_view(invalid_graph)
+ assert valid_view(valid_graph)
+
+ def test_graph_string_validation(self):
+ assert not valid_field_in_graph(invalid_graph)
+ assert valid_field_in_graph(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)
+ assert valid_field_in_tree(valid_tree)
+
+ assert not valid_view(invalid_tree)
+ assert valid_view(valid_tree)
+
+ def test_tree_string_validation(self):
+ assert not valid_field_in_tree(invalid_tree)
+ assert valid_field_in_tree(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_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_view(invalid_form)
+ assert valid_view(valid_form)
+
if __name__ == '__main__':
unittest2.main()
=== modified file 'openerp/tools/view_validation.py'
--- openerp/tools/view_validation.py 2012-06-22 13:10:04 +0000
+++ openerp/tools/view_validation.py 2012-07-30 05:45:29 +0000
@@ -1,12 +1,70 @@
""" 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) 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) 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_form(arch):
+ """A `string` attribute must be in a `form` node."""
+ return not arch.xpath('//form[not (@string)]')
+
+
+def valid_type_in_colspan(arch):
+ """A `colspan` attribute must be an `integer` type."""
+ for attrib in arch.xpath('//*/@colspan'):
+ try:
+ int(attrib)
+ 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'):
+ try:
+ int(attrib)
+ except:
+ 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,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,valid_type_in_colspan,valid_type_in_col,\
+ valid_att_in_field,valid_att_in_label]:
if not pred(arch):
return False
return True
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp