| # Unit Tests & Strings | |
| |||---||| | |
| *** aside | |
| #### [00: <br/> Setup](/workshop/README.md) | |
| `Intro + setup.` | |
| *** | |
| *** aside | |
| #### [01: <br/> Blinky](/workshop/01-blinky/README.md) | |
| `Getting to blinky.` | |
| *** | |
| *** promo | |
| #### [02: <br/> Testing](/workshop/02-string-functions/README.md) | |
| `Writing tests.` | |
| *** | |
| *** aside | |
| #### [03: <br/> RPC](/workshop/03-rpc/README.md) | |
| `Calling RPCs.` | |
| *** | |
| *** aside | |
| #### [04: <br/> KVS](/workshop/04-kvs/README.md) | |
| `Key Value Store.` | |
| *** | |
| *** aside | |
| #### [05: <br/> FactoryTest](/workshop/05-factory-test/README.md) | |
| `Testing in the factory.` | |
| *** | |
| |||---||| | |
| [TOC] | |
| ## Build and Flash | |
| Instructions are the same as flashing [blinky](/workshop/01-blinky/README.md) | |
| but passing in a different `.elf`. | |
| 1. Run the compile with `pw watch out` or `ninja -C out`. | |
| 1. Flash the test `.elf` | |
| ```sh | |
| arduino_unit_test_runner --config out/arduino_debug/gen/arduino_builder_config.json --upload-tool teensyloader --verbose --flash-only out/arduino_debug/obj/workshop/02-string-functions/bin/string_demo.elf | |
| ``` | |
| 1. Tail the output with `miniterm`, (use `Ctrl-]` to quit). | |
| ```sh | |
| python -m serial.tools.miniterm --raw - 115200 | |
| ``` | |
| You should see something like: | |
| ```text | |
| $ python -m serial.tools.miniterm --raw - 115200 | |
| --- Available ports: | |
| --- 1: /dev/ttyACM0 'USB Serial' | |
| --- Enter port index or full name: 1 | |
| --- Miniterm on /dev/ttyACM0 115200,8,N,1 --- | |
| --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- | |
| INF Teensy Time: RTC has set the system time. | |
| INF Offs. 0 1 2 3 4 5 6 7 8 9 a b c d e f Text | |
| INF 0000: 53 75 70 65 72 20 53 69 6d 70 6c 65 20 54 69 6d Super Simple Tim | |
| INF 0010: 65 20 4c 6f 67 67 69 6e 67 21 00 e Logging!. | |
| INF 2020-11-04 14:35:35 | |
| INF 2020-11-04 14:35:36 | |
| INF 2020-11-04 14:35:37 | |
| INF 2020-11-04 14:35:38 | |
| INF 2020-11-04 14:35:39 | |
| --- exit --- | |
| ``` | |
| All tests are set to use plain text logging. This is specified by the | |
| `pw_log_BACKEND` variable in the `target_toolchain.gni` files. For example | |
| the `arduino_debug_tests` toolchain in | |
| [`$dir_pigweed_experimental/targets/arduino/target_toolchains.gni`](/targets/arduino/target_toolchains.gni) | |
| defines: `pw_log_BACKEND = "$dir_pw_log_basic"` | |
| ## Exercise | |
| **Goal:** Write a test for the | |
| [`GetStatusString()`](/workshop/02-string-functions/system_status.cc#9) | |
| function. | |
| It can be added to | |
| [/workshop/02-string-functions/system_status_test.cc](/workshop/02-string-functions/system_status_test.cc). | |
| *** promo | |
| - Refer to the [gTest string comparison | |
| documentation](https://github.com/google/googletest/blob/master/googletest/docs/primer.md#string-comparison) | |
| for how to check the contents of strings. | |
| - Note that [gMock | |
| matchers](https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#more-string-assertions) | |
| are not supported in Pigweed yet. | |
| *** | |
| ## Runing Tests | |
| ### Run a Single Test Manually | |
| After compiling use `arduino_unit_test_runner` to flash and check test output. | |
| **Teensy** | |
| ```sh | |
| arduino_unit_test_runner --config out/arduino_debug/gen/arduino_builder_config.json --upload-tool teensyloader --verbose out/arduino_debug/obj/workshop/02-string-functions/test/system_status_test.elf | |
| ``` | |
| **stm32f429i_disc1** | |
| ```sh | |
| stm32f429i_disc1_unit_test_runner --verbose out/stm32f429i_disc1_debug/obj/workshop/02-string-functions/test/system_status_test.elf | |
| ``` | |
| ### Using the Test Server. | |
| 1. Make sure the `pw_arduino_use_test_server=true` build arg is set. | |
| 1. Start the unit test server for your board. | |
| **Teensy** | |
| ```sh | |
| arduino_test_server --verbose --config-file ./out/arduino_debug/gen/arduino_builder_config.json | |
| ``` | |
| **stm32f429i_disc1** | |
| ```sh | |
| stm32f429i_disc1_test_server --verbose | |
| ``` | |
| 1. In a separate terminal start pw watch. | |
| ```sh | |
| pw watch out | |
| ``` |