#!/usr/bin/env python3
# -*- coding: utf-8 -*-

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

"""Testing of ResultsOrganizer

   We create some labels, benchmark_runs and then create a ResultsOrganizer,
   after that, we compare the result of ResultOrganizer.
"""


import unittest

from benchmark_run import BenchmarkRun
import mock_instance
from results_cache import Result
from results_organizer import OrganizeResults


result = {
    "benchmark1": [
        [
            {
                "": "PASS",
                "bool": "True",
                "milliseconds_1": "1",
                "milliseconds_2": "8",
                "milliseconds_3": "9.2",
                "ms_1": "2.1",
                "total": "5",
            },
            {"": "PASS", "test": "2"},
            {"": "PASS", "test": "4"},
            {
                "": "PASS",
                "bool": "FALSE",
                "milliseconds_1": "3",
                "milliseconds_2": "5",
                "ms_1": "2.2",
                "total": "6",
            },
            {"": "PASS", "test": "3"},
            {"": "PASS", "test": "4"},
        ],
        [
            {
                "": "PASS",
                "bool": "FALSE",
                "milliseconds_4": "30",
                "milliseconds_5": "50",
                "ms_1": "2.23",
                "total": "6",
            },
            {"": "PASS", "test": "5"},
            {"": "PASS", "test": "4"},
            {
                "": "PASS",
                "bool": "FALSE",
                "milliseconds_1": "3",
                "milliseconds_6": "7",
                "ms_1": "2.3",
                "total": "7",
            },
            {"": "PASS", "test": "2"},
            {"": "PASS", "test": "6"},
        ],
    ],
    "benchmark2": [
        [
            {
                "": "PASS",
                "bool": "TRUE",
                "milliseconds_1": "3",
                "milliseconds_8": "6",
                "ms_1": "2.3",
                "total": "7",
            },
            {"": "PASS", "test": "2"},
            {"": "PASS", "test": "6"},
            {
                "": "PASS",
                "bool": "TRUE",
                "milliseconds_1": "3",
                "milliseconds_8": "6",
                "ms_1": "2.2",
                "total": "7",
            },
            {"": "PASS", "test": "2"},
            {"": "PASS", "test": "2"},
        ],
        [
            {
                "": "PASS",
                "bool": "TRUE",
                "milliseconds_1": "3",
                "milliseconds_8": "6",
                "ms_1": "2",
                "total": "7",
            },
            {"": "PASS", "test": "2"},
            {"": "PASS", "test": "4"},
            {
                "": "PASS",
                "bool": "TRUE",
                "milliseconds_1": "3",
                "milliseconds_8": "6",
                "ms_1": "1",
                "total": "7",
            },
            {"": "PASS", "test": "1"},
            {"": "PASS", "test": "6"},
        ],
    ],
}  # yapf: disable


class ResultOrganizerTest(unittest.TestCase):
    """Test result organizer."""

    def testResultOrganizer(self):
        labels = [mock_instance.label1, mock_instance.label2]
        benchmarks = [mock_instance.benchmark1, mock_instance.benchmark2]
        benchmark_runs = [None] * 8
        benchmark_runs[0] = BenchmarkRun(
            "b1", benchmarks[0], labels[0], 1, "", "", "", "average", "", {}
        )
        benchmark_runs[1] = BenchmarkRun(
            "b2", benchmarks[0], labels[0], 2, "", "", "", "average", "", {}
        )
        benchmark_runs[2] = BenchmarkRun(
            "b3", benchmarks[0], labels[1], 1, "", "", "", "average", "", {}
        )
        benchmark_runs[3] = BenchmarkRun(
            "b4", benchmarks[0], labels[1], 2, "", "", "", "average", "", {}
        )
        benchmark_runs[4] = BenchmarkRun(
            "b5", benchmarks[1], labels[0], 1, "", "", "", "average", "", {}
        )
        benchmark_runs[5] = BenchmarkRun(
            "b6", benchmarks[1], labels[0], 2, "", "", "", "average", "", {}
        )
        benchmark_runs[6] = BenchmarkRun(
            "b7", benchmarks[1], labels[1], 1, "", "", "", "average", "", {}
        )
        benchmark_runs[7] = BenchmarkRun(
            "b8", benchmarks[1], labels[1], 2, "", "", "", "average", "", {}
        )

        i = 0
        for b in benchmark_runs:
            b.result = Result("", b.label, "average", "machine")
            b.result.keyvals = mock_instance.keyval[i]
            i += 1

        organized = OrganizeResults(benchmark_runs, labels, benchmarks)
        self.assertEqual(organized, result)


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