Package org.jnode.test.fs.driver.factories

Source Code of org.jnode.test.fs.driver.factories.MockIDEDeviceFactory$GetEntryStub

/*
* $Id$
*
* Copyright (C) 2003-2014 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jnode.test.fs.driver.factories;

import org.jmock.cglib.Mock;
import org.jmock.core.Invocation;
import org.jmock.core.Stub;
import org.jmock.core.stub.ReturnStub;
import org.jnode.driver.Device;
import org.jnode.driver.bus.ide.DefaultIDEControllerDriver;
import org.jnode.driver.bus.ide.IDEBus;
import org.jnode.driver.bus.ide.IDEConstants;
import org.jnode.driver.bus.ide.IDEDevice;
import org.jnode.driver.bus.ide.IDEDeviceFactory;
import org.jnode.driver.bus.ide.IDEDriveDescriptor;
import org.jnode.driver.bus.ide.IDEIO;
import org.jnode.partitions.ibm.IBMPartitionTable;
import org.jnode.partitions.ibm.IBMPartitionTableEntry;
import org.jnode.test.fs.driver.BlockDeviceAPIContext;
import org.jnode.test.fs.driver.Partition;
import org.jnode.test.support.ContextManager;
import org.jnode.test.support.MockInitializer;
import org.jnode.test.support.MockUtils;

public class MockIDEDeviceFactory extends AbstractMockDeviceFactory implements
    IDEDeviceFactory {
    public IDEDevice createIDEDevice(IDEBus bus, boolean primary,
                                     boolean master, String name, IDEDriveDescriptor descriptor,
                                     DefaultIDEControllerDriver controller) {
        MockInitializer initializer = new MockInitializer() {
            public void init(Mock mockIDEDevice) {
                // Boolean diskChanged = Boolean.FALSE;
                // mockFDC.expects(testCase.atLeastOnce()).method("diskChanged").withAnyArguments().
                // will(new ReturnStub(diskChanged));
            }
        };

        return MockUtils.createMockObject(IDEDevice.class,
            initializer);
    }

    public IDEBus createIDEBus(Device parent, boolean primary) {
        MockInitializer initializer = new MockInitializer() {
            public void init(Mock mockIDEBus) {
                mockIDEBus.expects(testCase.atLeastOnce()).method(
                    "executeAndWait").withAnyArguments();
            }
        };

        Class<?>[] argCls = new Class[]{Device.class, boolean.class};
        Object[] args = new Object[]{parent, Boolean.valueOf(primary)};

        return (IDEBus) MockUtils.createMockObject(IDEBus.class, initializer,
            argCls, args);
    }

    public IDEIO createIDEIO(Device parent, boolean primary) {
        MockInitializer initializer = new MockInitializer() {
            public void init(Mock mockIDEIO) {
                Integer irq = new Integer(13);
                mockIDEIO.expects(testCase.atLeastOnce()).method("getIrq")
                    .withNoArguments().will(new ReturnStub(irq));

                mockIDEIO.expects(testCase.atLeastOnce()).method(
                    "setControlReg").withAnyArguments();

                Integer statusReg = new Integer(13);
                mockIDEIO.expects(testCase.atLeastOnce())
                    .method("getStatusReg").withNoArguments().will(new ReturnStub(statusReg));
            }
        };

        // Class[] argCls = new Class[]{Device.class, boolean.class};
        // Object[] args = new Object[]{parent, Boolean.valueOf(primary)};

        // return (IDEIO) MockUtils.createMockObject(IDEIO.class, initializer,
        // argCls, args);
        return MockUtils.createMockObject(IDEIO.class, initializer);
    }

    private IBMPartitionTableEntry createEntry(int partNum,
                                               final boolean extended, final long startLba, final long nbSectors) {
        MockInitializer initializer = new MockInitializer() {
            public void init(Mock mockEntry) {
                Boolean valid = Boolean.TRUE;
                mockEntry.expects(testCase.atLeastOnce()).method("isValid")
                    .withNoArguments().will(new ReturnStub(valid));

                Boolean bExtended = Boolean.valueOf(extended);
                mockEntry.expects(testCase.atLeastOnce()).method("isExtended")
                    .withNoArguments().will(new ReturnStub(bExtended));

                Long lStartLba = new Long(0);
                mockEntry.expects(testCase.atLeastOnce()).method("getStartLba")
                    .withNoArguments().will(new ReturnStub(lStartLba));

                Long lNbSectors = new Long(nbSectors);
                mockEntry.expects(testCase.atLeastOnce())
                    .method("getNrSectors").withNoArguments().will(new ReturnStub(lNbSectors));
            }
        };

        Class<?>[] argCls = new Class[]{byte[].class, int.class};
        Object[] args = new Object[]{new byte[IDEConstants.SECTOR_SIZE],
            new Integer(partNum)};

        return (IBMPartitionTableEntry) MockUtils.createMockObject(
            IBMPartitionTableEntry.class, initializer, argCls, args);
    }

    public class GetEntryStub implements Stub {
        private Partition[] partitions;

        public GetEntryStub(Partition[] parts) {
            this.partitions = parts;
        }

        public StringBuffer describeTo(StringBuffer buffer) {
            return buffer.append("get partition entry");
        }

        public Object invoke(Invocation invocation) throws Throwable {
            int index = ((Integer) invocation.parameterValues.get(0))
                .intValue();
            Partition part = partitions[index];
            IBMPartitionTableEntry entry = createEntry(index,
                part.isExtended(), part.getStartLba(), part.getNbSectors());
            return entry;
        }
    }

    public IBMPartitionTable createIBMPartitionTable(byte[] bs, Device dev) {
        MockInitializer initializer = new MockInitializer() {
            public void init(Mock mockTable) {
                final BlockDeviceAPIContext context = (BlockDeviceAPIContext) ContextManager
                    .getInstance().getContext();
                final Partition[] parts = context.getPartitions();
                log.debug("with " + parts.length + " partitions");

                Integer nbParts = new Integer(parts.length);
                mockTable.expects(testCase.atLeastOnce()).method("getLength")
                    .withNoArguments().will(new ReturnStub(nbParts));

                mockTable.expects(testCase.atLeastOnce()).method("getEntry")
                    .withAnyArguments().will(new GetEntryStub(parts));
            }
        };

        Class<?>[] argCls = new Class[]{byte[].class, Device.class};
        Object[] args = new Object[]{bs, dev};

        return (IBMPartitionTable) MockUtils.createMockObject(
            IBMPartitionTable.class, initializer, argCls, args);
    }
}
TOP

Related Classes of org.jnode.test.fs.driver.factories.MockIDEDeviceFactory$GetEntryStub

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.