# Copyright 2014 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.

from autotest_lib.server import utils

AUTHOR = "chromeos-chameleon"
NAME = "display_SwitchMode"
PURPOSE = "Switch external display mode in a loop."
CRITERIA = "This test will fail if status checks fail after mode change."
ATTRIBUTES = "suite:chameleon_dp, suite:chameleon_dp_hdmi, suite:chameleon_hdmi, suite:chameleon_hdmi_perbuild"
TIME = "LONG"
TEST_CATEGORY = "Functional"
TEST_CLASS = "display"
TEST_TYPE = "server"
DEPENDENCIES = 'chameleon'

DOC = """
This test switches display modes (extended and mirrored).
"""

args_dict = utils.args_to_dict(args)
chameleon_args = hosts.CrosHost.get_chameleon_arguments(args_dict)

def run(machine):
    host = hosts.create_host(machine, chameleon_args=chameleon_args)
    repeat = int(args_dict.get('repeat', 1))
    job.run_test("display_SwitchMode", host=host, repeat=repeat)

parallel_simple(run, machines)
