unified_retro_keyboard/firmware/asdf/test/test_asdf_modifiers.c
Dave ed761974e6 Modifiers cleanup
- asdf_modifiers.[ch]: Replace asdf_modifier_shiftlock_activate() with
  asdf_modifier_shiftlock_on_activate() and
  asdf_modifier_shiftlock_toggle_activate().  Instead of a configurateion
  setting for shiftlock state to switch between SHIFTLOCK locks on, SHIFT turns
  off, vs SHIFTLOCK toggles, and SHIFT turns off, create two different
  SHIFTLOCK functions, one for each behavior, and allow the keymap to bind the
  desired function.

- asdf.h: replace ACTION_SHIFTLOCK with ACTION_SHIFTLOCK_ON and
  ACTION_SHIFTLOCK_TOGGLE.

- asdf.h: move start of ACTION codes from 0x80 to 0x90, since SOL-20 uses codes
  from 0x80-0x8f.

- asdf.c: test for ACTION code using (code > ASDF_ACTION) instead of (code &
  ASDF_ACTION), since ASDF_ACTION need not be a power of 2.

- asdf_modifiers.[ch] and other files: remove
  asdf_modifiers_shiftlock_deactivate() and
  asdf_modifiers_capslock_deactivate(), and any references to these functions
  since they are null functions anyway.
2020-03-14 00:11:29 -05:00

284 lines
6.6 KiB
C

#include <stdint.h>
#include "unity.h"
#include "asdf_modifiers.h"
#define TESTMAP(a) \
do { \
uint32_t map = (uint32_t) asdf_modifier_index(); \
TEST_ASSERT_EQUAL_INT((a), map); \
} while (0);
void setUp(void)
{
asdf_modifiers_init();
}
void tearDown(void) {}
// initial map is plain
void initial_map_is_plain(void)
{
TESTMAP(MOD_PLAIN_MAP);
}
// SHIFT gives shift map
void shift_gives_shiftmap(void)
{
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// SHIFT press & release gives plain map
void shift_and_release_gives_plain(void)
{
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_deactivate();
TESTMAP(MOD_PLAIN_MAP);
}
// CAPSLOCK gives caps map
void capslock_gives_caps(void)
{
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
}
// CAPLOCK press and release gives caps map
void capslock_and_release_gives_caps(void)
{
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
TESTMAP(MOD_CAPS_MAP);
}
// CAPS-release-CAPS give plain
void caps_release_caps_gives_plain(void)
{
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_capslock_activate();
TESTMAP(MOD_PLAIN_MAP);
}
// CAPS-release-CAPS-release will first activate CAPS mode then deactivation,
// resulting in final plain map.
void caps_release_caps_release_gives_plain(void)
{
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_capslock_activate();
TESTMAP(MOD_PLAIN_MAP);
}
// If SHIFT and CAPS are activated, the SHIFT map results
void shift_and_caps_gives_shift(void)
{
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// IF CAPS map is active, pressing and releasing SHIFT reverts to CAPS
void caps_shift_unshift_gives_caps(void)
{
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_deactivate();
TESTMAP(MOD_CAPS_MAP);
}
// Capslock and SHiftlock gives SHIFT
void capslock_shiftlock_gives_shift(void)
{
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// Pressing CAPSLOCK and SHIFTLOCK, then CAPSLOCK again gives shift map.
void capslock_shiftlock_capslock_gives_shift(void)
{
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_capslock_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// Pressing CAPSLOCK and SHIFTLOCK, then press and releast SHIFT (to deactivate
// the shiftlock) again gives shift map.
void capslock_shiftlock_shift_gives_caps(void)
{
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_activate();
asdf_modifier_shift_deactivate();
TESTMAP(MOD_CAPS_MAP);
}
// SHIFTLOCK press gives shift map
void shiftlock_gives_shift(void)
{
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// SHIFTLOCK press and release gives shift map
void shiftlock_and_release_gives_shift(void)
{
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// SHIFTLOCK and SHIFT gives shift map
void shiftlock_shift_gives_shift(void)
{
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// SHIFTLOCK and SHIFT press and release gives plain map
void shiftlock_shift_release_gives_plain(void)
{
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_activate();
asdf_modifier_shift_deactivate();
TESTMAP(MOD_PLAIN_MAP);
}
// CTRL gives ctrl map
void ctrl_gives_ctrl_map(void)
{
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
}
// CTRL press and release gives plain map
void ctrl_release_gives_plain_map(void)
{
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_ctrl_activate();
asdf_modifier_ctrl_deactivate();
TESTMAP(MOD_PLAIN_MAP);
}
// SHIFT + CTRL is ctrl map
void ctrl_shift_gives_ctrl_map(void)
{
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_shift_activate();
TESTMAP(MOD_CTRL_MAP);
}
// CAPSLOCK and CTRL is ctrl map
void ctrl_caps_gives_ctrl_map(void)
{
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CTRL_MAP);
}
// SHIFTLOCK and CTRL is ctrl map
void ctrl_shiftlock_gives_ctrl_map(void)
{
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_CTRL_MAP);
}
void ctrl_double_caps_returns_to_ctrl_map(void)
{
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CTRL_MAP);
}
void ctrl_double_shiftlock_returns_to_ctrl_map(void)
{
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_CTRL_MAP);
}
int main(void)
{
UNITY_BEGIN();
RUN_TEST(initial_map_is_plain);
RUN_TEST(shift_gives_shiftmap);
RUN_TEST(shift_and_release_gives_plain);
RUN_TEST(capslock_gives_caps);
RUN_TEST(capslock_and_release_gives_caps);
RUN_TEST(caps_release_caps_gives_plain);
RUN_TEST(caps_release_caps_release_gives_plain);
RUN_TEST(shift_and_caps_gives_shift);
RUN_TEST(caps_shift_unshift_gives_caps);
RUN_TEST(capslock_shiftlock_gives_shift);
RUN_TEST(capslock_shiftlock_capslock_gives_shift);
RUN_TEST(capslock_shiftlock_shift_gives_caps);
RUN_TEST(shiftlock_gives_shift);
RUN_TEST(shiftlock_and_release_gives_shift);
RUN_TEST(shiftlock_shift_gives_shift);
RUN_TEST(shiftlock_shift_release_gives_plain);
RUN_TEST(ctrl_gives_ctrl_map);
RUN_TEST(ctrl_release_gives_plain_map);
RUN_TEST(ctrl_shift_gives_ctrl_map);
RUN_TEST(ctrl_caps_gives_ctrl_map);
RUN_TEST(ctrl_shiftlock_gives_ctrl_map);
RUN_TEST(ctrl_double_caps_returns_to_ctrl_map);
RUN_TEST(ctrl_double_shiftlock_returns_to_ctrl_map);
// toggle shiftlock_mode switches the shiftlock behavior to toggle_mode
// calling toggle_shiftlock_mode twice leaves shiftlock behavior in hold mode
// calling toggle_shiftlock_mode three times leaves shiftlock behavior in toggle mode
return UNITY_END();
}