tests: un-xfail some iframe tests (#1525) #1552

Merged
merged 2 commits into from Jun 6, 2016

Conversation

Projects
None yet
3 participants
@lahwaacz
Collaborator

lahwaacz commented Jun 6, 2016

After ee82475, the given reason (clicking an iframe to get a focus) applies to only one test, the others are either stable or flaky for a different reason.

Letting Travis to take a look at it...


This change is Reviewable

tests: un-xfail some iframe tests (#1525)
The given reason (clicking an iframe to get a focus) applies to only one
test, the others are either stable or flaky for a different reason.
@The-Compiler

This comment has been minimized.

Show comment
Hide comment
@The-Compiler

The-Compiler Jun 6, 2016

Collaborator

Oh, good catch, thanks! Travis/AppVeyor will probably take a while, a lot in the queue currently as I also rebuilt some old PRs.

I'll run it locally in a loop for a while to see if something is flaky, looking good so far 😉

Collaborator

The-Compiler commented Jun 6, 2016

Oh, good catch, thanks! Travis/AppVeyor will probably take a while, a lot in the queue currently as I also rebuilt some old PRs.

I'll run it locally in a loop for a while to see if something is flaky, looking good so far 😉

@The-Compiler

This comment has been minimized.

Show comment
Hide comment
@The-Compiler

The-Compiler Jun 6, 2016

Collaborator

Haven't looked into it yet, but seems like this one is still flaky:

���________________________________________________ test_opening_a_link_with_specific_target_frame_in_a_new_tab _________________________________________________

request = <FixtureRequest for <Function 'test_opening_a_link_with_specific_target_frame_in_a_new_tab'>>

>   ???

tests/end2end/features/test_hints_bdd.py:113: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py35/lib/python3.5/site-packages/pytest_bdd/scenario.py:192: in _execute_scenario
    _execute_step_function(request, scenario, step, step_func)
.tox/py35/lib/python3.5/site-packages/pytest_bdd/scenario.py:134: in _execute_step_function
    step_func(**kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f0b3ee90948>, tabs = ['- data/hints/iframe_target.html', '- data/hello.txt (active)']

    @bdd.then(bdd.parsers.parse("the following tabs should be open:\n{tabs}"))
    def check_open_tabs(quteproc, tabs):
        """Check the list of open tabs in the session.

        This is a lightweight alternative for "The session should look like: ...".

        It expects a list of URLs, with an optional "(active)" suffix.
        """
        session = quteproc.get_session()
        active_suffix = ' (active)'
        tabs = tabs.splitlines()
        assert len(session['windows']) == 1
        assert len(session['windows'][0]['tabs']) == len(tabs)

        for i, line in enumerate(tabs):
            line = line.strip()
            assert line.startswith('- ')
            line = line[2:]  # remove "- " prefix
            if line.endswith(active_suffix):
                path = line[:-len(active_suffix)]
                active = True
            else:
                path = line
                active = False

            session_tab = session['windows'][0]['tabs'][i]
>           assert session_tab['history'][-1]['url'] == quteproc.path_to_url(path)
E           IndexError: list index out of range

tests/end2end/features/conftest.py:403: IndexError
--------------------------------------------------------------------- qutebrowser output ---------------------------------------------------------------------
[32 lines suppressed, use -v to show]
----> found it

============================== :hint links tab ==============================


----> Waiting for 'command called: *' in the log
17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed('success') (tab 0)
17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_finished(True) (tab 0)
17:49:50 DEBUG    ipc        ipc:handle_connection:252 Client connected (socket 0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_ready_read:352 Read from socket 0x7f1bdb1415e8: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":hint links tab"]}\n'
17:49:50 DEBUG    ipc        ipc:_handle_data:300 Processing: {"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":hint links tab"]}

17:49:50 DEBUG    init       app:process_pos_args:258 Startup cmd ':hint links tab'
17:49:50 DEBUG    commands   command:run:488 command called: hint ['links', 'tab']
----> found it

============================== :follow-hint a ==============================


----> Waiting for 'command called: *' in the log
17:49:50 DEBUG    commands   command:run:503 Calling qutebrowser.browser.hints.HintManager.start(<qutebrowser.browser.hints.HintManager object at 0x7f1bdb078798>, False, <Group.links: 2>, <Target.tab: 3>, win_id=0)
17:49:50 DEBUG    hints      hints:_init_elements:695 hints: a
17:49:50 DEBUG    message    message:set_text:363 Follow hint in new tab...
17:49:50 DEBUG    statusbar  text:set_text:60 Setting normal text to 'Follow hint in new tab...'.
17:49:50 DEBUG    hints      hints:_connect_frame_signals:657 Connecting frame <PyQt5.QtWebKitWidgets.QWebFrame object at 0x7f1b7866da68>
17:49:50 DEBUG    hints      hints:_connect_frame_signals:657 Connecting frame <PyQt5.QtWebKitWidgets.QWebFrame object at 0x7f1b7866d948>
17:49:50 DEBUG    modes      modeman:enter:240 Entering mode KeyMode.hint (reason: HintManager.start)
17:49:50 DEBUG    ipc        ipc:handle_connection:246 Got new connection but ignoring it because we're still handling another one (0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_error:234 Socket 0x7f1bdb1415e8: error 1: QLocalSocket: Remote closed
17:49:50 DEBUG    ipc        ipc:on_disconnected:273 Client disconnected from socket 0x7f1bdb1415e8.
17:49:50 DEBUG    ipc        ipc:handle_connection:252 Client connected (socket 0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_ready_read:352 Read from socket 0x7f1bdb1415e8: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":follow-hint a"]}\n'
17:49:50 DEBUG    ipc        ipc:_handle_data:300 Processing: {"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":follow-hint a"]}

17:49:50 DEBUG    init       app:process_pos_args:258 Startup cmd ':follow-hint a'
17:49:50 DEBUG    commands   command:run:488 command called: follow-hint ['a']
----> found it

============================== :session-save "/tmp/tmpegt7hify/session.yml" ==============================


----> Waiting for 'command called: *' in the log
17:49:50 DEBUG    commands   command:run:503 Calling qutebrowser.browser.hints.HintManager.follow_hint(<qutebrowser.browser.hints.HintManager object at 0x7f1bdb078798>, 'a')
17:49:50 DEBUG    modes      modeman:leave:284 Leaving mode KeyMode.hint (reason: followed)
17:49:50 DEBUG    hints      hints:_cleanup:177 Disconnecting frame <PyQt5.QtWebKitWidgets.QWebFrame object at 0x7f1b7866da68>
17:49:50 DEBUG    hints      hints:_cleanup:191 Disconnected.
17:49:50 DEBUG    hints      hints:_cleanup:177 Disconnecting frame <PyQt5.QtWebKitWidgets.QWebFrame object at 0x7f1b7866d948>
17:49:50 DEBUG    hints      hints:_cleanup:191 Disconnected.
17:49:50 DEBUG    statusbar  text:maybe_reset_text:75 Resetting: 'Follow hint in new tab...'
17:49:50 DEBUG    statusbar  text:set_text:60 Setting normal text to ''.
17:49:50 DEBUG    hints      hints:_click:453 Clicking on '<a href="/data/hello.txt" target="my-iframe">link</a>' at position PyQt5.QtCore.QPoint(34, 194)
17:49:50 DEBUG    webview    webpage:on_start_hinting:449 Setting force target to ClickTarget.tab
17:49:50 DEBUG    modes      webview:on_mouse_event:410 Hint triggered, focusing <qutebrowser.browser.webview.WebView tab_id=0 url='http://localhost:48422/data/hints/iframe_target.html'>
17:49:50 DEBUG    modes      webview:on_mouse_event:410 Hint triggered, focusing <qutebrowser.browser.webview.WebView tab_id=0 url='http://localhost:48422/data/hints/iframe_target.html'>
17:49:50 DEBUG    modes      webview:on_mouse_event:410 Hint triggered, focusing <qutebrowser.browser.webview.WebView tab_id=0 url='http://localhost:48422/data/hints/iframe_target.html'>
17:49:50 DEBUG    misc       webelem:is_editable:267 Checking if element is editable: <qutebrowser.browser.webelem.WebElementWrapper html='<a href="/data/hello.txt" target="my-iframe">link</a>'>
17:49:50 DEBUG    mouse      webview:_mousepress_insertmode:282 Clicked non-editable element!
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.insert! (leave reason: click)
17:49:50 DEBUG    mouse      webview:_mousepress_opentarget:322 Middle click, setting target: ClickTarget.tab
17:49:50 DEBUG    webview    webpage:acceptNavigationRequest:583 acceptNavigationRequest, url http://localhost:48422/data/hello.txt, type NavigationTypeLinkClicked, hint target ClickTarget.tab, open_target ClickTarget.tab
17:49:50 DEBUG    webview    tabbedbrowser:tabopen:396 Creating new tab with URL PyQt5.QtCore.QUrl('http://localhost:48422/data/hello.txt')
17:49:50 DEBUG    init       networkmanager:__init__:156 Initializing NetworkManager
17:49:50 DEBUG    init       networkmanager:__init__:161 NetworkManager init done
17:49:50 DEBUG    webview    tabbedbrowser:_get_new_tab_idx:452 new-tab-position right -> opening new tab at 1, next left: 0 / right: 2
17:49:50 DEBUG    webview    webview:openurl:346 New title: http://localhost:48422/data/hello.txt
17:49:50 DEBUG    webview    tabbedbrowser:on_title_changed:520 Changing title for idx 1 to 'http://localhost:48422/data/hello.txt'
17:49:50 DEBUG    signals    signalfilter:_filter_signals:92 ignoring: cur_url_text_changed('http://localhost:48422/data/hello.txt') (tab 1)
17:49:50 DEBUG    webview    webview:_set_load_status:182 load status for <qutebrowser.browser.webview.WebView tab_id=2 url=''>: LoadStatus.loading
17:49:50 DEBUG    signals    signalfilter:_filter_signals:92 ignoring: cur_load_status_changed('loading') (tab 1)
17:49:50 DEBUG    signals    signalfilter:_filter_signals:92 ignoring: cur_load_started() (tab 1)
17:49:50 DEBUG    misc       app:on_focus_changed:348 on_focus_changed called with non-QWidget None
17:49:50 DEBUG    misc       app:on_focus_object_changed:768 Focus object changed: <qutebrowser.mainwindow.mainwindow.MainWindow>
17:49:50 DEBUG    misc       app:on_focus_object_changed:768 Focus object changed: <qutebrowser.browser.webview.WebView tab_id=2 url=''>
17:49:50 DEBUG    modes      tabbedbrowser:on_current_changed:580 Current tab changed, focusing <qutebrowser.browser.webview.WebView tab_id=2 url=''>
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.hint! (leave reason: tab changed)
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.insert! (leave reason: tab changed)
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.caret! (leave reason: tab changed)
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.passthrough! (leave reason: tab changed)
17:49:50 DEBUG    misc       app:on_focus_object_changed:768 Focus object changed: <qutebrowser.browser.webview.WebView tab_id=0 url='http://localhost:48422/data/hints/iframe_target.html'>
17:49:50 DEBUG    webview    webpage:on_stop_hinting:455 Finishing hinting.
17:49:50 DEBUG    ipc        ipc:handle_connection:246 Got new connection but ignoring it because we're still handling another one (0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_error:234 Socket 0x7f1bdb1415e8: error 1: QLocalSocket: Remote closed
17:49:50 DEBUG    ipc        ipc:on_disconnected:273 Client disconnected from socket 0x7f1bdb1415e8.
17:49:50 DEBUG    ipc        ipc:handle_connection:252 Client connected (socket 0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_ready_read:352 Read from socket 0x7f1bdb1415e8: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":session-save \\"/tmp/tmpegt7hify/session.yml\\""]}\n'
17:49:50 DEBUG    ipc        ipc:_handle_data:300 Processing: {"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":session-save \"/tmp/tmpegt7hify/session.yml\""]}

17:49:50 DEBUG    init       app:process_pos_args:258 Startup cmd ':session-save "/tmp/tmpegt7hify/session.yml"'
17:49:50 DEBUG    commands   command:run:488 command called: session-save ['/tmp/tmpegt7hify/session.yml']
17:49:50 DEBUG    commands   command:run:503 Calling qutebrowser.misc.sessions.SessionManager.session_save(<qutebrowser.misc.sessions.SessionManager object at 0x7f1bdb13a318>, 0, '/tmp/tmpegt7hify/session.yml', False, False, False)
17:49:50 DEBUG    sessions   sessions:save:241 Saving session /tmp/tmpegt7hify/session.yml to /tmp/tmpegt7hify/session.yml...
----> found it

----> Waiting for 'Saved session /tmp/tmpegt7hify/session.yml.' in the log
17:49:50 INFO     message    message:info:341 Saved session /tmp/tmpegt7hify/session.yml.
17:49:50 DEBUG    statusbar  bar:_disp_text:437 Displaying text: Saved session /tmp/tmpegt7hify/session.yml. (severity=Severity.normal)
17:49:50 DEBUG    statusbar  bar:_disp_text:445 queue: deque([]) / delta: 578
17:49:50 DEBUG    statusbar  bar:_disp_text:451 Displaying immediately
17:49:50 DEBUG    statusbar  text:set_text:60 Setting temp text to 'Saved session /tmp/tmpegt7hify/session.yml.'.
17:49:50 DEBUG    save       savemanager:mark_dirty:73 Marking history as dirty.
----> found it

Current session data:
windows:
- active: true
  geometry: !!binary |
    AdnQywACAAAAAAAyAAAAMgAAA1EAAAKJAAAAMgAAADIAAANRAAACiQAAAAAAAAAAAyA=
  tabs:
  - history:
    - scroll-pos:
        x: 0
        y: 0
      title: about:blank
      url: about:blank
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Simple link
      url: http://localhost:48422/data/hints/html/simple.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: A link to use hints on
      url: http://localhost:48422/data/hints/link_blank.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: http://localhost:48422/data/hello.txt
      url: http://localhost:48422/data/hello.txt
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: A link to use hints on
      url: http://localhost:48422/data/hints/link_blank.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: http://localhost:48422/data/hello.txt
      url: http://localhost:48422/data/hello.txt
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Simple link
      url: http://localhost:48422/data/hints/html/simple.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Rapid hinting with buttons
      url: http://localhost:48422/data/hints/buttons.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Hinting inside an iframe
      url: http://localhost:48422/data/hints/iframe.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Hinting inside an iframe
      url: http://localhost:48422/data/hints/iframe.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Opening links in a specific iframe
      url: http://localhost:48422/data/hints/iframe_target.html
      zoom: 1.0
    - active: true
      scroll-pos:
        x: 0
        y: 0
      title: Opening links in a specific iframe
      url: http://localhost:48422/data/hints/iframe_target.html
      zoom: 1.0
  - active: true
    history: []

17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_url_text_changed('http://localhost:48422/data/hello.txt') (tab 1)
17:49:50 DEBUG    webview    tabbedbrowser:on_title_changed:520 Changing title for idx 1 to 'http://localhost:48422/data/hello.txt'
17:49:50 DEBUG    webview    tabbedbrowser:on_title_changed:512 Ignoring title change to ''.
17:49:50 DEBUG    webview    webview:_set_load_status:182 load status for <qutebrowser.browser.webview.WebView tab_id=2 url='http://localhost:48422/data/hello.txt'>: LoadStatus.success
17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed('success') (tab 1)
17:49:50 DEBUG    webview    tabbedbrowser:on_title_changed:520 Changing title for idx 1 to 'http://localhost:48422/data/hello.txt'
17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_finished(True) (tab 1)
17:49:50 DEBUG    statusbar  text:set_text:60 Setting temp text to ''.
17:49:50 DEBUG    ipc        ipc:on_error:234 Socket 0x7f1bdb1415e8: error 1: QLocalSocket: Remote closed
17:49:50 DEBUG    ipc        ipc:on_disconnected:273 Client disconnected from socket 0x7f1bdb1415e8.
17:49:50 DEBUG    ipc        ipc:handle_connection:250 No new connection to handle.
----------------------------------------------------------------------- httpbin output -----------------------------------------------------------------------

--------------------------------------------------------------------- Captured log call ----------------------------------------------------------------------
ipc.py                     462 DEBUG    Connecting to /run/user/1000/qutebrowser/ipc-eb523e075705ebf1d6e17feafd5260df
ipc.py                     467 INFO     Opening in existing instance
ipc.py                     479 DEBUG    Writing: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":open http://localhost:48422/data/hints/iframe_target.html"]}\n'
ipc.py                     462 DEBUG    Connecting to /run/user/1000/qutebrowser/ipc-eb523e075705ebf1d6e17feafd5260df
ipc.py                     467 INFO     Opening in existing instance
ipc.py                     479 DEBUG    Writing: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":hint links tab"]}\n'
ipc.py                     462 DEBUG    Connecting to /run/user/1000/qutebrowser/ipc-eb523e075705ebf1d6e17feafd5260df
ipc.py                     467 INFO     Opening in existing instance
ipc.py                     479 DEBUG    Writing: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":follow-hint a"]}\n'
ipc.py                     462 DEBUG    Connecting to /run/user/1000/qutebrowser/ipc-eb523e075705ebf1d6e17feafd5260df
ipc.py                     467 INFO     Opening in existing instance
ipc.py                     479 DEBUG    Writing: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":session-save \\"/tmp/tmpegt7hify/session.yml\\""]}\n'

