protoc_wrapper_test.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/env python
  2. # Copyright 2020 The Chromium Authors. All rights reserved.
  3. # Use of this source code is governed by a BSD-style license that can be
  4. # found in the LICENSE file.
  5. """Tests for protoc_wrapper."""
  6. from __future__ import print_function
  7. import logging
  8. import sys
  9. import unittest
  10. if sys.version_info.major == 2:
  11. from StringIO import StringIO
  12. import mock
  13. else:
  14. from io import StringIO
  15. from unittest import mock
  16. import protoc_wrapper
  17. class ProtocWrapperTest(unittest.TestCase):
  18. @mock.patch('subprocess.call', return_value=0)
  19. def test_minimal_arguments(self, mock_call):
  20. protoc_wrapper.main(
  21. ['--proto-in-dir', './', '--protoc', '/foo/protoc', 'foo.proto'])
  22. mock_call.assert_called_once_with(
  23. ['/foo/protoc', '--proto_path', '.', './foo.proto'])
  24. @mock.patch('subprocess.call', return_value=0)
  25. def test_kythe_no_out(self, mock_call):
  26. protoc_wrapper.main([
  27. '--proto-in-dir', './', '--enable-kythe-annotation', '--protoc',
  28. '/foo/protoc', 'foo.proto'
  29. ])
  30. mock_call.assert_called_once_with(
  31. ['/foo/protoc', '--proto_path', '.', './foo.proto'])
  32. @mock.patch('subprocess.call', return_value=0)
  33. def test_kythe_cpp_out_no_options(self, mock_call):
  34. protoc_wrapper.main([
  35. '--proto-in-dir', './', '--enable-kythe-annotation', '--cc-out-dir',
  36. './bar', '--protoc', '/foo/protoc', 'foo.proto'
  37. ])
  38. mock_call.assert_called_once_with([
  39. '/foo/protoc', '--cpp_out',
  40. 'annotate_headers,annotation_pragma_name=kythe_metadata,annotation_guard_name=KYTHE_IS_RUNNING:./bar',
  41. '--proto_path', '.', './foo.proto'
  42. ])
  43. @mock.patch('subprocess.call', return_value=0)
  44. def test_kythe_cpp_out_with_options(self, mock_call):
  45. protoc_wrapper.main([
  46. '--proto-in-dir', './', '--enable-kythe-annotation', '--cc-options',
  47. 'foo=bar:', '--cc-out-dir', './bar', '--protoc', '/foo/protoc',
  48. 'foo.proto'
  49. ])
  50. mock_call.assert_called_once_with([
  51. '/foo/protoc', '--cpp_out',
  52. 'annotate_headers,annotation_pragma_name=kythe_metadata,annotation_guard_name=KYTHE_IS_RUNNING,foo=bar:./bar',
  53. '--proto_path', '.', './foo.proto'
  54. ])
  55. @mock.patch('subprocess.call', return_value=0)
  56. def test_kythe_cpp_out_with_options_no_colon(self, mock_call):
  57. protoc_wrapper.main([
  58. '--proto-in-dir', './', '--enable-kythe-annotation', '--cc-options',
  59. 'foo=bar', '--cc-out-dir', './bar', '--protoc', '/foo/protoc',
  60. 'foo.proto'
  61. ])
  62. mock_call.assert_called_once_with([
  63. '/foo/protoc', '--cpp_out',
  64. 'annotate_headers,annotation_pragma_name=kythe_metadata,annotation_guard_name=KYTHE_IS_RUNNING,foo=bar:./bar',
  65. '--proto_path', '.', './foo.proto'
  66. ])
  67. @mock.patch('subprocess.call', return_value=0)
  68. def test_cpp_out_with_options_no_colon(self, mock_call):
  69. protoc_wrapper.main([
  70. '--proto-in-dir', './', '--cc-options', 'foo=bar:', '--cc-out-dir',
  71. './bar', '--protoc', '/foo/protoc', 'foo.proto'
  72. ])
  73. mock_call.assert_called_once_with([
  74. '/foo/protoc', '--cpp_out', 'foo=bar:./bar', '--proto_path', '.',
  75. './foo.proto'
  76. ])
  77. if __name__ == '__main__':
  78. logging.basicConfig(
  79. level=logging.DEBUG if '-v' in sys.argv else logging.ERROR)
  80. unittest.main()