diff --git a/internal/integrationtest/compile_4/__debug_bin2631212859 b/internal/integrationtest/compile_4/__debug_bin2631212859 new file mode 100755 index 00000000000..5314ea27009 Binary files /dev/null and b/internal/integrationtest/compile_4/__debug_bin2631212859 differ diff --git a/internal/integrationtest/compile_4/compile_test.go b/internal/integrationtest/compile_4/compile_test.go index 485e2962cd1..a645c87fafe 100644 --- a/internal/integrationtest/compile_4/compile_test.go +++ b/internal/integrationtest/compile_4/compile_test.go @@ -775,7 +775,6 @@ func testBuilderSketchWithFastledsLibrary(t *testing.T, env *integrationtest.Env }) } - type builderOutput struct { CompilerOut string `json:"compiler_out"` CompilerErr string `json:"compiler_err"` @@ -928,3 +927,30 @@ func TestCoreCaching(t *testing.T) { require.NoError(t, err) require.NotEqual(t, coreStatBefore.ModTime(), coreStatAfterTouch.ModTime()) } + +func TestMergeSketchWithBootloader(t *testing.T) { + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + sketchPath, err := paths.New("testdata", "SketchWithMergedSketchAndBootloader").Abs() + require.NoError(t, err) + + // Install Arduino AVR Boards + _, _, err = cli.Run("core", "install", "arduino:avr@1.8.6") + require.NoError(t, err) + + buildPath, err := paths.MkTempDir("", "arduino-integration-test") + require.NoError(t, err) + defer buildPath.RemoveAll() + + // Build first time + _, _, err = cli.Run("compile", "-b", "arduino:avr:uno", "--build-path", buildPath.String(), sketchPath.String()) + require.NoError(t, err) + + bytes, err := buildPath.Join("SketchWithMergedSketchAndBootloader.ino.with_bootloader.hex").ReadFile() + require.NoError(t, err) + mergedSketchHex := string(bytes) + + require.Contains(t, mergedSketchHex, ":100000000C9434000C9446000C9446000C9446006A\n") + require.True(t, strings.HasSuffix(mergedSketchHex, ":00000001FF\n")) +} diff --git a/legacy/builder/test/sketch1/sketch1.ino b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/SketchWithMergedSketchAndBootloader.ino similarity index 94% rename from legacy/builder/test/sketch1/sketch1.ino rename to internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/SketchWithMergedSketchAndBootloader.ino index 0d5e0f5ceb9..32f56baab79 100644 --- a/legacy/builder/test/sketch1/sketch1.ino +++ b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/SketchWithMergedSketchAndBootloader.ino @@ -4,4 +4,4 @@ void setup() { void loop() { -} \ No newline at end of file +} diff --git a/legacy/builder/test/sketch1/doc.txt b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/doc.txt similarity index 100% rename from legacy/builder/test/sketch1/doc.txt rename to internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/doc.txt diff --git a/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/header.h b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/header.h new file mode 100644 index 00000000000..eb6f60040f0 --- /dev/null +++ b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/header.h @@ -0,0 +1 @@ +#define TRUE FALSE diff --git a/legacy/builder/test/sketch1/merged_sketch.txt b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/merged_sketch.txt similarity index 100% rename from legacy/builder/test/sketch1/merged_sketch.txt rename to internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/merged_sketch.txt diff --git a/legacy/builder/test/sketch1/old.pde b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/old.pde similarity index 100% rename from legacy/builder/test/sketch1/old.pde rename to internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/old.pde diff --git a/legacy/builder/test/sketch1/other.ino b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/other.ino similarity index 94% rename from legacy/builder/test/sketch1/other.ino rename to internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/other.ino index c426196c017..b0f732c3f50 100644 --- a/legacy/builder/test/sketch1/other.ino +++ b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/other.ino @@ -1,3 +1,3 @@ String hello() { return "world"; -} \ No newline at end of file +} diff --git a/legacy/builder/test/sketch1/s_file.S b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/s_file.S similarity index 100% rename from legacy/builder/test/sketch1/s_file.S rename to internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/s_file.S diff --git a/legacy/builder/test/sketch1/src/helper.h b/internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/src/helper.h similarity index 100% rename from legacy/builder/test/sketch1/src/helper.h rename to internal/integrationtest/compile_4/testdata/SketchWithMergedSketchAndBootloader/src/helper.h diff --git a/legacy/builder/test/merge_sketch_with_bootloader_test.go b/legacy/builder/test/merge_sketch_with_bootloader_test.go deleted file mode 100644 index f7c9a24024f..00000000000 --- a/legacy/builder/test/merge_sketch_with_bootloader_test.go +++ /dev/null @@ -1,208 +0,0 @@ -// This file is part of arduino-cli. -// -// Copyright 2020 ARDUINO SA (http://www.arduino.cc/) -// -// This software is released under the GNU General Public License version 3, -// which covers the main part of arduino-cli. -// The terms of this license can be found at: -// https://www.gnu.org/licenses/gpl-3.0.en.html -// -// You can be released from the requirements of the above licenses by purchasing -// a commercial license. Buying such a license is mandatory if you want to -// modify or otherwise use the software for commercial activities involving the -// Arduino software without disclosing the source code of your own applications. -// To purchase a commercial license, send an email to license@arduino.cc. - -package test - -import ( - "fmt" - "path/filepath" - "strings" - "testing" - - "github.com/arduino/arduino-cli/legacy/builder/types" - paths "github.com/arduino/go-paths-helper" - "github.com/stretchr/testify/require" -) - -func TestMergeSketchWithBootloader(t *testing.T) { - ctx := prepareBuilderTestContext(t, nil, paths.New("sketch1", "sketch1.ino"), "arduino:avr:uno") - defer cleanUpBuilderTestContext(t, ctx) - - buildPath := ctx.Builder.GetBuildPath() - err := buildPath.Join("sketch").MkdirAll() - require.NoError(t, err) - - fakeSketchHex := `:100000000C9434000C9446000C9446000C9446006A -:100010000C9446000C9446000C9446000C94460048 -:100020000C9446000C9446000C9446000C94460038 -:100030000C9446000C9446000C9446000C94460028 -:100040000C9448000C9446000C9446000C94460016 -:100050000C9446000C9446000C9446000C94460008 -:100060000C9446000C94460011241FBECFEFD8E03C -:10007000DEBFCDBF21E0A0E0B1E001C01D92A930FC -:10008000B207E1F70E9492000C94DC000C9400008F -:100090001F920F920FB60F9211242F933F938F93BD -:1000A0009F93AF93BF938091050190910601A0911A -:1000B0000701B09108013091040123E0230F2D378F -:1000C00020F40196A11DB11D05C026E8230F02965C -:1000D000A11DB11D20930401809305019093060199 -:1000E000A0930701B0930801809100019091010154 -:1000F000A0910201B09103010196A11DB11D809351 -:10010000000190930101A0930201B0930301BF91FC -:10011000AF919F918F913F912F910F900FBE0F90B4 -:100120001F901895789484B5826084BD84B58160F1 -:1001300084BD85B5826085BD85B5816085BD8091B2 -:100140006E00816080936E0010928100809181002A -:100150008260809381008091810081608093810022 -:10016000809180008160809380008091B1008460E4 -:100170008093B1008091B00081608093B000809145 -:100180007A00846080937A0080917A008260809304 -:100190007A0080917A00816080937A0080917A0061 -:1001A000806880937A001092C100C0E0D0E0209770 -:0C01B000F1F30E940000FBCFF894FFCF99 -:00000001FF -` - err = buildPath.Join("sketch", "sketch1.ino.hex").WriteFile([]byte(fakeSketchHex)) - require.NoError(t, err) - - err = ctx.Builder.MergeSketchWithBootloader() - require.NoError(t, err) - - bytes, err := buildPath.Join("sketch", "sketch1.ino.with_bootloader.hex").ReadFile() - require.NoError(t, err) - mergedSketchHex := string(bytes) - - require.Contains(t, mergedSketchHex, ":100000000C9434000C9446000C9446000C9446006A\n") - require.True(t, strings.HasSuffix(mergedSketchHex, ":00000001FF\n")) -} - -func TestMergeSketchWithBootloaderSketchInBuildPath(t *testing.T) { - ctx := prepareBuilderTestContext(t, nil, paths.New("sketch1", "sketch1.ino"), "arduino:avr:uno") - defer cleanUpBuilderTestContext(t, ctx) - - buildPath := ctx.Builder.GetBuildPath() - err := buildPath.Join("sketch").MkdirAll() - require.NoError(t, err) - - fakeSketchHex := `:100000000C9434000C9446000C9446000C9446006A -:100010000C9446000C9446000C9446000C94460048 -:100020000C9446000C9446000C9446000C94460038 -:100030000C9446000C9446000C9446000C94460028 -:100040000C9448000C9446000C9446000C94460016 -:100050000C9446000C9446000C9446000C94460008 -:100060000C9446000C94460011241FBECFEFD8E03C -:10007000DEBFCDBF21E0A0E0B1E001C01D92A930FC -:10008000B207E1F70E9492000C94DC000C9400008F -:100090001F920F920FB60F9211242F933F938F93BD -:1000A0009F93AF93BF938091050190910601A0911A -:1000B0000701B09108013091040123E0230F2D378F -:1000C00020F40196A11DB11D05C026E8230F02965C -:1000D000A11DB11D20930401809305019093060199 -:1000E000A0930701B0930801809100019091010154 -:1000F000A0910201B09103010196A11DB11D809351 -:10010000000190930101A0930201B0930301BF91FC -:10011000AF919F918F913F912F910F900FBE0F90B4 -:100120001F901895789484B5826084BD84B58160F1 -:1001300084BD85B5826085BD85B5816085BD8091B2 -:100140006E00816080936E0010928100809181002A -:100150008260809381008091810081608093810022 -:10016000809180008160809380008091B1008460E4 -:100170008093B1008091B00081608093B000809145 -:100180007A00846080937A0080917A008260809304 -:100190007A0080917A00816080937A0080917A0061 -:1001A000806880937A001092C100C0E0D0E0209770 -:0C01B000F1F30E940000FBCFF894FFCF99 -:00000001FF -` - err = buildPath.Join("sketch1.ino.hex").WriteFile([]byte(fakeSketchHex)) - require.NoError(t, err) - - err = ctx.Builder.MergeSketchWithBootloader() - require.NoError(t, err) - - bytes, err := buildPath.Join("sketch1.ino.with_bootloader.hex").ReadFile() - require.NoError(t, err) - mergedSketchHex := string(bytes) - - fmt.Println(string(mergedSketchHex)) - require.Contains(t, mergedSketchHex, ":100000000C9434000C9446000C9446000C9446006A\n") - require.True(t, strings.HasSuffix(mergedSketchHex, ":00000001FF\n")) -} - -func TestMergeSketchWithBootloaderWhenNoBootloaderAvailable(t *testing.T) { - ctx := prepareBuilderTestContext(t, nil, paths.New("sketch1", "sketch1.ino"), "arduino:avr:uno") - defer cleanUpBuilderTestContext(t, ctx) - - buildPath := ctx.Builder.GetBuildPath() - buildProperties := ctx.Builder.GetBuildProperties() - buildProperties.Remove("bootloader.noblink") - buildProperties.Remove("bootloader.file") - - err := ctx.Builder.MergeSketchWithBootloader() - require.NoError(t, err) - - exist, err := buildPath.Join("sketch.ino.with_bootloader.hex").ExistCheck() - require.NoError(t, err) - require.False(t, exist) -} - -// TODO convert in a compile test and we check against the real .hex -func TestMergeSketchWithBootloaderPathIsParameterized(t *testing.T) { - ctx := &types.Context{ - HardwareDirs: paths.NewPathList(filepath.Join("..", "hardware"), "downloaded_hardware", "user_hardware"), - BuiltInToolsDirs: paths.NewPathList("downloaded_tools"), - BuiltInLibrariesDirs: paths.New("downloaded_libraries"), - OtherLibrariesDirs: paths.NewPathList("libraries"), - } - ctx = prepareBuilderTestContext(t, ctx, paths.New("sketch1", "sketch1.ino"), "my_avr_platform:avr:mymega:cpu=atmega2560") - defer cleanUpBuilderTestContext(t, ctx) - - buildPath := ctx.Builder.GetBuildPath() - err := buildPath.Join("sketch").MkdirAll() - require.NoError(t, err) - - fakeSketchHex := `:100000000C9434000C9446000C9446000C9446006A -:100010000C9446000C9446000C9446000C94460048 -:100020000C9446000C9446000C9446000C94460038 -:100030000C9446000C9446000C9446000C94460028 -:100040000C9448000C9446000C9446000C94460016 -:100050000C9446000C9446000C9446000C94460008 -:100060000C9446000C94460011241FBECFEFD8E03C -:10007000DEBFCDBF21E0A0E0B1E001C01D92A930FC -:10008000B207E1F70E9492000C94DC000C9400008F -:100090001F920F920FB60F9211242F933F938F93BD -:1000A0009F93AF93BF938091050190910601A0911A -:1000B0000701B09108013091040123E0230F2D378F -:1000C00020F40196A11DB11D05C026E8230F02965C -:1000D000A11DB11D20930401809305019093060199 -:1000E000A0930701B0930801809100019091010154 -:1000F000A0910201B09103010196A11DB11D809351 -:10010000000190930101A0930201B0930301BF91FC -:10011000AF919F918F913F912F910F900FBE0F90B4 -:100120001F901895789484B5826084BD84B58160F1 -:1001300084BD85B5826085BD85B5816085BD8091B2 -:100140006E00816080936E0010928100809181002A -:100150008260809381008091810081608093810022 -:10016000809180008160809380008091B1008460E4 -:100170008093B1008091B00081608093B000809145 -:100180007A00846080937A0080917A008260809304 -:100190007A0080917A00816080937A0080917A0061 -:1001A000806880937A001092C100C0E0D0E0209770 -:0C01B000F1F30E940000FBCFF894FFCF99 -:00000001FF -` - err = buildPath.Join("sketch", "sketch1.ino.hex").WriteFile([]byte(fakeSketchHex)) - require.NoError(t, err) - - err = ctx.Builder.MergeSketchWithBootloader() - require.NoError(t, err) - - bytes, err := buildPath.Join("sketch", "sketch1.ino.with_bootloader.hex").ReadFile() - require.NoError(t, err) - mergedSketchHex := string(bytes) - - require.Contains(t, mergedSketchHex, ":100000000C9434000C9446000C9446000C9446006A\n") - require.True(t, strings.HasSuffix(mergedSketchHex, ":00000001FF\n")) -} diff --git a/legacy/builder/test/sketch1/header.h b/legacy/builder/test/sketch1/header.h deleted file mode 100644 index 2e24536f9fb..00000000000 --- a/legacy/builder/test/sketch1/header.h +++ /dev/null @@ -1 +0,0 @@ -#define TRUE FALSE \ No newline at end of file