001    // Copyright 2007 Waterken Inc. under the terms of the MIT X license
002    // found at http://www.opensource.org/licenses/mit-license.html
003    package org.waterken.bounce;
004    
005    import static org.ref_send.promise.Eventual.near;
006    import static org.ref_send.test.Logic.join;
007    import static org.ref_send.test.Logic.was;
008    
009    import java.io.Serializable;
010    
011    import org.joe_e.array.ByteArray;
012    import org.joe_e.array.ConstArray;
013    import org.ref_send.list.List;
014    import org.ref_send.promise.Do;
015    import org.ref_send.promise.Eventual;
016    import org.ref_send.promise.Failure;
017    import org.ref_send.promise.Promise;
018    
019    /**
020     * An argument passing test.
021     */
022    public final class
023    Pitch {
024        private Pitch() {}
025        
026        /**
027         * Runs a unit test.
028         * @param _ eventual operator
029         * @param x test subject
030         */
031        static public Promise<?>
032        make(final Eventual _, final Wall x) {
033            final Wall x_ = _._(x);
034    
035            class Re extends Do<ConstArray<AllTypes>,Promise<?>>
036                     implements Serializable {
037                static private final long serialVersionUID = 1L;
038    
039                public Promise<?>
040                fulfill(final ConstArray<AllTypes> a) {
041                    return _.when(x_.bounce(a), was(a));
042                }
043            }
044            final Promise<?> a = _.when(x_.getAll(), new Re());
045            final Promise<?> b =
046                _.when(x_.bounce(near(Bounce.make(_).getAll())), new Re());
047    
048            final ByteArray payload =
049                ByteArray.array(new byte[] { 0,1,2,3,4,5,6,7,8,9 });
050            final Promise<?> c = _.when(x_.bounce(payload), was(payload));
051            
052            final ByteArray maxPayload =
053                    ByteArray.array(new byte[Failure.maxEntitySize]);
054            final Promise<?> d = _.when(x_.bounce(maxPayload), was(maxPayload));
055            
056            final Promise<?> e = _.when(x_.sum(1, 2, 3), was(6));
057    
058            return join(_, a, b, c, d, e);
059        }
060        
061        // Command line interface
062    
063        /**
064         * Executes the test.
065         * @param args  ignored
066         * @throws Exception    test failed
067         */
068        static public void
069        main(final String[] args) throws Exception {
070            final List<Promise<?>> work = List.list();
071            final Eventual _ = new Eventual(work.appender());
072            final Promise<?> result = make(_, Bounce.make(_));
073            while (!work.isEmpty()) { work.pop().call(); }
074            result.call();
075        }
076    }