Skip to content
Next Next commit
add mock for avr/sleep.h
  • Loading branch information
PRosenb committed Feb 6, 2019
commit 39a028c715e79c0a69eabff44839cf6162774aa4
65 changes: 65 additions & 0 deletions SampleProjects/TestSomething/test/sleep.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#include <ArduinoUnitTests.h>
#include <avr/sleep.h>

GodmodeState* state = GODMODE();

unittest(sleep_enable) {
state->reset();
assertFalse(state->sleep.sleep_enable);
assertEqual(0, state->sleep.sleep_enable_count);

sleep_enable();

assertTrue(state->sleep.sleep_enable);
assertEqual(1, state->sleep.sleep_enable_count);
}

unittest(sleep_disable) {
state->reset();
assertEqual(0, state->sleep.sleep_disable_count);

sleep_disable();

assertFalse(state->sleep.sleep_enable);
assertEqual(1, state->sleep.sleep_disable_count);
}

unittest(set_sleep_mode) {
state->reset();
assertEqual(0, state->sleep.sleep_mode);

set_sleep_mode(SLEEP_MODE_PWR_DOWN);

assertEqual(SLEEP_MODE_PWR_DOWN, state->sleep.sleep_mode);
}

unittest(sleep_bod_disable) {
state->reset();
assertEqual(0, state->sleep.sleep_bod_disable_count);

sleep_bod_disable();

assertEqual(1, state->sleep.sleep_bod_disable_count);
}

unittest(sleep_cpu) {
state->reset();
assertEqual(0, state->sleep.sleep_cpu_count);

sleep_cpu();

assertEqual(1, state->sleep.sleep_cpu_count);
}

unittest(sleep_mode) {
state->reset();
assertEqual(0, state->sleep.sleep_mode_count);

sleep_mode();

assertEqual(1, state->sleep.sleep_mode_count);
assertEqual(1, state->sleep.sleep_enable_count);
assertEqual(1, state->sleep.sleep_disable_count);
}

unittest_main()
22 changes: 22 additions & 0 deletions cpp/arduino/Godmode.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,16 @@ class GodmodeState {
uint8_t mode;
};

struct SleepDef {
bool sleep_enable = false;
unsigned int sleep_enable_count = 0;
unsigned int sleep_disable_count = 0;
unsigned char sleep_mode = 0;
unsigned int sleep_cpu_count = 0;
unsigned int sleep_mode_count = 0;
unsigned int sleep_bod_disable_count = 0;
};

public:
unsigned long micros;
unsigned long seed;
Expand All @@ -52,6 +62,7 @@ class GodmodeState {
struct PortDef serialPort[NUM_SERIAL_PORTS];
struct InterruptDef interrupt[MOCK_PINS_COUNT]; // not sure how to get actual number
struct PortDef spi;
struct SleepDef sleep;

void resetPins() {
for (int i = 0; i < MOCK_PINS_COUNT; ++i) {
Expand Down Expand Up @@ -85,12 +96,23 @@ class GodmodeState {
spi.readDelayMicros = 0;
}

void resetSleep() {
sleep.sleep_enable = false;
sleep.sleep_enable_count = 0;
sleep.sleep_disable_count = 0;
sleep.sleep_mode = 0;
sleep.sleep_cpu_count = 0;
sleep.sleep_mode_count = 0;
sleep.sleep_bod_disable_count = 0;
}

void reset() {
resetClock();
resetPins();
resetInterrupts();
resetPorts();
resetSPI();
resetSleep();
seed = 1;
}

Expand Down
43 changes: 43 additions & 0 deletions cpp/arduino/avr/sleep.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#ifndef _AVR_SLEEP_H_
#define _AVR_SLEEP_H_

#include <Godmode.h>

void sleep_enable() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please link to sleep-mode docs

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

GodmodeState* godmode = GODMODE();
godmode->sleep.sleep_enable = true;
godmode->sleep.sleep_enable_count++;
}

void sleep_disable() {
GodmodeState* godmode = GODMODE();
godmode->sleep.sleep_enable = false;
godmode->sleep.sleep_disable_count++;
}

void set_sleep_mode(unsigned char mode) {
GodmodeState* godmode = GODMODE();
godmode->sleep.sleep_mode = mode;
}

void sleep_bod_disable() {
GodmodeState* godmode = GODMODE();
godmode->sleep.sleep_bod_disable_count++;
}

void sleep_cpu() {
GodmodeState* godmode = GODMODE();
godmode->sleep.sleep_cpu_count++;
}

void sleep_mode() {
GodmodeState* godmode = GODMODE();
sleep_enable();
godmode->sleep.sleep_mode_count++;
sleep_disable();
}

unsigned char sfr_store;
#define _SFR_MEM8(mem_addr) sfr_store

#endif /* _AVR_SLEEP_H_ */