@@ -21,9 +21,16 @@ import (
21
21
"testing"
22
22
23
23
"github.com/arduino/arduino-cli/internal/integrationtest"
24
+ "github.com/arduino/go-paths-helper"
24
25
"github.com/stretchr/testify/require"
25
26
)
26
27
28
+ // returns a reader that tells the mocked monitor to exit
29
+ func quitMonitor () io.Reader {
30
+ // tells mocked monitor to exit
31
+ return bytes .NewBufferString ("QUIT\n " )
32
+ }
33
+
27
34
func TestMonitorConfigFlags (t * testing.T ) {
28
35
env , cli := integrationtest .CreateArduinoCLIWithEnvironment (t )
29
36
defer env .CleanUp ()
@@ -38,14 +45,8 @@ func TestMonitorConfigFlags(t *testing.T) {
38
45
cli .InstallMockedSerialDiscovery (t )
39
46
cli .InstallMockedSerialMonitor (t )
40
47
41
- // Test monitor command
42
- quit := func () io.Reader {
43
- // tells mocked monitor to exit
44
- return bytes .NewBufferString ("QUIT\n " )
45
- }
46
-
47
48
t .Run ("NoArgs" , func (t * testing.T ) {
48
- stdout , _ , err := cli .RunWithCustomInput (quit (), "monitor" , "-p" , "/dev/ttyARG" , "--raw" )
49
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARG" , "--raw" )
49
50
require .NoError (t , err )
50
51
require .Contains (t , string (stdout ), "Opened port: /dev/ttyARG" )
51
52
require .Contains (t , string (stdout ), "Configuration baudrate = 9600" )
@@ -54,7 +55,7 @@ func TestMonitorConfigFlags(t *testing.T) {
54
55
})
55
56
56
57
t .Run ("BaudConfig" , func (t * testing.T ) {
57
- stdout , _ , err := cli .RunWithCustomInput (quit (), "monitor" , "-p" , "/dev/ttyARG" , "-c" , "baudrate=115200" , "--raw" )
58
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARG" , "-c" , "baudrate=115200" , "--raw" )
58
59
require .NoError (t , err )
59
60
require .Contains (t , string (stdout ), "Opened port: /dev/ttyARG" )
60
61
require .Contains (t , string (stdout ), "Configuration baudrate = 115200" )
@@ -64,7 +65,7 @@ func TestMonitorConfigFlags(t *testing.T) {
64
65
})
65
66
66
67
t .Run ("BaudAndParitfyConfig" , func (t * testing.T ) {
67
- stdout , _ , err := cli .RunWithCustomInput (quit (), "monitor" , "-p" , "/dev/ttyARG" ,
68
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARG" ,
68
69
"-c" , "baudrate=115200" , "-c" , "parity=even" , "--raw" )
69
70
require .NoError (t , err )
70
71
require .Contains (t , string (stdout ), "Opened port: /dev/ttyARG" )
@@ -75,16 +76,181 @@ func TestMonitorConfigFlags(t *testing.T) {
75
76
})
76
77
77
78
t .Run ("InvalidConfigKey" , func (t * testing.T ) {
78
- _ , stderr , err := cli .RunWithCustomInput (quit (), "monitor" , "-p" , "/dev/ttyARG" ,
79
+ _ , stderr , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARG" ,
79
80
"-c" , "baud=115200" , "-c" , "parity=even" , "--raw" )
80
81
require .Error (t , err )
81
82
require .Contains (t , string (stderr ), "invalid port configuration: baud=115200" )
82
83
})
83
84
84
85
t .Run ("InvalidConfigValue" , func (t * testing.T ) {
85
- _ , stderr , err := cli .RunWithCustomInput (quit (), "monitor" , "-p" , "/dev/ttyARG" ,
86
+ _ , stderr , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARG" ,
86
87
"-c" , "parity=9600" , "--raw" )
87
88
require .Error (t , err )
88
89
require .Contains (t , string (stderr ), "invalid port configuration value for parity: 9600" )
89
90
})
90
91
}
92
+
93
+ func TestMonitorCommandFlagsAndDefaultPortFQBNSelection (t * testing.T ) {
94
+ env , cli := integrationtest .CreateArduinoCLIWithEnvironment (t )
95
+ defer env .CleanUp ()
96
+
97
+ // Install AVR platform
98
+ _ ,
_ ,
err := cli .
Run (
"core" ,
"install" ,
"arduino:[email protected] " )
99
+ require .NoError (t , err )
100
+
101
+ // Patch the Yun board to require special RTS/DTR serial configuration
102
+ f , err := cli .DataDir ().Join ("packages" , "arduino" , "hardware" , "avr" , "1.8.6" , "boards.txt" ).Append ()
103
+ require .NoError (t , err )
104
+ _ , err = f .WriteString (`
105
+ uno.serial.disableRTS=true
106
+ uno.serial.disableDTR=false
107
+ yun.serial.disableRTS=true
108
+ yun.serial.disableDTR=true
109
+ ` )
110
+ require .NoError (t , err )
111
+ require .NoError (t , f .Close ())
112
+
113
+ // Install mocked discovery and monitor for testing
114
+ cli .InstallMockedSerialDiscovery (t )
115
+ cli .InstallMockedSerialMonitor (t )
116
+
117
+ // Create test sketches
118
+ getSketchPath := func (sketch string ) string {
119
+ p , err := paths .New ("testdata" , sketch ).Abs ()
120
+ require .NoError (t , err )
121
+ require .True (t , p .IsDir ())
122
+ return p .String ()
123
+ }
124
+ sketch := getSketchPath ("SketchWithNoProfiles" )
125
+ sketchWithPort := getSketchPath ("SketchWithDefaultPort" )
126
+ sketchWithFQBN := getSketchPath ("SketchWithDefaultFQBN" )
127
+ sketchWithPortAndFQBN := getSketchPath ("SketchWithDefaultPortAndFQBN" )
128
+
129
+ t .Run ("NoFlags" , func (t * testing.T ) {
130
+ t .Run ("NoDefaultPortNoDefaultFQBN" , func (t * testing.T ) {
131
+ _ , stderr , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "--raw" , sketch )
132
+ require .Error (t , err )
133
+ require .Contains (t , string (stderr ), "No monitor available for the port protocol default" )
134
+ })
135
+
136
+ t .Run ("WithDefaultPort" , func (t * testing.T ) {
137
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "--raw" , sketchWithPort )
138
+ require .NoError (t , err )
139
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyDEF" )
140
+ require .Contains (t , string (stdout ), "Configuration rts = on" )
141
+ require .Contains (t , string (stdout ), "Configuration dtr = on" )
142
+ })
143
+
144
+ t .Run ("WithDefaultFQBN" , func (t * testing.T ) {
145
+ _ , stderr , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "--raw" , sketchWithFQBN )
146
+ require .Error (t , err )
147
+ require .Contains (t , string (stderr ), "No monitor available for the port protocol default" )
148
+ })
149
+
150
+ t .Run ("WithDefaultPortAndQBN" , func (t * testing.T ) {
151
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "--raw" , sketchWithPortAndFQBN )
152
+ require .NoError (t , err )
153
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyDEF" )
154
+ require .Contains (t , string (stdout ), "Configuration rts = off" )
155
+ require .Contains (t , string (stdout ), "Configuration dtr = off" )
156
+ })
157
+ })
158
+
159
+ t .Run ("WithPortFlag" , func (t * testing.T ) {
160
+ t .Run ("NoDefaultPortNoDefaultFQBN" , func (t * testing.T ) {
161
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARGS" , "--raw" , sketch )
162
+ require .NoError (t , err )
163
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyARGS" )
164
+ require .Contains (t , string (stdout ), "Configuration rts = on" )
165
+ require .Contains (t , string (stdout ), "Configuration dtr = on" )
166
+ })
167
+
168
+ t .Run ("WithDefaultPort" , func (t * testing.T ) {
169
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARGS" , "--raw" , sketchWithPort )
170
+ require .NoError (t , err )
171
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyARGS" )
172
+ require .Contains (t , string (stdout ), "Configuration rts = on" )
173
+ require .Contains (t , string (stdout ), "Configuration dtr = on" )
174
+ })
175
+
176
+ t .Run ("WithDefaultFQBN" , func (t * testing.T ) {
177
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARGS" , "--raw" , sketchWithFQBN )
178
+ require .NoError (t , err )
179
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyARGS" )
180
+ require .Contains (t , string (stdout ), "Configuration rts = off" )
181
+ require .Contains (t , string (stdout ), "Configuration dtr = off" )
182
+ })
183
+
184
+ t .Run ("WithDefaultPortAndQBN" , func (t * testing.T ) {
185
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARGS" , "--raw" , sketchWithPortAndFQBN )
186
+ require .NoError (t , err )
187
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyARGS" )
188
+ require .Contains (t , string (stdout ), "Configuration rts = off" )
189
+ require .Contains (t , string (stdout ), "Configuration dtr = off" )
190
+ })
191
+ })
192
+
193
+ t .Run ("WithFQBNFlag" , func (t * testing.T ) {
194
+ t .Run ("NoDefaultPortNoDefaultFQBN" , func (t * testing.T ) {
195
+ _ , stderr , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-b" , "arduino:avr:uno" , "--raw" , sketch )
196
+ require .Error (t , err )
197
+ require .Contains (t , string (stderr ), "No monitor available for the port protocol default" )
198
+ })
199
+
200
+ t .Run ("WithDefaultPort" , func (t * testing.T ) {
201
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-b" , "arduino:avr:uno" , "--raw" , sketchWithPort )
202
+ require .NoError (t , err )
203
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyDEF" )
204
+ require .Contains (t , string (stdout ), "Configuration rts = off" )
205
+ require .Contains (t , string (stdout ), "Configuration dtr = on" )
206
+ })
207
+
208
+ t .Run ("WithDefaultFQBN" , func (t * testing.T ) {
209
+ _ , stderr , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-b" , "arduino:avr:uno" , "--raw" , sketchWithFQBN )
210
+ require .Error (t , err )
211
+ require .Contains (t , string (stderr ), "No monitor available for the port protocol default" )
212
+ })
213
+
214
+ t .Run ("WithDefaultPortAndQBN" , func (t * testing.T ) {
215
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-b" , "arduino:avr:uno" , "--raw" , sketchWithPortAndFQBN )
216
+ require .NoError (t , err )
217
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyDEF" )
218
+ require .Contains (t , string (stdout ), "Configuration rts = off" )
219
+ require .Contains (t , string (stdout ), "Configuration dtr = on" )
220
+ })
221
+ })
222
+
223
+ t .Run ("WithPortAndFQBNFlags" , func (t * testing.T ) {
224
+ t .Run ("NoDefaultPortNoDefaultFQBN" , func (t * testing.T ) {
225
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARGS" , "-b" , "arduino:avr:uno" , "--raw" , sketch )
226
+ require .NoError (t , err )
227
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyARGS" )
228
+ require .Contains (t , string (stdout ), "Configuration rts = off" )
229
+ require .Contains (t , string (stdout ), "Configuration dtr = on" )
230
+ })
231
+
232
+ t .Run ("WithDefaultPort" , func (t * testing.T ) {
233
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARGS" , "-b" , "arduino:avr:uno" , "--raw" , sketchWithPort )
234
+ require .NoError (t , err )
235
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyARGS" )
236
+ require .Contains (t , string (stdout ), "Configuration rts = off" )
237
+ require .Contains (t , string (stdout ), "Configuration dtr = on" )
238
+ })
239
+
240
+ t .Run ("WithDefaultFQBN" , func (t * testing.T ) {
241
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARGS" , "-b" , "arduino:avr:uno" , "--raw" , sketchWithFQBN )
242
+ require .NoError (t , err )
243
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyARGS" )
244
+ require .Contains (t , string (stdout ), "Configuration rts = off" )
245
+ require .Contains (t , string (stdout ), "Configuration dtr = on" )
246
+ })
247
+
248
+ t .Run ("WithDefaultPortAndQBN" , func (t * testing.T ) {
249
+ stdout , _ , err := cli .RunWithCustomInput (quitMonitor (), "monitor" , "-p" , "/dev/ttyARGS" , "-b" , "arduino:avr:uno" , "--raw" , sketchWithPortAndFQBN )
250
+ require .NoError (t , err )
251
+ require .Contains (t , string (stdout ), "Opened port: /dev/ttyARGS" )
252
+ require .Contains (t , string (stdout ), "Configuration rts = off" )
253
+ require .Contains (t , string (stdout ), "Configuration dtr = on" )
254
+ })
255
+ })
256
+ }
0 commit comments