diff options
author | Leif Åstrand <leif@vaadin.com> | 2015-06-14 15:46:14 +0300 |
---|---|---|
committer | Teppo Kurki <teppo.kurki@vaadin.com> | 2015-06-17 12:33:23 +0000 |
commit | 024a2ab52e1ab5ac039c78f86c9c6fbf3a70f131 (patch) | |
tree | 1a84a06735896a4061e5f7e4cf9d5cae9773997b /uitest | |
parent | f8aacf7c53d2e758e431588f44185b583fad8cb6 (diff) | |
download | vaadin-framework-024a2ab52e1ab5ac039c78f86c9c6fbf3a70f131.tar.gz vaadin-framework-024a2ab52e1ab5ac039c78f86c9c6fbf3a70f131.zip |
Send beforeClientResponse exceptions to an error handler (#14214)
Change-Id: Ib0cd9a402bbef0c7adb65bd8298a71b5521edd7c
Diffstat (limited to 'uitest')
3 files changed, 101 insertions, 2 deletions
diff --git a/uitest/src/com/vaadin/tests/applicationservlet/SystemMessages.java b/uitest/src/com/vaadin/tests/applicationservlet/SystemMessages.java index 00547aa2d2..9912e660ef 100644 --- a/uitest/src/com/vaadin/tests/applicationservlet/SystemMessages.java +++ b/uitest/src/com/vaadin/tests/applicationservlet/SystemMessages.java @@ -14,13 +14,15 @@ import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.NativeSelect; +import elemental.json.JsonObject; + public class SystemMessages extends AbstractTestUI { public class MyButton extends Button { private boolean fail = false; @Override - public void beforeClientResponse(boolean initial) { + public JsonObject encodeState() { // Set the error message to contain the current locale. VaadinService.getCurrentRequest().setAttribute( ApplicationRunnerServlet.CUSTOM_SYSTEM_MESSAGES_PROPERTY, @@ -30,9 +32,10 @@ public class SystemMessages extends AbstractTestUI { return "MessagesInfo locale: " + getLocale(); } }); - super.beforeClientResponse(initial); if (fail) { throw new RuntimeException("Failed on purpose"); + } else { + return super.encodeState(); } } } diff --git a/uitest/src/com/vaadin/tests/components/abstractcomponent/ResponseWritingErrorHandling.java b/uitest/src/com/vaadin/tests/components/abstractcomponent/ResponseWritingErrorHandling.java new file mode 100644 index 0000000000..23be0f62b4 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/abstractcomponent/ResponseWritingErrorHandling.java @@ -0,0 +1,61 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed 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 com.vaadin.tests.components.abstractcomponent; + +import com.vaadin.server.ErrorHandler; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.ui.Button; + +public class ResponseWritingErrorHandling extends AbstractTestUIWithLog { + + @Override + protected void setup(VaadinRequest request) { + ErrorHandler errorHandler = new ErrorHandler() { + @Override + public void error(com.vaadin.server.ErrorEvent event) { + String message = event.getThrowable().getMessage(); + log(message); + } + }; + + Button button = new Button("Throw in beforeClientResponse") { + private boolean throwInBeforeClientResponse = false; + { + addClickListener(new ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + throwInBeforeClientResponse = true; + // Make sure beforeClientResponse is called + markAsDirty(); + } + }); + } + + @Override + public void beforeClientResponse(boolean initial) { + if (throwInBeforeClientResponse) { + throwInBeforeClientResponse = false; + throw new RuntimeException("Button.beforeClientResponse"); + } + } + }; + button.setErrorHandler(errorHandler); + + addComponent(button); + } + +} diff --git a/uitest/src/com/vaadin/tests/components/abstractcomponent/ResponseWritingErrorHandlingTest.java b/uitest/src/com/vaadin/tests/components/abstractcomponent/ResponseWritingErrorHandlingTest.java new file mode 100644 index 0000000000..7b939a5627 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/abstractcomponent/ResponseWritingErrorHandlingTest.java @@ -0,0 +1,35 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed 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 com.vaadin.tests.components.abstractcomponent; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class ResponseWritingErrorHandlingTest extends SingleBrowserTest { + + @Test + public void testExceptionInBeforeClientResponse() { + openTestURL(); + + $(ButtonElement.class).first().click(); + + Assert.assertEquals("Message should be logged by error handler", + "1. Button.beforeClientResponse", getLogRow(0)); + } +} |