| /* |
| * Copyright 2011 Google Inc. |
| * |
| * 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.google.web.bindery.requestfactory.shared; |
| |
| import com.google.gwt.junit.client.GWTTestCase; |
| import com.google.web.bindery.event.shared.UmbrellaException; |
| |
| import java.util.Set; |
| |
| import javax.validation.ConstraintViolation; |
| |
| /** |
| * A simple unit test of FanoutReceiver. |
| */ |
| public class FanoutReceiverTest extends GWTTestCase { |
| private static class CountingReceiver extends Receiver<Integer> { |
| private boolean explode; |
| private int onConstraintViolation; |
| private int onFailure; |
| private int onSuccess; |
| private int onViolation; |
| |
| public void check() { |
| assertEquals(1, onConstraintViolation); |
| assertEquals(1, onFailure); |
| assertEquals(1, onSuccess); |
| assertEquals(1, onViolation); |
| } |
| |
| private void maybeExplode() { |
| if (explode) { |
| throw new RuntimeException(MESSAGE); |
| } |
| } |
| |
| @Override |
| public void onConstraintViolation(Set<ConstraintViolation<?>> violations) { |
| maybeExplode(); |
| onConstraintViolation++; |
| } |
| |
| @Override |
| public void onFailure(ServerFailure error) { |
| maybeExplode(); |
| onFailure++; |
| } |
| |
| @Override |
| public void onSuccess(Integer response) { |
| maybeExplode(); |
| assertEquals(EXPECTED_VALUE, response.intValue()); |
| onSuccess++; |
| } |
| |
| @Deprecated |
| @Override |
| public void onViolation(Set<Violation> errors) { |
| maybeExplode(); |
| onViolation++; |
| } |
| |
| public void setExplode(boolean explode) { |
| this.explode = explode; |
| } |
| } |
| |
| private static final int EXPECTED_VALUE = 42; |
| private static final String MESSAGE = "It didn't work!"; |
| |
| @Override |
| public String getModuleName() { |
| return "com.google.web.bindery.requestfactory.gwt.RequestFactorySuite"; |
| } |
| |
| @SuppressWarnings("deprecation") |
| public void test() { |
| CountingReceiver c1 = new CountingReceiver(); |
| CountingReceiver c2 = new CountingReceiver(); |
| FanoutReceiver<Integer> fan = new FanoutReceiver<Integer>(); |
| fan.add(c1); |
| fan.add(c2); |
| fan.onConstraintViolation(null); |
| fan.onFailure(null); |
| fan.onSuccess(EXPECTED_VALUE); |
| fan.onViolation(null); |
| c1.check(); |
| c2.check(); |
| } |
| |
| public void testAddNull() { |
| try { |
| new FanoutReceiver<Void>().add(null); |
| fail(); |
| } catch (IllegalArgumentException expected) { |
| } |
| } |
| |
| @SuppressWarnings("deprecation") |
| public void testExceptions() { |
| CountingReceiver c1 = new CountingReceiver(); |
| c1.setExplode(true); |
| CountingReceiver c2 = new CountingReceiver(); |
| FanoutReceiver<Integer> fan = new FanoutReceiver<Integer>(); |
| fan.add(c1); |
| fan.add(c2); |
| try { |
| fan.onConstraintViolation(null); |
| fail("Expected UmbrellaException"); |
| } catch (UmbrellaException ex) { |
| assertEquals(1, ex.getCauses().size()); |
| assertEquals(MESSAGE, ex.getCause().getMessage()); |
| } |
| try { |
| fan.onFailure(null); |
| fail("Expected UmbrellaException"); |
| } catch (UmbrellaException ex) { |
| assertEquals(1, ex.getCauses().size()); |
| assertEquals(MESSAGE, ex.getCause().getMessage()); |
| } |
| try { |
| fan.onSuccess(EXPECTED_VALUE); |
| fail("Expected UmbrellaException"); |
| } catch (UmbrellaException ex) { |
| assertEquals(1, ex.getCauses().size()); |
| assertEquals(MESSAGE, ex.getCause().getMessage()); |
| } |
| try { |
| fan.onViolation(null); |
| fail("Expected UmbrellaException"); |
| } catch (UmbrellaException ex) { |
| assertEquals(1, ex.getCauses().size()); |
| assertEquals(MESSAGE, ex.getCause().getMessage()); |
| } |
| // Make sure that c2 stil gets called |
| c2.check(); |
| } |
| } |