================================================================== short test summary info ===================================================================
FAIL tests/end2end/features/test_hints_bdd.py::test_opening_a_link_with_specific_target_frame_in_a_new_tab
Collaborator

The-Compiler commented Jun 6, 2016

Haven't looked into it yet, but seems like this one is still flaky:

���________________________________________________ test_opening_a_link_with_specific_target_frame_in_a_new_tab _________________________________________________

request = <FixtureRequest for <Function 'test_opening_a_link_with_specific_target_frame_in_a_new_tab'>>

>   ???

tests/end2end/features/test_hints_bdd.py:113: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.tox/py35/lib/python3.5/site-packages/pytest_bdd/scenario.py:192: in _execute_scenario
    _execute_step_function(request, scenario, step, step_func)
.tox/py35/lib/python3.5/site-packages/pytest_bdd/scenario.py:134: in _execute_step_function
    step_func(**kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

quteproc = <end2end.fixtures.quteprocess.QuteProc object at 0x7f0b3ee90948>, tabs = ['- data/hints/iframe_target.html', '- data/hello.txt (active)']

    @bdd.then(bdd.parsers.parse("the following tabs should be open:\n{tabs}"))
    def check_open_tabs(quteproc, tabs):
        """Check the list of open tabs in the session.

        This is a lightweight alternative for "The session should look like: ...".

        It expects a list of URLs, with an optional "(active)" suffix.
        """
        session = quteproc.get_session()
        active_suffix = ' (active)'
        tabs = tabs.splitlines()
        assert len(session['windows']) == 1
        assert len(session['windows'][0]['tabs']) == len(tabs)

        for i, line in enumerate(tabs):
            line = line.strip()
            assert line.startswith('- ')
            line = line[2:]  # remove "- " prefix
            if line.endswith(active_suffix):
                path = line[:-len(active_suffix)]
                active = True
            else:
                path = line
                active = False

            session_tab = session['windows'][0]['tabs'][i]
>           assert session_tab['history'][-1]['url'] == quteproc.path_to_url(path)
E           IndexError: list index out of range

tests/end2end/features/conftest.py:403: IndexError
--------------------------------------------------------------------- qutebrowser output ---------------------------------------------------------------------
[32 lines suppressed, use -v to show]
----> found it

============================== :hint links tab ==============================


----> Waiting for 'command called: *' in the log
17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed('success') (tab 0)
17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_finished(True) (tab 0)
17:49:50 DEBUG    ipc        ipc:handle_connection:252 Client connected (socket 0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_ready_read:352 Read from socket 0x7f1bdb1415e8: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":hint links tab"]}\n'
17:49:50 DEBUG    ipc        ipc:_handle_data:300 Processing: {"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":hint links tab"]}

17:49:50 DEBUG    init       app:process_pos_args:258 Startup cmd ':hint links tab'
17:49:50 DEBUG    commands   command:run:488 command called: hint ['links', 'tab']
----> found it

============================== :follow-hint a ==============================


----> Waiting for 'command called: *' in the log
17:49:50 DEBUG    commands   command:run:503 Calling qutebrowser.browser.hints.HintManager.start(<qutebrowser.browser.hints.HintManager object at 0x7f1bdb078798>, False, <Group.links: 2>, <Target.tab: 3>, win_id=0)
17:49:50 DEBUG    hints      hints:_init_elements:695 hints: a
17:49:50 DEBUG    message    message:set_text:363 Follow hint in new tab...
17:49:50 DEBUG    statusbar  text:set_text:60 Setting normal text to 'Follow hint in new tab...'.
17:49:50 DEBUG    hints      hints:_connect_frame_signals:657 Connecting frame <PyQt5.QtWebKitWidgets.QWebFrame object at 0x7f1b7866da68>
17:49:50 DEBUG    hints      hints:_connect_frame_signals:657 Connecting frame <PyQt5.QtWebKitWidgets.QWebFrame object at 0x7f1b7866d948>
17:49:50 DEBUG    modes      modeman:enter:240 Entering mode KeyMode.hint (reason: HintManager.start)
17:49:50 DEBUG    ipc        ipc:handle_connection:246 Got new connection but ignoring it because we're still handling another one (0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_error:234 Socket 0x7f1bdb1415e8: error 1: QLocalSocket: Remote closed
17:49:50 DEBUG    ipc        ipc:on_disconnected:273 Client disconnected from socket 0x7f1bdb1415e8.
17:49:50 DEBUG    ipc        ipc:handle_connection:252 Client connected (socket 0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_ready_read:352 Read from socket 0x7f1bdb1415e8: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":follow-hint a"]}\n'
17:49:50 DEBUG    ipc        ipc:_handle_data:300 Processing: {"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":follow-hint a"]}

17:49:50 DEBUG    init       app:process_pos_args:258 Startup cmd ':follow-hint a'
17:49:50 DEBUG    commands   command:run:488 command called: follow-hint ['a']
----> found it

============================== :session-save "/tmp/tmpegt7hify/session.yml" ==============================


----> Waiting for 'command called: *' in the log
17:49:50 DEBUG    commands   command:run:503 Calling qutebrowser.browser.hints.HintManager.follow_hint(<qutebrowser.browser.hints.HintManager object at 0x7f1bdb078798>, 'a')
17:49:50 DEBUG    modes      modeman:leave:284 Leaving mode KeyMode.hint (reason: followed)
17:49:50 DEBUG    hints      hints:_cleanup:177 Disconnecting frame <PyQt5.QtWebKitWidgets.QWebFrame object at 0x7f1b7866da68>
17:49:50 DEBUG    hints      hints:_cleanup:191 Disconnected.
17:49:50 DEBUG    hints      hints:_cleanup:177 Disconnecting frame <PyQt5.QtWebKitWidgets.QWebFrame object at 0x7f1b7866d948>
17:49:50 DEBUG    hints      hints:_cleanup:191 Disconnected.
17:49:50 DEBUG    statusbar  text:maybe_reset_text:75 Resetting: 'Follow hint in new tab...'
17:49:50 DEBUG    statusbar  text:set_text:60 Setting normal text to ''.
17:49:50 DEBUG    hints      hints:_click:453 Clicking on '<a href="/data/hello.txt" target="my-iframe">link</a>' at position PyQt5.QtCore.QPoint(34, 194)
17:49:50 DEBUG    webview    webpage:on_start_hinting:449 Setting force target to ClickTarget.tab
17:49:50 DEBUG    modes      webview:on_mouse_event:410 Hint triggered, focusing <qutebrowser.browser.webview.WebView tab_id=0 url='http://localhost:48422/data/hints/iframe_target.html'>
17:49:50 DEBUG    modes      webview:on_mouse_event:410 Hint triggered, focusing <qutebrowser.browser.webview.WebView tab_id=0 url='http://localhost:48422/data/hints/iframe_target.html'>
17:49:50 DEBUG    modes      webview:on_mouse_event:410 Hint triggered, focusing <qutebrowser.browser.webview.WebView tab_id=0 url='http://localhost:48422/data/hints/iframe_target.html'>
17:49:50 DEBUG    misc       webelem:is_editable:267 Checking if element is editable: <qutebrowser.browser.webelem.WebElementWrapper html='<a href="/data/hello.txt" target="my-iframe">link</a>'>
17:49:50 DEBUG    mouse      webview:_mousepress_insertmode:282 Clicked non-editable element!
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.insert! (leave reason: click)
17:49:50 DEBUG    mouse      webview:_mousepress_opentarget:322 Middle click, setting target: ClickTarget.tab
17:49:50 DEBUG    webview    webpage:acceptNavigationRequest:583 acceptNavigationRequest, url http://localhost:48422/data/hello.txt, type NavigationTypeLinkClicked, hint target ClickTarget.tab, open_target ClickTarget.tab
17:49:50 DEBUG    webview    tabbedbrowser:tabopen:396 Creating new tab with URL PyQt5.QtCore.QUrl('http://localhost:48422/data/hello.txt')
17:49:50 DEBUG    init       networkmanager:__init__:156 Initializing NetworkManager
17:49:50 DEBUG    init       networkmanager:__init__:161 NetworkManager init done
17:49:50 DEBUG    webview    tabbedbrowser:_get_new_tab_idx:452 new-tab-position right -> opening new tab at 1, next left: 0 / right: 2
17:49:50 DEBUG    webview    webview:openurl:346 New title: http://localhost:48422/data/hello.txt
17:49:50 DEBUG    webview    tabbedbrowser:on_title_changed:520 Changing title for idx 1 to 'http://localhost:48422/data/hello.txt'
17:49:50 DEBUG    signals    signalfilter:_filter_signals:92 ignoring: cur_url_text_changed('http://localhost:48422/data/hello.txt') (tab 1)
17:49:50 DEBUG    webview    webview:_set_load_status:182 load status for <qutebrowser.browser.webview.WebView tab_id=2 url=''>: LoadStatus.loading
17:49:50 DEBUG    signals    signalfilter:_filter_signals:92 ignoring: cur_load_status_changed('loading') (tab 1)
17:49:50 DEBUG    signals    signalfilter:_filter_signals:92 ignoring: cur_load_started() (tab 1)
17:49:50 DEBUG    misc       app:on_focus_changed:348 on_focus_changed called with non-QWidget None
17:49:50 DEBUG    misc       app:on_focus_object_changed:768 Focus object changed: <qutebrowser.mainwindow.mainwindow.MainWindow>
17:49:50 DEBUG    misc       app:on_focus_object_changed:768 Focus object changed: <qutebrowser.browser.webview.WebView tab_id=2 url=''>
17:49:50 DEBUG    modes      tabbedbrowser:on_current_changed:580 Current tab changed, focusing <qutebrowser.browser.webview.WebView tab_id=2 url=''>
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.hint! (leave reason: tab changed)
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.insert! (leave reason: tab changed)
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.caret! (leave reason: tab changed)
17:49:50 DEBUG    modes      modeman:maybe_leave:114 Not in mode KeyMode.passthrough! (leave reason: tab changed)
17:49:50 DEBUG    misc       app:on_focus_object_changed:768 Focus object changed: <qutebrowser.browser.webview.WebView tab_id=0 url='http://localhost:48422/data/hints/iframe_target.html'>
17:49:50 DEBUG    webview    webpage:on_stop_hinting:455 Finishing hinting.
17:49:50 DEBUG    ipc        ipc:handle_connection:246 Got new connection but ignoring it because we're still handling another one (0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_error:234 Socket 0x7f1bdb1415e8: error 1: QLocalSocket: Remote closed
17:49:50 DEBUG    ipc        ipc:on_disconnected:273 Client disconnected from socket 0x7f1bdb1415e8.
17:49:50 DEBUG    ipc        ipc:handle_connection:252 Client connected (socket 0x7f1bdb1415e8).
17:49:50 DEBUG    ipc        ipc:on_ready_read:352 Read from socket 0x7f1bdb1415e8: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":session-save \\"/tmp/tmpegt7hify/session.yml\\""]}\n'
17:49:50 DEBUG    ipc        ipc:_handle_data:300 Processing: {"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":session-save \"/tmp/tmpegt7hify/session.yml\""]}

