# Copyright 2014 The ChromiumOS Authors
# 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

NAME = "display_LidCloseOpen.extended_unplug_close_plug_unplug_open_plug"
METADATA = {
    "contacts": ["chromeos-gfx-display@google.com"],
    "bug_component": "b:188154",
    "criteria": "Fails if the checks mentioned below fail."
}
#ATTRIBUTES = "suite:chameleon_hdmi_unstable"
TEST_TYPE = "server"
DEPENDENCIES = 'chameleon, servo_state:WORKING'
JOB_RETRIES = 1

'''
This test remotely emulates external display lid close/open scenario.
This test will fail if DUT doesn't
 - go to docked mode
 - return to the original mode
 - suspend after unplug in docked mode
 - resume after open
 - pass image test
'''

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

# Plugged status (before_close, after_close, before_open)
plug_status=[(False, True, False)]

def run(machine):
    host = hosts.create_host(machine, chameleon_args=chameleon_args,
                             servo_args=servo_args)
    job.run_test("display_LidCloseOpen", host=host, plug_status=plug_status,
                 tag="extended_unplug_close_plug_unplug_open_plug")

parallel_simple(run, machines)
