aboutsummaryrefslogtreecommitdiffstats
path: root/src/test
diff options
context:
space:
mode:
authorJames Ahlborn <jtahlborn@yahoo.com>2017-05-24 03:26:58 +0000
committerJames Ahlborn <jtahlborn@yahoo.com>2017-05-24 03:26:58 +0000
commit9ad8aaabc77b773bee4419edc794f63ee2a16dbb (patch)
tree5397bcbd54a681b98ed2a005357f3112354f9cb5 /src/test
parent9a7f57b361e43603888d91901987bbfff4b72695 (diff)
parent4c087727dc6fd9739a44b6874001304b629938f4 (diff)
downloadjackcess-9ad8aaabc77b773bee4419edc794f63ee2a16dbb.tar.gz
jackcess-9ad8aaabc77b773bee4419edc794f63ee2a16dbb.zip
merge trunk changes through r1100
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/branches/exprs@1101 f203690c-595d-4dc9-a70b-905162fa7fd2
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/com/healthmarketscience/jackcess/DatabaseTest.java4
-rw-r--r--src/test/java/com/healthmarketscience/jackcess/PropertiesTest.java7
-rw-r--r--src/test/java/com/healthmarketscience/jackcess/TestUtil.java30
-rw-r--r--src/test/java/com/healthmarketscience/jackcess/impl/AutoNumberTest.java24
-rw-r--r--src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java7
-rw-r--r--src/test/java/com/healthmarketscience/jackcess/util/CustomLinkResolverTest.java159
-rw-r--r--src/test/resources/emptyJet4.mdbbin0 -> 77824 bytes
7 files changed, 210 insertions, 21 deletions
diff --git a/src/test/java/com/healthmarketscience/jackcess/DatabaseTest.java b/src/test/java/com/healthmarketscience/jackcess/DatabaseTest.java
index 6a6fd34..025e180 100644
--- a/src/test/java/com/healthmarketscience/jackcess/DatabaseTest.java
+++ b/src/test/java/com/healthmarketscience/jackcess/DatabaseTest.java
@@ -742,7 +742,9 @@ public class DatabaseTest extends TestCase
Arrays.asList("MSysObjects", "MSysQueries", "MSysACES",
"MSysRelationships"));
- if (fileFormat.ordinal() < FileFormat.V2003.ordinal()) {
+ if (fileFormat == FileFormat.GENERIC_JET4) {
+ assertNull("file format: " + fileFormat, db.getSystemTable("MSysAccessObjects"));
+ } else if (fileFormat.ordinal() < FileFormat.V2003.ordinal()) {
assertNotNull("file format: " + fileFormat, db.getSystemTable("MSysAccessObjects"));
sysTables.add("MSysAccessObjects");
} else {
diff --git a/src/test/java/com/healthmarketscience/jackcess/PropertiesTest.java b/src/test/java/com/healthmarketscience/jackcess/PropertiesTest.java
index a5ec859..89ab4c4 100644
--- a/src/test/java/com/healthmarketscience/jackcess/PropertiesTest.java
+++ b/src/test/java/com/healthmarketscience/jackcess/PropertiesTest.java
@@ -24,7 +24,6 @@ import java.util.List;
import java.util.UUID;
import static com.healthmarketscience.jackcess.Database.*;
-import static com.healthmarketscience.jackcess.DatabaseTest.*;
import com.healthmarketscience.jackcess.impl.DatabaseImpl;
import static com.healthmarketscience.jackcess.impl.JetFormatTest.*;
import com.healthmarketscience.jackcess.impl.PropertyMapImpl;
@@ -349,6 +348,12 @@ public class PropertiesTest extends TestCase
public void testCreateDbProperties() throws Exception
{
for(FileFormat ff : SUPPORTED_FILEFORMATS) {
+
+ if(ff == FileFormat.GENERIC_JET4) {
+ // weirdo format, no properties
+ continue;
+ }
+
File file = TestUtil.createTempFile(false);
Database db = new DatabaseBuilder(file)
.setFileFormat(ff)
diff --git a/src/test/java/com/healthmarketscience/jackcess/TestUtil.java b/src/test/java/com/healthmarketscience/jackcess/TestUtil.java
index c6856bc..3317c7f 100644
--- a/src/test/java/com/healthmarketscience/jackcess/TestUtil.java
+++ b/src/test/java/com/healthmarketscience/jackcess/TestUtil.java
@@ -41,6 +41,7 @@ import com.healthmarketscience.jackcess.impl.ByteUtil;
import com.healthmarketscience.jackcess.impl.DatabaseImpl;
import com.healthmarketscience.jackcess.impl.IndexData;
import com.healthmarketscience.jackcess.impl.IndexImpl;
+import com.healthmarketscience.jackcess.impl.JetFormatTest;
import com.healthmarketscience.jackcess.impl.JetFormatTest.TestDB;
import com.healthmarketscience.jackcess.impl.RowIdImpl;
import com.healthmarketscience.jackcess.impl.RowImpl;
@@ -84,7 +85,8 @@ public class TestUtil
public static Database open(FileFormat fileFormat, File file, boolean inMem)
throws Exception
{
- FileChannel channel = (inMem ? MemFileChannel.newChannel(file, "rw")
+ FileChannel channel = (inMem ? MemFileChannel.newChannel(
+ file, DatabaseImpl.RW_CHANNEL_MODE)
: null);
final Database db = new DatabaseBuilder(file).setReadOnly(true)
.setAutoSync(getTestAutoSync()).setChannel(channel).open();
@@ -122,8 +124,32 @@ public class TestUtil
throws Exception
{
FileChannel channel = (inMem ? MemFileChannel.newChannel() : null);
+
+ if (fileFormat == FileFormat.GENERIC_JET4) {
+ // while we don't support creating GENERIC_JET4 as a jackcess feature,
+ // we do want to be able to test these types of dbs
+ InputStream inStream = null;
+ OutputStream outStream = null;
+ try {
+ inStream = TestUtil.class.getClassLoader()
+ .getResourceAsStream("emptyJet4.mdb");
+ File f = createTempFile(keep);
+ if (channel != null) {
+ JetFormatTest.transferDbFrom(channel, inStream);
+ } else {
+ ByteUtil.copy(inStream, outStream = new FileOutputStream(f));
+ outStream.close();
+ }
+ return new DatabaseBuilder(f)
+ .setAutoSync(getTestAutoSync()).setChannel(channel).open();
+ } finally {
+ ByteUtil.closeQuietly(inStream);
+ ByteUtil.closeQuietly(outStream);
+ }
+ }
+
return new DatabaseBuilder(createTempFile(keep)).setFileFormat(fileFormat)
- .setAutoSync(getTestAutoSync()).setChannel(channel).create();
+ .setAutoSync(getTestAutoSync()).setChannel(channel).create();
}
diff --git a/src/test/java/com/healthmarketscience/jackcess/impl/AutoNumberTest.java b/src/test/java/com/healthmarketscience/jackcess/impl/AutoNumberTest.java
index 37eec77..eae2c25 100644
--- a/src/test/java/com/healthmarketscience/jackcess/impl/AutoNumberTest.java
+++ b/src/test/java/com/healthmarketscience/jackcess/impl/AutoNumberTest.java
@@ -242,12 +242,7 @@ public class AutoNumberTest extends TestCase
assertEquals(13, ((TableImpl)table).getLastLongAutoNumber());
- try {
- table.addRow(-10, "uh-uh");
- fail("IOException should have been thrown");
- } catch(IOException e) {
- // success
- }
+ table.addRow(-10, "non-positives are now allowed");
row = table.addRow(Column.AUTO_NUMBER, "row14");
assertEquals(14, ((Integer)row[0]).intValue());
@@ -262,23 +257,18 @@ public class AutoNumberTest extends TestCase
assertEquals(45, ((TableImpl)table).getLastLongAutoNumber());
- row13.put("a", -1);
-
- try {
- table.updateRow(row13);
- fail("IOException should have been thrown");
- } catch(IOException e) {
- // success
- }
+ row13.put("a", -1); // non-positives are now allowed
+ table.updateRow(row13);
assertEquals(45, ((TableImpl)table).getLastLongAutoNumber());
row13.put("a", 55);
- table.setAllowAutoNumberInsert(null);
+ // reset to db-level policy (which in this case is "false")
+ table.setAllowAutoNumberInsert(null);
- row13 = table.updateRow(row13);
- assertEquals(45, row13.get("a"));
+ row13 = table.updateRow(row13); // no change, as confirmed by...
+ assertEquals(-1, row13.get("a"));
assertEquals(45, ((TableImpl)table).getLastLongAutoNumber());
diff --git a/src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java b/src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java
index 4efbd60..b302985 100644
--- a/src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java
+++ b/src/test/java/com/healthmarketscience/jackcess/impl/JetFormatTest.java
@@ -1,6 +1,8 @@
package com.healthmarketscience.jackcess.impl;
import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.nio.channels.FileChannel;
import java.nio.channels.NonWritableChannelException;
import java.util.ArrayList;
@@ -263,4 +265,9 @@ public class JetFormatTest extends TestCase {
}
}
+ public static void transferDbFrom(FileChannel channel, InputStream in)
+ throws IOException
+ {
+ DatabaseImpl.transferDbFrom(channel, in);
+ }
}
diff --git a/src/test/java/com/healthmarketscience/jackcess/util/CustomLinkResolverTest.java b/src/test/java/com/healthmarketscience/jackcess/util/CustomLinkResolverTest.java
new file mode 100644
index 0000000..31a8853
--- /dev/null
+++ b/src/test/java/com/healthmarketscience/jackcess/util/CustomLinkResolverTest.java
@@ -0,0 +1,159 @@
+/*
+Copyright (c) 2017 James Ahlborn
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package com.healthmarketscience.jackcess.util;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import com.healthmarketscience.jackcess.ColumnBuilder;
+import com.healthmarketscience.jackcess.DataType;
+import com.healthmarketscience.jackcess.Database;
+import com.healthmarketscience.jackcess.Database.FileFormat;
+import com.healthmarketscience.jackcess.Table;
+import com.healthmarketscience.jackcess.TableBuilder;
+import junit.framework.TestCase;
+import static com.healthmarketscience.jackcess.TestUtil.*;
+import static com.healthmarketscience.jackcess.impl.JetFormatTest.*;
+
+/**
+ *
+ * @author James Ahlborn
+ */
+public class CustomLinkResolverTest extends TestCase
+{
+
+ public CustomLinkResolverTest(String name) {
+ super(name);
+ }
+
+ public void testCustomLinkResolver() throws Exception {
+ for(final FileFormat fileFormat : SUPPORTED_FILEFORMATS) {
+ Database db = create(fileFormat);
+
+ db.setLinkResolver(new TestLinkResolver());
+
+ db.createLinkedTable("Table1", "testFile1.txt", "Table1");
+ db.createLinkedTable("Table2", "testFile2.txt", "OtherTable2");
+ db.createLinkedTable("Table3", "missingFile3.txt", "MissingTable3");
+ db.createLinkedTable("Table4", "testFile2.txt", "MissingTable4");
+
+ Table t1 = db.getTable("Table1");
+ assertNotNull(t1);
+ assertNotSame(db, t1.getDatabase());
+
+ assertTable(createExpectedTable(createExpectedRow("id", 0,
+ "data1", "row0"),
+ createExpectedRow("id", 1,
+ "data1", "row1"),
+ createExpectedRow("id", 2,
+ "data1", "row2")),
+ t1);
+
+ Table t2 = db.getTable("Table2");
+ assertNotNull(t2);
+ assertNotSame(db, t2.getDatabase());
+
+ assertTable(createExpectedTable(createExpectedRow("id", 3,
+ "data2", "row3"),
+ createExpectedRow("id", 4,
+ "data2", "row4"),
+ createExpectedRow("id", 5,
+ "data2", "row5")),
+ t2);
+
+ assertNull(db.getTable("Table4"));
+
+ try {
+ db.getTable("Table3");
+ fail("FileNotFoundException should have been thrown");
+ } catch(FileNotFoundException e) {
+ // success
+ }
+
+ db.close();
+ }
+ }
+
+ private static class TestLinkResolver extends CustomLinkResolver
+ {
+ private TestLinkResolver()
+ {
+ super(DEFAULT_FORMAT, true, DEFAULT_TEMP_DIR);
+ }
+
+ @Override
+ protected Object loadCustomFile(
+ Database linkerDb, String linkeeFileName) throws IOException
+ {
+ return (("testFile1.txt".equals(linkeeFileName) ||
+ "testFile2.txt".equals(linkeeFileName)) ?
+ linkeeFileName : null);
+ }
+
+ @Override
+ protected boolean loadCustomTable(
+ Database tempDb, Object customFile, String tableName)
+ throws IOException
+ {
+ if("Table1".equals(tableName)) {
+
+ assertEquals("testFile1.txt", customFile);
+ Table t = new TableBuilder(tableName)
+ .addColumn(new ColumnBuilder("id", DataType.LONG))
+ .addColumn(new ColumnBuilder("data1", DataType.TEXT))
+ .toTable(tempDb);
+
+ for(int i = 0; i < 3; ++i) {
+ t.addRow(i, "row" + i);
+ }
+
+ return true;
+
+ } else if("OtherTable2".equals(tableName)) {
+
+ assertEquals("testFile2.txt", customFile);
+ Table t = new TableBuilder(tableName)
+ .addColumn(new ColumnBuilder("id", DataType.LONG))
+ .addColumn(new ColumnBuilder("data2", DataType.TEXT))
+ .toTable(tempDb);
+
+ for(int i = 3; i < 6; ++i) {
+ t.addRow(i, "row" + i);
+ }
+
+ return true;
+
+ } else if("Table4".equals(tableName)) {
+
+ assertEquals("testFile2.txt", customFile);
+ return false;
+ }
+
+ return false;
+ }
+
+ @Override
+ protected Database createTempDb(Object customFile, FileFormat format,
+ boolean inMemory, File tempDir)
+ throws IOException
+ {
+ inMemory = "testFile1.txt".equals(customFile);
+ return super.createTempDb(customFile, format, inMemory, tempDir);
+ }
+ }
+}
diff --git a/src/test/resources/emptyJet4.mdb b/src/test/resources/emptyJet4.mdb
new file mode 100644
index 0000000..7367d01
--- /dev/null
+++ b/src/test/resources/emptyJet4.mdb
Binary files differ