001    package org.cocome.tradingsystem.systests.interfaces;
002    
003    /**
004     * This is the central interface for the glue code as it is the entry point for
005     * all tests. The test driver isolates the system tests from the actual
006     * implementation. This way the tests themselves can be kept simple and for
007     * testing a different implementation only the test driver needs to be adjusted.
008     * <p>
009     * The test driver is both used to initialize the entire system as well as a
010     * factory for stores and cash desks.
011     * 
012     * @author Benjamin Hummel
013     * @author Christian Pfaller
014     * @author $Author: hummel $
015     * @version $Rev: 47 $
016     * @levd.rating GREEN Rev: 47
017     */
018    public interface ITestDriver {
019    
020            /**
021             * This is the first method called before any other method of the test
022             * driver is called. Here the system is started.
023             * 
024             * @return an enterprise object.
025             */
026            IEnterprise initializeSystem() throws Exception;
027    
028            /**
029             * Releases all ressources and stops the system. No methods on this driver
030             * or any other of the objects created will be called afterwards. You are
031             * guaranteed that this will be called after testing is completed.
032             */
033            void shutdownSystem();
034    
035            /** Returns a newly created store. */
036            IStorePC createStore() throws Exception;
037    
038            /**
039             * Returns a newly created cash desk system. If required the test driver has
040             * to create the interfaces for the connected hardware as well.
041             * 
042             * @param store
043             *            the store this cash desk is connected to.
044             */
045            ICashDesk createCashDesk(IStorePC store) throws Exception;
046    
047            /** Returns the globally unique bank used for all credit card transactions. */
048            IBank getBank() throws Exception;
049    }