# Copyright (c) 2014 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 codecs
import os
import tempfile
import unittest

from tracing_build import trace2html


class Trace2HTMLTests(unittest.TestCase):

  def test_writeHTMLForTracesToFile(self):
    # Note: We can't use "with" when working with tempfile.NamedTemporaryFile as
    # that does not work on Windows. We use the longer, more clunky version
    # instead. See https://bugs.python.org/issue14243 for detials.
    raw_tmpfile = tempfile.NamedTemporaryFile(
        mode='w', suffix='.html', delete=False)
    raw_tmpfile.close()
    try:
      with codecs.open(raw_tmpfile.name, 'w', encoding='utf-8') as tmpfile:
        simple_trace_path = os.path.join(
            os.path.dirname(__file__),
            '..', 'test_data', 'simple_trace.json')
        big_trace_path = os.path.join(
            os.path.dirname(__file__),
            '..', 'test_data', 'big_trace.json')
        non_json_trace_path = os.path.join(
            os.path.dirname(__file__),
            '..', 'test_data', 'android_systrace.txt')
        trace2html.WriteHTMLForTracesToFile(
            [big_trace_path, simple_trace_path, non_json_trace_path], tmpfile)
    finally:
      os.remove(raw_tmpfile.name)
