001 // Copyright May 20, 2006 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 package org.apache.tapestry.annotations; 015 016 import org.apache.hivemind.ApplicationRuntimeException; 017 import org.apache.hivemind.Resource; 018 import org.apache.tapestry.enhance.EnhancementOperation; 019 import org.apache.tapestry.internal.event.ComponentEventProperty; 020 import org.apache.tapestry.internal.event.EventBoundListener; 021 import org.apache.tapestry.spec.ComponentSpecification; 022 import org.apache.tapestry.spec.IComponentSpecification; 023 import org.testng.annotations.Test; 024 025 import java.lang.reflect.Method; 026 import java.util.List; 027 028 029 /** 030 * Tests functionality of {@link TestEventListenerAnnotationWorker}. 031 * @author jkuhnert 032 */ 033 @Test 034 public class TestEventListenerAnnotationWorker extends BaseAnnotationTestCase 035 { 036 037 public void test_Event_Connection() 038 { 039 EnhancementOperation op = newOp(); 040 IComponentSpecification spec = new ComponentSpecification(); 041 Resource resource = newResource(AnnotatedPage.class); 042 043 EventListenerAnnotationWorker worker = new EventListenerAnnotationWorker(); 044 045 replay(); 046 047 Method m = findMethod(AnnotatedPage.class, "eventListener"); 048 049 assertTrue(worker.canEnhance(m)); 050 assertFalse(worker.canEnhance(findMethod(AnnotatedPage.class, "getPersistentProperty"))); 051 worker.peformEnhancement(op, spec, m, resource); 052 053 verify(); 054 055 ComponentEventProperty property = spec.getComponentEvents("email"); 056 assertNotNull(property); 057 058 List listeners = property.getEventListeners("onClick"); 059 assertNotNull(listeners); 060 assertEquals(1, listeners.size()); 061 062 property = spec.getElementEvents("foo"); 063 assertNotNull(property); 064 065 listeners = property.getEventListeners("onClick"); 066 assertNotNull(listeners); 067 assertEquals(1, listeners.size()); 068 069 assert !((EventBoundListener)listeners.get(0)).shouldFocusForm(); 070 assert ((EventBoundListener)listeners.get(0)).isAutoSubmit(); 071 } 072 073 public void test_Form_Event_Connection() 074 { 075 EnhancementOperation op = newOp(); 076 IComponentSpecification spec = new ComponentSpecification(); 077 Resource resource = newResource(AnnotatedPage.class); 078 079 EventListenerAnnotationWorker worker = new EventListenerAnnotationWorker(); 080 081 replay(); 082 083 Method m = findMethod(AnnotatedPage.class, "formListener"); 084 085 assertTrue(worker.canEnhance(m)); 086 worker.peformEnhancement(op, spec, m, resource); 087 088 verify(); 089 090 ComponentEventProperty property = spec.getComponentEvents("email"); 091 assertNotNull(property); 092 093 List listeners = property.getFormEventListeners("onClick"); 094 assertNotNull(listeners); 095 assertEquals(1, listeners.size()); 096 097 EventBoundListener formListener = (EventBoundListener)listeners.get(0); 098 assertEquals("testForm", formListener.getFormId()); 099 assertFalse(formListener.isValidateForm()); 100 assert formListener.shouldFocusForm(); 101 assert formListener.isAutoSubmit(); 102 } 103 104 public void test_Targets_Not_Found() 105 { 106 EnhancementOperation op = newOp(); 107 IComponentSpecification spec = newSpec(); 108 Resource resource = newResource(AnnotatedPage.class); 109 110 EventListenerAnnotationWorker worker = new EventListenerAnnotationWorker(); 111 112 replay(); 113 114 Method m = findMethod(AnnotatedPage.class, "brokenTargetListener"); 115 116 assertTrue(worker.canEnhance(m)); 117 118 try { 119 worker.peformEnhancement(op, spec, m, resource); 120 unreachable(); 121 } catch (ApplicationRuntimeException e) { 122 assertExceptionSubstring(e, "No targets found for"); 123 } 124 125 verify(); 126 } 127 128 public void test_Can_Enhance() 129 { 130 EventListenerAnnotationWorker worker = new EventListenerAnnotationWorker(); 131 132 replay(); 133 134 Method m = findMethod(AnnotatedPage.class, "getDefaultPageSize"); 135 136 assertFalse(worker.canEnhance(m)); 137 138 verify(); 139 } 140 141 142 public void test_Disable_Aysnc_Event_Connection() 143 { 144 EnhancementOperation op = newOp(); 145 IComponentSpecification spec = new ComponentSpecification(); 146 Resource resource = newResource(AnnotatedPage.class); 147 148 EventListenerAnnotationWorker worker = new EventListenerAnnotationWorker(); 149 150 replay(); 151 152 Method m = findMethod(AnnotatedPage.class, "submitForm"); 153 154 assertTrue(worker.canEnhance(m)); 155 worker.peformEnhancement(op, spec, m, resource); 156 157 verify(); 158 159 ComponentEventProperty property = spec.getComponentEvents("foo"); 160 assertNotNull(property); 161 162 List listeners = property.getEventListeners("onchange"); 163 assertNotNull(listeners); 164 assertEquals(1, listeners.size()); 165 166 EventBoundListener listener = (EventBoundListener) listeners.get(0); 167 assert !listener.shouldFocusForm(); 168 assert !listener.isAsync(); 169 } 170 }