Author: marrink Date: Thu May 1 08:41:23 2008 New Revision: 652559 URL: http://svn.apache.org/viewvc?rev=652559&view=rev Log: RESOLVED - issue WICKET-1575: AjaxEventBehavior does not check for component.isEnableAllowed before adding the ajax event to the tag https://issues.apache.org/jira/browse/WICKET-1575
Added: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html (with props) wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java (with props) wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java (with props) wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html (with props) wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java (with props) wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java (with props) Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java?rev=652559&r1=652558&r2=652559&view=diff ============================================================================== --- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java (original) +++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java Thu May 1 08:41:23 2008 @@ -16,6 +16,7 @@ */ package org.apache.wicket.ajax; +import org.apache.wicket.Component; import org.apache.wicket.IClusterable; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.util.string.Strings; @@ -103,7 +104,8 @@ super.onComponentTag(tag); // only add the event handler when the component is enabled. - if (getComponent().isEnabled()) + Component myComponent = getComponent(); + if (myComponent.isEnabled() && myComponent.isEnableAllowed()) { tag.put(event, getEventHandler()); } Added: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html?rev=652559&view=auto ============================================================================== --- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html (added) +++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html Thu May 1 08:41:23 2008 @@ -0,0 +1,11 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<title>Insert title here</title> +</head> +<body> + <span wicket:id="enabled"></span> + <span wicket:id="disabled"></span> +</body> +</html> \ No newline at end of file Propchange: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java?rev=652559&view=auto ============================================================================== --- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java (added) +++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java Thu May 1 08:41:23 2008 @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.ajax; + +import junit.framework.Assert; + +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; + +/** + * @author marrink + */ +public class AjaxBehaviorEnabledPage extends WebPage +{ + + /** + * Construct. + */ + public AjaxBehaviorEnabledPage() + { + Label enabled = new Label("enabled", "this label is ajax enabled"); + enabled.add(new AjaxEventBehavior("onclick") + { + + private static final long serialVersionUID = 1L; + + protected void onEvent(AjaxRequestTarget target) + { + Assert.assertNotNull(target); + } + }); + add(enabled); + Label disabled = new Label("disabled", "this label is not ajax enabled"); + disabled.add(new AjaxEventBehavior("onclick") + { + private static final long serialVersionUID = 1L; + + protected void onEvent(AjaxRequestTarget target) + { + Assert.fail("should never get here with disabled ajax"); + } + }); + add(disabled); + } + +} Propchange: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java?rev=652559&view=auto ============================================================================== --- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java (added) +++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java Thu May 1 08:41:23 2008 @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.ajax; + +import org.apache.wicket.Component; +import org.apache.wicket.Request; +import org.apache.wicket.Response; +import org.apache.wicket.Session; +import org.apache.wicket.WicketTestCase; +import org.apache.wicket.authorization.Action; +import org.apache.wicket.authorization.IAuthorizationStrategy; +import org.apache.wicket.protocol.http.WebSession; +import org.apache.wicket.util.tester.WicketTester; + +/** + * @author marrink + */ +public class AjaxBehaviorEnabledTest extends WicketTestCase +{ + /** + * Custom security strategy to disable all components where the id ends with "disable". + * + * @author marrink + */ + private static final class CustomStrategy implements IAuthorizationStrategy + { + /** + * + * @see org.apache.wicket.authorization.IAuthorizationStrategy#isActionAuthorized(org.apache.wicket.Component, + * org.apache.wicket.authorization.Action) + */ + public boolean isActionAuthorized(Component component, Action action) + { + if (action == Component.ENABLE && component.getId().endsWith("disabled")) + return false; + return true; + } + + /** + * + * @see org.apache.wicket.authorization.IAuthorizationStrategy#isInstantiationAuthorized(java.lang.Class) + */ + public boolean isInstantiationAuthorized(Class componentClass) + { + return true; + } + + } + + /** + * Construct. + * + * @param name + */ + public AjaxBehaviorEnabledTest(String name) + { + super(name); + } + + /** + * @see org.apache.wicket.WicketTestCase#setUp() + */ + protected void setUp() throws Exception + { + final IAuthorizationStrategy strategy = new CustomStrategy(); + tester = new WicketTester(new WicketTester.DummyWebApplication() + { + public Session newSession(Request request, Response response) + { + return new WebSession(request) + { + private static final long serialVersionUID = 1L; + + public IAuthorizationStrategy getAuthorizationStrategy() + { + return strategy; + } + }; + } + }); + } + + /** + * TestCase for bug. + * + * @see <a href="https://issues.apache.org/jira/browse/WICKET-1575">1575</a> + */ + public void testDisabledBehavior() + { + tester.startPage(AjaxBehaviorEnabledPage.class); + tester.assertRenderedPage(AjaxBehaviorEnabledPage.class); + tester.assertVisible("enabled"); + tester.assertVisible("disabled"); + assertTrue(tester.getTagByWicketId("enabled").hasAttribute("onclick")); + assertFalse(tester.getTagByWicketId("disabled").hasAttribute("onclick")); + + } + +} Propchange: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java?rev=652559&r1=652558&r2=652559&view=diff ============================================================================== --- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java (original) +++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxEventBehavior.java Thu May 1 08:41:23 2008 @@ -16,6 +16,7 @@ */ package org.apache.wicket.ajax; +import org.apache.wicket.Component; import org.apache.wicket.IClusterable; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.util.string.Strings; @@ -98,12 +99,14 @@ * * @see org.apache.wicket.behavior.AbstractAjaxBehavior#onComponentTag(org.apache.wicket.markup.ComponentTag) */ + @Override protected void onComponentTag(final ComponentTag tag) { super.onComponentTag(tag); // only add the event handler when the component is enabled. - if (getComponent().isEnabled()) + Component< ? > myComponent = getComponent(); + if (myComponent.isEnabled() && myComponent.isEnableAllowed()) { tag.put(event, getEventHandler()); } @@ -123,6 +126,7 @@ return handler; } + @Override protected CharSequence generateCallbackScript(CharSequence partialCall) { CharSequence script = super.generateCallbackScript(partialCall); @@ -156,6 +160,7 @@ * * @see org.apache.wicket.ajax.AbstractDefaultAjaxBehavior#respond(org.apache.wicket.ajax.AjaxRequestTarget) */ + @Override protected final void respond(final AjaxRequestTarget target) { onEvent(target); Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html?rev=652559&view=auto ============================================================================== --- wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html (added) +++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html Thu May 1 08:41:23 2008 @@ -0,0 +1,11 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<title>Insert title here</title> +</head> +<body> + <span wicket:id="enabled"></span> + <span wicket:id="disabled"></span> +</body> +</html> \ No newline at end of file Propchange: wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.html ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java?rev=652559&view=auto ============================================================================== --- wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java (added) +++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java Thu May 1 08:41:23 2008 @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.ajax; + +import junit.framework.Assert; + +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; + +/** + * @author marrink + */ +public class AjaxBehaviorEnabledPage extends WebPage +{ + + /** + * Construct. + */ + public AjaxBehaviorEnabledPage() + { + Label<String> enabled = new Label<String>("enabled", "this label is ajax enabled"); + enabled.add(new AjaxEventBehavior("onclick") + { + + private static final long serialVersionUID = 1L; + + @Override + protected void onEvent(AjaxRequestTarget target) + { + Assert.assertNotNull(target); + } + }); + add(enabled); + Label<String> disabled = new Label<String>("disabled", "this label is not ajax enabled"); + disabled.add(new AjaxEventBehavior("onclick") + { + private static final long serialVersionUID = 1L; + + @Override + protected void onEvent(AjaxRequestTarget target) + { + Assert.fail("should never get here with disabled ajax"); + } + }); + add(disabled); + } + +} Propchange: wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledPage.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java?rev=652559&view=auto ============================================================================== --- wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java (added) +++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java Thu May 1 08:41:23 2008 @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.ajax; + +import org.apache.wicket.Component; +import org.apache.wicket.Request; +import org.apache.wicket.Response; +import org.apache.wicket.Session; +import org.apache.wicket.WicketTestCase; +import org.apache.wicket.authorization.Action; +import org.apache.wicket.authorization.IAuthorizationStrategy; +import org.apache.wicket.protocol.http.WebSession; +import org.apache.wicket.util.tester.WicketTester; + +/** + * @author marrink + */ +public class AjaxBehaviorEnabledTest extends WicketTestCase +{ + /** + * Custom security strategy to disable all components where the id ends with "disable". + * + * @author marrink + */ + private static final class CustomStrategy implements IAuthorizationStrategy + { + /** + * + * @see org.apache.wicket.authorization.IAuthorizationStrategy#isActionAuthorized(org.apache.wicket.Component, + * org.apache.wicket.authorization.Action) + */ + public boolean isActionAuthorized(Component< ? > component, Action action) + { + if (action == Component.ENABLE && component.getId().endsWith("disabled")) + return false; + return true; + } + + /** + * + * @see org.apache.wicket.authorization.IAuthorizationStrategy#isInstantiationAuthorized(java.lang.Class) + */ + public boolean isInstantiationAuthorized(Class< ? extends Component> componentClass) + { + return true; + } + + } + + /** + * Construct. + * + * @param name + */ + public AjaxBehaviorEnabledTest(String name) + { + super(name); + } + + /** + * @see org.apache.wicket.WicketTestCase#setUp() + */ + @Override + protected void setUp() throws Exception + { + final IAuthorizationStrategy strategy = new CustomStrategy(); + tester = new WicketTester(new WicketTester.DummyWebApplication() + { + @Override + public Session newSession(Request request, Response response) + { + return new WebSession(request) + { + private static final long serialVersionUID = 1L; + + @Override + public IAuthorizationStrategy getAuthorizationStrategy() + { + return strategy; + } + }; + } + }); + } + + /** + * TestCase for bug. + * + * @see <a href="https://issues.apache.org/jira/browse/WICKET-1575">1575</a> + */ + public void testDisabledBehavior() + { + tester.startPage(AjaxBehaviorEnabledPage.class); + tester.assertRenderedPage(AjaxBehaviorEnabledPage.class); + tester.assertVisible("enabled"); + tester.assertVisible("disabled"); + assertTrue(tester.getTagByWicketId("enabled").hasAttribute("onclick")); + assertFalse(tester.getTagByWicketId("disabled").hasAttribute("onclick")); + + } + +} Propchange: wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/AjaxBehaviorEnabledTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain