Skip to content

Remove yotta references within testing frameworks #9527

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jan 31, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion features/frameworks/greentea-client/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ For example, the `{{timeout;120}}}` string is a key-value message where the key
## Test example

```c++
#include "mbed.h"
#include "greentea-client/test_env.h"
#include "utest/utest.h"
#include "unity/unity.h"
Expand Down Expand Up @@ -83,7 +84,7 @@ status_t greentea_setup(const size_t number_of_cases) {
return greentea_test_setup_handler(number_of_cases);
}

void app_start(int, char*[]) {
void main(int, char*[]) {
Harness::run(specification);
}
```
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,7 @@
#define GREENTEA_CLIENT_TEST_ENV_H_

#ifdef __cplusplus
#ifdef YOTTA_GREENTEA_CLIENT_VERSION_STRING
#define MBED_GREENTEA_CLIENT_VERSION_STRING YOTTA_GREENTEA_CLIENT_VERSION_STRING
#else
#define MBED_GREENTEA_CLIENT_VERSION_STRING "1.3.0"
#endif

#include <stdio.h>

Expand All @@ -41,7 +37,7 @@
#endif

/**
* Auxilary macros to keep mbed-drivers compatibility with utest before greentea-client
* Ensure compatibility with utest
*/
#define TEST_ENV_TESTCASE_COUNT GREENTEA_TEST_ENV_TESTCASE_COUNT
#define TEST_ENV_TESTCASE_START GREENTEA_TEST_ENV_TESTCASE_START
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,8 @@ extern bool coverage_report;
*
* Generates preamble of message sent to notify host about code coverage data dump.
*
* This function is used by mbedOS software
* (see: mbed-drivers/source/retarget.cpp file) to generate code coverage
* This function is used by Mbed OS
* (see: mbed-os/platform/mbed_retarget.cpp) to generate code coverage
* messages to host. When code coverage feature is turned on slave will
* print-out code coverage data in form of key-value protocol.
* Message with code coverage data will contain message name, path to code
Expand All @@ -176,8 +176,8 @@ void greentea_notify_coverage_start(const char *path) {
/**
* \brief Sufix for code coverage message to master (closing statement)
*
* This function is used by mbedOS software
* (see: mbed-drivers/source/retarget.cpp file) to generate code coverage
* This function is used by Mbed OS
* (see: mbed-os/platform/mbed_retarget.cpp) to generate code coverage
* messages to host. When code coverage feature is turned on slave will
* print-out code coverage data in form of key-value protocol.
* Message with code coverage data will contain message name, path to code
Expand Down
19 changes: 12 additions & 7 deletions features/frameworks/utest/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@ The order of handler execution is:

## Example

The following example showcases a lot of functionality and proper integration with the [Greentea testing automation framework](https://github.com/ARMmbed/greentea), while making use of the [unity test macros](https://github.com/ARMmbed/mbed-os/tree/master/features/frameworks/unity):
The following example showcases a lot of functionality and proper integration with the [Greentea test tool](https://github.com/ARMmbed/mbed-os-tools/tree/master/packages/mbed-greentea), while making use of the [unity test macros](https://github.com/ARMmbed/mbed-os/tree/master/features/frameworks/unity):

```cpp
#include "mbed-drivers/test_env.h"
#include "mbed.h"
#include "greentea-client/test_env.h"
#include "utest/utest.h"
#include "unity/unity.h"

Expand All @@ -45,6 +46,7 @@ status_t test_repeats_setup(const Case *const source, const size_t index_of_case
printf("Setting up for '%s'\n", source->get_description());
return status;
}

control_t test_repeats(const size_t call_count) {
printf("Called for the %u. time\n", call_count);
TEST_ASSERT_NOT_EQUAL(3, call_count);
Expand All @@ -58,10 +60,12 @@ void test_callback_validate() {
// Validate the callback
Harness::validate_callback();
}

control_t test_asynchronous() {
TEST_ASSERT_TRUE_MESSAGE(true, "(true == false) o_O");
// Set up a callback in the future. This may also be an interrupt!
minar::Scheduler::postCallback(test_callback_validate).delay(minar::milliseconds(100));
EventQueue *queue = mbed_event_queue();
queue->call_in(100, test_callback_validate);
// Set a 200ms timeout starting from now
return CaseTimeout(200);
}
Expand All @@ -72,7 +76,8 @@ control_t test_asynchronous_timeout(const size_t call_count) {
// but automatically repeat only this handler on timeout.
if (call_count >= 5) {
// but after the 5th call, the callback finally gets validated
minar::Scheduler::postCallback(test_callback_validate).delay(minar::milliseconds(100));
EventQueue *queue = mbed_event_queue();
queue->call_in(100, test_callback_validate);
}
return CaseRepeatHandlerOnTimeout(200);
}
Expand All @@ -95,7 +100,7 @@ Case cases[] = {
// Declare your test specification with a custom setup handler
Specification specification(greentea_setup, cases);

void app_start(int, char**)
int main()
{ // Run the test specification
Harness::run(specification);
}
Expand Down Expand Up @@ -155,7 +160,7 @@ Please see the `utest/types.h` file for a detailed description.
1. `status_t case_teardown_handler_t(const Case *const source, const size_t passed, const size_t failed, const failure_t reason)`: called after execution of each test case, and if testing is aborted.
1. `status_t case_failure_handler_t(const Case *const source, const failure_t reason)`: called whenever a failure occurs during the execution of a test case.

All handlers are defaulted for integration with the [Greentea testing automation framework](https://github.com/ARMmbed/greentea).
All handlers are defaulted for integration with the [Greentea testing tool](https://github.com/ARMmbed/mbed-os-tools/tree/master/packages/mbed-greentea).

### Test Case Handlers

Expand Down Expand Up @@ -416,4 +421,4 @@ void main() // or whatever your custom entry point is
}
}
}
```
```
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@
* limitations under the License.
*/

// define this to get rid of the minar dependency.
#define YOTTA_CFG_UTEST_USE_CUSTOM_SCHEDULER 1

#include "mbed.h"
#include "greentea-client/test_env.h"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@
* limitations under the License.
*/

// define this to get rid of the minar dependency.
#define YOTTA_CFG_UTEST_USE_CUSTOM_SCHEDULER 1

#include "mbed.h"
#include "greentea-client/test_env.h"
Expand Down
56 changes: 4 additions & 52 deletions features/frameworks/utest/source/utest_shim.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,50 +18,9 @@

#include "utest/utest_shim.h"
#include "utest/utest_stack_trace.h"

#if UTEST_SHIM_SCHEDULER_USE_MINAR
#include "minar/minar.h"

static int32_t utest_minar_init()
{
return 0;
}
static void *utest_minar_post(const utest_v1_harness_callback_t callback, const uint32_t delay_ms)
{
void *handle = minar::Scheduler::postCallback(callback).delay(minar::milliseconds(delay_ms)).getHandle();
return handle;
}
static int32_t utest_minar_cancel(void *handle)
{
int32_t ret = minar::Scheduler::cancelCallback(handle);
return ret;
}
static int32_t utest_minar_run()
{
return 0;
}
extern "C" {
static const utest_v1_scheduler_t utest_v1_scheduler =
{
utest_minar_init,
utest_minar_post,
utest_minar_cancel,
utest_minar_run
};
utest_v1_scheduler_t utest_v1_get_scheduler()
{
return utest_v1_scheduler;
}
}

#elif UTEST_SHIM_SCHEDULER_USE_US_TICKER
#ifdef YOTTA_MBED_HAL_VERSION_STRING
# include "mbed-hal/us_ticker_api.h"
#else
#include "platform/SingletonPtr.h"
#include "Timeout.h"
using mbed::Timeout;
#endif

// only one callback is active at any given time
static volatile utest_v1_harness_callback_t minimal_callback;
Expand All @@ -79,7 +38,7 @@ static void ticker_handler()
static int32_t utest_us_ticker_init()
{
UTEST_LOG_FUNCTION();
// initialize the Timeout object to makes sure it is not initialized in
// initialize the Timeout object to makes sure it is not initialized in
// interrupt context.
utest_timeout_object.get();
return 0;
Expand All @@ -88,13 +47,13 @@ static void *utest_us_ticker_post(const utest_v1_harness_callback_t callback, ti
{
UTEST_LOG_FUNCTION();
timestamp_t delay_us = delay_ms *1000;

if (delay_ms) {
ticker_callback = callback;
// fire the interrupt in 1000us * delay_ms
utest_timeout_object->attach_us(ticker_handler, delay_us);
}

}
else {
minimal_callback = callback;
}
Expand Down Expand Up @@ -142,10 +101,3 @@ utest_v1_scheduler_t utest_v1_get_scheduler()
return utest_v1_scheduler;
}
}
#endif

#ifdef YOTTA_CORE_UTIL_VERSION_STRING
// their functionality is implemented using the CriticalSectionLock class
void utest_v1_enter_critical_section(void) {}
void utest_v1_leave_critical_section(void) {}
#endif
5 changes: 0 additions & 5 deletions features/frameworks/utest/utest/utest_harness.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,6 @@ namespace v1 {
* The harness executes the test specification in an asynchronous fashion, therefore
* `run()` returns immediately.
*
* By default, this harness uses the MINAR scheduler for asynchronous callbacks.
* If you wamt to provide your own custom scheduler, set `config.utest.use_custom_scheduler` to `true`
* inside your yotta config and set a custom scheduler implementation using the `set_scheduler()` function.
* You must set the scheduler before running a specification.
*
* @note In case of an test abort, the harness will busy-wait and never finish.
*/
class Harness
Expand Down
52 changes: 12 additions & 40 deletions features/frameworks/utest/utest/utest_shim.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,50 +27,22 @@
#include <stdio.h>
#include "utest/utest_scheduler.h"

#ifdef YOTTA_CFG
# include "compiler-polyfill/attributes.h"
#else
# ifndef __deprecated_message
# if defined(__CC_ARM)
# define __deprecated_message(msg) __attribute__((deprecated))
# elif defined (__ICCARM__)
# define __deprecated_message(msg)
# else
# define __deprecated_message(msg) __attribute__((deprecated(msg)))
# endif
#ifndef __deprecated_message
# if defined(__CC_ARM)
# define __deprecated_message(msg) __attribute__((deprecated))
# elif defined (__ICCARM__)
# define __deprecated_message(msg)
# else
# define __deprecated_message(msg) __attribute__((deprecated(msg)))
# endif
#endif

#ifdef YOTTA_CORE_UTIL_VERSION_STRING
# include "core-util/CriticalSectionLock.h"
# define UTEST_ENTER_CRITICAL_SECTION mbed::util::CriticalSectionLock lock
# define UTEST_LEAVE_CRITICAL_SECTION
#else
# ifndef UTEST_ENTER_CRITICAL_SECTION
# define UTEST_ENTER_CRITICAL_SECTION utest_v1_enter_critical_section()
# endif
# ifndef UTEST_LEAVE_CRITICAL_SECTION
# define UTEST_LEAVE_CRITICAL_SECTION utest_v1_leave_critical_section()
# endif
#ifndef UTEST_ENTER_CRITICAL_SECTION
# define UTEST_ENTER_CRITICAL_SECTION utest_v1_enter_critical_section()
#endif
#ifndef UTEST_LEAVE_CRITICAL_SECTION
# define UTEST_LEAVE_CRITICAL_SECTION utest_v1_leave_critical_section()
#endif

#ifndef YOTTA_CFG_UTEST_USE_CUSTOM_SCHEDULER
# ifdef YOTTA_MINAR_VERSION_STRING
# define UTEST_MINAR_AVAILABLE 1
# else
# define UTEST_MINAR_AVAILABLE 0
# endif
# ifndef UTEST_SHIM_SCHEDULER_USE_MINAR
# define UTEST_SHIM_SCHEDULER_USE_MINAR UTEST_MINAR_AVAILABLE
# endif
# ifndef UTEST_SHIM_SCHEDULER_USE_US_TICKER
# ifdef __MBED__
# define UTEST_SHIM_SCHEDULER_USE_US_TICKER 1
# else
# define UTEST_SHIM_SCHEDULER_USE_US_TICKER 0
# endif
# endif
#endif // YOTTA_CFG_UTEST_USE_CUSTOM_SCHEDULER

#ifdef __cplusplus
extern "C" {
Expand Down