Package org.exist.dom

Source Code of org.exist.dom.SymbolTableTest

package org.exist.dom;

import org.exist.storage.io.VariableByteInput;
import org.easymock.Capture;
import org.exist.storage.io.VariableByteOutputStream;
import org.easymock.EasyMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.verify;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.captureByte;
import static org.easymock.EasyMock.captureInt;
import static org.easymock.EasyMock.capture;
import java.io.File;
import java.io.IOException;
import org.exist.EXistException;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

/**
* @author Adam Retter <adam@exist-db.org>
*/
public class SymbolTableTest {

    private final File tmpDir = new File(System.getProperty("java.io.tmpdir"));

    @Test
    public void getName_returns_empty_string_when_id_is_zero() throws EXistException, IOException {
        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        assertEquals("", symbolTable.getName((short)0));
        symbolTable.close();
    }

    @Test
    public void getNameSpace_returns_empty_string_when_id_is_zero() throws EXistException {
        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        assertEquals("", symbolTable.getNamespace((short)0));
    }

    @Test
    public void geMimeType_returns_empty_string_when_id_is_zero() throws EXistException, IOException {
        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        assertEquals("", symbolTable.getMimeType((short)0));
        symbolTable.close();
    }
   
    @Test(expected=IllegalArgumentException.class)
    public void getSymbol_for_localName_throws_exception_when_name_is_empty_string() throws EXistException, IOException {
        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        symbolTable.getSymbol("");
        symbolTable.close();
    }

    @Test
    public void getNSSymbol_returns_zero_when_namespace_is_null() throws EXistException, IOException {
        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        assertEquals(0, symbolTable.getNSSymbol(null));
        symbolTable.close();
    }

    @Test
    public void getNSSymbol_returns_zero_when_namespace_is_empty_string() throws EXistException, IOException {
        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        assertEquals(0, symbolTable.getNSSymbol(""));
        symbolTable.close();
    }

    @Test
    public void localName_ids_are_stable() throws EXistException, IOException {
        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        final String localName = "some-name";
        final short localNameId = symbolTable.getSymbol(localName);
        symbolTable.close();

        symbolTable = new SymbolTable(null, tmpDir);
        final String roundTrippedLocalName = symbolTable.getName(localNameId);
        symbolTable.close();

        assertEquals(localName, roundTrippedLocalName);
    }

    @Test
    public void namespace_ids_are_stable() throws EXistException, IOException {
        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        final String namespace = "http://something/or/other";
        final short namespaceId = symbolTable.getNSSymbol(namespace);
        symbolTable.close();

        symbolTable = new SymbolTable(null, tmpDir);
        final String roundTrippedNamespace = symbolTable.getNamespace(namespaceId);
        symbolTable.close();

        assertEquals(namespace, roundTrippedNamespace);
    }

    @Test
    public void mimetype_ids_are_stable() throws EXistException, IOException {
        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        final String mimetype = "something/other";
        final int mimetypeId = symbolTable.getMimeTypeId(mimetype);
        symbolTable.close();

        symbolTable = new SymbolTable(null, tmpDir);
        final String roundTrippedMimetype = symbolTable.getMimeType(mimetypeId);
        symbolTable.close();

        assertEquals(mimetype, roundTrippedMimetype);
    }

    @Test
    public void write_and_read_are_balanced() throws EXistException, IOException {

        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        symbolTable.getSymbol("some-name");

        VariableByteOutputStream mockOs = EasyMock.createMock(VariableByteOutputStream.class);
        VariableByteInput mockIs = EasyMock.createMock(VariableByteInput.class);

        final Capture<Byte> byteCapture = new Capture<Byte>();
        final Capture<Integer> intCapture = new Capture<Integer>();
        final Capture<String> strCapture = new Capture<String>();

        //write expectations
        mockOs.writeByte(captureByte(byteCapture));
        mockOs.writeInt(captureInt(intCapture));
        mockOs.writeUTF(capture(strCapture));

        replay(mockOs);

        symbolTable.localNameSymbols.write(mockOs);

        verify(mockOs);

        //read expectations
        expect(mockIs.available()).andReturn(1);
        expect(mockIs.readByte()).andReturn(byteCapture.getValue());
        expect(mockIs.readInt()).andReturn(intCapture.getValue());
        expect(mockIs.readUTF()).andReturn(strCapture.getValue());
        expect(mockIs.available()).andReturn(0);

        replay(mockIs);

        symbolTable.read(mockIs);

        verify(mockIs);
    }

    @Test
    public void readLegacyFormat() throws EXistException, IOException {

        SymbolTable symbolTable = new SymbolTable(null, tmpDir);
        VariableByteInput mockIs = EasyMock.createMock(VariableByteInput.class);

        /* readLegacy expectations */

        //max and nsMax
        expect(mockIs.readShort()).andReturn((short)1);
        expect(mockIs.readShort()).andReturn((short)1);

        //localnames
        expect(mockIs.readInt()).andReturn(1);
        expect(mockIs.readUTF()).andReturn("local-name");
        expect(mockIs.readShort()).andReturn((short)67);

        //namespaces
        expect(mockIs.readInt()).andReturn(1);
        expect(mockIs.readUTF()).andReturn("http://some/or/other");
        expect(mockIs.readShort()).andReturn((short)77);

        //default mappings
        expect(mockIs.readInt()).andReturn(1);
        expect(mockIs.readUTF()).andReturn("mapping");
        expect(mockIs.readShort()).andReturn((short)87);

        //mimetypes
        expect(mockIs.readInt()).andReturn(1);
        expect(mockIs.readUTF()).andReturn("some/other");
        expect(mockIs.readInt()).andReturn(97);

        //replay
        replay(mockIs);

        //action
        symbolTable.readLegacy(mockIs);

        //verify
        verify(mockIs);

        symbolTable.close();
    }
}
TOP

Related Classes of org.exist.dom.SymbolTableTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.