@ -27,28 +27,13 @@ class Secure : public TestFixture {
void SetUp ( ) override {
void SetUp ( ) override {
secure_lock ( ) ;
secure_lock ( ) ;
}
}
// Convenience function to tap `key`.
void TapKey ( KeymapKey key ) {
key . press ( ) ;
run_one_scan_loop ( ) ;
key . release ( ) ;
run_one_scan_loop ( ) ;
}
// Taps in order each key in `keys`.
template < typename . . . Ts >
void TapKeys ( Ts . . . keys ) {
for ( KeymapKey key : { keys . . . } ) {
TapKey ( key ) ;
}
}
} ;
} ;
TEST_F ( Secure , test_lock ) {
TEST_F ( Secure , test_lock ) {
TestDriver driver ;
TestDriver driver ;
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) . Times ( 0 ) ;
// Don't allow empty reports.
EXPECT_NO_REPORT ( driver ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
secure_unlock ( ) ;
secure_unlock ( ) ;
@ -64,8 +49,8 @@ TEST_F(Secure, test_lock) {
TEST_F ( Secure , test_unlock_timeout ) {
TEST_F ( Secure , test_unlock_timeout ) {
TestDriver driver ;
TestDriver driver ;
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) . Times ( 0 ) ;
// Don't allow empty reports.
EXPECT_NO_REPORT ( driver ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
secure_unlock ( ) ;
secure_unlock ( ) ;
@ -86,13 +71,13 @@ TEST_F(Secure, test_unlock_request) {
set_keymap ( { key_mo , key_a , key_b , key_c , key_d } ) ;
set_keymap ( { key_mo , key_a , key_b , key_c , key_d } ) ;
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) . Times ( 0 ) ;
// Don't allow empty reports.
EXPECT_NO_REPORT ( driver ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
secure_request_unlock ( ) ;
secure_request_unlock ( ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
TapK eys( key_a , key_b , key_c , key_d ) ;
tap_k eys( key_a , key_b , key_c , key_d ) ;
EXPECT_TRUE ( secure_is_unlocked ( ) ) ;
EXPECT_TRUE ( secure_is_unlocked ( ) ) ;
testing : : Mock : : VerifyAndClearExpectations ( & driver ) ;
testing : : Mock : : VerifyAndClearExpectations ( & driver ) ;
@ -109,18 +94,18 @@ TEST_F(Secure, test_unlock_request_fail) {
set_keymap ( { key_e , key_a , key_b , key_c , key_d } ) ;
set_keymap ( { key_e , key_a , key_b , key_c , key_d } ) ;
// Allow any number of empty reports.
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) . Times ( AnyNumber ( ) ) ;
EXPECT_EMPTY_REPORT ( driver ) . Times ( AnyNumber ( ) ) ;
{ // Expect the following reports in this order.
{ // Expect the following reports in this order.
InSequence s ;
InSequence s ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( KC_A ) ) ) ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( KC_B ) ) ) ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( KC_C ) ) ) ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( KC_D ) ) ) ;
EXPECT_REPORT ( driver , ( KC_A ) ) ;
EXPECT_REPORT ( driver , ( KC_B ) ) ;
EXPECT_REPORT ( driver , ( KC_C ) ) ;
EXPECT_REPORT ( driver , ( KC_D ) ) ;
}
}
EXPECT_TRUE ( secure_is_locked ( ) ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
secure_request_unlock ( ) ;
secure_request_unlock ( ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
TapK eys( key_e , key_a , key_b , key_c , key_d ) ;
tap_k eys( key_e , key_a , key_b , key_c , key_d ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
testing : : Mock : : VerifyAndClearExpectations ( & driver ) ;
testing : : Mock : : VerifyAndClearExpectations ( & driver ) ;
@ -129,8 +114,8 @@ TEST_F(Secure, test_unlock_request_fail) {
TEST_F ( Secure , test_unlock_request_timeout ) {
TEST_F ( Secure , test_unlock_request_timeout ) {
TestDriver driver ;
TestDriver driver ;
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) . Times ( 0 ) ;
// Don't allow empty reports.
EXPECT_NO_REPORT ( driver ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
secure_request_unlock ( ) ;
secure_request_unlock ( ) ;
@ -153,16 +138,16 @@ TEST_F(Secure, test_unlock_request_fail_mid) {
set_keymap ( { key_e , key_a , key_b , key_c , key_d } ) ;
set_keymap ( { key_e , key_a , key_b , key_c , key_d } ) ;
// Allow any number of empty reports.
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) . Times ( AnyNumber ( ) ) ;
EXPECT_EMPTY_REPORT ( driver ) . Times ( AnyNumber ( ) ) ;
{ // Expect the following reports in this order.
{ // Expect the following reports in this order.
InSequence s ;
InSequence s ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( KC_C ) ) ) ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( KC_D ) ) ) ;
EXPECT_REPORT ( driver , ( KC_C ) ) ;
EXPECT_REPORT ( driver , ( KC_D ) ) ;
}
}
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
secure_request_unlock ( ) ;
secure_request_unlock ( ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
TapK eys( key_a , key_b , key_e , key_c , key_d ) ;
tap_k eys( key_a , key_b , key_e , key_c , key_d ) ;
EXPECT_FALSE ( secure_is_unlocking ( ) ) ;
EXPECT_FALSE ( secure_is_unlocking ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
@ -180,16 +165,16 @@ TEST_F(Secure, test_unlock_request_fail_out_of_order) {
set_keymap ( { key_e , key_a , key_b , key_c , key_d } ) ;
set_keymap ( { key_e , key_a , key_b , key_c , key_d } ) ;
// Allow any number of empty reports.
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) . Times ( AnyNumber ( ) ) ;
EXPECT_EMPTY_REPORT ( driver ) . Times ( AnyNumber ( ) ) ;
{ // Expect the following reports in this order.
{ // Expect the following reports in this order.
InSequence s ;
InSequence s ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( KC_B ) ) ) ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( KC_C ) ) ) ;
EXPECT_REPORT ( driver , ( KC_B ) ) ;
EXPECT_REPORT ( driver , ( KC_C ) ) ;
}
}
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
secure_request_unlock ( ) ;
secure_request_unlock ( ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
TapK eys( key_a , key_d , key_b , key_c ) ;
tap_k eys( key_a , key_d , key_b , key_c ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
EXPECT_FALSE ( secure_is_unlocking ( ) ) ;
EXPECT_FALSE ( secure_is_unlocking ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
EXPECT_FALSE ( secure_is_unlocked ( ) ) ;
@ -207,8 +192,8 @@ TEST_F(Secure, test_unlock_request_on_layer) {
set_keymap ( { key_mo , key_a , key_b , key_c , key_d } ) ;
set_keymap ( { key_mo , key_a , key_b , key_c , key_d } ) ;
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) . Times ( 0 ) ;
// Don't allow empty reports.
EXPECT_NO_REPORT ( driver ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
key_mo . press ( ) ;
key_mo . press ( ) ;
@ -217,7 +202,7 @@ TEST_F(Secure, test_unlock_request_on_layer) {
key_mo . release ( ) ;
key_mo . release ( ) ;
run_one_scan_loop ( ) ;
run_one_scan_loop ( ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
TapK eys( key_a , key_b , key_c , key_d ) ;
tap_k eys( key_a , key_b , key_c , key_d ) ;
EXPECT_TRUE ( secure_is_unlocked ( ) ) ;
EXPECT_TRUE ( secure_is_unlocked ( ) ) ;
EXPECT_FALSE ( layer_state_is ( 1 ) ) ;
EXPECT_FALSE ( layer_state_is ( 1 ) ) ;
@ -234,9 +219,8 @@ TEST_F(Secure, test_unlock_request_mid_stroke) {
set_keymap ( { key_e , key_a , key_b , key_c , key_d } ) ;
set_keymap ( { key_e , key_a , key_b , key_c , key_d } ) ;
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( KC_E ) ) ) ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) ;
EXPECT_REPORT ( driver , ( KC_E ) ) ;
EXPECT_EMPTY_REPORT ( driver ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
key_e . press ( ) ;
key_e . press ( ) ;
run_one_scan_loop ( ) ;
run_one_scan_loop ( ) ;
@ -244,7 +228,7 @@ TEST_F(Secure, test_unlock_request_mid_stroke) {
key_e . release ( ) ;
key_e . release ( ) ;
run_one_scan_loop ( ) ;
run_one_scan_loop ( ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
TapK eys( key_a , key_b , key_c , key_d ) ;
tap_k eys( key_a , key_b , key_c , key_d ) ;
EXPECT_TRUE ( secure_is_unlocked ( ) ) ;
EXPECT_TRUE ( secure_is_unlocked ( ) ) ;
testing : : Mock : : VerifyAndClearExpectations ( & driver ) ;
testing : : Mock : : VerifyAndClearExpectations ( & driver ) ;
@ -260,9 +244,8 @@ TEST_F(Secure, test_unlock_request_mods) {
set_keymap ( { key_lsft , key_a , key_b , key_c , key_d } ) ;
set_keymap ( { key_lsft , key_a , key_b , key_c , key_d } ) ;
// Allow any number of empty reports.
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( key_lsft . report_code ) ) ) ;
EXPECT_CALL ( driver , send_keyboard_mock ( KeyboardReport ( ) ) ) ;
EXPECT_REPORT ( driver , ( key_lsft . report_code ) ) ;
EXPECT_EMPTY_REPORT ( driver ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
EXPECT_TRUE ( secure_is_locked ( ) ) ;
key_lsft . press ( ) ;
key_lsft . press ( ) ;
run_one_scan_loop ( ) ;
run_one_scan_loop ( ) ;
@ -270,7 +253,7 @@ TEST_F(Secure, test_unlock_request_mods) {
key_lsft . release ( ) ;
key_lsft . release ( ) ;
run_one_scan_loop ( ) ;
run_one_scan_loop ( ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
EXPECT_TRUE ( secure_is_unlocking ( ) ) ;
TapK eys( key_a , key_b , key_c , key_d ) ;
tap_k eys( key_a , key_b , key_c , key_d ) ;
EXPECT_TRUE ( secure_is_unlocked ( ) ) ;
EXPECT_TRUE ( secure_is_unlocked ( ) ) ;
testing : : Mock : : VerifyAndClearExpectations ( & driver ) ;
testing : : Mock : : VerifyAndClearExpectations ( & driver ) ;