-
Notifications
You must be signed in to change notification settings - Fork 169
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
commit e5a5749 Author: James Fraser <wulfgar.pro@gmail.com> Date: Sun Feb 3 19:57:31 2019 +1100 PR #47: Minor review fixes to tests files. commit e9f11b9 Author: James Fraser <wulfgar.pro@gmail.com> Date: Sun Feb 3 19:57:04 2019 +1100 PR #47: Minor review fixes. commit 0a7fbec Author: Pauli Salmenrinne <pauli.salmenrinne@pexraytech.com> Date: Tue Jan 22 15:11:10 2019 +0200 Add example for the weak linking commit 6477373 Author: susundberg <susundberg@gmail.com> Date: Wed Mar 21 13:14:05 2018 +0200 Add "FFF_FUNCTION_ATTRIBUTES" definition that can be used to declare attributes for functions. More specifically, allow __weak__ attribute.
- Loading branch information
1 parent
2c5ecf5
commit 0b9e9f5
Showing
28 changed files
with
575 additions
and
165 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,9 @@ | ||
all: | ||
cd embedded_ui; $(MAKE) all | ||
cd driver_testing; $(MAKE) all | ||
|
||
cd weak_linking; $(MAKE) all | ||
clean: | ||
cd embedded_ui; $(MAKE) clean | ||
cd driver_testing; $(MAKE) clean | ||
cd weak_linking; $(MAKE) clean | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
BUILD_DIR = ../../build | ||
INCLUDE_DIRS = -I "../../" -I "./src/" | ||
|
||
BUILD_DIR_FAKE = $(BUILD_DIR)/weak_linking | ||
CC = gcc | ||
WEAK_FLAGS=-Wall -DFFF_GCC_FUNCTION_ATTRIBUTES="__attribute__((weak))" | ||
|
||
$(BUILD_DIR_FAKE)/%.o: test/%.c | ||
@echo "Compiling "$@ | ||
$(CC) $(WEAK_FLAGS) $(INCLUDE_DIRS) -g -O0 -c $< -o $@ | ||
|
||
FAKE_OBJECTS = $(BUILD_DIR_FAKE)/display.fake.o $(BUILD_DIR_FAKE)/sensor.fake.o $(BUILD_DIR_FAKE)/sensor.fake.o $(BUILD_DIR_FAKE)/error.fake.o $(BUILD_DIR_FAKE)/bus.fake.o $(BUILD_DIR_FAKE)/test_common.o | ||
|
||
TEST_BINARIES = $(BUILD_DIR_FAKE)/test_main $(BUILD_DIR_FAKE)/test_display $(BUILD_DIR_FAKE)/test_sensor | ||
mkdir: | ||
mkdir -p $(BUILD_DIR_FAKE)/ | ||
|
||
clean: | ||
rm -rf $(BUILD_DIR_FAKE)/ | ||
|
||
$(BUILD_DIR_FAKE)/libfakes.a: $(FAKE_OBJECTS) | ||
ar r $@ $^ | ||
|
||
# First case where we need __weak__ linking: | ||
# - If we have the build objects (for some reason) in order where the fake object comes first. | ||
$(BUILD_DIR_FAKE)/test_display: ./test/display.test.c $(BUILD_DIR_FAKE)/libfakes.a ./src/display.c | ||
$(CC) $(WEAK_FLAGS) $(INCLUDE_DIRS) -o $@ $^ | ||
|
||
# Second case where we need weak linking: | ||
# - If we use an object from the fake object -> gcc linker will include it. | ||
$(BUILD_DIR_FAKE)/test_sensor: ./test/sensor.test.c ./src/sensor.c $(BUILD_DIR_FAKE)/libfakes.a | ||
$(CC) $(WEAK_FLAGS) $(INCLUDE_DIRS) -o $@ $^ | ||
|
||
# Third case where we need weak linking: | ||
# - We want to fake one function but not all. | ||
$(BUILD_DIR_FAKE)/test_main: ./test/main.test.c ./src/main.c $(BUILD_DIR_FAKE)/libfakes.a | ||
$(CC) $(WEAK_FLAGS) $(INCLUDE_DIRS) -o $@ $^ | ||
|
||
all: mkdir $(TEST_BINARIES) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#pragma once | ||
|
||
uint16_t* BUS_REGISTER_BASE = (uint16_t*)0xDEADBEEF; | ||
|
||
typedef struct | ||
{ | ||
uint16_t action; | ||
uint16_t reg; | ||
uint8_t input; | ||
uint8_t output | ||
} BusDevice; | ||
|
||
BusDevice* BUS = (BusDevice*)BUS_REGISTER_BASE; | ||
|
||
bool bus_read_write( uint8_t dev, uint8_t registry, uint8_t* buffer, int len, bool assume_echo ) | ||
{ | ||
// Something that we dont want to run, since the emulation would be hard. | ||
BUS->action = 0x01; | ||
BUS->reg = registry; | ||
for ( int loop =0 ; loop < len; loop ++ ) | ||
{ | ||
char output = buffer[loop]; | ||
BUS->output = output; | ||
buffer[loop] = BUS->input; | ||
|
||
if ( ( assume_echo ) && ( buffer[loop] != output ) ) | ||
return false; | ||
} | ||
return true; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#pragma once | ||
|
||
#include "error.h" | ||
|
||
bool bus_read_write( uint8_t dev, uint8_t registry, uint8_t* buffer, int len, bool assume_echo ); | ||
bool bus_write( uint8_t dev, uint8_t registry, const uint8_t* buffer, int len, bool assume_echo ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
#include <string.h> | ||
|
||
#include "display.h" | ||
#include "bus.h" | ||
|
||
#define DISPLAY_ADDRESS 0xAF | ||
#define DISPLAY_REG_INIT 0x10 | ||
#define DISPLAY_REG_UPDATE 0x20 | ||
|
||
bool display_init() | ||
{ | ||
char init_config[] = { 0xDE, 0xFE, 0x00 }; | ||
bus_read_write( DISPLAY_ADDRESS, DISPLAY_REG_INIT, (uint8_t*)init_config, 3, false ); | ||
|
||
if (init_config[2] != 0x10) | ||
return false; | ||
|
||
return true; | ||
} | ||
|
||
void display_update( const char* info ) | ||
{ | ||
int len = strlen( info ); | ||
|
||
if ( bus_write( DISPLAY_ADDRESS, DISPLAY_REG_UPDATE, (const uint8_t*)info, len, true ) != true ) | ||
{ | ||
runtime_error("display update failed!"); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
#pragma once | ||
#include "error.h" | ||
|
||
bool display_init(); | ||
void display_update( const char* info ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#include <assert.h> | ||
#include "error.h" | ||
|
||
char* runtime_error_nice_print( const char* msg ) | ||
{ | ||
char* buffer = malloc(512); | ||
snprintf(buffer, 512, "Got error: %s", msg ); | ||
buffer[511] = 0; | ||
return buffer; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#pragma once | ||
|
||
#include <stdint.h> | ||
#include <stdbool.h> | ||
|
||
void runtime_error( const char* msg ); | ||
char* runtime_error_nice_print( const char* msg ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
#include <stdlib.h> | ||
#include <stdio.h> | ||
|
||
#include "display.h" | ||
#include "sensor.h" | ||
|
||
void give_error( const char* msg ) | ||
{ | ||
char* buffer = runtime_error_nice_print( msg ); | ||
runtime_error( buffer ); | ||
free(buffer); | ||
} | ||
|
||
int update_main( void ) | ||
{ | ||
if ( !sensor_init() ) | ||
runtime_error("sensor init failed"); | ||
|
||
if ( !display_init() ) | ||
runtime_error("display init failed"); | ||
|
||
char buffer[32]; | ||
float reading = sensor_read(); | ||
snprintf( buffer, 32, "Sensor: %0.1f", reading ); | ||
display_update( buffer ); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
#include <string.h> | ||
|
||
#include "sensor.h" | ||
#include "bus.h" | ||
|
||
#define SENSOR_ADDRESS 0xAA | ||
#define SENSOR_REG_READ 0xF0 | ||
|
||
float LOCAL_buffer[4]; | ||
|
||
bool sensor_init() | ||
{ | ||
memset( LOCAL_buffer, 0x00, sizeof(LOCAL_buffer)); | ||
return true; | ||
} | ||
|
||
float sensor_read() | ||
{ | ||
char data[4] = { 0xFF, 0xFF, 0x00, 0x00 }; | ||
bus_read_write( SENSOR_ADDRESS, SENSOR_REG_READ, (uint8_t*)&data, 4, false ); | ||
|
||
if (data[0] != 0x10) | ||
{ | ||
runtime_error("sensor read failed"); | ||
} | ||
|
||
float ret_value = data[1] + data[2] / 256.0; | ||
return ret_value; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#pragma once | ||
|
||
#include "error.h" | ||
|
||
bool sensor_init(); | ||
float sensor_read(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#include "bus.fake.h" | ||
|
||
DEFINE_FAKE_VALUE_FUNC( bool, bus_read_write, uint8_t, uint8_t, uint8_t*, int, bool ); | ||
DEFINE_FAKE_VALUE_FUNC( bool, bus_write, uint8_t, uint8_t, const uint8_t*, int, bool ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#ifndef _AUTOFAKE_BUS_H | ||
#define _AUTOFAKE_BUS_H | ||
|
||
#include "fff.h" | ||
#include "bus.h" | ||
|
||
DECLARE_FAKE_VALUE_FUNC( bool, bus_read_write, uint8_t, uint8_t, uint8_t*, int, bool ); | ||
DECLARE_FAKE_VALUE_FUNC( bool, bus_write, uint8_t, uint8_t, const uint8_t*, int, bool ); | ||
|
||
#endif // _AUTOFAKE_BUS_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#include "display.fake.h" | ||
|
||
DEFINE_FAKE_VALUE_FUNC( bool, display_init ); | ||
DEFINE_FAKE_VOID_FUNC( display_update, const char* ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#ifndef _AUTOFAKE_DISPLAY_H | ||
#define _AUTOFAKE_DISPLAY_H | ||
|
||
#include "fff.h" | ||
#include "display.h" | ||
|
||
DECLARE_FAKE_VALUE_FUNC( bool, display_init ); | ||
DECLARE_FAKE_VOID_FUNC( display_update, const char* ); | ||
|
||
#endif // _AUTOFAKE_DISPLAY_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
#include "test_common.h" | ||
#include "display.h" | ||
|
||
DEFINE_FFF_GLOBALS; | ||
|
||
|
||
int main(void) | ||
{ | ||
init_tests(); // Resets common and hook errors to asserts. | ||
|
||
GLOBAL_TEST_bus_read_ret[2] = 0x10; | ||
assert( display_init() == true ); | ||
assert( bus_read_write_fake.call_count == 1); | ||
|
||
display_update( "TEST INFO" ); | ||
assert( bus_read_write_fake.call_count == 1 ); | ||
assert( bus_write_fake.call_count == 1 ); | ||
|
||
GLOBAL_TEST_bus_read_ret[2] = 0x00; | ||
assert( display_init() == false ); | ||
|
||
printf("Test " __FILE__ " ok\n"); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#include "error.fake.h" | ||
|
||
DEFINE_FAKE_VOID_FUNC( runtime_error, const char* ); | ||
DEFINE_FAKE_VALUE_FUNC( char*, runtime_error_nice_print, const char* ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#ifndef _AUTOFAKE_ERROR_H | ||
#define _AUTOFAKE_ERROR_H | ||
|
||
#include "fff.h" | ||
#include "error.h" | ||
|
||
DECLARE_FAKE_VOID_FUNC( runtime_error, const char* ); | ||
DECLARE_FAKE_VALUE_FUNC( char*, runtime_error_nice_print, const char* ); | ||
|
||
#endif // _AUTOFAKE_ERROR_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
|
||
#include "display.fake.h" | ||
#include "sensor.fake.h" | ||
#include "test_common.h" | ||
|
||
DEFINE_FFF_GLOBALS; | ||
|
||
|
||
int update_main( void ); | ||
|
||
int main(void) | ||
{ | ||
init_tests(); // Resets common and hook errors to asserts. | ||
|
||
sensor_init_fake.return_val = true; | ||
display_init_fake.return_val = true; | ||
|
||
update_main(); | ||
|
||
assert( sensor_init_fake.call_count == 1 ); | ||
assert( display_init_fake.call_count == 1 ); | ||
assert( display_update_fake.call_count == 1 ); | ||
|
||
printf("Test " __FILE__ " ok\n"); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#include "sensor.fake.h" | ||
|
||
DEFINE_FAKE_VALUE_FUNC( bool, sensor_init ); | ||
DEFINE_FAKE_VALUE_FUNC( float, sensor_read ); | ||
|
||
void TEST_sensor_generate_data( char* buffer, float value ) | ||
{ | ||
buffer[0] = 0x10; | ||
buffer[1] = (int)(value); | ||
buffer[2] = (value - buffer[1])*255; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
|
||
#ifndef _AUTOMOCK_SENSOR_H | ||
#define _AUTOMOCK_SENSOR_H | ||
|
||
#include "fff.h" | ||
#include "sensor.h" | ||
|
||
DECLARE_FAKE_VALUE_FUNC( bool, sensor_init ); | ||
DECLARE_FAKE_VALUE_FUNC( float, sensor_read ); | ||
|
||
void TEST_sensor_generate_data( char* buffer, float value ); | ||
|
||
#endif // _AUTOMOCK_SENSOR_H |
Oops, something went wrong.