The IBDL IBDLObject class is a superclass of all
validation classes
(see below) that provides the implementation of the
IBDL operators
``#
'' and param which are common to the translation
of any IBDL specification.
The implementation of these methods is fairly straightforward
and follows the informal semantics described in section 3.
It includes the record method that records a message in the history only if the message terminated normally.
class IBDLAccount extends IBDLObject implements Account { /* The object under test. */ final Account accountObj; /* The constructor of this class. */ IBDLAccount(int acNum, int initialBalance) { MessageSend ms = new AccountMsg(acNum, initialBalance); record(ms); ms.Validate(); } /* Class that represents a call to the ClearCheck method. */ class ClearCheckMsg extends MessageSend { ClearCheckMsg(int amount) throws InvalidAmount, NotEnoughFunds { super("ClearCheck", 1); AddParam(0, amount); prev = lastMessage; lastMessage = this; try { /* Call the method. */ StoreReturnValue( accountObj.ClearCheck(amount)); } catch (InvalidAmount t1) { StoreException(t1); } catch (NotEnoughFunds t2) { StoreException(t2); } catch (Throwable t) { StoreException(t); } } public boolean IsNormal() { if ((exception instanceof InvalidAmount || exception instanceof NotEnoughFunds)) { if (exception instanceof InvalidAmount) { if (((Integer)GetParam(0)). intValue() < 0) return false; throw new Error("Test failed."+ " The definition of abnormal" + " is not satisfied"); } return false; } return true; }
public boolean Enabled(String name, Object[] params) { if (IsNormal()) { switch(messageNames.indexOf(name)) { case 2 : // ClearCheck int i = ((Integer)params[0]). intValue(); Object[] newParams = { new Integer(i + ((Integer)GetParam(0)). intValue()), }; if (!prev.Enabled(name, newParams)) return false; break; } } return prev.Enabled(name, params); } } /* Method to call the ClearCheck method on the Account object. */ public boolean ClearCheck(int amount) throws InvalidAmount, NotEnoughFunds { MessageSend ms = new ClearCheckMsg(amount); record(ms); ms.Validate(); if (ms.exceptionThrown) { throw ms.exception; } return ((Boolean)ms.retVal). booleanValue(); } /* Code for Deposit and the constructor will be similar */ }