17:49:50 DEBUG    init       app:process_pos_args:258 Startup cmd ':session-save "/tmp/tmpegt7hify/session.yml"'
17:49:50 DEBUG    commands   command:run:488 command called: session-save ['/tmp/tmpegt7hify/session.yml']
17:49:50 DEBUG    commands   command:run:503 Calling qutebrowser.misc.sessions.SessionManager.session_save(<qutebrowser.misc.sessions.SessionManager object at 0x7f1bdb13a318>, 0, '/tmp/tmpegt7hify/session.yml', False, False, False)
17:49:50 DEBUG    sessions   sessions:save:241 Saving session /tmp/tmpegt7hify/session.yml to /tmp/tmpegt7hify/session.yml...
----> found it

----> Waiting for 'Saved session /tmp/tmpegt7hify/session.yml.' in the log
17:49:50 INFO     message    message:info:341 Saved session /tmp/tmpegt7hify/session.yml.
17:49:50 DEBUG    statusbar  bar:_disp_text:437 Displaying text: Saved session /tmp/tmpegt7hify/session.yml. (severity=Severity.normal)
17:49:50 DEBUG    statusbar  bar:_disp_text:445 queue: deque([]) / delta: 578
17:49:50 DEBUG    statusbar  bar:_disp_text:451 Displaying immediately
17:49:50 DEBUG    statusbar  text:set_text:60 Setting temp text to 'Saved session /tmp/tmpegt7hify/session.yml.'.
17:49:50 DEBUG    save       savemanager:mark_dirty:73 Marking history as dirty.
----> found it

