Skip to content

Commit

Permalink
Examining rendered data.
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Volkov committed Nov 29, 2012
1 parent 444366b commit 21081bb
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
21 changes: 21 additions & 0 deletions z3cwidgetoptchoice/tests.py
Expand Up @@ -13,6 +13,16 @@
SimpleTerm(value="first", title="First"),
SimpleTerm(value="second", title="Second")
])
longer_sample_terms = SimpleVocabulary([
SimpleTerm(value="f1", title="One"),
SimpleTerm(value="f2", title="Two"),
SimpleTerm(value="f3", title="Three"),
SimpleTerm(value="f4", title="Four"),
SimpleTerm(value="f5", title="Five"),
SimpleTerm(value="f6", title="Six"),
SimpleTerm(value="f7", title="Seven"),
SimpleTerm(value="f8", title="Eight"),
])
comparison_terms = ["first", "second"]

class TestBasicOptChoice(unittest.TestCase):
Expand Down Expand Up @@ -50,3 +60,14 @@ def test_init_widget(self):
opt_widget = OptChoiceWidget(self.request)
opt_widget.name = 'opt-choice'
self.assertIsNone(opt_widget.terms)
def test_render_sequence(self):
opt_widget = OptChoiceWidget(self.request)
opt_widget.name = 'opt-choice'
opt_widget.id = 'oc1'
opt_widget.terms = longer_sample_terms
opt_widget.update()
rendered_data = opt_widget.render()
self.assertIn('id="oc1"', rendered_data)
self.assertIn('id="oc1-0"', rendered_data)
self.assertIn('id="oc1-7"', rendered_data)
self.assertEqual(8, rendered_data.count('value="f'))
26 changes: 25 additions & 1 deletion z3cwidgetoptchoice/widget.py
Expand Up @@ -4,6 +4,7 @@
import zope.component
import zope.interface

from zope.i18n import translate
from zope.component import provideAdapter
from zope.traversing.interfaces import ITraversable
from zope.traversing.adapters import DefaultTraversable
Expand All @@ -22,7 +23,6 @@ class OptChoiceWidget(HTMLSelectWidget, Widget):
noValueToken ='--NOVALUE--'

def __init__(self, request):
self.items = None
dirname = os.path.dirname(os.path.abspath(__file__))
outp = os.path.join(dirname, 'templates', 'optchoice.pt')
self.template = ViewPageTemplateFile(outp)
Expand All @@ -48,6 +48,30 @@ def extract(self, default=interfaces.NO_VALUE):
value = self.request.get(self.name, default)
#TODO: add more or fewer checks compared to SequenceWidget
return value
def isSelected(self, term):
return term.token in self.value
@property
def items(self):
"""
Using z3c.form.browser.select -- SelectWidget.items
"""
if self.terms is None:
return ()
items = []
for count, term in enumerate(self.terms):
selected = self.isSelected(term)
id = "%s-%i" % (self.id, count)
content = term.token
if zope.schema.interfaces.ITitledTokenizedTerm.providedBy(term):
content = translate(term.title, context=self.request,
default=term.title)
items.append({
'id':id,
'value':term.token,
'content':content,
'selected':selected,
})
return items

@zope.component.adapter(zope.schema.interfaces.IField, interfaces.IFormLayer)
def OptChoiceWidgetFactory(field, request):
Expand Down

0 comments on commit 21081bb

Please sign in to comment.