@@ -97,3 +97,75 @@ profiles:
97
97
{"name": "MyLibOutside", "install_dir": ` + string (libOutsideJson ) + `}
98
98
]` )
99
99
}
100
+
101
+ func TestRelativeLocalLib (t * testing.T ) {
102
+ env , cli := integrationtest .CreateArduinoCLIWithEnvironment (t )
103
+ t .Cleanup (env .CleanUp )
104
+
105
+ // Prepare the sketch with libraries
106
+ tmpDir , err := paths .MkTempDir ("" , "" )
107
+ require .NoError (t , err )
108
+ t .Cleanup (func () { _ = tmpDir .RemoveAll })
109
+
110
+ sketchTemplate , err := paths .New ("testdata" , "SketchWithLibrary" ).Abs ()
111
+ require .NoError (t , err )
112
+
113
+ sketch := tmpDir .Join ("SketchWithLibrary" )
114
+ libInside := sketch .Join ("libraries" , "MyLib" )
115
+ err = sketchTemplate .CopyDirTo (sketch )
116
+ require .NoError (t , err )
117
+
118
+ libOutsideTemplate := sketchTemplate .Join (".." , "MyLibOutside" )
119
+ libOutside := sketch .Join (".." , "MyLibOutside" )
120
+ err = libOutsideTemplate .CopyDirTo (libOutside )
121
+ require .NoError (t , err )
122
+
123
+ // Install the required core and libraries
124
+ _ ,
_ ,
err = cli .
Run (
"core" ,
"install" ,
"arduino:[email protected] " )
125
+ require .NoError (t , err )
126
+ _ ,
_ ,
err = cli .
Run (
"lib" ,
"install" ,
"Adafruit [email protected] " ,
"--no-overwrite" )
127
+ require .NoError (t , err )
128
+ _ ,
_ ,
err = cli .
Run (
"lib" ,
"install" ,
"Adafruit GFX [email protected] " ,
"--no-overwrite" )
129
+ require .NoError (t , err )
130
+ _ ,
_ ,
err = cli .
Run (
"lib" ,
"install" ,
"Adafruit [email protected] " ,
"--no-overwrite" )
131
+ require .NoError (t , err )
132
+
133
+ // Check if the profile dump:
134
+ // - keeps libraries in the sketch with a relative path to the folder, not the .ino
135
+ out , _ , err := cli .Run ("compile" , "-b" , "arduino:avr:uno" ,
136
+ "--library" , libInside .String (),
137
+ "--library" , libOutside .String (),
138
+ "--dump-profile" ,
139
+ sketch .Join ("SketchWithLibrary.ino" ).String ())
140
+ require .NoError (t , err )
141
+ require .Equal (t , strings .TrimSpace (`
142
+ profiles:
143
+ uno:
144
+ fqbn: arduino:avr:uno
145
+ platforms:
146
+ - platform: arduino:avr (1.8.6)
147
+ libraries:
148
+ - dir: libraries/MyLib
149
+ - dir: ` + libOutside .String ()+ `
150
+ - Adafruit SSD1306 (2.5.14)
151
+ - Adafruit GFX Library (1.12.1)
152
+ - Adafruit BusIO (1.17.1)
153
+ ` ), strings .TrimSpace (string (out )))
154
+
155
+ outRelative := strings .Replace (string (out ), libOutside .String (), "../MyLibOutside" , 1 )
156
+
157
+ // Dump the profile in the sketch directory and compile with it again
158
+ err = sketch .Join ("sketch.yaml" ).WriteFile ([]byte (outRelative ))
159
+ require .NoError (t , err )
160
+ out , _ , err = cli .Run ("compile" , "-m" , "uno" , "--json" , sketch .Join ("SketchWithLibrary.ino" ).String ())
161
+ require .NoError (t , err )
162
+ // Check if local libraries are picked up correctly
163
+ libInsideJson , _ := json .Marshal (libInside .String ())
164
+ libOutsideJson , _ := json .Marshal (libOutside .String ())
165
+ j := requirejson .Parse (t , out ).Query (".builder_result.used_libraries" )
166
+ j .MustContain (`
167
+ [
168
+ {"name": "MyLib", "install_dir": ` + string (libInsideJson ) + `},
169
+ {"name": "MyLibOutside", "install_dir": ` + string (libOutsideJson ) + `}
170
+ ]` )
171
+ }
0 commit comments