Current session data:
windows:
- active: true
  geometry: !!binary |
    AdnQywACAAAAAAAyAAAAMgAAA1EAAAKJAAAAMgAAADIAAANRAAACiQAAAAAAAAAAAyA=
  tabs:
  - history:
    - scroll-pos:
        x: 0
        y: 0
      title: about:blank
      url: about:blank
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Simple link
      url: http://localhost:48422/data/hints/html/simple.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: A link to use hints on
      url: http://localhost:48422/data/hints/link_blank.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: http://localhost:48422/data/hello.txt
      url: http://localhost:48422/data/hello.txt
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: A link to use hints on
      url: http://localhost:48422/data/hints/link_blank.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: http://localhost:48422/data/hello.txt
      url: http://localhost:48422/data/hello.txt
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Simple link
      url: http://localhost:48422/data/hints/html/simple.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Rapid hinting with buttons
      url: http://localhost:48422/data/hints/buttons.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Hinting inside an iframe
      url: http://localhost:48422/data/hints/iframe.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Hinting inside an iframe
      url: http://localhost:48422/data/hints/iframe.html
      zoom: 1.0
    - scroll-pos:
        x: 0
        y: 0
      title: Opening links in a specific iframe
      url: http://localhost:48422/data/hints/iframe_target.html
      zoom: 1.0
    - active: true
      scroll-pos:
        x: 0
        y: 0
      title: Opening links in a specific iframe
      url: http://localhost:48422/data/hints/iframe_target.html
      zoom: 1.0
  - active: true
    history: []

