#!/usr/bin/python # -*- coding: utf-8 -*- # Copyright 2018 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Tests for string_utils.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import mock import unittest import common from autotest_lib.client.common_lib.cros import string_utils class JoinLongestWithLengthLimitTest(unittest.TestCase): """Unit test of join_longest_with_length_limit.""" def setUp(self): """Setup.""" self.strings = ['abc', '12', 'sssss'] def test_basic(self): """The basic test case.""" result = list(string_utils.join_longest_with_length_limit( self.strings, 6, separator=',')) self.assertEqual(len(result), 2) self.assertTrue(type(result[0]) is str) def test_short_strings(self): """Test with short strings to be joined with big limit.""" sep = mock.MagicMock() result = list(string_utils.join_longest_with_length_limit( self.strings, 100, separator=sep)) sep.join.assert_called_once() def test_string_too_long(self): """Test with too long string to be joined.""" strings = ['abc', '12', 'sssss', 'a very long long long string'] with self.assertRaises(string_utils.StringTooLongError): list(string_utils.join_longest_with_length_limit(strings, 6)) def test_long_sep(self): """Test with long seperator.""" result = list(string_utils.join_longest_with_length_limit( self.strings, 6, separator='|very long separator|')) # Though the string to be joined is short, we still will have 3 result # because each of them plus separator is longer than the limit. self.assertEqual(len(result), 3) def test_do_not_join(self): """Test yielding list instead of string.""" result = list(string_utils.join_longest_with_length_limit( self.strings, 6, separator=',', do_join=False)) self.assertEqual(len(result), 2) self.assertTrue(type(result[0]) is list) if __name__ == '__main__': unittest.main()