Browse Source

add unit tests for access 97 text indexes

git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/branches/a97_indexes@1313 f203690c-595d-4dc9-a70b-905162fa7fd2
tags/jackcess-3.5.0
James Ahlborn 4 years ago
parent
commit
fefce70e97

BIN
src/test/data/V1997/testIndexCodesV1997.mdb View File


+ 100
- 101
src/test/java/com/healthmarketscience/jackcess/CursorTest.java View File

@@ -43,7 +43,7 @@ import static com.healthmarketscience.jackcess.TestUtil.*;
*/
public class CursorTest extends TestCase {

static final List<TestDB> INDEX_CURSOR_DBS =
static final List<TestDB> INDEX_CURSOR_DBS =
TestDB.getSupportedForBasename(Basename.INDEX_CURSOR);


@@ -82,9 +82,9 @@ public class CursorTest extends TestCase {
expectedRows.subList(0, startIdx).clear();
return expectedRows;
}
private static Database createTestTable(final FileFormat fileFormat)
throws Exception
private static Database createTestTable(final FileFormat fileFormat)
throws Exception
{
Database db = createMem(fileFormat);

@@ -110,10 +110,10 @@ public class CursorTest extends TestCase {
expectedRows.add(createExpectedRow("id", i, "value", "data" + i));
}
return expectedRows;
}
}