17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_url_text_changed('http://localhost:48422/data/hello.txt') (tab 1)
17:49:50 DEBUG    webview    tabbedbrowser:on_title_changed:520 Changing title for idx 1 to 'http://localhost:48422/data/hello.txt'
17:49:50 DEBUG    webview    tabbedbrowser:on_title_changed:512 Ignoring title change to ''.
17:49:50 DEBUG    webview    webview:_set_load_status:182 load status for <qutebrowser.browser.webview.WebView tab_id=2 url='http://localhost:48422/data/hello.txt'>: LoadStatus.success
17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed('success') (tab 1)
17:49:50 DEBUG    webview    tabbedbrowser:on_title_changed:520 Changing title for idx 1 to 'http://localhost:48422/data/hello.txt'
17:49:50 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_finished(True) (tab 1)
17:49:50 DEBUG    statusbar  text:set_text:60 Setting temp text to ''.
17:49:50 DEBUG    ipc        ipc:on_error:234 Socket 0x7f1bdb1415e8: error 1: QLocalSocket: Remote closed
17:49:50 DEBUG    ipc        ipc:on_disconnected:273 Client disconnected from socket 0x7f1bdb1415e8.
17:49:50 DEBUG    ipc        ipc:handle_connection:250 No new connection to handle.
----------------------------------------------------------------------- httpbin output -----------------------------------------------------------------------

