|
@@ -16,12 +16,14 @@
|
|
|
#
|
|
|
"""Unit tests for conv_linker_config.py."""
|
|
|
|
|
|
+import io
|
|
|
import os
|
|
|
import shutil
|
|
|
import tempfile
|
|
|
import unittest
|
|
|
|
|
|
import conv_linker_config
|
|
|
+from contextlib import redirect_stderr
|
|
|
from linker_config_pb2 import LinkerConfig
|
|
|
|
|
|
class FileArgs:
|
|
@@ -67,6 +69,22 @@ class TempDirTest(unittest.TestCase):
|
|
|
class ConvLinkerConfigTest(TempDirTest):
|
|
|
"""Unit tests for conv_linker_config."""
|
|
|
|
|
|
+
|
|
|
+ def test_Proto_empty_input(self):
|
|
|
+ self.command(['proto', '-s', '-o', FileArg('out.pb')])
|
|
|
+ pb = LinkerConfig()
|
|
|
+ pb.ParseFromString(self.read('out.pb'))
|
|
|
+ self.assertEqual(pb, LinkerConfig())
|
|
|
+
|
|
|
+
|
|
|
+ def test_Proto_single_input(self):
|
|
|
+ self.write('foo.json', b'{ "provideLibs": ["libfoo.so"]}')
|
|
|
+ self.command(['proto', '-s', FileArg('foo.json'), '-o', FileArg('out.pb')])
|
|
|
+ pb = LinkerConfig()
|
|
|
+ pb.ParseFromString(self.read('out.pb'))
|
|
|
+ self.assertSequenceEqual(pb.provideLibs, ['libfoo.so'])
|
|
|
+
|
|
|
+
|
|
|
def test_Proto_with_multiple_input(self):
|
|
|
self.write('foo.json', b'{ "provideLibs": ["libfoo.so"]}')
|
|
|
self.write('bar.json', b'{ "provideLibs": ["libbar.so"]}')
|
|
@@ -76,6 +94,34 @@ class ConvLinkerConfigTest(TempDirTest):
|
|
|
self.assertSetEqual(set(pb.provideLibs), set(['libfoo.so', 'libbar.so']))
|
|
|
|
|
|
|
|
|
+ def test_Proto_with_existing_output(self):
|
|
|
+ self.write('out.pb', LinkerConfig(provideLibs=['libfoo.so']).SerializeToString())
|
|
|
+ buf = io.StringIO()
|
|
|
+ with self.assertRaises(SystemExit) as err:
|
|
|
+ with redirect_stderr(buf):
|
|
|
+ self.command(['proto', '-o', FileArg('out.pb')])
|
|
|
+ self.assertEqual(err.exception.code, 1)
|
|
|
+ self.assertRegex(buf.getvalue(), r'.*out\.pb exists')
|
|
|
+
|
|
|
+
|
|
|
+ def test_Proto_with_append(self):
|
|
|
+ self.write('out.pb', LinkerConfig(provideLibs=['libfoo.so']).SerializeToString())
|
|
|
+ self.write('bar.json', b'{ "provideLibs": ["libbar.so"]}')
|
|
|
+ self.command(['proto', '-s', FileArg('bar.json'), '-o', FileArg('out.pb'), '-a'])
|
|
|
+ pb = LinkerConfig()
|
|
|
+ pb.ParseFromString(self.read('out.pb'))
|
|
|
+ self.assertSetEqual(set(pb.provideLibs), set(['libfoo.so', 'libbar.so']))
|
|
|
+
|
|
|
+
|
|
|
+ def test_Proto_with_force(self):
|
|
|
+ self.write('out.pb', LinkerConfig(provideLibs=['libfoo.so']).SerializeToString())
|
|
|
+ self.write('bar.json', b'{ "provideLibs": ["libbar.so"]}')
|
|
|
+ self.command(['proto', '-s', FileArg('bar.json'), '-o', FileArg('out.pb'), '-f'])
|
|
|
+ pb = LinkerConfig()
|
|
|
+ pb.ParseFromString(self.read('out.pb'))
|
|
|
+ self.assertSetEqual(set(pb.provideLibs), set(['libbar.so']))
|
|
|
+
|
|
|
+
|
|
|
def command(self, args):
|
|
|
parser = conv_linker_config.GetArgParser()
|
|
|
parsed_args = parser.parse_args(self.resolve_paths(args))
|