Skip to content

Commit f0893b3

Browse files
committed
added tests for write_display
1 parent 7c66cef commit f0893b3

File tree

2 files changed

+49
-8
lines changed

2 files changed

+49
-8
lines changed

src/mock.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
use super::devices::I2CMasterDevice;
22
use std::io::Result;
33

4+
pub type WriteCb = fn(i32, u8, &[u8]) -> ();
5+
46
pub struct MockDevice {
7+
write_block_counter: i32,
8+
write_block_cb: WriteCb
9+
10+
// TODO add write_block_cb: fn(i32) -> void and call counter to MockDevice
511
}
612

713
impl MockDevice {
8-
pub fn new() -> MockDevice {
9-
return MockDevice {};
14+
pub fn new(write_block_cb: WriteCb) -> MockDevice {
15+
return MockDevice {write_block_cb: write_block_cb, write_block_counter: 0};
1016
}
1117
}
1218

1319
impl I2CMasterDevice for MockDevice {
14-
fn write_block(&mut self, _register: u8, _values: &[u8]) -> Result<()> {
20+
fn write_block(&mut self, register: u8, values: &[u8]) -> Result<()> {
21+
let cb = self.write_block_cb;
22+
cb(self.write_block_counter, register, values);
23+
self.write_block_counter += 1;
1524
return Ok(());
1625
}
1726
}

tests/core.rs

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ use trellis::core::Trellis;
55
use trellis::core::Row;
66
use trellis::core::Col;
77
use trellis::mock::MockDevice;
8+
use trellis::mock::WriteCb;
9+
10+
const FIRST_NON_INIT_CALL_ID:i32 = 4;
811

912
#[test]
1013
fn should_set_led() {
@@ -30,18 +33,47 @@ fn should_clear_led() {
3033
assert_eq!(trellis.is_led_set(Col::B, Row::R2), false);
3134
}
3235

36+
#[test]
37+
fn should_write_inital_display_data_to_i2c() {
38+
fn write_cb(i:i32, reg: u8, values: &[u8]) {
39+
if i >= FIRST_NON_INIT_CALL_ID {
40+
let expected_vals:[u8; 16] = [0; 16];
41+
assert_eq!(i, FIRST_NON_INIT_CALL_ID);
42+
assert_eq!(reg, 0);
43+
assert_eq!(values, expected_vals);
44+
}
45+
}
46+
let mut trellis = new_trellis_with_cb(write_cb);
47+
trellis.write_display();
48+
}
49+
3350
#[test]
3451
fn should_write_display_data_to_i2c() {
35-
// TODO
52+
fn write_cb(i:i32, reg: u8, values: &[u8]) {
53+
if i >= FIRST_NON_INIT_CALL_ID {
54+
let expected_vals:[u8; 16] = [4, 0, 2, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0];
55+
assert_eq!(i, FIRST_NON_INIT_CALL_ID);
56+
assert_eq!(reg, 0);
57+
assert_eq!(values, expected_vals);
58+
}
59+
}
60+
let mut trellis = new_trellis_with_cb(write_cb);
61+
trellis.set_led(Col::A, Row::R0);
62+
trellis.set_led(Col::B, Row::R1);
63+
trellis.set_led(Col::C, Row::R2);
64+
trellis.set_led(Col::D, Row::R3);
65+
trellis.write_display();
3666
}
3767

3868
// helper
3969

40-
/**
41-
*
42-
*/
4370
fn new_trellis() -> Trellis {
44-
let mock_dev = MockDevice::new();
71+
fn noop(_i:i32, _reg:u8, _vals: &[u8]) {};
72+
return new_trellis_with_cb(noop);
73+
}
74+
75+
fn new_trellis_with_cb(cb: WriteCb) -> Trellis {
76+
let mock_dev = MockDevice::new(cb);
4577
let mut trellis = Trellis::new(Box::new(mock_dev));
4678
trellis.init();
4779
return trellis;

0 commit comments

Comments
 (0)