You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MessageTest.java 12KB

21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
11 years ago
21 years ago
11 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
11 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
11 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
11 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. /* *******************************************************************
  2. * Copyright (c) 1999-2001 Xerox Corporation,
  3. * 2002 Palo Alto Research Center, Incorporated (PARC).
  4. * All rights reserved.
  5. * This program and the accompanying materials are made available
  6. * under the terms of the Eclipse Public License v 2.0
  7. * which accompanies this distribution and is available at
  8. * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
  9. *
  10. * Contributors:
  11. * Xerox/PARC initial implementation
  12. * ******************************************************************/
  13. package org.aspectj.bridge;
  14. import java.io.File;
  15. import java.util.Arrays;
  16. import java.util.BitSet;
  17. import java.util.Comparator;
  18. import java.util.List;
  19. import java.util.ListIterator;
  20. import junit.framework.AssertionFailedError;
  21. import junit.framework.TestCase;
  22. import junit.textui.TestRunner;
  23. /**
  24. *
  25. */
  26. public class MessageTest extends TestCase {
  27. private static final String ME
  28. = "org.aspectj.bridge.MessageTest"; // XXX
  29. /** @param args ignored */
  30. public static void main(String[] args) {
  31. TestRunner.main(new String[] {ME});
  32. }
  33. /**
  34. * Constructor for MessageTest.
  35. * @param name
  36. */
  37. public MessageTest(String name) {
  38. super(name);
  39. }
  40. <T> void checkListOrder(List<T> list, Comparator<T> c) { // XXX util
  41. assertNotNull(list);
  42. assertNotNull(c);
  43. ListIterator<T> it = list.listIterator();
  44. T last = null;
  45. T current = null;
  46. while (it.hasNext()) {
  47. current = it.next();
  48. if (null != last) {
  49. int i = c.compare(last, current);
  50. if (i > 0) {
  51. assertTrue( last + " > " + current + " (" + i + ")", false);
  52. }
  53. }
  54. last = current;
  55. }
  56. }
  57. public void testKindOrder() {
  58. // first briefly validate the checker
  59. checkListOrder(Arrays.asList(new String[] { "a", "b", "C" }),
  60. String.CASE_INSENSITIVE_ORDER);
  61. checkListOrder(IMessage.KINDS, IMessage.Kind.COMPARATOR);
  62. }
  63. public void testKind_isSameOrLessThan() {
  64. IMessage.Kind last;
  65. IMessage.Kind next = null;
  66. for (IMessage.Kind kind : IMessage.KINDS) {
  67. last = next;
  68. next = kind;
  69. if (null == last) {
  70. continue;
  71. }
  72. String label = "last: " + last + " next: " + next;
  73. assertTrue(label, !next.isSameOrLessThan(null));
  74. assertTrue(label, !next.isSameOrLessThan(last));
  75. assertTrue(label, last.isSameOrLessThan(next));
  76. assertTrue(label, next.isSameOrLessThan(next));
  77. }
  78. }
  79. public void testMessageHandler() {
  80. boolean handleMessageResult = true;
  81. checkEmptyMessageHolder(new MessageHandler(handleMessageResult), handleMessageResult);
  82. handleMessageResult = false;
  83. checkEmptyMessageHolder(new MessageHandler(handleMessageResult), handleMessageResult);
  84. }
  85. public void checkEmptyMessageHolder(
  86. IMessageHolder h,
  87. final boolean handleMessageResult) {
  88. // { INFO, DEBUG, WARNING, ERROR, FAIL, ABORT }));
  89. assertNotNull(h);
  90. assertTrue(!h.hasAnyMessage(null, true));
  91. assertTrue(!h.hasAnyMessage(null, false));
  92. assertTrue(!h.hasAnyMessage(IMessage.INFO, true));
  93. assertTrue(!h.hasAnyMessage(IMessage.INFO, false));
  94. assertTrue(handleMessageResult == h.handleMessage(make("error 1", IMessage.ERROR)));
  95. assertTrue(handleMessageResult == h.handleMessage(make("error 2", IMessage.ERROR)));
  96. assertTrue(handleMessageResult == h.handleMessage(make("fail 1", IMessage.FAIL)));
  97. assertTrue(handleMessageResult == h.handleMessage(make("fail 2", IMessage.FAIL)));
  98. assertTrue(handleMessageResult == h.handleMessage(make("debug 1", IMessage.DEBUG)));
  99. assertTrue(handleMessageResult == h.handleMessage(make("debug 2", IMessage.DEBUG)));
  100. assertTrue(h.hasAnyMessage(null, true));
  101. assertTrue(h.hasAnyMessage(null, false));
  102. assertTrue(h.hasAnyMessage(IMessage.ERROR, true));
  103. assertTrue(h.hasAnyMessage(IMessage.ERROR, false));
  104. assertTrue(h.hasAnyMessage(IMessage.FAIL, true));
  105. assertTrue(h.hasAnyMessage(IMessage.FAIL, false));
  106. assertTrue(h.hasAnyMessage(IMessage.DEBUG, true));
  107. assertTrue(h.hasAnyMessage(IMessage.DEBUG, false));
  108. assertTrue(!h.hasAnyMessage(IMessage.INFO, IMessageHolder.EQUAL));
  109. assertTrue(!h.hasAnyMessage(IMessage.WARNING, IMessageHolder.EQUAL));
  110. assertTrue(!h.hasAnyMessage(IMessage.ABORT, IMessageHolder.EQUAL));
  111. assertTrue(h.hasAnyMessage(IMessage.INFO, IMessageHolder.ORGREATER));
  112. assertTrue(h.hasAnyMessage(IMessage.WARNING, IMessageHolder.ORGREATER));
  113. assertTrue(!h.hasAnyMessage(IMessage.ABORT, IMessageHolder.ORGREATER));
  114. assertTrue(0 == h.numMessages(IMessage.INFO, IMessageHolder.EQUAL));
  115. assertTrue(0 == h.numMessages(IMessage.WARNING, IMessageHolder.EQUAL));
  116. assertTrue(0 == h.numMessages(IMessage.ABORT, IMessageHolder.EQUAL));
  117. assertTrue(6 == h.numMessages(null, IMessageHolder.ORGREATER));
  118. assertTrue(6 == h.numMessages(null, IMessageHolder.EQUAL));
  119. assertTrue(6 == h.numMessages(IMessage.INFO, IMessageHolder.ORGREATER));
  120. assertTrue(6 == h.numMessages(IMessage.DEBUG, IMessageHolder.ORGREATER));
  121. assertTrue(4 == h.numMessages(IMessage.WARNING, IMessageHolder.ORGREATER));
  122. assertTrue(4 == h.numMessages(IMessage.ERROR, IMessageHolder.ORGREATER));
  123. assertTrue(2 == h.numMessages(IMessage.FAIL, IMessageHolder.ORGREATER));
  124. assertTrue(0 == h.numMessages(IMessage.ABORT, IMessageHolder.ORGREATER));
  125. }
  126. public void testMessage() {
  127. String input = "input";
  128. Throwable thrown = null;
  129. ISourceLocation sl = null;
  130. Class<?> exClass = null;
  131. String descriptor = "Message"; // for make(...)
  132. IMessage.Kind kind = IMessage.INFO;
  133. // -- kind variants
  134. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  135. kind = IMessage.WARNING;
  136. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  137. kind = IMessage.ERROR;
  138. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  139. kind = IMessage.DEBUG;
  140. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  141. kind = IMessage.FAIL;
  142. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  143. // -- throwable
  144. kind = IMessage.FAIL;
  145. thrown = new AbortException();
  146. input = null;
  147. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  148. // -- source location
  149. kind = IMessage.WARNING;
  150. thrown = null;
  151. input = "type not found";
  152. File f = new File("some/file.java"); // XXX unchecked
  153. sl = new SourceLocation(f, 0, 0, 0);
  154. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  155. sl = new SourceLocation(f, 1, 1, 0);
  156. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  157. // -- input error tests - null kind, null input (factory-dependent)
  158. kind = null;
  159. exClass = IllegalArgumentException.class;
  160. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  161. input = null;
  162. kind = IMessage.INFO;
  163. roundTrip(input, kind, thrown, sl, descriptor, exClass);
  164. }
  165. protected IMessage make(String message, IMessage.Kind kind) {
  166. return new Message(message, kind, null, null);
  167. }
  168. /** make a Message per descriptor and input */
  169. protected IMessage make(String input, IMessage.Kind kind,
  170. Throwable thrown, ISourceLocation sourceLocation,
  171. String descriptor) { // XXX ignored for now
  172. return new Message(input, kind, thrown, sourceLocation);
  173. }
  174. /**
  175. * Simple round-trip on the message
  176. */
  177. protected void roundTrip(String input, IMessage.Kind kind,
  178. Throwable thrown, ISourceLocation sourceLocation,
  179. String descriptor, Class<?> exClass) {
  180. try {
  181. IMessage m = make(input, kind, thrown, sourceLocation, descriptor);
  182. if ((null == input) && (null != thrown)) {
  183. input = thrown.getMessage();
  184. }
  185. roundTripCheck(m, input, kind, thrown, sourceLocation);
  186. } catch (AssertionFailedError x) {
  187. throw x;
  188. } catch (Throwable t) {
  189. assertTrue(null != exClass);
  190. assertTrue(exClass.isAssignableFrom(t.getClass()));
  191. }
  192. }
  193. protected void roundTripCheck(IMessage message, String input, IMessage.Kind kind,
  194. Throwable thrown, ISourceLocation sourceLocation) {
  195. IMessage m = message;
  196. assertTrue("not null", null != m);
  197. assertEquals(input, m.getMessage());
  198. assertTrue(""+kind, kind == m.getKind());
  199. assertTrue(""+thrown, equals(thrown, m.getThrown()));
  200. assertTrue(""+sourceLocation,
  201. equals(sourceLocation, m.getSourceLocation()));
  202. String err = new KindTest().testKindSet(message, kind);
  203. if (null != err) {
  204. assertTrue(err, false);
  205. }
  206. }
  207. protected static boolean equals(Object one, Object two) {
  208. if (null == one) {
  209. return (null == two);
  210. } else if (null == two) {
  211. return false;
  212. } else {
  213. return one.equals(two);
  214. }
  215. }
  216. }
  217. /** test correlation between message and enclosed kind */
  218. class KindTest {
  219. /** order tracked in checkKindMethods() */
  220. static final IMessage.Kind[] KINDS = new IMessage.Kind[]
  221. { IMessage.ABORT, IMessage.DEBUG, IMessage.ERROR,
  222. IMessage.INFO, IMessage.WARNING, IMessage.FAIL };
  223. static final List<IMessage.Kind> KINDLIST = Arrays.asList(KINDS);
  224. /** used to clear instance BitSet */
  225. static final BitSet UNSET = new BitSet(KINDS.length);
  226. final BitSet expected = new BitSet(KINDS.length);
  227. IMessage.Kind kind = IMessage.INFO;
  228. /** @return error if failed */
  229. public String testKindSet(IMessage m, IMessage.Kind newKind) {
  230. IMessage.Kind oldKind = this.kind;
  231. String result = setKind(newKind);
  232. if (null == result) {
  233. result = checkKindSet(m, newKind);
  234. }
  235. if (null == result) {
  236. result = checkExpectedKind(m);
  237. }
  238. return (null != result? result : setKind(oldKind));
  239. }
  240. /** @return error if failed */
  241. private String setKind(IMessage.Kind kind) {
  242. this.kind = kind;
  243. int index = KINDLIST.indexOf(kind);
  244. if (-1 == index) {
  245. return "unknown kind: " + kind;
  246. }
  247. expected.and(UNSET);
  248. expected.set(index);
  249. return null;
  250. }
  251. /** @return error if failed */
  252. String checkExpectedKind(IMessage m) {
  253. StringBuilder result = new StringBuilder();
  254. for (int i = 0; i < KINDS.length; i++) {
  255. if (expected.get(i) != checkKindMethods(m, i)) {
  256. String s = "expected " + expected.get(i)
  257. + " for is{Method} for " + KINDS[i];
  258. result.append(s + "\n");
  259. }
  260. }
  261. return (0 < result.length() ? result.toString() : null);
  262. }
  263. String checkKindSet(IMessage m, IMessage.Kind kind) {
  264. if (kind != m.getKind()) {
  265. return "expected kind " + kind + " got " + m.getKind();
  266. }
  267. return null;
  268. }
  269. /** @return true if index matches isFoo() reporting */
  270. boolean checkKindMethods(IMessage m, int index) {
  271. switch (index) {
  272. case (0) : return m.isAbort();
  273. case (1) : return m.isDebug();
  274. case (2) : return m.isError();
  275. case (3) : return m.isInfo();
  276. case (4) : return m.isWarning();
  277. case (5) : return m.isFailed();
  278. default : throw new IllegalArgumentException("index=" + index);
  279. }
  280. }
  281. }