1212// overide interrupt macro (for unit tests only)
1313#define IS_PIN_INTERRUPT (p ) ((p) == 2 || (p) == 3 )
1414
15-
1615FakeStream stream;
1716
1817void setup ()
@@ -22,68 +21,139 @@ void setup()
2221 Serial.begin (57600 ); // must match port configuration
2322}
2423
25- void loop ( )
24+ test (attachEncoder )
2625{
27- Test::run ();
26+ int initial_memory = freeMemory ();
27+
28+ EncoderFirmata *encoder = new EncoderFirmata ();
29+ byte encoderNum = 0 , pin1 = 2 , pin2 = 3 ;
30+
31+ assertFalse (encoder->isEncoderAttached (encoderNum));
32+
33+ encoder->attachEncoder (encoderNum, pin1, pin2);
34+
35+ assertTrue (encoder->isEncoderAttached (encoderNum));
36+
37+ delete encoder;
38+ assertEqual (0 , initialMemory - freeMemory ()); // no memory leak
2839}
2940
30- test (fullTest )
41+ test (detachEncoder )
3142{
32- Serial. print ( F ( " BT mem.: " ) );
33- Serial. println ( freeMemory () );
43+ assertTestPass (attachEncoder );
44+ int initial_memory = freeMemory ();
3445
35- EncoderFirmata encoder;
46+ EncoderFirmata *encoder = new EncoderFirmata ();
47+ byte encoderNum = 0 , pin1 = 2 , pin2 = 3 ;
48+ encoder->attachEncoder (encoderNum, pin1, pin2);
3649
37- assertTrue (encoder.handlePinMode (2 , INPUT)); // 2 is interrupt
38- assertFalse (encoder.handlePinMode (1 , INPUT)); // 1 is NOT intterrupt
50+ encoder->detachEncoder (encoderNum);
51+ assertFalse (encoder->isEncoderAttached (encoderNum));
52+
53+ delete encoder;
54+ assertEqual (0 , initialMemory - freeMemory ()); // no memory leak
55+ }
3956
40- byte encoderNum = 0 , pin1 = 2 , pin2 = 3 ;
57+ test (handlePinModes)
58+ {
59+ int initial_memory = freeMemory ();
4160
42- byte attachEncoderMessage[] = { ENCODER_ATTACH, encoderNum, pin1, pin2 };
43- byte detachEncoderMessage[] = { ENCODER_DETACH, encoderNum };
61+ EncoderFirmata *encoder = new EncoderFirmata ();
4462
45- assertFalse (encoder.isEncoderAttached (encoderNum));
46-
47- assertTrue (encoder.handleSysex (ENCODER_DATA, 0 , attachEncoderMessage));
48-
49- assertTrue (encoder.isEncoderAttached (encoderNum));
50-
51- assertTrue (encoder.handleSysex (ENCODER_DATA, 0 , detachEncoderMessage));
52- assertFalse (encoder.isEncoderAttached (encoderNum));
63+ assertTrue (encoder->handlePinMode (2 , INPUT)); // 2 is interrupt
64+ assertFalse (encoder->handlePinMode (1 , INPUT)); // 1 is NOT interrupt
65+
66+ delete encoder;
67+ assertEqual (0 , initialMemory - freeMemory ()); // no memory leak
68+ }
5369
54- encoder.handleSysex (ENCODER_DATA, 0 , attachEncoderMessage);
55- assertTrue (encoder.isEncoderAttached (encoderNum));
56- // report encoder position
57- byte reportPosition[] = {ENCODER_REPORT_POSITION, encoderNum};
70+ test (reportEncoderPosition)
71+ {
72+ assertTestPass (attachEncoder);
73+ int initial_memory = freeMemory ();
74+
75+ EncoderFirmata *encoder = new EncoderFirmata ();
76+ byte encoderNum = 0 , pin1 = 2 , pin2 = 3 ;
77+ encoder->attachEncoder (encoderNum, pin1, pin2);
78+
5879 stream.flush ();
59- assertTrue ( encoder. handleSysex (ENCODER_DATA, 0 , reportPosition) );
80+ encoder-> reportPosition (encoderNum );
6081 assertEqual (stream.bytesWritten ().length (), 6 );
82+
83+ delete encoder;
84+ assertEqual (0 , initialMemory - freeMemory ()); // no memory leak
85+ }
6186
62- byte reportPositions[] = {ENCODER_REPORT_POSITIONS};
87+ test (reportEncodersPositions)
88+ {
89+ assertTestPass (attachEncoder);
90+ int initial_memory = freeMemory ();
91+
92+ EncoderFirmata *encoder = new EncoderFirmata ();
93+ byte encoderNum = 0 , pin1 = 2 , pin2 = 3 ;
94+ encoder->attachEncoder (encoderNum, pin1, pin2);
95+
6396 stream.flush ();
64- assertTrue ( encoder. handleSysex (ENCODER_DATA, 0 , reportPositions) );
97+ encoder-> reportPositions ( );
6598 assertEqual (stream.bytesWritten ().length (), 9 );
99+
100+ delete encoder;
101+ assertEqual (0 , initialMemory - freeMemory ()); // no memory leak
102+ }
66103
104+ test (enableAutomaticReports)
105+ {
106+ int initial_memory = freeMemory ();
107+
108+ EncoderFirmata *encoder = new EncoderFirmata ();
109+ assertFalse (encoder->isReportingEnabled ());
110+ encoder->toggleAutoReport (true );
111+ assertTrue (encoder->isReportingEnabled ());
112+ encoder->toggleAutoReport (false );
113+ assertFalse (encoder->isReportingEnabled ());
114+
115+ delete encoder;
116+ assertEqual (0 , initialMemory - freeMemory ()); // no memory leak
117+ }
67118
68- // check that auto-report is disable by default
69- assertFalse (encoder.autoReport );
119+ test (fullReport)
120+ {
121+ assertTestPass (enableAutomaticReports);
122+ int initial_memory = freeMemory ();
123+
124+ EncoderFirmata *encoder = new EncoderFirmata ();
125+
70126 stream.flush ();
71- encoder.report ();
72- assertTrue (stream.bytesWritten ().length ()==0 );
73-
127+ encoder->report ();
128+ assertEqual (stream.bytesWritten ().length (), 0 ); // reports disable
129+
130+ encoder->toggleAutoReport (true );
74131
75- // simulate logical reset
76- encoder.reset ();
77- assertFalse (encoder.isEncoderAttached (encoderNum));
78-
79- // Enable auto reports
80- byte enableReportsMessage[] = {ENCODER_REPORT_AUTO, 0x01 };
81- assertTrue (encoder.handleSysex (ENCODER_DATA, 0 , enableReportsMessage));
82- assertTrue (encoder.autoReport );
83132 stream.flush ();
84- encoder.report ();
85- assertEqual (stream.bytesWritten ().length (), 3 ); // i.e : no encoder attached, message is empty (expt sysex start/end and ENCODER_DATA message)
133+ encoder->report ();
134+ assertEqual (stream.bytesWritten ().length (), 3 ); // reports enable
135+
136+ delete encoder;
137+ assertEqual (0 , initialMemory - freeMemory ()); // no memory leak
138+ }
86139
87- Serial.print (F (" AT mem.: " ));
88- Serial.println (freeMemory ());
140+ test (resetEncoder)
141+ {
142+ assertTestPass (attachEncoder);
143+ int initial_memory = freeMemory ();
144+
145+ EncoderFirmata *encoder = new EncoderFirmata ();
146+ byte encoderNum = 0 , pin1 = 2 , pin2 = 3 ;
147+ encoder->attachEncoder (encoderNum, pin1, pin2);
148+
149+ encoder->reset ();
150+ assertFalse (encoder->isEncoderAttached (encoderNum));
151+
152+ delete encoder;
153+ assertEqual (0 , initialMemory - freeMemory ()); // no memory leak
154+ }
155+
156+ void loop ()
157+ {
158+ Test::run ();
89159}
0 commit comments