arduino stuffs
Diffstat (limited to 'libraries/Firmata/test/firmata_test/firmata_test.ino')
-rw-r--r--libraries/Firmata/test/firmata_test/firmata_test.ino172
1 files changed, 172 insertions, 0 deletions
diff --git a/libraries/Firmata/test/firmata_test/firmata_test.ino b/libraries/Firmata/test/firmata_test/firmata_test.ino
new file mode 100644
index 0000000..db05853
--- /dev/null
+++ b/libraries/Firmata/test/firmata_test/firmata_test.ino
@@ -0,0 +1,172 @@
+/*
+ * To run this test suite, you must first install the ArduinoUnit library
+ * to your Arduino/libraries/ directory.
+ * You can get ArduinoUnit here: https://github.com/mmurdoch/arduinounit
+ * Download version 2.0 or greater or install it via the Arduino library manager.
+ */
+
+#include <ArduinoUnit.h>
+#include <Firmata.h>
+
+void setup()
+{
+ Serial.begin(9600);
+}
+
+void loop()
+{
+ Test::run();
+}
+
+test(beginPrintsVersion)
+{
+ FakeStream stream;
+
+ Firmata.begin(stream);
+
+ char expected[] = {
+ REPORT_VERSION,
+ FIRMATA_PROTOCOL_MAJOR_VERSION,
+ FIRMATA_PROTOCOL_MINOR_VERSION,
+ 0
+ };
+ assertEqual(expected, stream.bytesWritten());
+}
+
+void processMessage(const byte *message, size_t length)
+{
+ FakeStream stream;
+ Firmata.begin(stream);
+
+ for (size_t i = 0; i < length; i++) {
+ stream.nextByte(message[i]);
+ Firmata.processInput();
+ }
+}
+
+byte _digitalPort;
+int _digitalPortValue;
+void writeToDigitalPort(byte port, int value)
+{
+ _digitalPort = port;
+ _digitalPortValue = value;
+}
+
+void setupDigitalPort()
+{
+ _digitalPort = 0;
+ _digitalPortValue = 0;
+}
+
+char * _receivedString;
+void handleStringCallback(char *str)
+{
+ _receivedString = str;
+}
+
+test(processWriteDigital_0)
+{
+ setupDigitalPort();
+ Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
+
+ byte message[] = { DIGITAL_MESSAGE, 0, 0 };
+ processMessage(message, 3);
+
+ assertEqual(0, _digitalPortValue);
+}
+
+test(processWriteDigital_127)
+{
+ setupDigitalPort();
+ Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
+
+ byte message[] = { DIGITAL_MESSAGE, 127, 0 };
+ processMessage(message, 3);
+
+ assertEqual(127, _digitalPortValue);
+}
+
+test(processWriteDigital_128)
+{
+ setupDigitalPort();
+ Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
+
+ byte message[] = { DIGITAL_MESSAGE, 0, 1 };
+ processMessage(message, 3);
+
+ assertEqual(128, _digitalPortValue);
+}
+
+test(processWriteLargestDigitalValue)
+{
+ setupDigitalPort();
+ Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
+
+ byte message[] = { DIGITAL_MESSAGE, 0x7F, 0x7F };
+ processMessage(message, 3);
+
+ // Maximum of 14 bits can be set (B0011111111111111)
+ assertEqual(0x3FFF, _digitalPortValue);
+}
+
+test(defaultDigitalWritePortIsZero)
+{
+ setupDigitalPort();
+ Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
+
+ byte message[] = { DIGITAL_MESSAGE, 0, 0 };
+ processMessage(message, 3);
+
+ assertEqual(0, _digitalPort);
+}
+
+test(specifiedDigitalWritePort)
+{
+ setupDigitalPort();
+ Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
+
+ byte message[] = { DIGITAL_MESSAGE + 1, 0, 0 };
+ processMessage(message, 3);
+
+ assertEqual(1, _digitalPort);
+}
+
+test(setFirmwareVersionDoesNotLeakMemory)
+{
+ Firmata.setFirmwareVersion(1, 0);
+ int initialMemory = freeMemory();
+
+ Firmata.setFirmwareVersion(1, 0);
+
+ assertEqual(0, initialMemory - freeMemory());
+}
+
+test(sendStringShouldEncode2BytesPerChar)
+{
+ FakeStream stream;
+ Firmata.begin(stream);
+ // reset the buffer because the firmware name string will be sent on Firmata.begin
+ stream.reset();
+
+ char testString[] = "hi!";
+ Firmata.sendString(testString);
+
+ byte expected[] = { START_SYSEX, STRING_DATA, 'h', 0, 'i', 0, '!', 0, END_SYSEX };
+
+ int len = stream.bytesWritten().length();
+ assertEqual(sizeof(expected), len);
+ for (byte i = 0; i < len; i++) {
+ assertEqual(expected[i], (byte)stream.bytesWritten().charAt(i));
+ }
+}
+
+test(receivedStringShouldDecodeFrom2BytesPerChar)
+{
+ Firmata.attach(STRING_DATA, handleStringCallback);
+
+ byte message[] = { START_SYSEX, STRING_DATA, 'b', 0, 'y', 0, 'e', 0, '!', 0, END_SYSEX };
+ processMessage(message, 11);
+
+ assertEqual("bye!", _receivedString);
+}
+