001    package org.apache.tapestry.form;
002    
003    import org.apache.tapestry.IBinding;
004    import org.apache.tapestry.IForm;
005    import org.apache.tapestry.IMarkupWriter;
006    import org.apache.tapestry.IRequestCycle;
007    import static org.easymock.EasyMock.expect;
008    import static org.easymock.EasyMock.expectLastCall;
009    import org.testng.annotations.Test;
010    
011    @Test
012    public class TestRadio extends BaseFormComponentTestCase
013    {
014            private Radio radio;
015            private RadioGroup group;
016    
017            private IMarkupWriter writer;
018            private IRequestCycle cycle;
019    
020            public void test_Render_Selected()
021            {
022                    setupComponent(0, false);
023    
024                    replay();
025    
026                    radio.render(writer, cycle);
027    
028                    verify();
029    
030                    assertBuffer("<input type=\"radio\" name=\"group\" id=\"group0\" checked=\"checked\" value=\"0\" onclick=\"tapestry.byId('group').onChange(0);\" />");
031            }
032    
033            public void test_Render_Unselected()
034            {
035                    setupComponent(1, false);
036    
037                    replay();
038    
039                    radio.render(writer, cycle);
040    
041                    verify();
042    
043                    assertBuffer("<input type=\"radio\" name=\"group\" id=\"group0\" value=\"0\" onclick=\"tapestry.byId('group').onChange(0);\" />");
044            }
045    
046            public void test_Rewind_Selected()
047            {
048                    setupComponent(0, true);
049    
050                    IBinding binding = newMock(IBinding.class);
051            group.setBinding("selected", binding);
052                    binding.setObject(0);
053                    expectLastCall();
054    
055                    replay();
056    
057                    radio.render(writer, cycle);
058    
059                    verify();
060            }
061    
062            public void test_Rewind_Unselected()
063            {
064                    setupComponent(1, true);
065    
066                    replay();
067    
068                    radio.render(writer, cycle);
069    
070                    verify();
071            }
072    
073            private void setupComponent(int selection, boolean rewinding)
074            {
075                    group = newInstance(RadioGroup.class);
076                    group.setName("group");
077            group.setClientId("group");
078            group._rendering = true;
079                    group._rewinding = rewinding;
080                    group._selection = selection;
081                    group._selectedOption = selection;
082                    radio = newInstance(Radio.class,
083                                                              "value", 0);
084    
085                    writer = newBufferWriter();
086                    cycle = newCycle();
087                    IForm form = newMock(IForm.class);
088                    MockDelegate delegate = new MockDelegate();
089    
090                    expect(cycle.getAttribute(RadioGroup.ATTRIBUTE_NAME)).andReturn(group);
091                    expect(cycle.renderStackPush(radio)).andReturn(radio);
092    
093                    trainGetForm(cycle, form);
094                    trainWasPrerendered(form, writer, radio, false);
095                    trainGetDelegate(form, delegate);
096    
097                    //trainGetElementId(form, radio, "id");
098                    trainIsRewinding(form, rewinding);
099                    if (!rewinding)
100                    {
101                            trainIsRewinding(cycle, rewinding);
102                            form.setFormFieldUpdating(true);
103                    }
104    
105                    expect(cycle.renderStackPop()).andReturn(radio);
106            }
107    }