forked from mirrors/gecko-dev
		
	This commit doesn't change any behaviour, just attempts to make this a little more readable. The workers will call '_collect_results' for each WorkItem they process (either because it is finished or because it was canceled). This also differentiates between setup failures and run failures. MozReview-Commit-ID: 36Pe3bbUKmk --HG-- extra : rebase_source : 873167512b745ccdc52de7e7f1ecf66b094e063d
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
# License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | 
						|
 | 
						|
from __future__ import absolute_import
 | 
						|
 | 
						|
import os
 | 
						|
from distutils.spawn import find_executable
 | 
						|
 | 
						|
import mozunit
 | 
						|
import pytest
 | 
						|
 | 
						|
from mozlint import cli
 | 
						|
 | 
						|
here = os.path.abspath(os.path.dirname(__file__))
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def parser():
 | 
						|
    return cli.MozlintParser()
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def run(parser, lintdir, files):
 | 
						|
    if lintdir not in cli.SEARCH_PATHS:
 | 
						|
        cli.SEARCH_PATHS.append(lintdir)
 | 
						|
 | 
						|
    def inner(args=None):
 | 
						|
        args = args or []
 | 
						|
        args.extend(files)
 | 
						|
        lintargs = vars(parser.parse_args(args))
 | 
						|
        lintargs['root'] = here
 | 
						|
        return cli.run(**lintargs)
 | 
						|
    return inner
 | 
						|
 | 
						|
 | 
						|
def test_cli_run_with_fix(run, capfd):
 | 
						|
    ret = run(['-f', 'json', '--fix', '--linter', 'external'])
 | 
						|
    out, err = capfd.readouterr()
 | 
						|
    assert ret == 0
 | 
						|
    assert out.endswith('{}\n')
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.skipif(not find_executable("echo"), reason="No `echo` executable found.")
 | 
						|
def test_cli_run_with_edit(run, parser, capfd):
 | 
						|
    os.environ['EDITOR'] = 'echo'
 | 
						|
 | 
						|
    ret = run(['-f', 'compact', '--edit', '--linter', 'external'])
 | 
						|
    out, err = capfd.readouterr()
 | 
						|
    out = out.splitlines()
 | 
						|
    assert ret == 1
 | 
						|
    assert out[0].endswith('foobar.js')  # from the `echo` editor
 | 
						|
    assert "foobar.js: line 1, col 1, Error" in out[1]
 | 
						|
    assert "foobar.js: line 2, col 1, Error" in out[2]
 | 
						|
    assert "2 problems" in out[-1]
 | 
						|
    assert len(out) == 5
 | 
						|
 | 
						|
    del os.environ['EDITOR']
 | 
						|
    with pytest.raises(SystemExit):
 | 
						|
        parser.parse_args(['--edit'])
 | 
						|
 | 
						|
 | 
						|
def test_cli_run_with_setup(run, capfd):
 | 
						|
    # implicitly call setup
 | 
						|
    ret = run(['-l', 'setup', '-l', 'setupfailed', '-l', 'setupraised'])
 | 
						|
    out, err = capfd.readouterr()
 | 
						|
    assert 'setup passed' in out
 | 
						|
    assert 'setup failed' in out
 | 
						|
    assert 'setup raised' in out
 | 
						|
    assert ret == 1
 | 
						|
 | 
						|
    # explicitly call setup
 | 
						|
    ret = run(['-l', 'setup', '-l', 'setupfailed', '-l', 'setupraised', '--setup'])
 | 
						|
    out, err = capfd.readouterr()
 | 
						|
    assert 'setup passed' in out
 | 
						|
    assert 'setup failed' in out
 | 
						|
    assert 'setup raised' in out
 | 
						|
    assert ret == 1
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    mozunit.main()
 |