--------------------------------------------------------------------- Captured log call ----------------------------------------------------------------------
ipc.py                     462 DEBUG    Connecting to /run/user/1000/qutebrowser/ipc-eb523e075705ebf1d6e17feafd5260df
ipc.py                     467 INFO     Opening in existing instance
ipc.py                     479 DEBUG    Writing: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":open http://localhost:48422/data/hints/iframe_target.html"]}\n'
ipc.py                     462 DEBUG    Connecting to /run/user/1000/qutebrowser/ipc-eb523e075705ebf1d6e17feafd5260df
ipc.py                     467 INFO     Opening in existing instance
ipc.py                     479 DEBUG    Writing: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":hint links tab"]}\n'
ipc.py                     462 DEBUG    Connecting to /run/user/1000/qutebrowser/ipc-eb523e075705ebf1d6e17feafd5260df
ipc.py                     467 INFO     Opening in existing instance
ipc.py                     479 DEBUG    Writing: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":follow-hint a"]}\n'
ipc.py                     462 DEBUG    Connecting to /run/user/1000/qutebrowser/ipc-eb523e075705ebf1d6e17feafd5260df
ipc.py                     467 INFO     Opening in existing instance
ipc.py                     479 DEBUG    Writing: b'{"protocol_version": 1, "cwd": "/home/florian/proj/qutebrowser/git", "target_arg": "", "version": "0.6.2", "args": [":session-save \\"/tmp/tmpegt7hify/session.yml\\""]}\n'

