Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

MessageTest.java 12KB

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