123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- /*
- Copyright (c) 2007 Health Market Science, Inc.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- USA
-
- You can contact Health Market Science at info@healthmarketscience.com
- or at the following address:
-
- Health Market Science
- 2700 Horizon Drive
- Suite 200
- King of Prussia, PA 19406
- */
-
- package com.healthmarketscience.jackcess;
-
- import java.io.IOException;
- import java.lang.reflect.Field;
- import java.lang.reflect.Modifier;
- import java.nio.ByteOrder;
- import java.util.List;
-
- import junit.framework.TestCase;
-
- import static com.healthmarketscience.jackcess.Database.*;
- import static com.healthmarketscience.jackcess.DatabaseTest.*;
-
- /**
- * @author James Ahlborn
- */
- public class ErrorHandlerTest extends TestCase
- {
-
- public ErrorHandlerTest(String name) {
- super(name);
- }
-
- public void testErrorHandler() throws Exception
- {
- for (final FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
- Database db = create(fileFormat);
-
- Table table =
- new TableBuilder("test")
- .addColumn(new ColumnBuilder("col", DataType.TEXT).toColumn())
- .addColumn(new ColumnBuilder("val", DataType.LONG).toColumn())
- .toTable(db);
-
- table.addRow("row1", 1);
- table.addRow("row2", 2);
- table.addRow("row3", 3);
-
- assertTable(createExpectedTable(
- createExpectedRow("col", "row1",
- "val", 1),
- createExpectedRow("col", "row2",
- "val", 2),
- createExpectedRow("col", "row3",
- "val", 3)),
- table);
-
-
- replaceColumn(table, "val");
-
- table.reset();
- try {
- table.getNextRow();
- fail("IOException should have been thrown");
- } catch(IOException e) {
- // success
- }
-
- table.reset();
- table.setErrorHandler(new ReplacementErrorHandler());
-
- assertTable(createExpectedTable(
- createExpectedRow("col", "row1",
- "val", null),
- createExpectedRow("col", "row2",
- "val", null),
- createExpectedRow("col", "row3",
- "val", null)),
- table);
-
- Cursor c1 = Cursor.createCursor(table);
- Cursor c2 = Cursor.createCursor(table);
- Cursor c3 = Cursor.createCursor(table);
-
- c2.setErrorHandler(new DebugErrorHandler("#error"));
- c3.setErrorHandler(Database.DEFAULT_ERROR_HANDLER);
-
- assertCursor(createExpectedTable(
- createExpectedRow("col", "row1",
- "val", null),
- createExpectedRow("col", "row2",
- "val", null),
- createExpectedRow("col", "row3",
- "val", null)),
- c1);
-
- assertCursor(createExpectedTable(
- createExpectedRow("col", "row1",
- "val", "#error"),
- createExpectedRow("col", "row2",
- "val", "#error"),
- createExpectedRow("col", "row3",
- "val", "#error")),
- c2);
-
- try {
- c3.getNextRow();
- fail("IOException should have been thrown");
- } catch(IOException e) {
- // success
- }
-
- table.setErrorHandler(null);
- c1.setErrorHandler(null);
- c1.reset();
- try {
- c1.getNextRow();
- fail("IOException should have been thrown");
- } catch(IOException e) {
- // success
- }
-
-
- db.close();
- }
- }
-
- @SuppressWarnings("unchecked")
- private void replaceColumn(Table t, String colName) throws Exception
- {
- Field colsField = Table.class.getDeclaredField("_columns");
- colsField.setAccessible(true);
- List<Column> cols = (List<Column>)colsField.get(t);
-
- Column srcCol = null;
- Column destCol = new BogusColumn(t);
- for(int i = 0; i < cols.size(); ++i) {
- srcCol = cols.get(i);
- if(srcCol.getName().equals(colName)) {
- cols.set(i, destCol);
- break;
- }
- }
-
- // copy fields from source to dest
- for(Field f : Column.class.getDeclaredFields()) {
- if(!Modifier.isFinal(f.getModifiers())) {
- f.setAccessible(true);
- f.set(destCol, f.get(srcCol));
- }
- }
-
- }
-
- private static class BogusColumn extends Column
- {
- private BogusColumn(Table table) {
- super(true, table);
- }
-
- @Override
- public Object read(byte[] data, ByteOrder order) throws IOException {
- throw new IOException("bogus column");
- }
- }
-
- }
|