================================================================== short test summary info ===================================================================
FAIL tests/end2end/features/test_hints_bdd.py::test_opening_a_link_with_specific_target_frame_in_a_new_tab
@The-Compiler

This comment has been minimized.

Show comment
Hide comment
@The-Compiler

The-Compiler Jun 6, 2016

Collaborator

You should be able to solve that one by adding a And I wait until data/hello.txt is loaded before checking the open tabs in Scenario: Opening a link with specific target frame in a new tab. Can you do that as part of this PR?

Collaborator

The-Compiler commented Jun 6, 2016

You should be able to solve that one by adding a And I wait until data/hello.txt is loaded before checking the open tabs in Scenario: Opening a link with specific target frame in a new tab. Can you do that as part of this PR?

@lahwaacz

This comment has been minimized.

Show comment
Hide comment
@lahwaacz

lahwaacz Jun 6, 2016

Collaborator

Thanks, just pushed the commit.

Collaborator

lahwaacz commented Jun 6, 2016

Thanks, just pushed the commit.

@lahwaacz

This comment has been minimized.

Show comment
Hide comment
@lahwaacz

lahwaacz Jun 6, 2016

Collaborator

As a side note to the new BDD test output format, wouldn't it be nice to also include the scenario itself, padded with line numbers giving the position in the file, somewhere at the top? It probably does not matter much when developing a specific test, but it would make random skimming through failures on Travis comfortable. Also, it would give you the possibility to compare old reports with the current test suite to see if it's still relevant.

Collaborator

lahwaacz commented Jun 6, 2016

As a side note to the new BDD test output format, wouldn't it be nice to also include the scenario itself, padded with line numbers giving the position in the file, somewhere at the top? It probably does not matter much when developing a specific test, but it would make random skimming through failures on Travis comfortable. Also, it would give you the possibility to compare old reports with the current test suite to see if it's still relevant.

@The-Compiler

This comment has been minimized.

Show comment
Hide comment
@The-Compiler

The-Compiler Jun 6, 2016

Collaborator

That'd be nice indeed, when reading test output I often want to see the scenario as well. https://github.com/pytest-dev/pytest-bdd/pull/147/files makes it look like that'd be possible to get, minus the line numbers maybe... I'll take a look.

Collaborator

The-Compiler commented Jun 6, 2016

