001    // Copyright 2007-2009 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.all;
004    
005    import static org.ref_send.test.Logic.join;
006    
007    import org.ref_send.list.List;
008    import org.ref_send.promise.Eventual;
009    import org.ref_send.promise.Promise;
010    import org.ref_send.promise.Vat;
011    import org.waterken.bang.Bang;
012    import org.waterken.bang.Beat;
013    import org.waterken.bang.Drum;
014    import org.waterken.bounce.Bounce;
015    import org.waterken.bounce.Pitch;
016    import org.waterken.bounce.Wall;
017    import org.waterken.delayed.Forwarder;
018    import org.waterken.delayed.ForwarderMaker;
019    import org.waterken.delayed.Relay;
020    import org.waterken.eq.SoundCheck;
021    import org.waterken.pipelined.Pipelined;
022    import org.waterken.pipelined.PlugNPlay;
023    import org.waterken.pipelined.PlugNPlayMaker;
024    import org.waterken.serial.PopPushN;
025    
026    /**
027     * Runs all tests.
028     */
029    public final class
030    All {
031        private All() { /* no instance interface */ }
032    
033        /**
034         * Constructs an instance.
035         * @param _ eventual operator
036         */
037        static public Promise<?>
038        make(final Eventual _) throws Exception {
039            _.log.comment("testing EQ operations on promises");
040            final Promise<?> a = SoundCheck.make(_);
041            
042            _.log.comment("testing argument passing");
043            final Vat<Wall> wall = _.spawn("wall", Bounce.class);
044            final Promise<?> b = Pitch.make(_, wall.top);
045            
046            _.log.comment("testing message pipelining");
047            final Vat<Drum> drum = _.spawn("drum", Bang.class);
048            final Promise<?> c = Beat.make(_, drum.top);
049            
050            _.log.comment("testing promise resolution");
051            final Promise<?> d = PopPushN.make(_, 4);
052            
053            _.log.comment("testing delayed resolution");
054            final Vat<Forwarder> forwarder = _.spawn("delay", ForwarderMaker.class);
055            final Promise<?> e = Relay.make(_, forwarder.top);
056            
057            _.log.comment("testing promise pipelining");
058            final Vat<PlugNPlay> player = _.spawn("pipeline", PlugNPlayMaker.class);
059            final Promise<?> f = Pipelined.make(player.top);
060    
061            return join(_, a, b, c, d, e, f);
062        }
063        
064        // Command line interface
065    
066        /**
067         * Executes the test.
068         * @param args  ignored
069         * @throws Exception    test failed
070         */
071        static public void
072        main(final String[] args) throws Exception {
073            final List<Promise<?>> work = List.list();
074            final Promise<?> result = make(new Eventual(work.appender()));
075            while (!work.isEmpty()) { work.pop().call(); }
076            result.call();
077        }
078    }