예제 #1
0
    def test_simple(self, mymax):
        mapped = gentools.imap_yield(str, mymax(4))

        assert next(mapped) == '4'
        assert mapped.send(7) == '7'
        assert mapped.send(3) == '7'
        assert gentools.sendreturn(mapped, 103) == 309
예제 #2
0
    def test_simple(self, mymax):
        mapped = gentools.imap_send(int, mymax(4))

        assert next(mapped) == 4
        assert mapped.send('7') == 7
        assert mapped.send(7.3) == 7
        assert gentools.sendreturn(mapped, '104') == 312
예제 #3
0
    def test_simple(self, mymax):
        mapped = gentools.imap_return(str, mymax(4))

        assert next(mapped) == 4
        assert mapped.send(7) == 7
        assert mapped.send(4) == 7
        assert gentools.sendreturn(mapped, 104) == '312'
예제 #4
0
    def test_any_iterable(self, MyMax):
        mapped = gentools.imap_return(str, MyMax(4))

        assert next(mapped) == 4
        assert mapped.send(7) == 7
        assert mapped.send(4) == 7
        assert gentools.sendreturn(mapped, 104) == '312'
예제 #5
0
    def test_any_iterable(self, MyMax):
        mapped = gentools.imap_send(int, MyMax(4))

        assert next(mapped) == 4
        assert mapped.send('7') == 7
        assert mapped.send(7.3) == 7
        assert gentools.sendreturn(mapped, '104') == 312
예제 #6
0
    def test_oneway(self, oneway_delegator):

        gen = oneway_delegator(iter([1, 2, 3]))

        assert next(gen) == 1
        assert next(gen) == 2
        assert next(gen) == 3
        assert gentools.sendreturn(gen, None) is None
예제 #7
0
def test_map_send(mymax):
    decorated = gentools.map_send(lambda x: x * 2, int)(mymax)

    gen = decorated(5)
    assert next(gen) == 5
    assert gen.send(5.3) == 10
    assert gen.send(9) == 18
    assert gentools.sendreturn(gen, '103') == 618
예제 #8
0
    def test_simple(self, delegator, mymax):

        gen = delegator(mymax(4))

        assert next(gen) == 4
        assert gen.send(7) == 7
        assert gen.send(3) == 7
        assert gentools.sendreturn(gen, 103) == 309
예제 #9
0
    def test_throw_continues(self, delegator, mymax):

        gen = delegator(mymax(4))

        assert next(gen) == 4
        assert gen.send(7) == 7
        assert gen.send(3) == 7
        assert gen.throw(ValueError) == 'caught ValueError'
        assert gentools.sendreturn(gen, 104) == 312
예제 #10
0
def test_map_yield(mymax):
    decorated = gentools.map_yield(str, lambda x: x * 2)(mymax)

    gen = decorated(5)
    assert next(gen) == '10'
    assert gen.send(2) == '10'
    assert gen.send(9) == '18'
    assert gen.send(12) == '24'
    assert gentools.sendreturn(gen, 103) == 309
예제 #11
0
def test_oneyield():
    @gentools.oneyield
    def myfunc(a, b, c):
        return a + b + c

    gen = myfunc(1, 2, 3)
    assert unwrap(myfunc).__name__ == 'myfunc'
    assert next(gen) == 6
    assert gentools.sendreturn(gen, 9) == 9
예제 #12
0
    def test_any_iterable(self, MyMax, try_until_positive):
        relayed = gentools.irelay(MyMax(4), try_until_positive)

        assert next(relayed) == 4
        assert relayed.send(7) == 7
        assert relayed.send(6) == 7
        assert relayed.send(-1) == 'NOT POSITIVE!'
        assert relayed.send(-4) == 'NOT POSITIVE!'
        assert relayed.send(0) == 7
        assert gentools.sendreturn(relayed, 102) == 306
예제 #13
0
def test_relay(mymax, try_until_even, try_until_positive):
    decorated = gentools.relay(try_until_even, try_until_positive)(mymax)

    gen = decorated(4)
    assert next(gen) == 4
    assert gen.send(8) == 8
    assert gen.send(9) == 'NOT EVEN!'
    assert gen.send(2) == 8
    assert gen.send(-1) == 'NOT POSITIVE!'
    assert gentools.sendreturn(gen, 102) == 306
예제 #14
0
    def test_accumulate(self, try_until_even, try_until_positive, mymax):

        gen = reduce(gentools.irelay, [try_until_even, try_until_positive],
                     mymax(4))

        assert next(gen) == 4
        assert gen.send(-4) == 'NOT POSITIVE!'
        assert gen.send(3) == 'NOT EVEN!'
        assert gen.send(90) == 90
        assert gentools.sendreturn(gen, 110) == 330
예제 #15
0
def test_combine_mappers(mymax, try_until_even):

    gen = gentools.imap_return(
        'result: {}'.format,
        gentools.imap_send(
            int,
            gentools.imap_yield(str, gentools.irelay(mymax(4),
                                                     try_until_even))))

    assert next(gen) == '4'
    assert gen.send(3) == 'NOT EVEN!'
    assert gen.send('5') == 'NOT EVEN!'
    assert gen.send(8.4) == '8'
    assert gentools.sendreturn(gen, 104) == 'result: 312'
