diff options
| author | Maximilian Hils <git@maximilianhils.com> | 2014-03-08 15:47:27 +0100 | 
|---|---|---|
| committer | Maximilian Hils <git@maximilianhils.com> | 2014-03-08 15:47:27 +0100 | 
| commit | 2b01c4eee7a52dfb5fd30bb9b248cec87d563db9 (patch) | |
| tree | 72604de5152bdf15147a78e03a669a207baeac95 /test/test_console_search.py | |
| parent | 3032672f10c727623ee085d04d623901dac856df (diff) | |
| parent | 221973aff6553ffb1d40859c5d35b88d959f9718 (diff) | |
| download | mitmproxy-2b01c4eee7a52dfb5fd30bb9b248cec87d563db9.tar.gz mitmproxy-2b01c4eee7a52dfb5fd30bb9b248cec87d563db9.tar.bz2 mitmproxy-2b01c4eee7a52dfb5fd30bb9b248cec87d563db9.zip  | |
Merge branch 'master' of github.com:mitmproxy/mitmproxy
Diffstat (limited to 'test/test_console_search.py')
| -rw-r--r-- | test/test_console_search.py | 176 | 
1 files changed, 176 insertions, 0 deletions
diff --git a/test/test_console_search.py b/test/test_console_search.py new file mode 100644 index 00000000..f4e9ff9b --- /dev/null +++ b/test/test_console_search.py @@ -0,0 +1,176 @@ + +import sys +import libmproxy.console.contentview as cv +from libmproxy import utils, flow, encoding +import tutils + +def test_search_highlights(): +    # Default text in requests is content. We will search for nt once, and +    # expect the first bit to be highlighted. We will do it again and expect the +    # second to be. +    f = tutils.tflowview() + +    f.search("nt") +    text_object = tutils.get_body_line(f.last_displayed_body, 0) +    assert text_object.get_text() == ('content', [(None, 2), (f.highlight_color, 2)]) + +    f.search("nt") +    text_object = tutils.get_body_line(f.last_displayed_body, 1) +    assert text_object.get_text() == ('content', [(None, 5), (f.highlight_color, 2)]) + +def test_search_returns_useful_messages(): +    f = tutils.tflowview() + +    # original string is content. this string should not be in there. +    test_string = "oranges and other fruit." +    response = f.search(test_string) +    assert response == "no matches for '%s'" % test_string + +def test_search_highlights_clears_prev(): +    f = tutils.tflowview(request_contents="this is string\nstring is string") + +    f.search("string") +    text_object = tutils.get_body_line(f.last_displayed_body, 0) +    assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) + +    # search again, it should not be highlighted again. +    f.search("string") +    text_object = tutils.get_body_line(f.last_displayed_body, 0) +    assert text_object.get_text() != ('this is string', [(None, 8), (f.highlight_color, 6)]) + +def test_search_highlights_multi_line(flow=None): +    f = flow if flow else tutils.tflowview(request_contents="this is string\nstring is string") + +    # should highlight the first line. +    f.search("string") +    text_object = tutils.get_body_line(f.last_displayed_body, 0) +    assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) + +    # should highlight second line, first appearance of string. +    f.search("string") +    text_object = tutils.get_body_line(f.last_displayed_body, 1) +    assert text_object.get_text() == ('string is string', [(None, 0), (f.highlight_color, 6)]) + +    # should highlight third line, second appearance of string. +    f.search("string") +    text_object = tutils.get_body_line(f.last_displayed_body, 1) +    assert text_object.get_text() == ('string is string', [(None, 10), (f.highlight_color, 6)]) + +def test_search_loops(): +    f = tutils.tflowview(request_contents="this is string\nstring is string") + +    # get to the end. +    f.search("string") +    f.search("string") +    f.search("string") + +    # should highlight the first line. +    message = f.search("string") +    text_object = tutils.get_body_line(f.last_displayed_body, 0) +    assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) +    assert message == "search hit BOTTOM, continuing at TOP" + +def test_search_focuses(): +    f = tutils.tflowview(request_contents="this is string\nstring is string") + +    # should highlight the first line. +    f.search("string") + +    # should be focusing on the 2nd text line. +    f.search("string") +    text_object = tutils.get_body_line(f.last_displayed_body, 1) +    assert f.last_displayed_body.focus == text_object + +def test_search_does_not_crash_on_bad(): +    """ +        this used to crash, kept for reference. +    """ + +    f = tutils.tflowview(request_contents="this is string\nstring is string\n"+("A" * cv.VIEW_CUTOFF)+"AFTERCUTOFF") +    f.search("AFTERCUTOFF") + +    # pretend F +    f.state.add_flow_setting( +        f.flow, +        (f.state.view_flow_mode, "fullcontents"), +        True +    ) +    f.master.refresh_flow(f.flow) + +    # text changed, now this string will exist. can happen when user presses F +    # for full text view +    f.search("AFTERCUTOFF") + +def test_search_backwards(): +    f = tutils.tflowview(request_contents="content, content") + +    first_match = ('content, content', [(None, 2), (f.highlight_color, 2)]) + +    f.search("nt") +    text_object = tutils.get_body_line(f.last_displayed_body, 0) +    assert text_object.get_text() == first_match + +    f.search("nt") +    text_object = tutils.get_body_line(f.last_displayed_body, 1) +    assert text_object.get_text() == ('content, content', [(None, 5), (f.highlight_color, 2)]) + +    f.search_again(backwards=True) +    text_object = tutils.get_body_line(f.last_displayed_body, 0) +    assert text_object.get_text() == first_match + +def test_search_back_multiline(): +    f = tutils.tflowview(request_contents="this is string\nstring is string") + +    # shared assertions. highlight and pointers should now be on the third +    # 'string' appearance +    test_search_highlights_multi_line(f) + +    # should highlight second line, first appearance of string. +    f.search_again(backwards=True) +    text_object = tutils.get_body_line(f.last_displayed_body, 1) +    assert text_object.get_text() == ('string is string', [(None, 0), (f.highlight_color, 6)]) + +    # should highlight the first line again. +    f.search_again(backwards=True) +    text_object = tutils.get_body_line(f.last_displayed_body, 0) +    assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) + +def test_search_back_multi_multi_line(): +    """ +        same as above for some bugs the above won't catch. +    """ +    f = tutils.tflowview(request_contents="this is string\nthis is string\nthis is string") + +    f.search("string") +    f.search_again() +    f.search_again() + +    # should be on second line +    f.search_again(backwards=True) +    text_object = tutils.get_body_line(f.last_displayed_body, 1) +    assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) + +    # first line now +    f.search_again(backwards=True) +    text_object = tutils.get_body_line(f.last_displayed_body, 0) +    assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) + +def test_search_backwards_wraps(): +    """ +        when searching past line 0, it should loop. +    """ +    f = tutils.tflowview(request_contents="this is string\nthis is string\nthis is string") + +    # should be on second line +    f.search("string") +    f.search_again() +    text_object = tutils.get_body_line(f.last_displayed_body, 1) +    assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) + +    # should be on third now. +    f.search_again(backwards=True) +    message = f.search_again(backwards=True) +    text_object = tutils.get_body_line(f.last_displayed_body, 2) +    assert text_object.get_text() == ('this is string', [(None, 8), (f.highlight_color, 6)]) +    assert message == "search hit TOP, continuing at BOTTOM" +  | 
