From 2c2d0e2c44328bc45410eb911993e2b9ca61d1ad Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Thu, 7 Feb 2019 18:49:02 +0100 Subject: [PATCH] Added back unit tests to detect compiler versions --- lib/spack/spack/test/compilers.py | 50 ++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/lib/spack/spack/test/compilers.py b/lib/spack/spack/test/compilers.py index 6d5ee2038b3..0a81dd39d99 100644 --- a/lib/spack/spack/test/compilers.py +++ b/lib/spack/spack/test/compilers.py @@ -5,6 +5,8 @@ import pytest +import sys + from copy import copy from six import iteritems @@ -26,6 +28,28 @@ from spack.compiler import Compiler +@pytest.fixture() +def make_args_for_version(monkeypatch): + + def _factory(version, path='/usr/bin/gcc'): + class MockOs(object): + pass + + compiler_name = 'gcc' + compiler_cls = compilers.class_for_compiler_name(compiler_name) + monkeypatch.setattr(compiler_cls, 'cc_version', lambda x: version) + + compiler_id = compilers.CompilerID( + os=MockOs, compiler_name=compiler_name, version=None + ) + variation = compilers.NameVariation(prefix='', suffix='') + return compilers.DetectVersionArgs( + id=compiler_id, variation=variation, language='cc', path=path + ) + + return _factory + + def test_get_compiler_duplicates(config): # In this case there is only one instance of the specified compiler in # the test configuration (so it is not actually a duplicate), but the @@ -45,16 +69,22 @@ def test_all_compilers(config): assert len(filtered) == 1 -# FIXME: Write better unit tests for this function -# def test_version_detection_is_empty(): -# version = detect_version(lambda x: None, path='/usr/bin/gcc') -# expected = (None, "Couldn't get version for compiler /usr/bin/gcc") -# assert version == expected -# -# -# def test_version_detection_is_successful(): -# version = detect_version(lambda x: '4.9', path='/usr/bin/gcc') -# assert version == (('4.9', '/usr/bin/gcc'), None) +@pytest.mark.skipif( + sys.version_info[0] == 2, reason='make_args_for_version requires python 3' +) +@pytest.mark.parametrize('input_version,expected_version,expected_error', [ + (None, None, "Couldn't get version for compiler /usr/bin/gcc"), + ('4.9', '4.9', None) +]) +def test_version_detection_is_empty( + make_args_for_version, input_version, expected_version, expected_error +): + args = make_args_for_version(version=input_version) + result, error = compilers.detect_version(args) + if not error: + assert result.id.version == expected_version + + assert error == expected_error def test_compiler_flags_from_config_are_grouped():