#!/usr/bin/python

# Copyright (c) 2011 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.

import StringIO
import unittest
from experiment_file import ExperimentFile

EXPERIMENT_FILE_1 = """
  board: x86-alex
  remote: chromeos-alex3
  perf_args: record -a -e cycles
  benchmark: PageCycler {
    iterations: 3
  }

  image1 {
    chromeos_image: /usr/local/google/cros_image1.bin
  }

  image2 {
    remote: chromeos-lumpy1
    chromeos_image: /usr/local/google/cros_image2.bin
  }
  """

EXPERIMENT_FILE_2 = """
  board: x86-alex
  remote: chromeos-alex3
  iterations: 3

  benchmark: PageCycler {
  }

  benchmark: AndroidBench {
    iterations: 2
  }

  image1 {
    chromeos_image:/usr/local/google/cros_image1.bin
  }

  image2 {
    chromeos_image: /usr/local/google/cros_image2.bin
  }
  """

EXPERIMENT_FILE_3 = """
  board: x86-alex
  remote: chromeos-alex3
  iterations: 3

  benchmark: PageCycler {
  }

  image1 {
    chromeos_image:/usr/local/google/cros_image1.bin
  }

  image1 {
    chromeos_image: /usr/local/google/cros_image2.bin
  }
  """

OUTPUT_FILE="""remote: chromeos-alex3
board: x86-alex
perf_args: record -a -e cycles

benchmark: PageCycler {
\titerations: 3
}

label: image1 {
\tremote: chromeos-alex3
\tchromeos_image: /usr/local/google/cros_image1.bin
}

label: image2 {
\tremote: chromeos-lumpy1
\tchromeos_image: /usr/local/google/cros_image2.bin
}\n\n"""

class ExperimentFileTest(unittest.TestCase):
  def testLoadExperimentFile1(self):
    input_file = StringIO.StringIO(EXPERIMENT_FILE_1)
    experiment_file = ExperimentFile(input_file)
    global_settings = experiment_file.GetGlobalSettings()
    self.assertEqual(global_settings.GetField("remote"), ["chromeos-alex3"])
    self.assertEqual(global_settings.GetField("perf_args"),
                     "record -a -e cycles")
    benchmark_settings = experiment_file.GetSettings("benchmark")
    self.assertEqual(len(benchmark_settings), 1)
    self.assertEqual(benchmark_settings[0].name, "PageCycler")
    self.assertEqual(benchmark_settings[0].GetField("iterations"), 3)

    label_settings = experiment_file.GetSettings("label")
    self.assertEqual(len(label_settings), 2)
    self.assertEqual(label_settings[0].name, "image1")
    self.assertEqual(label_settings[0].GetField("chromeos_image"),
                     "/usr/local/google/cros_image1.bin")
    self.assertEqual(label_settings[1].GetField("remote"), ["chromeos-lumpy1"])
    self.assertEqual(label_settings[0].GetField("remote"), ["chromeos-alex3"])

  def testOverrideSetting(self):
    input_file = StringIO.StringIO(EXPERIMENT_FILE_2)
    experiment_file = ExperimentFile(input_file)
    global_settings = experiment_file.GetGlobalSettings()
    self.assertEqual(global_settings.GetField("remote"), ["chromeos-alex3"])

    benchmark_settings = experiment_file.GetSettings("benchmark")
    self.assertEqual(len(benchmark_settings), 2)
    self.assertEqual(benchmark_settings[0].name, "PageCycler")
    self.assertEqual(benchmark_settings[0].GetField("iterations"), 3)
    self.assertEqual(benchmark_settings[1].name, "AndroidBench")
    self.assertEqual(benchmark_settings[1].GetField("iterations"), 2)

  def testDuplicateLabel(self):
    input_file = StringIO.StringIO(EXPERIMENT_FILE_3)
    self.assertRaises(Exception, ExperimentFile, input_file)

  def testCanonicalize(self):
    input_file = StringIO.StringIO(EXPERIMENT_FILE_1)
    experiment_file = ExperimentFile(input_file)
    res = experiment_file.Canonicalize()
    self.assertEqual(res, OUTPUT_FILE)

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