⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serialbindingtest.java

📁 嵌入式数据库Berkeley DB-4.5.20源代码
💻 JAVA
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002-2006 *	Oracle Corporation.  All rights reserved. * * $Id: SerialBindingTest.java,v 12.5 2006/08/24 14:46:43 bostic Exp $ */package com.sleepycat.bind.serial.test;import java.io.Serializable;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestSuite;import com.sleepycat.bind.EntityBinding;import com.sleepycat.bind.serial.ClassCatalog;import com.sleepycat.bind.serial.SerialBinding;import com.sleepycat.bind.serial.SerialSerialBinding;import com.sleepycat.bind.serial.TupleSerialMarshalledBinding;import com.sleepycat.collections.test.DbTestUtil;import com.sleepycat.db.DatabaseEntry;import com.sleepycat.util.ExceptionUnwrapper;import com.sleepycat.util.FastOutputStream;/** * @author Mark Hayes */public class SerialBindingTest extends TestCase {    private ClassCatalog catalog;    private DatabaseEntry buffer;    private DatabaseEntry keyBuffer;    public static void main(String[] args)        throws Exception {        junit.framework.TestResult tr =            junit.textui.TestRunner.run(suite());        if (tr.errorCount() > 0 ||            tr.failureCount() > 0) {            System.exit(1);        } else {            System.exit(0);        }    }    public static Test suite()        throws Exception {        TestSuite suite = new TestSuite(SerialBindingTest.class);        return suite;    }    public SerialBindingTest(String name) {        super(name);    }    public void setUp() {        DbTestUtil.printTestName("SerialBindingTest." + getName());        catalog = new TestClassCatalog();        buffer = new DatabaseEntry();        keyBuffer = new DatabaseEntry();    }    public void tearDown() {        /* Ensure that GC can cleanup. */        catalog = null;        buffer = null;        keyBuffer = null;    }    public void runTest()        throws Throwable {        try {            super.runTest();        } catch (Exception e) {            throw ExceptionUnwrapper.unwrap(e);        }    }    private void primitiveBindingTest(Object val) {        Class cls = val.getClass();        SerialBinding binding = new SerialBinding(catalog, cls);        binding.objectToEntry(val, buffer);        assertTrue(buffer.getSize() > 0);        Object val2 = binding.entryToObject(buffer);        assertSame(cls, val2.getClass());        assertEquals(val, val2);        Object valWithWrongCls = (cls == String.class)                      ? ((Object) new Integer(0)) : ((Object) new String(""));        try {            binding.objectToEntry(valWithWrongCls, buffer);        } catch (IllegalArgumentException expected) {}    }    public void testPrimitiveBindings() {        primitiveBindingTest("abc");        primitiveBindingTest(new Character('a'));        primitiveBindingTest(new Boolean(true));        primitiveBindingTest(new Byte((byte) 123));        primitiveBindingTest(new Short((short) 123));        primitiveBindingTest(new Integer(123));        primitiveBindingTest(new Long(123));        primitiveBindingTest(new Float(123.123));        primitiveBindingTest(new Double(123.123));    }    public void testNullObjects() {        SerialBinding binding = new SerialBinding(catalog, null);        buffer.setSize(0);        binding.objectToEntry(null, buffer);        assertTrue(buffer.getSize() > 0);        assertEquals(null, binding.entryToObject(buffer));    }    public void testSerialSerialBinding() {        SerialBinding keyBinding = new SerialBinding(catalog, String.class);        SerialBinding valueBinding = new SerialBinding(catalog, String.class);        EntityBinding binding = new MySerialSerialBinding(keyBinding,                                                          valueBinding);        String val = "key#value?indexKey";        binding.objectToData(val, buffer);        assertTrue(buffer.getSize() > 0);        binding.objectToKey(val, keyBuffer);        assertTrue(keyBuffer.getSize() > 0);        Object result = binding.entryToObject(keyBuffer, buffer);        assertEquals(val, result);    }    // also tests TupleSerialBinding since TupleSerialMarshalledBinding extends    // it    public void testTupleSerialMarshalledBinding() {        SerialBinding valueBinding = new SerialBinding(catalog,                                                    MarshalledObject.class);        EntityBinding binding =            new TupleSerialMarshalledBinding(valueBinding);        MarshalledObject val = new MarshalledObject("abc", "primary",                                                    "index1", "index2");        binding.objectToData(val, buffer);        assertTrue(buffer.getSize() > 0);        binding.objectToKey(val, keyBuffer);        assertEquals(val.expectedKeyLength(), keyBuffer.getSize());        Object result = binding.entryToObject(keyBuffer, buffer);        assertTrue(result instanceof MarshalledObject);        val = (MarshalledObject) result;        assertEquals("abc", val.getData());        assertEquals("primary", val.getPrimaryKey());        assertEquals("index1", val.getIndexKey1());        assertEquals("index2", val.getIndexKey2());    }    public void testBufferSize() {        CaptureSizeBinding binding =            new CaptureSizeBinding(catalog, String.class);        binding.objectToEntry("x", buffer);        assertEquals("x", binding.entryToObject(buffer));        assertEquals(FastOutputStream.DEFAULT_INIT_SIZE, binding.bufSize);        binding.setSerialBufferSize(1000);        binding.objectToEntry("x", buffer);        assertEquals("x", binding.entryToObject(buffer));        assertEquals(1000, binding.bufSize);    }    private static class CaptureSizeBinding extends SerialBinding {        int bufSize;        CaptureSizeBinding(ClassCatalog classCatalog, Class baseClass) {            super(classCatalog, baseClass);        }        public FastOutputStream getSerialOutput(Object object) {            FastOutputStream fos = super.getSerialOutput(object);            bufSize = fos.getBufferBytes().length;            return fos;        }    }    public void testBufferOverride() {        FastOutputStream out = new FastOutputStream(10);        CachedOutputBinding binding =            new CachedOutputBinding(catalog, String.class, out);        binding.used = false;        binding.objectToEntry("x", buffer);        assertEquals("x", binding.entryToObject(buffer));        assertTrue(binding.used);        binding.used = false;        binding.objectToEntry("aaaaaaaaaaaaaaaaaaaaaa", buffer);        assertEquals("aaaaaaaaaaaaaaaaaaaaaa", binding.entryToObject(buffer));        assertTrue(binding.used);        binding.used = false;        binding.objectToEntry("x", buffer);        assertEquals("x", binding.entryToObject(buffer));        assertTrue(binding.used);    }    private static class CachedOutputBinding extends SerialBinding {        FastOutputStream out;        boolean used;        CachedOutputBinding(ClassCatalog classCatalog,                            Class baseClass,                            FastOutputStream out) {            super(classCatalog, baseClass);            this.out = out;        }        public FastOutputStream getSerialOutput(Object object) {            out.reset();            used = true;            return out;        }    }    private static class MySerialSerialBinding extends SerialSerialBinding {        private MySerialSerialBinding(SerialBinding keyBinding,                                      SerialBinding valueBinding) {            super(keyBinding, valueBinding);        }        public Object entryToObject(Object keyInput, Object valueInput) {            return "" + keyInput + '#' + valueInput;        }        public Object objectToKey(Object object) {            String s = (String) object;            int i = s.indexOf('#');            if (i < 0 || i == s.length() - 1) {                throw new IllegalArgumentException(s);            } else {                return s.substring(0, i);            }        }        public Object objectToData(Object object) {            String s = (String) object;            int i = s.indexOf('#');            if (i < 0 || i == s.length() - 1) {                throw new IllegalArgumentException(s);            } else {                return s.substring(i + 1);            }        }    }    /**     * Tests that overriding SerialBinding.getClassLoader is possible.  This is     * a crude test because to create a truly working class loader is a large     * undertaking.     */    public void testClassloaderOverride()        throws Exception {        DatabaseEntry entry = new DatabaseEntry();        SerialBinding binding = new CustomLoaderBinding            (catalog, null, new FailureClassLoader());        try {            binding.objectToEntry(new MyClass(), entry);            binding.entryToObject(entry);            fail();        } catch (RuntimeException e) {            assertTrue(e.getMessage().startsWith("expect failure"));        }    }    private static class CustomLoaderBinding extends SerialBinding {        private ClassLoader loader;        CustomLoaderBinding(ClassCatalog classCatalog,                            Class baseClass,                            ClassLoader loader) {            super(classCatalog, baseClass);            this.loader = loader;        }        public ClassLoader getClassLoader() {            return loader;        }    }    private static class FailureClassLoader extends ClassLoader {        public Class loadClass(String name)            throws ClassNotFoundException {            throw new RuntimeException("expect failure: " + name);        }    }    private static class MyClass implements Serializable {    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -