japod@6: /* japod@6: * To change this template, choose Tools | Templates japod@6: * and open the template in the editor. japod@6: */ japod@6: japod@6: package org.apidesign.apifest08.test; japod@6: japod@6: import java.math.BigDecimal; japod@6: import java.util.Currency; japod@6: import junit.framework.Assert; japod@6: import org.apidesign.apifest08.currency.Convertor; japod@6: import org.apidesign.apifest08.currency.DelegatingConvertor; japod@6: import org.apidesign.apifest08.currency.MonetaryAmount; japod@6: japod@6: /** japod@6: * A delegating convertor that checks preconditions and postconditions. japod@6: * Useful for testing. japod@6: * @author jdvorak japod@6: */ japod@6: public class ContractImposingDelegatingConvertor extends DelegatingConvertor { japod@6: japod@6: public ContractImposingDelegatingConvertor( final Convertor underlyingConvertor ) { japod@6: super( underlyingConvertor ); japod@6: } japod@6: japod@6: @Override japod@6: public ConversionResult convert( final ConversionRequest req ) { japod@6: Assert.assertNotNull( "The request", req ); japod@6: final ConversionResult result = super.convert( req ); japod@6: Assert.assertNotNull( "Result of the convert() call", result ); japod@6: final MonetaryAmount netAmount = result.getNetAmount(); japod@6: if ( netAmount != null ) { japod@6: Assert.assertEquals( "Converted to a different currency than specified in the request", req.getTgtCurrency(), netAmount.getCurrency() ); japod@6: } japod@6: return result; japod@6: } japod@6: japod@6: /** japod@6: * Do some tests on our own. japod@6: * @return this japod@6: */ japod@6: public Convertor test() { japod@6: try { japod@6: final Currency aCurrency = Currency.getInstance( "EUR" ); japod@6: new ConversionRequest( new MonetaryAmount( BigDecimal.ONE, aCurrency ), aCurrency ); japod@6: Assert.fail( "Should have thrown an IllegalArgumentException" ); japod@6: } catch ( final IllegalArgumentException e ) { japod@6: Assert.assertEquals( "Cannot request conversion from EUR to EUR", e.getMessage() ); japod@6: } japod@6: return this; japod@6: } japod@6: japod@6: }