예제 #16
0
async def test_channel_create(exec):
    create = slack.channels.create('test channel')

    query = iter(create)
    req = next(query)
    assert req.method == 'POST'
    assert req.url.endswith('channels.create')
    assert req.headers['Content-Type'] == 'application/json'
    assert json.loads(req.content) == {
        'name': 'test channel'
    }
    channel = sendreturn(query, snug.Response(200, CREATE_CHANNEL_RESPONSE))
    assert isinstance(channel, slack.Channel)
    assert channel.id == 'C0DEL09A5'
예제 #17
0
def test_combining_decorators(mymax, try_until_even):
    decorators = compose(
        gentools.map_return('result: {}'.format),
        gentools.map_send(int),
        gentools.map_yield(str),
        gentools.relay(try_until_even),
    )
    decorated = decorators(mymax)
    gen = decorated(4)
    assert next(gen) == '4'
    assert gen.send('6') == '6'
    assert gen.send('5') == 'NOT EVEN!'
    assert gentools.sendreturn(gen, '104') == 'result: 312'

    assert unwrap(decorated) is unwrap(mymax)
예제 #18
0
async def test_post_chat_message(exec):
    post = slack.chat.post_message('#python', 'test message')

    query = iter(post)
    req = next(query)
    assert req.method == 'POST'
    assert req.url.endswith('chat.postMessage')
    assert req.headers['Content-Type'] == 'application/json'
    assert json.loads(req.content) == {
        'channel': '#python',
        'text': 'test message'
    }

    msg = sendreturn(query, snug.Response(200, POST_MESSAGE_RESPONSE))
    assert isinstance(msg, slack.Message)
    assert msg.text == 'Here\'s a message for you'
예제 #19
0
async def test_channel_list(exec):
    lookup = slack.channels.list_(exclude_archived=True)

    if live:
        result = await exec(lookup)
        assert isinstance(result.content[0], slack.Channel)

    query = iter(lookup)

    req = next(query)
    assert req.url.endswith('channels.list')
    assert req.params['exclude_archived'] == 'true'

    outcome = sendreturn(query, snug.Response(200, CHANNEL_LIST_RESULT))
    assert isinstance(outcome[0], slack.Channel)
    assert len(outcome[0].members) == 2
    assert outcome.next_query.cursor == "dGVhbTpDMUg5UkVTR0w="
예제 #20
0
async def test_departures(exec):
    departures = ns.departures(station='Amsterdam')

    if live:
        deps = await exec(departures)

        assert len(deps) >= 10
        departure = deps[0]
        assert isinstance(departure, ns.Departure)

    # offline test
    query = iter(departures)
    req = next(query)
    assert req.url.endswith('avt')
    assert req.params == {'station': 'Amsterdam'}
    result = sendreturn(query, snug.Response(200, content=DEPARTURES_SAMPLE))
    assert len(result)
    assert result[1].platform_changed
예제 #21
0
async def test_all_stations(exec):
    all_stations = ns.stations()

    if live:
        stations = await exec(all_stations)
        assert isinstance(stations, list)

        amsterdam_stations = [s for s in stations
                              if s.full_name.startswith('Amsterdam')]
        assert len(amsterdam_stations) == 11

        den_bosch = stations[0]
        assert den_bosch.synonyms == ["Hertogenbosch ('s)", 'Den Bosch']

    # offline test
    query = iter(all_stations)
    assert next(query).url.endswith('stations-v2')
    result = sendreturn(query, snug.Response(200, content=STATIONS_SAMPLE))
    assert len(result) == 4
    assert result[3].full_name == 'Aachen Hbf'
예제 #22
0
async def test_journey_options(exec):
    travel_options = ns.journey_options(origin='Breda',
                                        destination='Amsterdam')
    travel_options_no_hsl = travel_options.replace(hsl='false')

    if live:
        options = await exec(travel_options)
        assert len(options) >= 10
        assert isinstance(options[0], ns.Journey)

    # offline test
    query = iter(travel_options)
    assert next(query).params == {'fromStation': 'Breda',
                                  'toStation': 'Amsterdam'}
    result = sendreturn(query, snug.Response(200, content=JOURNEYS_SAMPLE))
    assert len(result) == 3
    assert result[0].components[1].stops[-1].platform == '8a'

    assert next(iter(travel_options_no_hsl)).params == {
        'fromStation': 'Breda',
        'toStation': 'Amsterdam',
        'hslAllowed': 'false'}
예제 #23
0
 def test_ok(self, mymax):
     gen = mymax(4)
     assert next(gen) == 4
     assert gentools.sendreturn(gen, 105) == 315
예제 #24
0
    def test_empty(self, delegator, emptygen):

        gen = delegator(emptygen())
        assert gentools.sendreturn(gen, None) == 99
예제 #25
0
def test_map_return(mymax):
    decorated = gentools.map_return(lambda s: s.center(5), str)(mymax)
    gen = decorated(5)
    assert next(gen) == 5
    assert gen.send(9) == 9
    assert gentools.sendreturn(gen, 103) == ' 309 '
예제 #26
0
    def test_no_return(self, mymax):

        gen = mymax(4)
        assert next(gen) == 4
        with pytest.raises(RuntimeError, match='did not return'):
            gentools.sendreturn(gen, 1)