static Database createTestIndexTable(final TestDB indexCursorDB)
throws Exception
static Database createTestIndexTable(final TestDB indexCursorDB)
throws Exception
{
Database db = openMem(indexCursorDB);

@@ -141,8 +141,8 @@ public class CursorTest extends TestCase {
return expectedRows;
}

private static Database createDupeTestTable(final FileFormat fileFormat)
throws Exception
private static Database createDupeTestTable(final FileFormat fileFormat)
throws Exception
{
Database db = createMem(fileFormat);

@@ -158,8 +158,8 @@ public class CursorTest extends TestCase {
return db;
}

static Database createDupeTestTable(final TestDB indexCursorDB)
throws Exception
static Database createDupeTestTable(final TestDB indexCursorDB)
throws Exception
{
Database db = openMem(indexCursorDB);

@@ -185,7 +185,7 @@ public class CursorTest extends TestCase {
.setEndRowInclusive(type == 0)
.toCursor();
}
public void testRowId() throws Exception {
// test special cases
RowIdImpl rowId1 = new RowIdImpl(1, 2);
@@ -201,7 +201,7 @@ public class CursorTest extends TestCase {
RowIdImpl.LAST_ROW_ID),
sortedRowIds);
}
public void testSimple() throws Exception {
for (final FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
Database db = createTestTable(fileFormat);
@@ -266,7 +266,7 @@ public class CursorTest extends TestCase {
assertTrue(cursor.moveToNextRow());
assertTrue(cursor.moveToPreviousRow());
assertEquals(expectedRow, cursor.getCurrentRow());
while(cursor.moveToNextRow()) {
foundRows.add(cursor.getCurrentRow());
}
@@ -285,7 +285,7 @@ public class CursorTest extends TestCase {
assertTrue(cursor.isAfterLast());

cursor.restoreSavepoint(savepoint);
assertEquals(expectedRow, cursor.getCurrentRow());
assertEquals(expectedRow, cursor.getCurrentRow());
}

public void testMoveNoReset() throws Exception {
@@ -305,18 +305,18 @@ public class CursorTest extends TestCase {
{
List<Map<String, Object>> expectedRows = createTestTableData();
List<Map<String, Object>> foundRows = new ArrayList<Map<String, Object>>();
Iterator<Row> iter = cursor.newIterable().iterator();

for(int i = 0; i < 6; ++i) {
foundRows.add(iter.next());
}
}

iter = cursor.newIterable().reset(false).reverse().iterator();
iter.next();
Map<String, Object> row = iter.next();
assertEquals(expectedRows.get(4), row);
iter = cursor.newIterable().reset(false).iterator();
iter.next();
row = iter.next();
@@ -326,11 +326,11 @@ public class CursorTest extends TestCase {
iter = cursor.newIterable().reset(false).iterator();
for(int i = 6; i < 10; ++i) {
foundRows.add(iter.next());
}
}

assertEquals(expectedRows, foundRows);
}
public void testSearch() throws Exception {
for (final FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
Database db = createTestTable(fileFormat);
@@ -372,7 +372,7 @@ public class CursorTest extends TestCase {
assertEquals(createExpectedRow("id", 7,
"value", "data" + 7),
cursor.getCurrentRow());
assertTrue(cursor.findFirstRow(table.getColumn("value"), "data" + 4));
assertEquals(createExpectedRow("id", 4,
"value", "data" + 4),
@@ -387,7 +387,7 @@ public class CursorTest extends TestCase {
"id", outOfRangeValue,
"value", "data" + outOfRangeValue)));
}
assertEquals("data" + 5,
CursorBuilder.findValue(table,
table.getColumn("value"),
@@ -441,9 +441,9 @@ public class CursorTest extends TestCase {
for(Map<String, Object> row : cursor.newIterable().reverse()) {
foundRows.add(row);
}
assertEquals(expectedRows, foundRows);
assertEquals(expectedRows, foundRows);
}
public void testLiveAddition() throws Exception {
for (final FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
Database db = createTestTable(fileFormat);
@@ -470,7 +470,7 @@ public class CursorTest extends TestCase {
assertTrue(cursor2.isAfterLast());

table.addRow(newRowNum, "data" + newRowNum);
Map<String,Object> expectedRow =
Map<String,Object> expectedRow =
createExpectedRow("id", newRowNum, "value", "data" + newRowNum);

assertFalse(cursor1.isAfterLast());
@@ -484,7 +484,7 @@ public class CursorTest extends TestCase {
assertTrue(cursor2.isAfterLast());
}

public void testLiveDeletion() throws Exception {
for (final FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
Database db = createTestTable(fileFormat);
@@ -524,7 +524,7 @@ public class CursorTest extends TestCase {

assertEquals(expectedDeletedRow, cursor2.getCurrentRow());
assertEquals(expectedDeletedRow, cursor3.getCurrentRow());
assertFalse(cursor2.isCurrentRowDeleted());
assertFalse(cursor3.isCurrentRowDeleted());

@@ -536,7 +536,7 @@ public class CursorTest extends TestCase {
assertEquals(expectedNextRow, cursor1.getNextRow());
assertEquals(expectedNextRow, cursor2.getNextRow());
assertEquals(expectedNextRow, cursor3.getNextRow());
assertEquals(expectedPrevRow, cursor3.getPreviousRow());

assertTrue(cursor3.moveToNextRow());
@@ -606,7 +606,7 @@ public class CursorTest extends TestCase {
db.close();
}
}
public void testReverseIndex() throws Exception {
for (final TestDB indexCursorDB : INDEX_CURSOR_DBS) {
Database db = createTestIndexTable(indexCursorDB);
@@ -684,7 +684,7 @@ public class CursorTest extends TestCase {
}
}
}
public void testMoveIndexSubRange() throws Exception {
for (final TestDB indexCursorDB : INDEX_CURSOR_DBS) {
for(int i = 0; i < 2; ++i) {
@@ -704,7 +704,7 @@ public class CursorTest extends TestCase {
}
}
}
public void testSearchIndexSubRange() throws Exception {
for (final TestDB indexCursorDB : INDEX_CURSOR_DBS) {
for(int i = 0; i < 2; ++i) {
@@ -759,7 +759,7 @@ public class CursorTest extends TestCase {
}
}
}
public void testLiveDeletionIndexSubRange() throws Exception {
for (final TestDB indexCursorDB : INDEX_CURSOR_DBS) {
for(int i = 0; i < 2; ++i) {
@@ -873,7 +873,7 @@ public class CursorTest extends TestCase {
rows = RowFilterTest.toList(
cursor.newIterable().setMatchPattern(
Collections.singletonMap("id", 8)));
expectedRows =
createExpectedTable(
createExpectedRow(
@@ -883,7 +883,7 @@ public class CursorTest extends TestCase {
assertEquals(expectedRows, rows);

for(Map<String,Object> row : table) {
List<Map<String,Object>> tmpRows = new ArrayList<Map<String,Object>>();
for(Map<String,Object> tmpRow : cursor) {
if(row.equals(tmpRow)) {
@@ -892,7 +892,7 @@ public class CursorTest extends TestCase {
}
expectedRows = tmpRows;
assertFalse(expectedRows.isEmpty());
rows = RowFilterTest.toList(cursor.newIterable().setMatchPattern(row));

assertEquals(expectedRows, rows);
@@ -944,9 +944,9 @@ public class CursorTest extends TestCase {
db.close();
}
}
public void testColumnMatcher() throws Exception {

for (final FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
Database db = createTestTable(fileFormat);
@@ -958,7 +958,7 @@ public class CursorTest extends TestCase {

Cursor cursor = CursorBuilder.createCursor(table);
doTestMatcher(table, cursor, SimpleColumnMatcher.INSTANCE, false);
doTestMatcher(table, cursor, CaseInsensitiveColumnMatcher.INSTANCE,
doTestMatcher(table, cursor, CaseInsensitiveColumnMatcher.INSTANCE,
true);
db.close();
}
@@ -979,8 +979,8 @@ public class CursorTest extends TestCase {
assertFalse(columnMatcher.matches(table, "value", null, 13));
assertTrue(columnMatcher.matches(table, "value", 13, 13));
}
private static void doTestMatcher(Table table, Cursor cursor,
private static void doTestMatcher(Table table, Cursor cursor,
ColumnMatcher columnMatcher,
boolean caseInsensitive)
throws Exception
@@ -1021,7 +1021,7 @@ public class CursorTest extends TestCase {
assertEquals(createExpectedRow("id", 7,
"value", "data" + 7),
cursor.getCurrentRow());
assertTrue(cursor.findFirstRow(createExpectedRow(
"value", "Data" + 7)) == caseInsensitive);
if(caseInsensitive) {
@@ -1029,13 +1029,13 @@ public class CursorTest extends TestCase {
"value", "data" + 7),
cursor.getCurrentRow());
}
assertTrue(cursor.findFirstRow(table.getColumn("value"), "data" + 4));
assertEquals(createExpectedRow("id", 4,
"value", "data" + 4),
cursor.getCurrentRow());

assertTrue(cursor.findFirstRow(table.getColumn("value"), "Data" + 4)
assertTrue(cursor.findFirstRow(table.getColumn("value"), "Data" + 4)
== caseInsensitive);
if(caseInsensitive) {
assertEquals(createExpectedRow("id", 4,
@@ -1067,8 +1067,8 @@ public class CursorTest extends TestCase {
}

public void testIndexCursor() throws Exception
{
for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX)) {
{
for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX, true)) {

Database db = openMem(testDB);
Table t1 = db.getTable("Table1");
@@ -1081,7 +1081,7 @@ public class CursorTest extends TestCase {

assertTrue(cursor.findFirstRowByEntry(1));
assertEquals(1, cursor.getCurrentRow().get("id"));
cursor.findClosestRowByEntry(2);
assertEquals(2, cursor.getCurrentRow().get("id"));

@@ -1090,11 +1090,11 @@ public class CursorTest extends TestCase {
assertTrue(cursor.isAfterLast());

db.close();
}
}
}
public void testIndexCursorDelete() throws Exception
{
{
for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX)) {

Database db = openMem(testDB);
@@ -1111,7 +1111,7 @@ public class CursorTest extends TestCase {
assertEquals(Arrays.asList("baz11", "baz11-2"), expectedData);

expectedData = new ArrayList<String>();
for(Iterator<? extends Row> iter =
for(Iterator<? extends Row> iter =
cursor.newEntryIterable(1).iterator();
iter.hasNext(); ) {
expectedData.add(iter.next().getString("data"));
@@ -1134,7 +1134,7 @@ public class CursorTest extends TestCase {
}

assertEquals(Arrays.asList("baz11", "baz11-2"), expectedData);
expectedData = new ArrayList<String>();
for(Row row : cursor.newEntryIterable(1)
.addColumnNames("data")) {
@@ -1142,13 +1142,13 @@ public class CursorTest extends TestCase {
}

assertTrue(expectedData.isEmpty());
db.close();
}
}
}
public void testCursorDelete() throws Exception
{
{
for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX)) {

Database db = openMem(testDB);
@@ -1191,7 +1191,7 @@ public class CursorTest extends TestCase {
}

assertEquals(Arrays.asList("baz11", "baz11-2"), expectedData);
expectedData = new ArrayList<String>();
for(Row row : cursor.newIterable().setColumnNames(
Arrays.asList("otherfk1", "data"))) {
@@ -1201,11 +1201,11 @@ public class CursorTest extends TestCase {
}

assertTrue(expectedData.isEmpty());
db.close();
}
}
}
public void testFindByRowId() throws Exception {
for (final FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
Database db = createTestTable(fileFormat);
@@ -1233,25 +1233,25 @@ public class CursorTest extends TestCase {
}
}

private static void doTestFindByRowId(Cursor cursor)
private static void doTestFindByRowId(Cursor cursor)
throws Exception
{
for(int i = 0; i < 3; ++i) {
cursor.moveToNextRow();
}
}

Row r1 = cursor.getCurrentRow();

for(int i = 0; i < 3; ++i) {
cursor.moveToNextRow();
}
}

Row r2 = cursor.getCurrentRow();

doTestFindByRowId(cursor, r1, 2);

doTestFindByRowId(cursor, r2, 5);
}
}

private static void doTestFindByRowId(Cursor cursor, Row row, int id)
throws Exception
@@ -1273,7 +1273,7 @@ public class CursorTest extends TestCase {

assertFalse(cursor.findRow(RowIdImpl.FIRST_ROW_ID));

assertEquals(id - 1, cursor.getCurrentRow().get("id"));
assertEquals(id - 1, cursor.getCurrentRow().get("id"));
}

public void testIterationEarlyExit() throws Exception {
@@ -1301,7 +1301,7 @@ public class CursorTest extends TestCase {

IndexCursor cursor = CursorBuilder.createCursor(
table.getIndex("value_idx"));
try {
cursor.newIterable()
.addMatchPattern("value", "val-9")
@@ -1336,7 +1336,7 @@ public class CursorTest extends TestCase {
public void testPartialIndexFind() throws Exception
{
for (final FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
Database db = createMem(fileFormat);

TableImpl t = (TableImpl)new TableBuilder("Test")
@@ -1348,23 +1348,23 @@ public class CursorTest extends TestCase {
.addIndex(new IndexBuilder("idx3").addColumns("data1", "num2", "key3"))
.toTable(db);

Index idx = t.findIndexForColumns(Arrays.asList("data1"),
Index idx = t.findIndexForColumns(Arrays.asList("data1"),
TableImpl.IndexFeature.ANY_MATCH);
assertEquals("idx3", idx.getName());

idx = t.findIndexForColumns(Arrays.asList("data1", "num2"),
idx = t.findIndexForColumns(Arrays.asList("data1", "num2"),
TableImpl.IndexFeature.ANY_MATCH);
assertEquals("idx3", idx.getName());

idx = t.findIndexForColumns(Arrays.asList("data1", "num2", "key3"),
idx = t.findIndexForColumns(Arrays.asList("data1", "num2", "key3"),
TableImpl.IndexFeature.ANY_MATCH);
assertEquals("idx3", idx.getName());

assertNull(t.findIndexForColumns(Arrays.asList("num2"),
assertNull(t.findIndexForColumns(Arrays.asList("num2"),
TableImpl.IndexFeature.ANY_MATCH));
assertNull(t.findIndexForColumns(Arrays.asList("data1", "key3"),
assertNull(t.findIndexForColumns(Arrays.asList("data1", "key3"),
TableImpl.IndexFeature.ANY_MATCH));
assertNull(t.findIndexForColumns(Arrays.asList("data1"),
assertNull(t.findIndexForColumns(Arrays.asList("data1"),
TableImpl.IndexFeature.EXACT_MATCH));


@@ -1372,23 +1372,23 @@ public class CursorTest extends TestCase {
.addColumns("data1", "num2")
.addToTable(t);

idx = t.findIndexForColumns(Arrays.asList("data1"),
idx = t.findIndexForColumns(Arrays.asList("data1"),
TableImpl.IndexFeature.ANY_MATCH);
assertEquals("idx2", idx.getName());

idx = t.findIndexForColumns(Arrays.asList("data1", "num2"),
idx = t.findIndexForColumns(Arrays.asList("data1", "num2"),
TableImpl.IndexFeature.ANY_MATCH);
assertEquals("idx2", idx.getName());

idx = t.findIndexForColumns(Arrays.asList("data1", "num2", "key3"),
idx = t.findIndexForColumns(Arrays.asList("data1", "num2", "key3"),
TableImpl.IndexFeature.ANY_MATCH);
assertEquals("idx3", idx.getName());

assertNull(t.findIndexForColumns(Arrays.asList("num2"),
assertNull(t.findIndexForColumns(Arrays.asList("num2"),
TableImpl.IndexFeature.ANY_MATCH));
assertNull(t.findIndexForColumns(Arrays.asList("data1", "key3"),
assertNull(t.findIndexForColumns(Arrays.asList("data1", "key3"),
TableImpl.IndexFeature.ANY_MATCH));
assertNull(t.findIndexForColumns(Arrays.asList("data1"),
assertNull(t.findIndexForColumns(Arrays.asList("data1"),
TableImpl.IndexFeature.EXACT_MATCH));


@@ -1396,21 +1396,21 @@ public class CursorTest extends TestCase {
.addColumns("data1")
.addToTable(t);

idx = t.findIndexForColumns(Arrays.asList("data1"),
idx = t.findIndexForColumns(Arrays.asList("data1"),
TableImpl.IndexFeature.ANY_MATCH);
assertEquals("idx1", idx.getName());

idx = t.findIndexForColumns(Arrays.asList("data1", "num2"),
idx = t.findIndexForColumns(Arrays.asList("data1", "num2"),
TableImpl.IndexFeature.ANY_MATCH);
assertEquals("idx2", idx.getName());

idx = t.findIndexForColumns(Arrays.asList("data1", "num2", "key3"),
idx = t.findIndexForColumns(Arrays.asList("data1", "num2", "key3"),
TableImpl.IndexFeature.ANY_MATCH);
assertEquals("idx3", idx.getName());

assertNull(t.findIndexForColumns(Arrays.asList("num2"),
assertNull(t.findIndexForColumns(Arrays.asList("num2"),
TableImpl.IndexFeature.ANY_MATCH));
assertNull(t.findIndexForColumns(Arrays.asList("data1", "key3"),
assertNull(t.findIndexForColumns(Arrays.asList("data1", "key3"),
TableImpl.IndexFeature.ANY_MATCH));

db.close();
@@ -1420,7 +1420,7 @@ public class CursorTest extends TestCase {
public void testPartialIndexLookup() throws Exception
{
for (final FileFormat fileFormat : JetFormatTest.SUPPORTED_FILEFORMATS) {
Database db = createMem(fileFormat);

TableImpl t = (TableImpl)new TableBuilder("Test")
@@ -1482,7 +1482,7 @@ public class CursorTest extends TestCase {
doFindFirstByEntry(c, 27, "C", 1, "K1");
doFindFirstByEntry(c, null, "C", 4, "K3");
}
try {
if(colCount > 2) {
c.findFirstRowByEntry("C", 4, "K1", 14);
@@ -1509,27 +1509,27 @@ public class CursorTest extends TestCase {
doFindByEntry(c, new int[]{}, "B", 3, "K3");
}

doFindByRow(idx, 13,
doFindByRow(idx, 13,
"data1", "B", "value", "value13");
doFindByRow(idx, 13,
doFindByRow(idx, 13,
"data1", "B", "key3", "K1", "value", "value13");
doFindByRow(idx, 13,
doFindByRow(idx, 13,
"data1", "B", "num2", 3, "key3", "K1", "value", "value13");
doFindByRow(idx, 13,
doFindByRow(idx, 13,
"num2", 3, "value", "value13");
doFindByRow(idx, 13,
doFindByRow(idx, 13,
"value", "value13");
doFindByRow(idx, null,
doFindByRow(idx, null,
"data1", "B", "num2", 5, "key3", "K1", "value", "value13");
doFindByRow(idx, null,
doFindByRow(idx, null,
"data1", "B", "value", "value4");

Column col = idx.getTable().getColumn("data1");
doFindValue(idx, 21, col, "C");
doFindValue(idx, null, col, "Z");
doFindValue(idx, null, col, "Z");
col = idx.getTable().getColumn("value");
doFindValue(idx, 21, col, "value21");
doFindValue(idx, null, col, "valueZ");
doFindValue(idx, null, col, "valueZ");
}

private static void doFindFirstByEntry(IndexCursor c, Integer expectedId,
@@ -1543,7 +1543,7 @@ public class CursorTest extends TestCase {
assertFalse(c.findFirstRowByEntry(entry));
}
}
private static void doFindByEntryRange(IndexCursor c, int start, int end,
Object... entry)
{
@@ -1553,7 +1553,7 @@ public class CursorTest extends TestCase {
}
doFindByEntry(c, expectedIds, entry);
}
private static void doFindByEntry(IndexCursor c, int[] ids,
Object... entry)
{
@@ -1563,7 +1563,7 @@ public class CursorTest extends TestCase {
}
doFindByEntry(c, expectedIds, entry);
}
private static void doFindByEntry(IndexCursor c, List<Integer> expectedIds,
Object... entry)
{
@@ -1585,9 +1585,9 @@ public class CursorTest extends TestCase {
} else {
assertNull(r);
}
}
}

private static void doFindValue(Index idx, Integer id,
private static void doFindValue(Index idx, Integer id,
Column columnPattern, Object valuePattern)
throws Exception
{
@@ -1598,6 +1598,5 @@ public class CursorTest extends TestCase {
} else {
assertNull(value);
}
}
}
}

+ 14
- 4
src/test/java/com/healthmarketscience/jackcess/TestUtil.java View File

@@ -26,11 +26,11 @@ import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.channels.FileChannel;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -89,12 +89,20 @@ public class TestUtil

public static Database open(FileFormat fileFormat, File file, boolean inMem)
throws Exception
{
return open(fileFormat, file, inMem, null);
}

public static Database open(FileFormat fileFormat, File file, boolean inMem,
Charset charset)
throws Exception
{
FileChannel channel = (inMem ? MemFileChannel.newChannel(
file, MemFileChannel.RW_CHANNEL_MODE)
: null);
final Database db = new DatabaseBuilder(file).setReadOnly(true)
.setAutoSync(getTestAutoSync()).setChannel(channel).open();
.setAutoSync(getTestAutoSync()).setChannel(channel)
.setCharset(charset).open();
Assert.assertEquals("Wrong JetFormat.",
DatabaseImpl.getFileFormatDetails(fileFormat).getFormat(),
((DatabaseImpl)db).getFormat());
@@ -103,11 +111,13 @@ public class TestUtil
}

public static Database open(TestDB testDB) throws Exception {
return open(testDB.getExpectedFileFormat(), testDB.getFile());
return open(testDB.getExpectedFileFormat(), testDB.getFile(), false,
testDB.getExpectedCharset());
}

public static Database openMem(TestDB testDB) throws Exception {
return open(testDB.getExpectedFileFormat(), testDB.getFile(), true);
return open(testDB.getExpectedFileFormat(), testDB.getFile(), true,
testDB.getExpectedCharset());
}

public static Database create(FileFormat fileFormat) throws Exception {

+ 9
- 1
src/test/java/com/healthmarketscience/jackcess/impl/IndexCodesTest.java View File

@@ -63,7 +63,7 @@ public class IndexCodesTest extends TestCase {

public void testIndexCodes() throws Exception
{
for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX_CODES)) {
for (final TestDB testDB : TestDB.getSupportedForBasename(Basename.INDEX_CODES, true)) {
Database db = openMem(testDB);

for(Table t : db) {
@@ -86,6 +86,14 @@ public class IndexCodesTest extends TestCase {
while(cursor.moveToNextRow()) {

Row row = cursor.getCurrentRow();

Object data = row.get("data");
if((testDB.getExpectedFileFormat() == Database.FileFormat.V1997) &&
(data instanceof String) && ((String)data).contains("\uFFFD")) {
// this row has a character not supported in the v1997 charset
continue;
}

Cursor.Position curPos = cursor.getSavepoint().getCurrentPosition();
boolean success = false;
try {

+ 18
- 2
src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java View File

@@ -3,6 +3,7 @@ package com.healthmarketscience.jackcess.impl;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.channels.FileChannel;
import java.nio.channels.NonWritableChannelException;
import java.sql.SQLException;
@@ -67,6 +68,9 @@ public class JetFormatTest extends TestCase {
public String toString() { return _basename; }
}

/** charset for access 97 dbs */
public static final Charset A97_CHARSET = Charset.forName("windows-1252");

/** Defines currently supported db file formats. (can be modified at
runtime via the system property
"com.healthmarketscience.jackcess.testFormats") */
@@ -109,12 +113,15 @@ public class JetFormatTest extends TestCase {

private final File dbFile;
private final FileFormat expectedFileFormat;
private final Charset _charset;

private TestDB(File databaseFile,
FileFormat expectedDBFileFormat) {
FileFormat expectedDBFileFormat,
Charset charset) {

dbFile = databaseFile;
expectedFileFormat = expectedDBFileFormat;
_charset = charset;
}

public final File getFile() { return dbFile; }
@@ -127,6 +134,10 @@ public class JetFormatTest extends TestCase {
return DatabaseImpl.getFileFormatDetails(expectedFileFormat).getFormat();
}

public final Charset getExpectedCharset() {
return _charset;
}

@Override
public final String toString() {
return "dbFile: " + dbFile.getAbsolutePath()
@@ -162,7 +173,12 @@ public class JetFormatTest extends TestCase {
throw new RuntimeException(e);
}

supportedTestDBs.add(new TestDB(testFile, fileFormat));
Charset charset = null;
if(fileFormat == FileFormat.V1997) {
charset = A97_CHARSET;
}

supportedTestDBs.add(new TestDB(testFile, fileFormat, charset));
}
return supportedTestDBs;
}

Loading…
Cancel
Save