Skip to content

Commit 1652b8b

Browse files
committed
Moved unit tests related to build properties out of legacy package
1 parent 1b24145 commit 1652b8b

File tree

18 files changed

+1931
-297
lines changed

18 files changed

+1931
-297
lines changed

arduino/cores/packagemanager/package_manager_test.go

Lines changed: 139 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func TestResolveFQBN(t *testing.T) {
6767
pme, release := pm.NewExplorer()
6868
defer release()
6969

70-
{
70+
t.Run("NormalizeFQBN", func(t *testing.T) {
7171
testNormalization := func(in, expected string) {
7272
fqbn, err := cores.ParseFQBN(in)
7373
require.Nil(t, err)
@@ -89,9 +89,9 @@ func TestResolveFQBN(t *testing.T) {
8989
testNormalization("esp8266:esp8266:generic:baud=115200,wipe=sdk", "esp8266:esp8266:generic:wipe=sdk")
9090
testNormalization("arduino:avr:mega:cpu=nonexistent", "ERROR")
9191
testNormalization("arduino:avr:mega:nonexistent=blah", "ERROR")
92-
}
92+
})
9393

94-
{
94+
t.Run("BoardAndBuildPropertiesArduinoUno", func(t *testing.T) {
9595
fqbn, err := cores.ParseFQBN("arduino:avr:uno")
9696
require.Nil(t, err)
9797
require.NotNil(t, fqbn)
@@ -105,9 +105,14 @@ func TestResolveFQBN(t *testing.T) {
105105
require.Equal(t, board.Name(), "Arduino Uno")
106106
require.NotNil(t, props)
107107
require.Equal(t, platformRelease, buildPlatformRelease)
108-
}
109108

110-
{
109+
require.Equal(t, "arduino", pkg.Name)
110+
require.Equal(t, "avr", platformRelease.Platform.Architecture)
111+
require.Equal(t, "uno", board.BoardID)
112+
require.Equal(t, "atmega328p", props.Get("build.mcu"))
113+
})
114+
115+
t.Run("BoardAndBuildPropertiesArduinoMega", func(t *testing.T) {
111116
fqbn, err := cores.ParseFQBN("arduino:avr:mega")
112117
require.Nil(t, err)
113118
require.NotNil(t, fqbn)
@@ -121,9 +126,46 @@ func TestResolveFQBN(t *testing.T) {
121126
require.Equal(t, board.Name(), "Arduino Mega or Mega 2560")
122127
require.NotNil(t, props)
123128
require.Equal(t, platformRelease, buildPlatformRelease)
124-
}
129+
})
125130

126-
{
131+
t.Run("BoardAndBuildPropertiesArduinoMegaWithNonDefaultCpuOption", func(t *testing.T) {
132+
fqbn, err := cores.ParseFQBN("arduino:avr:mega:cpu=atmega1280")
133+
require.Nil(t, err)
134+
require.NotNil(t, fqbn)
135+
pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn)
136+
require.Nil(t, err)
137+
require.Equal(t, pkg, platformRelease.Platform.Package)
138+
require.NotNil(t, platformRelease)
139+
require.NotNil(t, platformRelease.Platform)
140+
require.Equal(t, platformRelease, buildPlatformRelease)
141+
142+
require.Equal(t, "arduino", pkg.Name)
143+
require.Equal(t, "avr", platformRelease.Platform.Architecture)
144+
require.Equal(t, "mega", board.BoardID)
145+
require.Equal(t, "atmega1280", props.Get("build.mcu"))
146+
require.Equal(t, "AVR_MEGA", props.Get("build.board"))
147+
})
148+
149+
t.Run("BoardAndBuildPropertiesArduinoMegaWithDefaultCpuOption", func(t *testing.T) {
150+
fqbn, err := cores.ParseFQBN("arduino:avr:mega:cpu=atmega2560")
151+
require.Nil(t, err)
152+
require.NotNil(t, fqbn)
153+
pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn)
154+
require.Nil(t, err)
155+
require.Equal(t, pkg, platformRelease.Platform.Package)
156+
require.NotNil(t, platformRelease)
157+
require.NotNil(t, platformRelease.Platform)
158+
require.Equal(t, platformRelease, buildPlatformRelease)
159+
160+
require.Equal(t, "arduino", pkg.Name)
161+
require.Equal(t, "avr", platformRelease.Platform.Architecture)
162+
require.Equal(t, "mega", board.BoardID)
163+
require.Equal(t, "atmega2560", props.Get("build.mcu"))
164+
require.Equal(t, "AVR_MEGA2560", props.Get("build.board"))
165+
166+
})
167+
168+
t.Run("BoardAndBuildPropertiesForReferencedArduinoUno", func(t *testing.T) {
127169
// Test a board referenced from the main AVR arduino platform
128170
fqbn, err := cores.ParseFQBN("referenced:avr:uno")
129171
require.Nil(t, err)
@@ -140,9 +182,56 @@ func TestResolveFQBN(t *testing.T) {
140182
require.NotNil(t, buildPlatformRelease)
141183
require.NotNil(t, buildPlatformRelease.Platform)
142184
require.Equal(t, buildPlatformRelease.Platform.String(), "arduino:avr")
143-
}
185+
})
144186

145-
{
187+
t.Run("BoardAndBuildPropertiesForArduinoDue", func(t *testing.T) {
188+
fqbn, err := cores.ParseFQBN("arduino:sam:arduino_due_x")
189+
require.Nil(t, err)
190+
require.NotNil(t, fqbn)
191+
pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn)
192+
require.Nil(t, err)
193+
require.Equal(t, pkg, platformRelease.Platform.Package)
194+
require.Equal(t, platformRelease, buildPlatformRelease)
195+
196+
require.Equal(t, "arduino", pkg.Name)
197+
require.Equal(t, "sam", platformRelease.Platform.Architecture)
198+
require.Equal(t, "arduino_due_x", board.BoardID)
199+
require.Equal(t, "cortex-m3", props.Get("build.mcu"))
200+
})
201+
202+
t.Run("BoardAndBuildPropertiesForCustomArduinoYun", func(t *testing.T) {
203+
fqbn, err := cores.ParseFQBN("my_avr_platform:avr:custom_yun")
204+
require.Nil(t, err)
205+
require.NotNil(t, fqbn)
206+
pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn)
207+
require.Nil(t, err)
208+
require.Equal(t, pkg, platformRelease.Platform.Package)
209+
require.NotEqual(t, platformRelease, buildPlatformRelease)
210+
211+
require.Equal(t, "my_avr_platform", pkg.Name)
212+
require.Equal(t, "avr", platformRelease.Platform.Architecture)
213+
require.Equal(t, "custom_yun", board.BoardID)
214+
require.Equal(t, "atmega32u4", props.Get("build.mcu"))
215+
require.Equal(t, "AVR_YUN", props.Get("build.board"))
216+
})
217+
218+
t.Run("BoardAndBuildPropertiesForWatterotCore", func(t *testing.T) {
219+
fqbn, err := cores.ParseFQBN("watterott:avr:attiny841:core=spencekonde,info=info")
220+
require.Nil(t, err)
221+
require.NotNil(t, fqbn)
222+
pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn)
223+
require.Nil(t, err)
224+
require.Equal(t, pkg, platformRelease.Platform.Package)
225+
require.Equal(t, platformRelease, buildPlatformRelease)
226+
227+
require.Equal(t, "watterott", pkg.Name)
228+
require.Equal(t, "avr", platformRelease.Platform.Architecture)
229+
require.Equal(t, "attiny841", board.BoardID)
230+
require.Equal(t, "tiny841", props.Get("build.core"))
231+
require.Equal(t, "tiny14", props.Get("build.variant"))
232+
})
233+
234+
t.Run("BoardAndBuildPropertiesForReferencedFeatherM0", func(t *testing.T) {
146235
// Test a board referenced from the Adafruit SAMD core (this tests
147236
// deriving where the package and core name are different)
148237
fqbn, err := cores.ParseFQBN("referenced:samd:feather_m0")
@@ -160,9 +249,9 @@ func TestResolveFQBN(t *testing.T) {
160249
require.NotNil(t, buildPlatformRelease)
161250
require.NotNil(t, buildPlatformRelease.Platform)
162251
require.Equal(t, buildPlatformRelease.Platform.String(), "adafruit:samd")
163-
}
252+
})
164253

165-
{
254+
t.Run("BoardAndBuildPropertiesForNonExistentPackage", func(t *testing.T) {
166255
// Test a board referenced from a non-existent package
167256
fqbn, err := cores.ParseFQBN("referenced:avr:dummy_invalid_package")
168257
require.Nil(t, err)
@@ -177,9 +266,9 @@ func TestResolveFQBN(t *testing.T) {
177266
require.Equal(t, board.Name(), "Referenced dummy with invalid package")
178267
require.Nil(t, props)
179268
require.Nil(t, buildPlatformRelease)
180-
}
269+
})
181270

182-
{
271+
t.Run("BoardAndBuildPropertiesForNonExistentArchitecture", func(t *testing.T) {
183272
// Test a board referenced from a non-existent platform/architecture
184273
fqbn, err := cores.ParseFQBN("referenced:avr:dummy_invalid_platform")
185274
require.Nil(t, err)
@@ -194,9 +283,9 @@ func TestResolveFQBN(t *testing.T) {
194283
require.Equal(t, board.Name(), "Referenced dummy with invalid platform")
195284
require.Nil(t, props)
196285
require.Nil(t, buildPlatformRelease)
197-
}
286+
})
198287

199-
{
288+
t.Run("BoardAndBuildPropertiesForNonExistentCore", func(t *testing.T) {
200289
// Test a board referenced from a non-existent core
201290
// Note that ResolveFQBN does not actually check this currently
202291
fqbn, err := cores.ParseFQBN("referenced:avr:dummy_invalid_core")
@@ -214,7 +303,41 @@ func TestResolveFQBN(t *testing.T) {
214303
require.NotNil(t, buildPlatformRelease)
215304
require.NotNil(t, buildPlatformRelease.Platform)
216305
require.Equal(t, buildPlatformRelease.Platform.String(), "arduino:avr")
217-
}
306+
})
307+
308+
t.Run("AddBuildBoardPropertyIfMissing", func(t *testing.T) {
309+
fqbn, err := cores.ParseFQBN("my_avr_platform:avr:mymega")
310+
require.Nil(t, err)
311+
require.NotNil(t, fqbn)
312+
pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn)
313+
require.Nil(t, err)
314+
require.Equal(t, pkg, platformRelease.Platform.Package)
315+
require.Equal(t, platformRelease, buildPlatformRelease)
316+
317+
require.Equal(t, "my_avr_platform", pkg.Name)
318+
require.NotNil(t, platformRelease)
319+
require.NotNil(t, platformRelease.Platform)
320+
require.Equal(t, "avr", platformRelease.Platform.Architecture)
321+
require.Equal(t, "mymega", board.BoardID)
322+
require.Equal(t, "atmega2560", props.Get("build.mcu"))
323+
require.Equal(t, "AVR_MYMEGA", props.Get("build.board"))
324+
})
325+
326+
t.Run("AddBuildBoardPropertyIfNotMissing", func(t *testing.T) {
327+
fqbn, err := cores.ParseFQBN("my_avr_platform:avr:mymega:cpu=atmega1280")
328+
require.Nil(t, err)
329+
require.NotNil(t, fqbn)
330+
pkg, platformRelease, board, props, buildPlatformRelease, err := pme.ResolveFQBN(fqbn)
331+
require.Nil(t, err)
332+
require.Equal(t, pkg, platformRelease.Platform.Package)
333+
require.Equal(t, platformRelease, buildPlatformRelease)
334+
335+
require.Equal(t, "my_avr_platform", pkg.Name)
336+
require.Equal(t, "avr", platformRelease.Platform.Architecture)
337+
require.Equal(t, "mymega", board.BoardID)
338+
require.Equal(t, "atmega1280", props.Get("build.mcu"))
339+
require.Equal(t, "MYMEGA1280", props.Get("build.board"))
340+
})
218341
}
219342

220343
func TestBoardOptionsFunctions(t *testing.T) {
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
2+
arduino_due_x_dbg.name=Arduino Due (Programming Port)
3+
arduino_due_x_dbg.vid.0=0x2341
4+
arduino_due_x_dbg.pid.0=0x003d
5+
arduino_due_x_dbg.vid.1=0x2A03
6+
arduino_due_x_dbg.pid.1=0x003d
7+
arduino_due_x_dbg.upload.tool=bossac
8+
arduino_due_x_dbg.upload.protocol=sam-ba
9+
arduino_due_x_dbg.upload.maximum_size=524288
10+
arduino_due_x_dbg.upload.use_1200bps_touch=true
11+
arduino_due_x_dbg.upload.wait_for_upload_port=false
12+
arduino_due_x_dbg.upload.native_usb=false
13+
arduino_due_x_dbg.build.mcu=cortex-m3
14+
arduino_due_x_dbg.build.f_cpu=84000000L
15+
arduino_due_x_dbg.build.usb_manufacturer="Arduino LLC"
16+
arduino_due_x_dbg.build.usb_product="Arduino Due"
17+
arduino_due_x_dbg.build.board=SAM_DUE
18+
arduino_due_x_dbg.build.core=arduino
19+
arduino_due_x_dbg.build.extra_flags=-D__SAM3X8E__ -mthumb {build.usb_flags}
20+
arduino_due_x_dbg.build.ldscript=linker_scripts/gcc/flash.ld
21+
arduino_due_x_dbg.build.variant=arduino_due_x
22+
arduino_due_x_dbg.build.variant_system_lib=libsam_sam3x8e_gcc_rel.a
23+
arduino_due_x_dbg.build.vid=0x2341
24+
arduino_due_x_dbg.build.pid=0x003e
25+
26+
arduino_due_x.name=Arduino Due (Native USB Port)
27+
arduino_due_x.vid.0=0x2341
28+
arduino_due_x.pid.0=0x003e
29+
arduino_due_x.vid.1=0x2A03
30+
arduino_due_x.pid.1=0x003e
31+
arduino_due_x.upload.tool=bossac
32+
arduino_due_x.upload.protocol=sam-ba
33+
arduino_due_x.upload.maximum_size=524288
34+
arduino_due_x.upload.use_1200bps_touch=true
35+
arduino_due_x.upload.wait_for_upload_port=true
36+
arduino_due_x.upload.native_usb=true
37+
arduino_due_x.build.mcu=cortex-m3
38+
arduino_due_x.build.f_cpu=84000000L
39+
arduino_due_x.build.usb_manufacturer="Arduino LLC"
40+
arduino_due_x.build.usb_product="Arduino Due"
41+
arduino_due_x.build.board=SAM_DUE
42+
arduino_due_x.build.core=arduino
43+
arduino_due_x.build.extra_flags=-D__SAM3X8E__ -mthumb {build.usb_flags}
44+
arduino_due_x.build.ldscript=linker_scripts/gcc/flash.ld
45+
arduino_due_x.build.variant=arduino_due_x
46+
arduino_due_x.build.variant_system_lib=libsam_sam3x8e_gcc_rel.a
47+
arduino_due_x.build.vid=0x2341
48+
arduino_due_x.build.pid=0x003e
49+
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
2+
# Arduino SAM Core and platform.
3+
# ------------------------------
4+
#
5+
# For more info:
6+
# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification
7+
8+
name=Arduino ARM (32-bits) Boards
9+
version=1.6.12
10+
11+
# SAM3 compile variables
12+
# ----------------------
13+
14+
compiler.warning_flags=-w
15+
compiler.warning_flags.none=-w
16+
compiler.warning_flags.default=
17+
compiler.warning_flags.more=-Wall
18+
compiler.warning_flags.all=-Wall -Wextra
19+
20+
compiler.path={runtime.tools.arm-none-eabi-gcc-4.8.3-2014q1.path}/bin/
21+
compiler.c.cmd=arm-none-eabi-gcc
22+
compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -Dprintf=iprintf -MMD
23+
compiler.c.elf.cmd=arm-none-eabi-gcc
24+
compiler.c.elf.flags=-Os -Wl,--gc-sections
25+
compiler.S.cmd=arm-none-eabi-gcc
26+
compiler.S.flags=-c -g -x assembler-with-cpp -MMD
27+
compiler.cpp.cmd=arm-none-eabi-g++
28+
compiler.cpp.flags=-c -g -Os {compiler.warning_flags} -std=gnu++11 -ffunction-sections -fdata-sections -nostdlib -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -MMD
29+
compiler.ar.cmd=arm-none-eabi-ar
30+
compiler.ar.flags=rcs
31+
compiler.objcopy.cmd=arm-none-eabi-objcopy
32+
compiler.objcopy.eep.flags=-O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0
33+
compiler.elf2hex.flags=-O binary
34+
compiler.elf2hex.cmd=arm-none-eabi-objcopy
35+
compiler.ldflags=
36+
compiler.size.cmd=arm-none-eabi-size
37+
compiler.define=-DARDUINO=
38+
compiler.combine.flags=-u _sbrk -u link -u _close -u _fstat -u _isatty -u _lseek -u _read -u _write -u _exit -u kill -u _getpid
39+
40+
# This can be overridden in boards.txt
41+
build.extra_flags=
42+
43+
# These can be overridden in platform.local.txt
44+
compiler.c.extra_flags=
45+
compiler.c.elf.extra_flags=
46+
compiler.cpp.extra_flags=
47+
compiler.S.extra_flags=
48+
compiler.ar.extra_flags=
49+
compiler.elf2hex.extra_flags=
50+
51+
52+
compiler.libsam.c.flags="-I{build.system.path}/libsam" "-I{build.system.path}/CMSIS/CMSIS/Include/" "-I{build.system.path}/CMSIS/Device/ATMEL/"
53+
54+
# USB Flags
55+
# ---------
56+
build.usb_flags=-DUSB_VID={build.vid} -DUSB_PID={build.pid} -DUSBCON '-DUSB_MANUFACTURER={build.usb_manufacturer}' '-DUSB_PRODUCT={build.usb_product}'
57+
58+
# Default usb manufacturer will be replaced at compile time using
59+
# numeric vendor ID if available or by board's specific value.
60+
build.usb_manufacturer="Unknown"
61+
62+
63+
# SAM3 compile patterns
64+
# ---------------------
65+
66+
## Compile c files
67+
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -mcpu={build.mcu} -mthumb -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.c.extra_flags} {build.extra_flags} {compiler.libsam.c.flags} {includes} "{source_file}" -o "{object_file}"
68+
69+
## Compile c++ files
70+
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -mcpu={build.mcu} -mthumb -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {compiler.libsam.c.flags} {includes} "{source_file}" -o "{object_file}"
71+
72+
## Compile S files
73+
recipe.S.o.pattern="{compiler.path}{compiler.S.cmd}" {compiler.S.flags} -mcpu={build.mcu} -mthumb -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.S.extra_flags} {build.extra_flags} {compiler.libsam.c.flags} {includes} "{source_file}" -o "{object_file}"
74+
75+
## Create archives
76+
# archive_file_path is needed for backwards compatibility with IDE 1.6.5 or older, IDE 1.6.6 or newer overrides this value
77+
archive_file_path={build.path}/{archive_file}
78+
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}"
79+
80+
## Combine gc-sections, archives, and objects
81+
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -mcpu={build.mcu} -mthumb {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--start-group {compiler.combine.flags} {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.path}/{archive_file}" -Wl,--end-group -lm -lgcc
82+
83+
## Create output (.bin file)
84+
recipe.objcopy.bin.pattern="{compiler.path}{compiler.elf2hex.cmd}" {compiler.elf2hex.flags} {compiler.elf2hex.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.bin"
85+
86+
## Save hex
87+
recipe.output.tmp_file={build.project_name}.bin
88+
recipe.output.save_file={build.project_name}.{build.variant}.bin
89+
90+
## Compute size
91+
recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf"
92+
recipe.size.regex=\.text\s+([0-9]+).*
93+
94+
95+
# SAM3 Uploader tools
96+
# -------------------
97+
98+
# BOSSA
99+
tools.bossac.path={runtime.tools.bossac.path}
100+
tools.bossac.cmd=bossac
101+
tools.bossac.cmd.windows=bossac.exe
102+
103+
tools.bossac.upload.params.verbose=-i -d
104+
tools.bossac.upload.params.quiet=
105+
tools.bossac.upload.params.verify=-v
106+
tools.bossac.upload.pattern="{path}/{cmd}" {upload.verbose} --port={serial.port.file} -U {upload.native_usb} -e -w {upload.verify} -b "{build.path}/{build.project_name}.bin" -R
107+
108+
tools.bossac_remote.upload.pattern=/usr/bin/run-bossac {upload.verbose} --port=ttyATH0 -U {upload.native_usb} -e -w -v -b /tmp/sketch.bin -R

0 commit comments

Comments
 (0)