# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import unittest
import json

import run_performance_tests
from run_performance_tests import TelemetryCommandGenerator

# The path where the output of a wpt run was written. This is the file that
# gets processed by BaseWptScriptAdapter.
OUTPUT_JSON_FILENAME = "out.json"


class TelemetryCommandGeneratorTest(unittest.TestCase):
  def setUp(self):
    fake_args = [
        './run_benchmark',
        '--isolated-script-test-output=output.json'
    ]
    self._fake_options = run_performance_tests.parse_arguments(fake_args)

  def testStorySelectionBeginEnd(self):
    story_selection_config = json.loads(
        '{"begin": 11, "end": 21, "abridged": false}')
    generator = TelemetryCommandGenerator(
        'benchmark_name', self._fake_options, story_selection_config
    )
    command = generator.generate('output_dir')
    self.assertIn('--story-shard-begin-index=11', command)
    self.assertIn('--story-shard-end-index=21', command)
    self.assertNotIn('--run-abridged-story-set', command)


  def testStorySelectionAbridgedDefault(self):
    story_selection_config = json.loads(
        '{"begin": 11, "end": 21}')
    generator = TelemetryCommandGenerator(
        'benchmark_name', self._fake_options, story_selection_config
    )
    command = generator.generate('output_dir')
    self.assertIn('--run-abridged-story-set', command)

  def testStorySelectionIndexSectionsSingleIndex(self):
    story_selection_config = json.loads(
        '{"sections": [{"begin": 11, "end": 21}, {"begin": 25, "end": 26}]}')
    generator = TelemetryCommandGenerator(
        'benchmark_name', self._fake_options, story_selection_config
    )
    command = generator.generate('output_dir')
    self.assertIn('--story-shard-indexes=11-21,25', command)

  def testStorySelectionIndexSectionsOpenEnds(self):
    story_selection_config = json.loads(
        '{"sections": [{"end": 10}, {"begin": 15, "end": 16}, {"begin": 20}]}')
    generator = TelemetryCommandGenerator(
        'benchmark_name', self._fake_options, story_selection_config
    )
    command = generator.generate('output_dir')
    self.assertIn('--story-shard-indexes=-10,15,20-', command)


  def testStorySelectionIndexSectionsIllegalRange(self):
    with self.assertRaises(ValueError):
      story_selection_config = json.loads(
          '{"sections": [{"begin": 15, "end": 16}, {"foo": "bar"}]}')
      generator = TelemetryCommandGenerator(
          'benchmark_name', self._fake_options, story_selection_config
      )
      generator.generate('output_dir')

  def testStorySelectionIndexSectionsEmpty(self):
    story_selection_config = json.loads(
        '{"sections": []}')
    generator = TelemetryCommandGenerator(
        'benchmark_name', self._fake_options, story_selection_config
    )
    command = generator.generate('output_dir')
    self.assertNotIn('--story-shard-indexes=', command)