summaryrefslogtreecommitdiff
path: root/zephyr/test/drivers/default/src/tablet_mode.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/test/drivers/default/src/tablet_mode.c')
-rw-r--r--zephyr/test/drivers/default/src/tablet_mode.c168
1 files changed, 168 insertions, 0 deletions
diff --git a/zephyr/test/drivers/default/src/tablet_mode.c b/zephyr/test/drivers/default/src/tablet_mode.c
new file mode 100644
index 0000000000..d600d26072
--- /dev/null
+++ b/zephyr/test/drivers/default/src/tablet_mode.c
@@ -0,0 +1,168 @@
+/* Copyright 2022 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <zephyr/fff.h>
+#include <zephyr/shell/shell.h>
+#include <zephyr/kernel.h>
+#include <zephyr/ztest.h>
+
+#include "console.h"
+#include "tablet_mode.h"
+#include "test/drivers/test_state.h"
+#include "test/drivers/utils.h"
+
+static void tabletmode_before(void *state)
+{
+ ARG_UNUSED(state);
+ tablet_reset();
+}
+
+static void tabletmode_after(void *state)
+{
+ ARG_UNUSED(state);
+ tablet_reset();
+}
+
+/**
+ * @brief TestPurpose: various tablet_set_mode operations, make sure lid and
+ * base works independently.
+ */
+ZTEST_USER(tabletmode, test_tablet_set_mode)
+{
+ int ret;
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 0, "unexepcted tablet initial mode: %d", ret);
+
+ tablet_set_mode(1, TABLET_TRIGGER_LID);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 1, "unexepcted tablet mode: %d", ret);
+
+ tablet_set_mode(1, TABLET_TRIGGER_BASE);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 1, "unexepcted tablet mode: %d", ret);
+
+ tablet_set_mode(0, TABLET_TRIGGER_LID);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 1, "unexepcted tablet mode: %d", ret);
+
+ tablet_set_mode(0, TABLET_TRIGGER_BASE);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 0, "unexepcted tablet mode: %d", ret);
+}
+
+/**
+ * @brief TestPurpose: test the tablet_disable functionality.
+ */
+ZTEST_USER(tabletmode, test_tablet_disable)
+{
+ int ret;
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 0, "unexepcted tablet initial mode: %d", ret);
+
+ tablet_disable();
+ tablet_set_mode(1, TABLET_TRIGGER_LID);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 0, "unexepcted tablet mode: %d", ret);
+}
+
+/**
+ * @brief TestPurpose: check that tabletmode on and off changes the mode.
+ */
+ZTEST_USER(tabletmode, test_settabletmode_on_off)
+{
+ int ret;
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 0, "unexepcted tablet initial mode: %d", ret);
+
+ ret = shell_execute_cmd(get_ec_shell(), "tabletmode");
+ zassert_equal(ret, EC_SUCCESS, "unexepcted command return status: %d",
+ ret);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 0, "unexepcted tablet mode: %d", ret);
+
+ ret = shell_execute_cmd(get_ec_shell(), "tabletmode on");
+ zassert_equal(ret, EC_SUCCESS, "unexepcted command return status: %d",
+ ret);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 1, "unexepcted tablet mode: %d", ret);
+
+ ret = shell_execute_cmd(get_ec_shell(), "tabletmode off");
+ zassert_equal(ret, EC_SUCCESS, "unexepcted command return status: %d",
+ ret);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 0, "unexepcted tablet mode: %d", ret);
+}
+
+/**
+ * @brief TestPurpose: ensure that console tabletmode forces the status,
+ * inhibiting tablet_set_mode, and then unforce it with reset.
+ */
+ZTEST_USER(tabletmode, test_settabletmode_forced)
+{
+ int ret;
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 0, "unexepcted tablet initial mode: %d", ret);
+
+ ret = shell_execute_cmd(get_ec_shell(), "tabletmode on");
+ zassert_equal(ret, EC_SUCCESS, "unexepcted command return status: %d",
+ ret);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 1, "unexepcted tablet mode: %d", ret);
+
+ tablet_set_mode(0, TABLET_TRIGGER_LID);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 1, "unexepcted tablet mode: %d", ret);
+
+ ret = shell_execute_cmd(get_ec_shell(), "tabletmode reset");
+ zassert_equal(ret, EC_SUCCESS, "unexepcted command return status: %d",
+ ret);
+
+ tablet_set_mode(0, TABLET_TRIGGER_LID);
+
+ ret = tablet_get_mode();
+ zassert_equal(ret, 0, "unexepcted tablet mode: %d", ret);
+}
+
+/**
+ * @brief TestPurpose: check the "too many arguments" case.
+ */
+ZTEST_USER(tabletmode, test_settabletmode_too_many_args)
+{
+ int ret;
+
+ ret = shell_execute_cmd(get_ec_shell(),
+ "tabletmode too many arguments");
+ zassert_equal(ret, EC_ERROR_PARAM_COUNT,
+ "unexepcted command return status: %d", ret);
+}
+
+/**
+ * @brief TestPurpose: check the "unknown argument" case.
+ */
+ZTEST_USER(tabletmode, test_settabletmode_unknown_arg)
+{
+ int ret;
+
+ ret = shell_execute_cmd(get_ec_shell(), "tabletmode X");
+ zassert_equal(ret, EC_ERROR_PARAM1,
+ "unexepcted command return status: %d", ret);
+}
+
+ZTEST_SUITE(tabletmode, drivers_predicate_post_main, NULL, tabletmode_before,
+ tabletmode_after, NULL);