1 21 package com.db4o.db4ounit.common.btree; 22 23 import com.db4o.foundation.*; 24 25 import db4ounit.Assert; 26 27 28 public class ExpectingVisitor implements Visitor4{ 29 30 private static final boolean DEBUG = false; 31 32 private final Object [] _expected; 33 34 private final boolean _obeyOrder; 35 36 private final Collection4 _unexpected = new Collection4(); 37 38 private boolean _ignoreUnexpected; 39 40 private int _cursor; 41 42 private static final Object FOUND = new Object () { 43 public String toString() { 44 return "[FOUND]"; 45 } 46 }; 47 48 public ExpectingVisitor(Object [] results, boolean obeyOrder, boolean ignoreUnexpected){ 49 _expected = results; 50 _obeyOrder = obeyOrder; 51 _ignoreUnexpected = ignoreUnexpected; 52 } 53 54 public ExpectingVisitor(Object [] results){ 55 this(results, false, false); 56 } 57 58 public ExpectingVisitor(Object singleObject){ 59 this(new Object [] { singleObject }); 60 } 61 62 65 public ExpectingVisitor(){ 66 this(new Object [0]); 67 } 68 69 public void visit(Object obj) { 70 if(_obeyOrder){ 71 visitOrdered(obj); 72 }else{ 73 visitUnOrdered(obj); 74 } 75 } 76 77 private void visitOrdered(Object obj){ 78 if(_cursor < _expected.length){ 79 if(areEqual(_expected[_cursor], obj)){ 80 ods("Expected OK: " + obj.toString()); 81 _expected[_cursor] = FOUND; 82 _cursor ++; 83 return; 84 } 85 } 86 unexpected(obj); 87 } 88 89 private void unexpected(Object obj) { 90 if(_ignoreUnexpected){ 91 return; 92 } 93 _unexpected.add(obj); 94 ods("Unexpected: " + obj); 95 } 96 97 private void visitUnOrdered(Object obj){ 98 for (int i = 0; i < _expected.length; i++) { 99 final Object expectedItem = _expected[i]; 100 if(areEqual(obj, expectedItem)){ 101 ods("Expected OK: " + obj); 102 _expected[i] = FOUND; 103 return; 104 } 105 } 106 unexpected(obj); 107 } 108 109 private boolean areEqual(Object obj, final Object expectedItem) { 110 return expectedItem == obj 111 || (expectedItem != null 112 && obj != null 113 && expectedItem.equals(obj)); 114 } 115 116 private static void ods(String message) { 117 if(DEBUG){ 118 System.out.println(message); 119 } 120 } 121 122 public void assertExpectations(){ 123 if (_unexpected.size() > 0) { 124 Assert.fail("UNEXPECTED: " + _unexpected.toString()); 125 } 126 for (int i = 0; i < _expected.length; i++) { 127 Assert.areSame(FOUND, _expected[i]); 128 } 129 } 130 131 } 132 | Popular Tags |