blob: b94966e731640b734d107c828a99a035fcf891e9 [file] [log] [blame]
/*
* 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));
}
}