]> AND Private Git Repository - Cipher_code.git/blob - Arduino/libraries/Firmata/test/firmata_test/firmata_test.ino
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
code improvement
[Cipher_code.git] / Arduino / libraries / Firmata / test / firmata_test / firmata_test.ino
1 /*
2  * To run this test suite, you must first install the ArduinoUnit library
3  * to your Arduino/libraries/ directory.
4  * You can get ArduinoUnit here: https://github.com/mmurdoch/arduinounit
5  * Download version 2.0 or greater or install it via the Arduino library manager.
6  */
7
8 #include <ArduinoUnit.h>
9 #include <Firmata.h>
10
11 void setup()
12 {
13   Serial.begin(9600);
14 }
15
16 void loop()
17 {
18   Test::run();
19 }
20
21 test(beginPrintsVersion)
22 {
23   FakeStream stream;
24
25   Firmata.begin(stream);
26
27   char expected[] = {
28     REPORT_VERSION,
29     FIRMATA_PROTOCOL_MAJOR_VERSION,
30     FIRMATA_PROTOCOL_MINOR_VERSION,
31     0
32   };
33   assertEqual(expected, stream.bytesWritten());
34 }
35
36 void processMessage(const byte *message, size_t length)
37 {
38   FakeStream stream;
39   Firmata.begin(stream);
40
41   for (size_t i = 0; i < length; i++) {
42     stream.nextByte(message[i]);
43     Firmata.processInput();
44   }
45 }
46
47 byte _digitalPort;
48 int _digitalPortValue;
49 void writeToDigitalPort(byte port, int value)
50 {
51   _digitalPort = port;
52   _digitalPortValue = value;
53 }
54
55 void setupDigitalPort()
56 {
57   _digitalPort = 0;
58   _digitalPortValue = 0;
59 }
60
61 char * _receivedString;
62 void handleStringCallback(char *str)
63 {
64   _receivedString = str;
65 }
66
67 test(processWriteDigital_0)
68 {
69   setupDigitalPort();
70   Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
71
72   byte message[] = { DIGITAL_MESSAGE, 0, 0 };
73   processMessage(message, 3);
74
75   assertEqual(0, _digitalPortValue);
76 }
77
78 test(processWriteDigital_127)
79 {
80   setupDigitalPort();
81   Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
82
83   byte message[] = { DIGITAL_MESSAGE, 127, 0 };
84   processMessage(message, 3);
85
86   assertEqual(127, _digitalPortValue);
87 }
88
89 test(processWriteDigital_128)
90 {
91   setupDigitalPort();
92   Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
93
94   byte message[] = { DIGITAL_MESSAGE, 0, 1 };
95   processMessage(message, 3);
96
97   assertEqual(128, _digitalPortValue);
98 }
99
100 test(processWriteLargestDigitalValue)
101 {
102   setupDigitalPort();
103   Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
104
105   byte message[] = { DIGITAL_MESSAGE, 0x7F, 0x7F };
106   processMessage(message, 3);
107
108   // Maximum of 14 bits can be set (B0011111111111111)
109   assertEqual(0x3FFF, _digitalPortValue);
110 }
111
112 test(defaultDigitalWritePortIsZero)
113 {
114   setupDigitalPort();
115   Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
116
117   byte message[] = { DIGITAL_MESSAGE, 0, 0 };
118   processMessage(message, 3);
119
120   assertEqual(0, _digitalPort);
121 }
122
123 test(specifiedDigitalWritePort)
124 {
125   setupDigitalPort();
126   Firmata.attach(DIGITAL_MESSAGE, writeToDigitalPort);
127
128   byte message[] = { DIGITAL_MESSAGE + 1, 0, 0 };
129   processMessage(message, 3);
130
131   assertEqual(1, _digitalPort);
132 }
133
134 test(setFirmwareVersionDoesNotLeakMemory)
135 {
136   Firmata.setFirmwareVersion(1, 0);
137   int initialMemory = freeMemory();
138
139   Firmata.setFirmwareVersion(1, 0);
140
141   assertEqual(0, initialMemory - freeMemory());
142 }
143
144 test(sendStringShouldEncode2BytesPerChar)
145 {
146   FakeStream stream;
147   Firmata.begin(stream);
148   // reset the buffer because the firmware name string will be sent on Firmata.begin
149   stream.reset();
150
151   char testString[] = "hi!";
152   Firmata.sendString(testString);
153
154   byte expected[] = { START_SYSEX, STRING_DATA, 'h', 0, 'i', 0, '!', 0, END_SYSEX };
155
156   int len = stream.bytesWritten().length();
157   assertEqual(sizeof(expected), len);
158   for (byte i = 0; i < len; i++) {
159     assertEqual(expected[i], (byte)stream.bytesWritten().charAt(i));
160   }
161 }
162
163 test(receivedStringShouldDecodeFrom2BytesPerChar)
164 {
165   Firmata.attach(STRING_DATA, handleStringCallback);
166
167   byte message[] = { START_SYSEX, STRING_DATA, 'b', 0, 'y', 0, 'e', 0, '!', 0, END_SYSEX };
168   processMessage(message, 11);
169
170   assertEqual("bye!", _receivedString);
171 }
172