def test_fuzzy(web_fixture, fuzzy_text_input_fixture): """A TextInput can be created as fuzzy=True. Doing this results in the possibly imprecise input that was typed by the user to be interpreted server-side and changed to the more exact representation in the client browser. This happens upon the input losing focus.""" fixture = fuzzy_text_input_fixture model_object = fixture.model_object class MyForm(Form): def __init__(self, view, name): super().__init__(view, name) self.add_child( TextInput(self, model_object.fields.an_attribute, fuzzy=True)) self.define_event_handler(model_object.events.an_event) self.add_child(ButtonInput(self, model_object.events.an_event)) wsgi_app = web_fixture.new_wsgi_app(child_factory=MyForm.factory('myform'), enable_js=True) web_fixture.reahl_server.set_app(wsgi_app) browser = web_fixture.driver_browser browser.open('/') browser.type(XPath.input_named('myform-an_attribute'), '20 November 2012') browser.press_tab() browser.wait_for(browser.is_element_value, XPath.input_named('myform-an_attribute'), '20 Nov 2012')
def test_nested_forms(web_fixture): """HTML disallows nesting of forms. A NestedForm can be used to simulate a form which is visually part of another Form. A NestedForm provides a form attribute which should be used when creating an Inputs for it. """ fixture = web_fixture class NestedModelObject(object): handled_event = False def handle_event(self): self.handled_event = True @exposed def events(self, events): events.nested_event = Event(label='click nested', action=Action(self.handle_event)) @exposed def fields(self, fields): fields.nested_field = Field(label='input nested') nested_model_object = NestedModelObject() class MyNestedForm(NestedForm): def __init__(self, view, name): super(MyNestedForm, self).__init__(view, name) self.define_event_handler(nested_model_object.events.nested_event) self.add_child( ButtonInput(self.form, nested_model_object.events.nested_event)) self.add_child( TextInput(self.form, nested_model_object.fields.nested_field)) class OuterModelObject(object): handled_event = False def handle_event(self): self.handled_event = True @exposed def events(self, events): events.outer_event = Event(label='click outer', action=Action(self.handle_event)) outer_model_object = OuterModelObject() class OuterForm(Form): def __init__(self, view, name): super(OuterForm, self).__init__(view, name) self.add_child(MyNestedForm(view, 'my_nested_form')) self.define_event_handler(outer_model_object.events.outer_event) self.add_child( ButtonInput(self, outer_model_object.events.outer_event)) wsgi_app = fixture.new_wsgi_app( child_factory=OuterForm.factory('outer_form')) fixture.reahl_server.set_app(wsgi_app) browser = fixture.driver_browser browser.open('/') browser.type(XPath.input_named('my_nested_form-nested_field'), 'some nested input') browser.click(XPath.button_labelled('click nested')) assert nested_model_object.handled_event assert not outer_model_object.handled_event assert nested_model_object.nested_field == 'some nested input'