| /* |
| * 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.event.shared; |
| |
| import junit.framework.TestCase; |
| |
| import java.util.Collections; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| /** |
| * Unit test for {@link #UmbrellaException}. |
| */ |
| public class UmbrellaExceptionTest extends TestCase { |
| public void testNone() { |
| // Why? |
| try { |
| throw new UmbrellaException(Collections.<Throwable> emptySet()); |
| } catch (UmbrellaException e) { |
| assertNull(e.getCause()); |
| assertNull(e.getMessage()); |
| } |
| } |
| |
| public void testOne() { |
| Set<Throwable> causes = new HashSet<Throwable>(); |
| String message = "Just me"; |
| RuntimeException theOne = new RuntimeException(message); |
| causes.add(theOne); |
| |
| try { |
| throw new UmbrellaException(causes); |
| } catch (UmbrellaException e) { |
| assertSame(theOne, e.getCause()); |
| assertEquals(UmbrellaException.ONE + message, e.getMessage()); |
| } |
| } |
| |
| public void testSome() { |
| Set<Throwable> causes = new HashSet<Throwable>(); |
| String oneMessage = "one"; |
| RuntimeException oneException = new RuntimeException(oneMessage); |
| causes.add(oneException); |
| |
| String twoMessage = "two"; |
| RuntimeException twoException = new RuntimeException(twoMessage); |
| causes.add(twoException); |
| |
| try { |
| throw new UmbrellaException(causes); |
| } catch (UmbrellaException e) { |
| // A bit non-deterministic for a unit test, but I've checked both paths -- |
| // rjrjr |
| if (e.getCause() == oneException) { |
| assertCauseMatchesFirstMessage(e, oneMessage, twoMessage); |
| } else if (e.getCause() == twoException) { |
| assertCauseMatchesFirstMessage(e, twoMessage, oneMessage); |
| } else { |
| fail("Expected one of the causes and its message"); |
| } |
| } |
| } |
| |
| private void assertCauseMatchesFirstMessage(UmbrellaException e, String firstMessage, |
| String otherMessage) { |
| assertTrue("Cause should be first message", e.getMessage().startsWith( |
| 2 + UmbrellaException.MULTIPLE + firstMessage)); |
| assertTrue("Should also see the other message", e.getMessage().contains(otherMessage)); |
| } |
| } |