Skip to content

Commit b955dfd

Browse files
authored
Merge pull request #25 from bxparks/develop
0.5.0 - support verbose messages with AUnitVerbose.h
2 parents 0d12224 + 5838293 commit b955dfd

File tree

249 files changed

+5472
-3040
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

249 files changed

+5472
-3040
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
* 0.5.0 (2018-04-25)
4+
* Support verbose assertion messages using AUnitVerbose.h. Fixes #8.
5+
* Better assertion messages for assertTrue() and assertFalse(). Fixes #17.
6+
* Print duration of test runner at the end. Fixes #18.
7+
* Extract meta assertion tests to tests/AUnitMetaTest, so that core
8+
tests/AUnitTest can fit inside an Arduino Micro.
39
* 0.4.2 (2018-04-10)
410
* Fix FSM for excluded tests so that they bypass setup() and teardown().
511
* 0.4.1 (2018-04-06)

README.md

Lines changed: 99 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
A unit testing framework for Arduino platforms inspired by ArduinoUnit and
44
Google Test.
55

6-
Version: 0.4.2 (2018-04-10)
6+
Version: 0.5.0 (2018-04-25)
77

88
## Summary
99

@@ -20,10 +20,9 @@ AUnit was created to solve 3 problems with ArduinoUnit:
2020
Arduino UNO, Nano) as explained in
2121
[ArduinoUnit#70](https://github.com/mmurdoch/arduinounit/issues/70).
2222
* ArduinoUnit does not compile on the ESP8266 platform (see
23-
[ArduinoUni#68](https://github.com/mmurdoch/arduinounit/issues/68),
24-
[ArduinoUni#57](https://github.com/mmurdoch/arduinounit/pull/57),
25-
[ArduinoUni#55](https://github.com/mmurdoch/arduinounit/issues/55),
26-
[ArduinoUni#54](https://github.com/mmurdoch/arduinounit/issues/54)).
23+
[ArduinoUnit#68](https://github.com/mmurdoch/arduinounit/issues/68),
24+
[ArduinoUnit#55](https://github.com/mmurdoch/arduinounit/issues/55),
25+
[ArduinoUnit#54](https://github.com/mmurdoch/arduinounit/issues/54)).
2726
* ArduinoUnit does not provide an easy way to create tests using fixtures,
2827
equivalent to the `TEST_F()` macro in Google Test.
2928

@@ -72,29 +71,33 @@ Here are the features which have not been ported over from ArduinoUnit:
7271

7372
Here are the features in AUnit which are not available in ArduinoUnit:
7473

75-
* The `TestRunner` supports a configurable timeout parameter which
76-
can prevent `testing()` test cases from running forever. The following
77-
methods and macros are available in AUnit to support this feature:
74+
* Configurable timeout parameter to prevent `testing()` test cases from
75+
running forever:
7876
* `TestRunner::setTimeout(seconds)`
7977
* `Test::expire()`
8078
* `assertTestExpire()`
8179
* `assertTestNotExpire()`
8280
* `checkTestExpire()`
8381
* `checkTestNotExpire()`
84-
* AUnit adds support for test fixtures using the "F" variations of existing
85-
macros:
82+
* Test fixtures using the "F" variations of existing macros:
8683
* `testF()`
8784
* `testingF()`
8885
* `assertTestXxxF()`
8986
* `checkTestXxxF()`
9087
* `externTestF()`
9188
* `externTestingF()`
92-
* AUnit supports the `teardown()` method to clean up test fixtures after
93-
the `setup()` method.
94-
* AUnit is tested on the AVR (8-bit), Teensy ARM (32-bit) , and ESP8266 (32-bit)
95-
Arduino platforms.
96-
* Test filters (`TestRunner::include()` and `TestRunner::exclude()`) support the
97-
same 2 arguments versions corresponding to `testF()` and `testingF()`
89+
* `teardown()` method, mirroring the `setup()`
90+
* `teardown()`
91+
* Tested on the following Arduino platforms:
92+
* AVR (8-bit)
93+
* Teensy ARM (32-bit)
94+
* ESP8266 (32-bit)
95+
* Test filters support the 2 arguments versions:
96+
* `TestRunner::include(testClass, name)` - matching `testF()`
97+
* `TestRunner::exclude(testClass, name)` - matching `testingF()`
98+
* Terse and verbose modes:
99+
* `#include <AUnit.h>` - terse messages uses less flash memory
100+
* `#include <AUnitVerbose.h>` - verbose messages uses more flash
98101

99102
### Beta Status
100103

@@ -137,8 +140,11 @@ The `examples/` directory has a number of examples:
137140

138141
In the `tests/` directory:
139142

140-
* `AUnitTest` - the unit test for `AUnit` itself has a large number of examples
143+
* `AUnitTest` - the unit test for core `AUnit` functions,
144+
* `AUnitMetaTest` - the unit test for meta assertions and `extern*()` macros
141145
* `FilterTest` - manual tests for `include()` and `exclude()` filters
146+
* `SetupAndTeardownTest` - tests to verify that `setup()` and `teardown()` are
147+
called properly by the finite state machine
142148

143149
### Header and Namespace
144150

@@ -162,6 +168,22 @@ Similar to ArduinoUnit, many of the "functions" in this framework (e.g.
162168
in the global namespace, so it is usually not necessary to import the entire
163169
`aunit` namespace.
164170

171+
### Verbose Mode
172+
173+
By default, AUnit generates terse assertion messages by leaving out
174+
the string arguments of the various `assertXxx()` macros. If you would like
175+
to get the same verbose output as ArduinoUnit, use the following header
176+
instead:
177+
178+
```
179+
#include <AUnitVerbose.h>
180+
```
181+
182+
The flash memory consumption on an 8-bit AVR may go up by 20-25% for medium to
183+
large tests. On Teensy ARM or ESP8266, the increased memory size probably does
184+
not matter too much because these microcontrollers have far more flash and
185+
static memory.
186+
165187
### Defining the Tests
166188

167189
The usage of **AUnit** is basically identical to **ArduinoUnit**. The following
@@ -177,8 +199,8 @@ subclass derived from the base class indicated above. The `test()` and `testF()`
177199
macros place the code body into the `TestOnce::once()` method. The `testing()`
178200
and `testingF()` macros place the code body into the `TestAgain::again()`
179201
method. The name of the subclass is a concatenation of the string `"test_"` and
180-
the `name` (for `test()` and `testing()`) the `classname` and the `name` (for
181-
`testF()` and `testing()`).
202+
the `name` for `test()` and `testing()`, or the concatenation of
203+
`classname` + `"_"` + `name` for `testF()` and `testing()`.
182204

183205
The argument to these macros are the name of the test case, and is used to
184206
generate a name for the subclass. (The name is available within the test code
@@ -844,6 +866,31 @@ The error message (if enabled, which is the default) is:
844866
Assertion failed: (3) == (4), file AUnitTest.ino, line 134.
845867
```
846868

869+
Asserts with `bool` values produce customized messages, printing "true" or
870+
"false" instead of using the Print class default conversion to `int`:
871+
```
872+
assertEquals(true, false);
873+
874+
Assertion failed: (true) == (false), file AUnitTest.ino, line 134.
875+
```
876+
877+
Similarly, the `assertTrue()` and `assertFalse()` macros provide more customized
878+
messages:
879+
```
880+
bool ok = false;
881+
assertTrue(ok);
882+
883+
Assertion failed: (false) is true, file AUnitTest.ino, line 134.
884+
```
885+
886+
and
887+
```
888+
bool ok = true;
889+
assertFalse(ok);
890+
891+
Assertion failed: (true) is false, file AUnitTest.ino, line 134.
892+
```
893+
847894
***ArduinoUnit Compatibility***:
848895
_ArduinoUnit captures the arguments of the `assertEqual()` macro
849896
and prints:_
@@ -854,7 +901,29 @@ Assertion failed: (expected=3) == (counter=4), file AUnitTest.ino, line 134.
854901

855902
_Each capture of the parameter string consumes flash memory space. If the unit
856903
test has numerous `assertXxx()` statements, the flash memory cost is expensive.
857-
AUnit omits the parameters to reduce flash memory space by about 33%_
904+
AUnit omits the parameters to reduce flash memory space by about 33%._
905+
906+
_The messages for asserts with bool values are customized for better clarity
907+
(partially to compensate for the lack of capture of the string of the actual
908+
arguments, and are different from ArduinoUnit._
909+
910+
#### Verbose Mode
911+
912+
If you use the verbose header:
913+
```
914+
#include <AUnitVerbose.h>
915+
```
916+
the assertion message will contain the string fragments of the arguments
917+
passed into the `assertXxx()` macros, like this:
918+
919+
```
920+
Assertion failed: (expected=3) == (counter=4), file AUnitTest.ino, line 134.
921+
Assertion failed: (ok=false) is true, file AUnitTest.ino, line 134.
922+
```
923+
924+
***ArduinoUnit Compatibility***:
925+
_The verbose mode produces the same messages as ArduinoUnit, at the cost of
926+
increased flash memory usage._
858927

859928
### Test Summary
860929

@@ -878,6 +947,7 @@ At the end of the test run, the `TestRunner` prints out the summary
878947
of all test cases, like this:
879948

880949
```
950+
TestRunner duration: 0.05 seconds.
881951
TestRunner summary: 12 passed, 0 failed, 2 skipped, 1 timed out, out of 15 test(s).
882952
```
883953

@@ -1009,9 +1079,12 @@ delayed failure) slightly easier to implement.
10091079

10101080
## Benchmarks
10111081

1012-
AUnit consumes as much as 65% less flash memory than ArduinoUnit on an AVR
1082+
AUnit consumes as much as 65% less flash memory than ArduinoUnit 2.2 on an AVR
10131083
platform (e.g. Arduino UNO, Nano), and 30% less flash on the Teensy-ARM platform
1014-
(e.g. Teensy LC ). Here are the resource consumption (flash and static) numbers
1084+
(e.g. Teensy LC ). (ArduinoUnit 2.3 reduces the flash memory by 30% or so, which
1085+
means that AUnit can still consume significantly less flash memory.)
1086+
1087+
Here are the resource consumption (flash and static) numbers
10151088
from
10161089
[AceButtonTest](https://github.com/bxparks/AceButton/tree/develop/tests/AceButtonTest)
10171090
containing 26 test cases using 331 `assertXxx()`
@@ -1051,17 +1124,18 @@ This library was developed and tested using:
10511124
* [Teensyduino 1.41](https://www.pjrc.com/teensy/td_download.html)
10521125
* [ESP8266 Arduino Core 2.4.1](https://arduino-esp8266.readthedocs.io/en/2.4.1/)
10531126

1054-
I used MacOS 10.13.3 for most of my development.
1127+
I used MacOS 10.13.3 and Ubuntu 17.10 for most of my development.
10551128

10561129
The library has been verified to work on the following hardware:
10571130

10581131
* Arduino Nano clone (16 MHz ATmega328P)
10591132
* Arduino UNO R3 clone (16 MHz ATmega328P)
10601133
* Arduino Pro Mini clone (16 MHz ATmega328P)
1134+
* Arduino Pro Micro clone (16 MHz ATmega32U4)
10611135
* Teensy LC (48 MHz ARM Cortex-M0+)
10621136
* Teensy 3.2 (72 MHz ARM Cortex-M4)
1063-
* NodeMCU 1.0 clone (ESP-12E module, 80MHz ESP8266)
1064-
* ESP-01 (ESP-01 module, 80MHz ESP8266)
1137+
* NodeMCU 1.0 clone (ESP-12E module, 80 MHz ESP8266)
1138+
* ESP-01 (ESP-01 module, 80 MHz ESP8266)
10651139

10661140
## License
10671141

docs/doxygen.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ PROJECT_NAME = "AUnit"
3838
# could be handy for archiving the generated documentation or if some version
3939
# control system is used.
4040

41-
PROJECT_NUMBER = 0.4.1
41+
PROJECT_NUMBER = 0.5.0
4242

4343
# Using the PROJECT_BRIEF tag one can provide an optional one line description
4444
# for a project that appears at the top of each page and should give viewer a

docs/html/AUnitVerbose_8h.html

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2+
<html xmlns="http://www.w3.org/1999/xhtml">
3+
<head>
4+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
6+
<meta name="generator" content="Doxygen 1.8.13"/>
7+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
8+
<title>AUnit: /home/brian/dev/AUnit/src/AUnitVerbose.h File Reference</title>
9+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
10+
<script type="text/javascript" src="jquery.js"></script>
11+
<script type="text/javascript" src="dynsections.js"></script>
12+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
13+
<script type="text/javascript" src="search/searchdata.js"></script>
14+
<script type="text/javascript" src="search/search.js"></script>
15+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
16+
</head>
17+
<body>
18+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
19+
<div id="titlearea">
20+
<table cellspacing="0" cellpadding="0">
21+
<tbody>
22+
<tr style="height: 56px;">
23+
<td id="projectalign" style="padding-left: 0.5em;">
24+
<div id="projectname">AUnit
25+
&#160;<span id="projectnumber">0.5.0</span>
26+
</div>
27+
<div id="projectbrief">Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.</div>
28+
</td>
29+
</tr>
30+
</tbody>
31+
</table>
32+
</div>
33+
<!-- end header part -->
34+
<!-- Generated by Doxygen 1.8.13 -->
35+
<script type="text/javascript">
36+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
37+
</script>
38+
<script type="text/javascript" src="menudata.js"></script>
39+
<script type="text/javascript" src="menu.js"></script>
40+
<script type="text/javascript">
41+
$(function() {
42+
initMenu('',true,false,'search.php','Search');
43+
$(document).ready(function() { init_search(); });
44+
});
45+
</script>
46+
<div id="main-nav"></div>
47+
<!-- window showing the filter options -->
48+
<div id="MSearchSelectWindow"
49+
onmouseover="return searchBox.OnSearchSelectShow()"
50+
onmouseout="return searchBox.OnSearchSelectHide()"
51+
onkeydown="return searchBox.OnSearchSelectKey(event)">
52+
</div>
53+
54+
<!-- iframe showing the search results (closed by default) -->
55+
<div id="MSearchResultsWindow">
56+
<iframe src="javascript:void(0)" frameborder="0"
57+
name="MSearchResults" id="MSearchResults">
58+
</iframe>
59+
</div>
60+
61+
<div id="nav-path" class="navpath">
62+
<ul>
63+
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
64+
</div>
65+
</div><!-- top -->
66+
<div class="header">
67+
<div class="summary">
68+
<a href="#define-members">Macros</a> </div>
69+
<div class="headertitle">
70+
<div class="title">AUnitVerbose.h File Reference</div> </div>
71+
</div><!--header-->
72+
<div class="contents">
73+
74+
<p>Same as <a class="el" href="AUnit_8h_source.html">AUnit.h</a> except that the verbose versions of the various assertXxx() macros are provided.
75+
<a href="#details">More...</a></p>
76+
<div class="textblock"><code>#include &quot;aunit/Verbosity.h&quot;</code><br />
77+
<code>#include &quot;aunit/Compare.h&quot;</code><br />
78+
<code>#include &quot;aunit/Printer.h&quot;</code><br />
79+
<code>#include &quot;aunit/Test.h&quot;</code><br />
80+
<code>#include &quot;aunit/Assertion.h&quot;</code><br />
81+
<code>#include &quot;aunit/MetaAssertion.h&quot;</code><br />
82+
<code>#include &quot;aunit/TestOnce.h&quot;</code><br />
83+
<code>#include &quot;aunit/TestAgain.h&quot;</code><br />
84+
<code>#include &quot;aunit/TestRunner.h&quot;</code><br />
85+
<code>#include &quot;<a class="el" href="AssertVerboseMacros_8h_source.html">aunit/AssertVerboseMacros.h</a>&quot;</code><br />
86+
<code>#include &quot;<a class="el" href="MetaAssertMacros_8h_source.html">aunit/MetaAssertMacros.h</a>&quot;</code><br />
87+
<code>#include &quot;<a class="el" href="TestMacros_8h_source.html">aunit/TestMacros.h</a>&quot;</code><br />
88+
</div><div class="textblock"><div class="dynheader">
89+
Include dependency graph for AUnitVerbose.h:</div>
90+
<div class="dyncontent">
91+
<div class="center"><img src="AUnitVerbose_8h__incl.png" border="0" usemap="#_2home_2brian_2dev_2AUnit_2src_2AUnitVerbose_8h" alt=""/></div>
92+
<map name="_2home_2brian_2dev_2AUnit_2src_2AUnitVerbose_8h" id="_2home_2brian_2dev_2AUnit_2src_2AUnitVerbose_8h">
93+
<area shape="rect" id="node2" href="Verbosity_8h_source.html" title="aunit/Verbosity.h" alt="" coords="316,468,436,495"/>
94+
<area shape="rect" id="node4" href="Compare_8h_source.html" title="aunit/Compare.h" alt="" coords="44,95,163,121"/>
95+
<area shape="rect" id="node6" href="Printer_8h_source.html" title="aunit/Printer.h" alt="" coords="239,319,342,345"/>
96+
<area shape="rect" id="node7" href="Test_8h_source.html" title="aunit/Test.h" alt="" coords="389,393,480,420"/>
97+
<area shape="rect" id="node9" href="Assertion_8h_source.html" title="aunit/Assertion.h" alt="" coords="366,319,486,345"/>
98+
<area shape="rect" id="node12" href="MetaAssertion_8h_source.html" title="aunit/MetaAssertion.h" alt="" coords="340,244,489,271"/>
99+
<area shape="rect" id="node13" href="TestOnce_8h_source.html" title="aunit/TestOnce.h" alt="" coords="721,169,844,196"/>
100+
<area shape="rect" id="node14" href="TestAgain_8h_source.html" title="aunit/TestAgain.h" alt="" coords="415,169,539,196"/>
101+
<area shape="rect" id="node15" href="TestRunner_8h_source.html" title="aunit/TestRunner.h" alt="" coords="561,319,694,345"/>
102+
<area shape="rect" id="node16" href="AssertVerboseMacros_8h.html" title="Verbose versions of the macros in AssertMacros.h. " alt="" coords="546,95,741,121"/>
103+
<area shape="rect" id="node17" href="MetaAssertMacros_8h.html" title="Various assertTestXxx(), checkTestXxx(), assertTestXxxF() and checkTestXxxF() macros are defined in t..." alt="" coords="766,95,940,121"/>
104+
<area shape="rect" id="node18" href="TestMacros_8h.html" title="Various macros (test(), testF(), testing(), testingF(), externTest(), externTestF(), externTesting(), externTestingF()) are defined in this header. " alt="" coords="964,95,1099,121"/>
105+
<area shape="rect" id="node8" href="FCString_8h_source.html" title="FCString.h" alt="" coords="689,468,774,495"/>
106+
<area shape="rect" id="node10" href="Flash_8h.html" title="Flash strings (using F() macro) on the ESP8266 platform cannot be placed in an inline context..." alt="" coords="952,393,1018,420"/>
107+
</map>
108+
</div>
109+
</div>
110+
<p><a href="AUnitVerbose_8h_source.html">Go to the source code of this file.</a></p>
111+
<table class="memberdecls">
112+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
113+
Macros</h2></td></tr>
114+
<tr class="memitem:a87cbb10969eff63f8ae66afc4e9457eb"><td class="memItemLeft" align="right" valign="top"><a id="a87cbb10969eff63f8ae66afc4e9457eb"></a>
115+
#define&#160;</td><td class="memItemRight" valign="bottom"><b>AUNIT_VERSION</b>&#160;&#160;&#160;000500</td></tr>
116+
<tr class="separator:a87cbb10969eff63f8ae66afc4e9457eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
117+
</table>
118+
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
119+
<div class="textblock"><p>Same as <a class="el" href="AUnit_8h_source.html">AUnit.h</a> except that the verbose versions of the various assertXxx() macros are provided. </p>
120+
<p>These capture the strings of the actual arguments in the assert macros and print more verbose and helpful messages in the same format used by ArduinoUnit. The cost is 20-25% increase in flash memory to hold those strings for medium to large unit tests. </p>
121+
122+
<p class="definition">Definition in file <a class="el" href="AUnitVerbose_8h_source.html">AUnitVerbose.h</a>.</p>
123+
</div></div><!-- contents -->
124+
<!-- start footer part -->
125+
<hr class="footer"/><address class="footer"><small>
126+
Generated by &#160;<a href="http://www.doxygen.org/index.html">
127+
<img class="footer" src="doxygen.png" alt="doxygen"/>
128+
</a> 1.8.13
129+
</small></address>
130+
</body>
131+
</html>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<map id="/home/brian/dev/AUnit/src/AUnitVerbose.h" name="/home/brian/dev/AUnit/src/AUnitVerbose.h">
2+
<area shape="rect" id="node2" href="$Verbosity_8h_source.html" title="aunit/Verbosity.h" alt="" coords="316,468,436,495"/>
3+
<area shape="rect" id="node4" href="$Compare_8h_source.html" title="aunit/Compare.h" alt="" coords="44,95,163,121"/>
4+
<area shape="rect" id="node6" href="$Printer_8h_source.html" title="aunit/Printer.h" alt="" coords="239,319,342,345"/>
5+
<area shape="rect" id="node7" href="$Test_8h_source.html" title="aunit/Test.h" alt="" coords="389,393,480,420"/>
6+
<area shape="rect" id="node9" href="$Assertion_8h_source.html" title="aunit/Assertion.h" alt="" coords="366,319,486,345"/>
7+
<area shape="rect" id="node12" href="$MetaAssertion_8h_source.html" title="aunit/MetaAssertion.h" alt="" coords="340,244,489,271"/>
8+
<area shape="rect" id="node13" href="$TestOnce_8h_source.html" title="aunit/TestOnce.h" alt="" coords="721,169,844,196"/>
9+
<area shape="rect" id="node14" href="$TestAgain_8h_source.html" title="aunit/TestAgain.h" alt="" coords="415,169,539,196"/>
10+
<area shape="rect" id="node15" href="$TestRunner_8h_source.html" title="aunit/TestRunner.h" alt="" coords="561,319,694,345"/>
11+
<area shape="rect" id="node16" href="$AssertVerboseMacros_8h.html" title="Verbose versions of the macros in AssertMacros.h. " alt="" coords="546,95,741,121"/>
12+
<area shape="rect" id="node17" href="$MetaAssertMacros_8h.html" title="Various assertTestXxx(), checkTestXxx(), assertTestXxxF() and checkTestXxxF() macros are defined in t..." alt="" coords="766,95,940,121"/>
13+
<area shape="rect" id="node18" href="$TestMacros_8h.html" title="Various macros (test(), testF(), testing(), testingF(), externTest(), externTestF(), externTesting(), externTestingF()) are defined in this header. " alt="" coords="964,95,1099,121"/>
14+
<area shape="rect" id="node8" href="$FCString_8h_source.html" title="FCString.h" alt="" coords="689,468,774,495"/>
15+
<area shape="rect" id="node10" href="$Flash_8h.html" title="Flash strings (using F() macro) on the ESP8266 platform cannot be placed in an inline context..." alt="" coords="952,393,1018,420"/>
16+
</map>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dd1d0ed32d54834939a1889af843be14
121 KB
Loading

0 commit comments

Comments
 (0)