diff options
author | James Ahlborn <jtahlborn@yahoo.com> | 2017-05-24 03:26:58 +0000 |
---|---|---|
committer | James Ahlborn <jtahlborn@yahoo.com> | 2017-05-24 03:26:58 +0000 |
commit | 9ad8aaabc77b773bee4419edc794f63ee2a16dbb (patch) | |
tree | 5397bcbd54a681b98ed2a005357f3112354f9cb5 /src/test | |
parent | 9a7f57b361e43603888d91901987bbfff4b72695 (diff) | |
parent | 4c087727dc6fd9739a44b6874001304b629938f4 (diff) | |
download | jackcess-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')
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 Binary files differnew file mode 100644 index 0000000..7367d01 --- /dev/null +++ b/src/test/resources/emptyJet4.mdb |