That'd be nice indeed, when reading test output I often want to see the scenario as well. https://github.com/pytest-dev/pytest-bdd/pull/147/files makes it look like that'd be possible to get, minus the line numbers maybe... I'll take a look.

@The-Compiler

This comment has been minimized.

Show comment
Hide comment
@The-Compiler

The-Compiler Jun 6, 2016

Collaborator

The information we can get is actually pretty nice:

(Pdb++) pp report.scenario
{'examples': [],
 'feature': {'description': '', 'filename': '/home/florian/proj/qutebrowser/git/tests/end2end/features/misc.feature', 'line_number': 1, 'name': 'Various utility commands.', 'rel_filename': 'features/misc.feature', 'tags': []},
 'line_number': 367,
 'name': 'Focusing download widget via Tab (original issue)',
 'steps': [{'duration': 0.05486869812011719, 'failed': False, 'keyword': 'When', 'line_number': 368, 'name': 'I open data/prompt/jsprompt.html', 'type': 'when'},
           {'duration': 0.014067888259887695, 'failed': False, 'keyword': 'And', 'line_number': 369, 'name': 'I run :hint', 'type': 'when'},
           {'duration': 0.023212194442749023, 'failed': False, 'keyword': 'And', 'line_number': 370, 'name': 'I run :follow-hint a', 'type': 'when'},
           {'duration': 0.014824151992797852, 'failed': False, 'keyword': 'And', 'line_number': 371, 'name': 'I wait for "Entering mode KeyMode.prompt *" in the log', 'type': 'when'},
           {'duration': 0.013057947158813477, 'failed': False, 'keyword': 'And', 'line_number': 372, 'name': 'I press the key "<Tab>"', 'type': 'when'},
           {'duration': 0.010810613632202148, 'failed': False, 'keyword': 'And', 'line_number': 373, 'name': 'I press the key "<Ctrl-C>"', 'type': 'when'},
           {'duration': 5.256841421127319, 'failed': True, 'keyword': 'And', 'line_number': 374, 'name': 'I wait for "blabla" in the log', 'type': 'when'},
           {'duration': 3.337860107421875e-06, 'failed': True, 'keyword': 'Then', 'line_number': 375, 'name': 'no crash should happen', 'type': 'then'}],
 'tags': ['pyqt531_or_newer']}
Collaborator

The-Compiler commented Jun 6, 2016

The information we can get is actually pretty nice:

(Pdb++) pp report.scenario
{'examples': [],
 'feature': {'description': '', 'filename': '/home/florian/proj/qutebrowser/git/tests/end2end/features/misc.feature', 'line_number': 1, 'name': 'Various utility commands.', 'rel_filename': 'features/misc.feature', 'tags': []},
 'line_number': 367,
 'name': 'Focusing download widget via Tab (original issue)',
 'steps': [{'duration': 0.05486869812011719, 'failed': False, 'keyword': 'When', 'line_number': 368, 'name': 'I open data/prompt/jsprompt.html', 'type': 'when'},
           {'duration': 0.014067888259887695, 'failed': False, 'keyword': 'And', 'line_number': 369, 'name': 'I run :hint', 'type': 'when'},
           {'duration': 0.023212194442749023, 'failed': False, 'keyword': 'And', 'line_number': 370, 'name': 'I run :follow-hint a', 'type': 'when'},
           {'duration': 0.014824151992797852, 'failed': False, 'keyword': 'And', 'line_number': 371, 'name': 'I wait for "Entering mode KeyMode.prompt *" in the log', 'type': 'when'},
           {'duration': 0.013057947158813477, 'failed': False, 'keyword': 'And', 'line_number': 372, 'name': 'I press the key "<Tab>"', 'type': 'when'},
           {'duration': 0.010810613632202148, 'failed': False, 'keyword': 'And', 'line_number': 373, 'name': 'I press the key "<Ctrl-C>"', 'type': 'when'},
           {'duration': 5.256841421127319, 'failed': True, 'keyword': 'And', 'line_number': 374, 'name': 'I wait for "blabla" in the log', 'type': 'when'},
           {'duration': 3.337860107421875e-06, 'failed': True, 'keyword': 'Then', 'line_number': 375, 'name': 'no crash should happen', 'type': 'then'}],
 'tags': ['pyqt531_or_newer']}
@The-Compiler

This comment has been minimized.

Show comment
Hide comment
@The-Compiler

The-Compiler Jun 6, 2016

Collaborator

There we go!

bdd

😉

Collaborator

The-Compiler commented Jun 6, 2016

There we go!

bdd

😉

The-Compiler added a commit that referenced this pull request Jun 6, 2016

@The-Compiler The-Compiler merged commit b1997c1 into qutebrowser:master Jun 6, 2016

1 of 2 checks passed

continuous-integration/appveyor/pr Waiting for AppVeyor build to complete
Details
continuous-integration/travis-ci/pr The Travis CI build passed
Details
@The-Compiler

This comment has been minimized.

Show comment
Hide comment
@The-Compiler

The-Compiler Jun 6, 2016

Collaborator

And thanks for the PR! AppVeyor didn't finish, but the hint tests passed, so let's merge this before I go to bed 😆

Collaborator

The-Compiler commented Jun 6, 2016

And thanks for the PR! AppVeyor didn't finish, but the hint tests passed, so let's merge this before I go to bed 😆

@lahwaacz lahwaacz deleted the lahwaacz:iframe_tests branch Jun 7, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment