001: // Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
002: // Released under the terms of the GNU General Public License version 2 or later.
003: // Copyright (c) 2002 Cunningham & Cunningham, Inc.
004: // Released under the terms of the GNU General Public License version 2 or later.
005:
006: package fit;
007:
008: import junit.framework.TestCase;
009: import java.util.LinkedList;
010: import java.lang.reflect.Field;
011:
012: public class RowFixtureTest extends TestCase {
013:
014: class BusinessObject {
015: private String[] strs;
016:
017: public BusinessObject(String[] strs) {
018: this .strs = strs;
019: }
020:
021: public String[] getStrings() {
022: return strs;
023: }
024: }
025:
026: public RowFixtureTest(String name) {
027: super (name);
028: }
029:
030: public void testMatch() throws Exception {
031:
032: /*
033: * Now back to the bug I found: The problem stems from the fact that
034: * java doesn't do deep equality for arrays. Little known to me (I
035: * forget easily ;-), java arrays are equal only if they are identical.
036: * Unfortunately the 2 sort methods returns a map that is directly keyed
037: * on the value of the column without considering this little fact.
038: * Conclusion there is a missing and a surplus row where there should be
039: * one right row. -- Jacques Morel
040: */
041:
042: RowFixture fixture = new TestRowFixture();
043: TypeAdapter arrayAdapter = TypeAdapter.on(fixture,
044: BusinessObject.class.getMethod("getStrings",
045: new Class[0]));
046: Binding binding = new Binding.QueryBinding();
047: binding.adapter = arrayAdapter;
048: fixture.columnBindings = new Binding[] { binding };
049:
050: LinkedList computed = new LinkedList();
051: computed.add(new BusinessObject(new String[] { "1" }));
052: LinkedList expected = new LinkedList();
053: expected.add(new Parse("tr", "", new Parse("td", "1", null,
054: null), null));
055: fixture.match(expected, computed, 0);
056: assertEquals("right", 1, fixture.counts.right);
057: assertEquals("exceptions", 0, fixture.counts.exceptions);
058: assertEquals("missing", 0, fixture.missing.size());
059: assertEquals("surplus", 0, fixture.surplus.size());
060: }
061:
062: public void testBindColumnToField() throws Exception {
063: RowFixture fixture = new SimpleRowFixture();
064: Parse table = new Parse(
065: "<table><tr><td>field</td></tr></table>");
066: Parse tableHead = table.parts.parts;
067: fixture.bind(tableHead);
068: assertNotNull(fixture.columnBindings[0]);
069: Field field = fixture.columnBindings[0].adapter.field;
070: assertNotNull(field);
071: assertEquals("field", field.getName());
072: assertEquals(int.class, field.getType());
073: }
074:
075: class SimpleRowFixture extends RowFixture {
076: public Class getTargetClass() // get expected type of row
077: {
078: return SimpleBusinessObject.class;
079: }
080:
081: public Object[] query() throws Exception // get rows to be compared
082: {
083: return new Object[0];
084: }
085: }
086:
087: private class SimpleBusinessObject {
088: public int field;
089: }
090:
091: class TestRowFixture extends RowFixture {
092: public Object[] query() throws Exception // get rows to be compared
093: {
094: return new Object[0];
095: }
096:
097: public Class getTargetClass() // get expected type of row
098: {
099: return BusinessObject.class;
100: }
101: }
102: }
|