diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/java/com/amazon/carbonado/filter/TestFilterSerialize.java | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/src/test/java/com/amazon/carbonado/filter/TestFilterSerialize.java b/src/test/java/com/amazon/carbonado/filter/TestFilterSerialize.java new file mode 100644 index 0000000..c823583 --- /dev/null +++ b/src/test/java/com/amazon/carbonado/filter/TestFilterSerialize.java @@ -0,0 +1,166 @@ +/*
+ * Copyright 2008 Amazon Technologies, Inc. or its affiliates.
+ * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks
+ * of Amazon Technologies, Inc. or its affiliates. All rights reserved.
+ *
+ * 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.amazon.carbonado.filter;
+
+import java.io.*;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import com.amazon.carbonado.stored.Address;
+import com.amazon.carbonado.stored.Order;
+import com.amazon.carbonado.stored.Shipment;
+
+/**
+ *
+ *
+ * @author Brian S O'Neill
+ */
+public class TestFilterSerialize extends TestCase {
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static TestSuite suite() {
+ return new TestSuite(TestFilterSerialize.class);
+ }
+
+ public TestFilterSerialize(String name) {
+ super(name);
+ }
+
+ public void testOpen() throws Exception {
+ Filter<Address> filter = Filter.getOpenFilter(Address.class);
+ assertTrue(filter == writeAndRead(filter));
+ }
+
+ public void testClosed() throws Exception {
+ Filter<Address> filter = Filter.getClosedFilter(Address.class);
+ assertTrue(filter == writeAndRead(filter));
+ }
+
+ public void testExpression() throws Exception {
+ {
+ Filter<Address> filter = Filter.filterFor(Address.class, "addressID = ?");
+ assertTrue(filter == writeAndRead(filter));
+
+ filter = Filter.filterFor(Address.class, "addressID = ? & addressZip > ?");
+ assertTrue(filter == writeAndRead(filter));
+
+ filter = Filter.filterFor(Address.class, "addressID = ? | addressZip > ?");
+ assertTrue(filter == writeAndRead(filter));
+
+ filter = Filter.filterFor(Address.class,
+ "addressID = ? | (addressZip > ? & customData < ?)");
+ assertTrue(filter == writeAndRead(filter));
+ }
+
+ {
+ Filter<Order> filter =
+ Filter.filterFor(Order.class,
+ "orderID != ? & address.addressZip = ?");
+ assertTrue(filter == writeAndRead(filter));
+
+ filter =
+ Filter.filterFor(Order.class,
+ "orderID != ? & (address).addressZip = ?");
+ assertTrue(filter == writeAndRead(filter));
+
+ filter =
+ Filter.filterFor(Order.class,
+ "orderID != ? & shipments(shipmentDate > ? & shipmentID != ?)");
+ assertTrue(filter == writeAndRead(filter));
+ }
+ }
+
+ public void testBoundExpression() throws Exception {
+ {
+ Filter<Address> filter = Filter.filterFor(Address.class, "addressID = ?").bind();
+ assertTrue(filter == writeAndRead(filter));
+
+ filter = Filter.filterFor(Address.class, "addressID = ? & addressZip > ?").bind();
+ assertTrue(filter == writeAndRead(filter));
+
+ filter = Filter.filterFor(Address.class, "addressID = ? | addressZip > ?").bind();
+ assertTrue(filter == writeAndRead(filter));
+
+ filter = Filter.filterFor(Address.class,
+ "addressID = ? | (addressZip > ? & customData < ?)").bind();
+ assertTrue(filter == writeAndRead(filter));
+ }
+
+ {
+ Filter<Order> filter =
+ Filter.filterFor(Order.class,
+ "orderID != ? & address.addressZip = ?").bind();
+ assertTrue(filter == writeAndRead(filter));
+
+ filter =
+ Filter.filterFor(Order.class,
+ "orderID != ? & (address).addressZip = ?").bind();;
+ assertTrue(filter == writeAndRead(filter));
+
+ filter =
+ Filter.filterFor(Order.class,
+ "orderID != ? & shipments(shipmentDate > ? & shipmentID != ?)")
+ .bind();
+ assertTrue(filter == writeAndRead(filter));
+ }
+ }
+
+ public void testFilterValues() throws Exception {
+ Filter<Address> filter = Filter.filterFor(Address.class, "addressID = ?").bind();
+ FilterValues<Address> fv = filter.initialFilterValues().with(5);
+ FilterValues<Address> read = writeAndRead(fv);
+ assertTrue(fv.getFilter() == read.getFilter());
+ assertEquals(fv, read);
+
+ filter = Filter.filterFor(Address.class,
+ "addressID = ? | (addressZip > ? & customData < ?)").bind();
+ fv = filter.initialFilterValues().withValues(5, "12345", "foo");
+ read = writeAndRead(fv);
+ assertTrue(fv.getFilter() == read.getFilter());
+ assertEquals(fv, read);
+
+ // Test with constant value.
+ Filter<Address> inner = Filter.getOpenFilter(Address.class);
+ inner = inner.and("addressZip", RelOp.GT, "12345");
+ inner = inner.and("customData < ?");
+ filter = Filter.filterFor(Address.class, "addressID = ?").or(inner);
+ filter = filter.bind();
+ fv = filter.initialFilterValues().withValues(5, "foo");
+ read = writeAndRead(fv);
+ assertTrue(fv.getFilter() == read.getFilter());
+ assertEquals(fv, read);
+ }
+
+ private <J> J writeAndRead(J obj) throws Exception {
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ ObjectOutputStream oout = new ObjectOutputStream(bout);
+ oout.writeObject(obj);
+ oout.close();
+
+ ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
+ ObjectInputStream oin = new ObjectInputStream(bin);
+ obj = (J) oin.readObject();
+ oin.close();
+
+ return obj;
+ }
+}
|
