Templates are now composed declaratively via template.toml -- no Rust code changes needed to add new templates. The weather station is the first composed template, demonstrating the full pattern. Template engine: - Composed templates declare base, required libraries, and per-board pins - Overlay mechanism replaces base files (app, sketch, tests) cleanly - Generic orchestration: extract base, apply overlay, install libs, assign pins - Template name tracked in .anvil.toml for refresh awareness Weather template (--template weather): - WeatherApp with 2-second polling, C/F conversion, serial output - TMP36 driver: TempSensor interface, Tmp36 impl, Tmp36Mock, Tmp36Sim - Managed example tests in test_weather.cpp (unit + system) - Minimal student starters in test_unit.cpp and test_system.cpp - Per-board pin defaults (A0 for uno, A0 for mega, A0 for nano) .anvilignore system: - Glob pattern matching (*, ?) with comments and backslash normalization - Default patterns protect student tests, app code, sketch, config - anvil refresh --force respects .anvilignore - anvil refresh --force --file <path> overrides ignore for one file - anvil refresh --ignore/--unignore manages patterns from CLI - Missing managed files always recreated even without --force - .anvilignore itself is in NEVER_REFRESH (cannot be overwritten) Refresh rewrite: - Discovers all template-produced files dynamically (no hardcoded list) - Extracts fresh template + libraries into temp dir for byte comparison - Config template field drives which files are managed - Separated missing-file creation from changed-file updates 428 tests passing on Windows MSVC, 0 warnings.
31 lines
747 B
Cheetah
31 lines
747 B
Cheetah
/*
|
|
* test_unit.cpp -- Your unit tests go here.
|
|
*
|
|
* This file is YOURS. Anvil will never overwrite it.
|
|
* The weather station example tests are in test_weather.cpp.
|
|
*
|
|
* Unit tests use MockHal and Tmp36Mock to verify exact behavior
|
|
* without real hardware. See test_weather.cpp for examples.
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <gmock/gmock.h>
|
|
|
|
#include "hal.h"
|
|
#include "mock_hal.h"
|
|
#include "tmp36_mock.h"
|
|
#include "{{PROJECT_NAME}}_app.h"
|
|
|
|
using ::testing::_;
|
|
using ::testing::AnyNumber;
|
|
using ::testing::Return;
|
|
|
|
// Example: add your own tests below
|
|
// TEST(MyTests, DescribeWhatItTests) {
|
|
// ::testing::NiceMock<MockHal> mock;
|
|
// Tmp36Mock sensor;
|
|
// sensor.setTemperature(25.0f);
|
|
//
|
|
// // ... your test logic ...
|
|
// }
|