#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2019 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 misc."""

from __future__ import print_function

__author__ = 'asharif@google.com (Ahmad Sharif)'

# System modules
import unittest

# Local modules
from cros_utils import misc


class UtilsTest(unittest.TestCase):
  """Tests for misc."""

  def testGetFilenameFromString(self):
    string = 'a /b=c"d^$?\\'
    filename = misc.GetFilenameFromString(string)
    self.assertEqual(filename, 'a___bcd')

  def testPrependMergeEnv(self):
    var = 'USE'
    use_flags = 'hello 123'
    added_use_flags = 'bla bla'
    env_string = '%s=%r' % (var, use_flags)
    new_env_string = misc.MergeEnvStringWithDict(env_string,
                                                 {var: added_use_flags})
    expected_new_env = '%s=%r' % (var, ' '.join([added_use_flags, use_flags]))
    self.assertEqual(new_env_string, ' '.join([env_string, expected_new_env]))

  def testGetChromeOSVersionFromLSBVersion(self):
    versions_dict = {'2630.0.0': '22', '2030.0.0': '19'}
    f = misc.GetChromeOSVersionFromLSBVersion
    for k, v in versions_dict.items():
      self.assertEqual(f(k), 'R%s-%s' % (v, k))

  def testPostpendMergeEnv(self):
    var = 'USE'
    use_flags = 'hello 123'
    added_use_flags = 'bla bla'
    env_string = '%s=%r' % (var, use_flags)
    new_env_string = misc.MergeEnvStringWithDict(env_string,
                                                 {var: added_use_flags}, False)
    expected_new_env = '%s=%r' % (var, ' '.join([use_flags, added_use_flags]))
    self.assertEqual(new_env_string, ' '.join([env_string, expected_new_env]))


if __name__ == '__main__':
  unittest.main()
