# Copyright (c) 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import unittest

from tracing_build.update_gypi import GypiFile


class UpdateGypiTests(unittest.TestCase):

  def setUp(self):
    self.file_groups = ['group1', 'group2']

  def test_GypiTokenizer(self):
    content = ("useless data\n'group1': [\n    <file list goes here>\n"
               "    ]\nNote the four spaces before the ] above")
    gypi_files = GypiFile(content, self.file_groups)
    self.assertEqual(3, len(gypi_files._tokens))
    self.assertEqual('plain', gypi_files._tokens[0].id)
    self.assertEqual(
        "useless data\n'group1': [\n", gypi_files._tokens[0].data)
    self.assertEqual('group1', gypi_files._tokens[1].id)
    self.assertEqual("    <file list goes here>\n", gypi_files._tokens[1].data)
    self.assertEqual('plain', gypi_files._tokens[2].id)
    self.assertEqual(
        "    ]\nNote the four spaces before the ] above",
        gypi_files._tokens[2].data)

  def test_GypiFileListBuilder(self):
    gypi_file = GypiFile('', self.file_groups)
    existing_list = ("    '/four/spaces/indent',\n'"
                     "    '/five/spaces/but/only/first/line/matters',\n")
    new_list = ['item1', 'item2', 'item3']
    self.assertEqual(
        "    'item1',\n    'item2',\n    'item3',\n",
        gypi_file._GetReplacementListAsString(existing_list, new_list))
