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

import unittest
from codegen import Util


class CodegenTest(unittest.TestCase):
  """Tests for codegen.py"""

  def test_sanitize_name(self):
    self.assertEqual(Util.sanitize_name('My Metric.Or::Event/Or/Project_name'),
                     'My_Metric_Or__Event_Or_Project_name')

  def test_camel_to_snake(self):
    def check(camel, expected_snake):
      self.assertEqual(Util.camel_to_snake(camel), expected_snake)

    check('already_snake_case', 'already_snake_case')
    check('ConvertFromCamelCase', 'convert_from_camel_case')
    check('HTTPAcronymAtStart', 'http_acronym_at_start')
    check('AcronymInHTTPMiddle', 'acronym_in_http_middle')
    check('AcronymAtEndHTTP', 'acronym_at_end_http')

  def test_hash_name(self):
    # This was generated using the function in Chromium's
    # //base/metrics/metrics_hashes.cc.
    known_good_hash = 11096769389970233700
    self.assertEqual(Util.hash_name('known good hash'), known_good_hash)

  def test_event_name_hash(self):
    # This was generated using the function in Chromium's
    # //base/metrics/metrics_hashes.cc for the string
    # cros::TestProjectOne::TestEventOne
    event_name_hash = 16542188217976373364
    project_name = 'TestProjectOne'
    event_name = 'TestEventOne'
    self.assertEqual(Util.event_name_hash(project_name, event_name),
                     event_name_hash)


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