test_clang.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. # -*- coding: utf-8 -*-
  2. # The LLVM Compiler Infrastructure
  3. #
  4. # This file is distributed under the University of Illinois Open Source
  5. # License. See LICENSE.TXT for details.
  6. import libear
  7. import libscanbuild.clang as sut
  8. import unittest
  9. import os.path
  10. import sys
  11. class ClangGetVersion(unittest.TestCase):
  12. def test_get_version_is_not_empty(self):
  13. self.assertTrue(sut.get_version('clang'))
  14. def test_get_version_throws(self):
  15. with self.assertRaises(OSError):
  16. sut.get_version('notexists')
  17. class ClangGetArgumentsTest(unittest.TestCase):
  18. def test_get_clang_arguments(self):
  19. with libear.TemporaryDirectory() as tmpdir:
  20. filename = os.path.join(tmpdir, 'test.c')
  21. with open(filename, 'w') as handle:
  22. handle.write('')
  23. result = sut.get_arguments(
  24. ['clang', '-c', filename, '-DNDEBUG', '-Dvar="this is it"'],
  25. tmpdir)
  26. self.assertTrue('NDEBUG' in result)
  27. self.assertTrue('var="this is it"' in result)
  28. def test_get_clang_arguments_fails(self):
  29. with self.assertRaises(Exception):
  30. sut.get_arguments(['clang', '-x', 'c', 'notexist.c'], '.')
  31. def test_get_clang_arguments_fails_badly(self):
  32. with self.assertRaises(OSError):
  33. sut.get_arguments(['notexist'], '.')
  34. class ClangGetCheckersTest(unittest.TestCase):
  35. def test_get_checkers(self):
  36. # this test is only to see is not crashing
  37. result = sut.get_checkers('clang', [])
  38. self.assertTrue(len(result))
  39. # do check result types
  40. string_type = unicode if sys.version_info < (3,) else str
  41. for key, value in result.items():
  42. self.assertEqual(string_type, type(key))
  43. self.assertEqual(string_type, type(value[0]))
  44. self.assertEqual(bool, type(value[1]))
  45. def test_get_active_checkers(self):
  46. # this test is only to see is not crashing
  47. result = sut.get_active_checkers('clang', [])
  48. self.assertTrue(len(result))
  49. # do check result types
  50. for value in result:
  51. self.assertEqual(str, type(value))
  52. def test_is_active(self):
  53. test = sut.is_active(['a', 'b.b', 'c.c.c'])
  54. self.assertTrue(test('a'))
  55. self.assertTrue(test('a.b'))
  56. self.assertTrue(test('b.b'))
  57. self.assertTrue(test('b.b.c'))
  58. self.assertTrue(test('c.c.c.p'))
  59. self.assertFalse(test('ab'))
  60. self.assertFalse(test('ba'))
  61. self.assertFalse(test('bb'))
  62. self.assertFalse(test('c.c'))
  63. self.assertFalse(test('b'))
  64. self.assertFalse(test('d'))
  65. def test_parse_checkers(self):
  66. lines = [
  67. 'OVERVIEW: Clang Static Analyzer Checkers List',
  68. '',
  69. 'CHECKERS:',
  70. ' checker.one Checker One description',
  71. ' checker.two',
  72. ' Checker Two description']
  73. result = dict(sut.parse_checkers(lines))
  74. self.assertTrue('checker.one' in result)
  75. self.assertEqual('Checker One description', result.get('checker.one'))
  76. self.assertTrue('checker.two' in result)
  77. self.assertEqual('Checker Two description', result.get('checker.two'))
  78. class ClangIsCtuCapableTest(unittest.TestCase):
  79. def test_ctu_not_found(self):
  80. is_ctu = sut.is_ctu_capable('not-found-clang-func-mapping')
  81. self.assertFalse(is_ctu)
  82. class ClangGetTripleArchTest(unittest.TestCase):
  83. def test_arch_is_not_empty(self):
  84. arch = sut.get_triple_arch(['clang', '-E', '-'], '.')
  85. self.assertTrue(len(arch) > 0)