def test_run_1snk(self):
        ''' Creates a cycle with one sink driver.
        '''
        MainDrivers = namedtuple('MainDrivers', ['drv1'])
        MainSource = namedtuple('MainSource', [])
        MainSink = namedtuple('MainSink', ['drv1'])
        test_values = []

        def drv1(sink):
            sink.values.subscribe(lambda i: test_values.append(i))
            return None

        Drv1Sink = namedtuple('Drv1Sink', ['values'])
        Drv1Driver = Component(call=drv1, input=Drv1Sink)

        def main(sources):
            val = Observable.from_([1, 2, 3])
            return MainSink(drv1=Drv1Sink(values=val))

        drivers = MainDrivers(drv1=Drv1Driver)
        dispose = run(Component(call=main, input=MainSource), drivers)
        dispose()

        self.assertEqual(3, len(test_values))
        self.assertEqual(1, test_values[0])
        self.assertEqual(2, test_values[1])
        self.assertEqual(3, test_values[2])
    def test_run_1src_1snk(self):
        ''' Creates a cycle with one sink driver and one source driver.
        '''
        test_values = []
        Drv1Sink = namedtuple('Drv1Sink', ['values'])

        def drv1(sink):
            sink.values.subscribe(lambda i: test_values.append(i))
            return None

        Drv1Driver = Component(call=drv1, input=Drv1Sink)

        Drv2Source = namedtuple('Drv2Source', ['counter'])

        def drv2():
            counter_stream = Observable.from_([1, 2, 3])
            return Drv2Source(counter=counter_stream)

        Drv2Driver = Component(call=drv2, input=None)

        MainDrivers = namedtuple('MainDrivers', ['drv1', 'drv2'])
        MainSource = namedtuple('MainSource', ['drv2'])
        MainSink = namedtuple('MainSink', ['drv1'])

        def main(sources):
            val = sources.drv2.counter
            return MainSink(drv1=Drv1Sink(values=val))

        drivers = MainDrivers(drv1=Drv1Driver, drv2=Drv2Driver)
        dispose = run(Component(call=main, input=MainSource), drivers)
        dispose()

        self.assertEqual(3, len(test_values))
        self.assertEqual(1, test_values[0])
        self.assertEqual(2, test_values[1])
        self.assertEqual(3, test_values[2])
Esempio n. 3
0
from collections import namedtuple
import rx.operators as ops
from cyclotron import Component
from cyclotron.rx import run

import cyclotron_std.sys.stdout as stdout
import cyclotron_std.sys.argv as argv

Drivers = namedtuple('Drivers', ['stdout', 'argv'])
Source = namedtuple('Source', ['argv'])
Sink = namedtuple('Sink', ['stdout'])


def echo(sources):
    console = sources.argv.argv.pipe(ops.skip(1), ops.map(lambda i: i + '\n'))

    return Sink(stdout=stdout.Sink(data=console))


if __name__ == '__main__':
    dispose = run(entry_point=Component(call=echo, input=Source),
                  drivers=Drivers(
                      stdout=stdout.make_driver(),
                      argv=argv.make_driver(),
                  ))
    dispose()