Skip to content

Commit 2054bf1

Browse files
committed
builder: made a sketch-prepress function part of Builder
1 parent 9cec567 commit 2054bf1

File tree

2 files changed

+32
-40
lines changed

2 files changed

+32
-40
lines changed

arduino/builder/sketch.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func (b *Builder) PrepareSketchBuildPath(sourceOverrides map[string]string, buil
4141
if err := buildPath.MkdirAll(); err != nil {
4242
return 0, errors.Wrap(err, tr("unable to create a folder to save the sketch"))
4343
}
44-
if offset, mergedSource, err := sketchMergeSources(b.sketch, sourceOverrides); err != nil {
44+
if offset, mergedSource, err := b.sketchMergeSources(sourceOverrides); err != nil {
4545
return 0, err
4646
} else if err := SketchSaveItemCpp(b.sketch.MainFile, []byte(mergedSource), buildPath); err != nil {
4747
return 0, err
@@ -67,12 +67,12 @@ func SketchSaveItemCpp(path *paths.Path, contents []byte, buildPath *paths.Path)
6767

6868
// sketchMergeSources merges all the .ino source files included in a sketch to produce
6969
// a single .cpp file.
70-
func sketchMergeSources(sk *sketch.Sketch, overrides map[string]string) (int, string, error) {
70+
func (b *Builder) sketchMergeSources(overrides map[string]string) (int, string, error) {
7171
lineOffset := 0
7272
mergedSource := ""
7373

7474
getSource := func(f *paths.Path) (string, error) {
75-
path, err := sk.FullPath.RelTo(f)
75+
path, err := b.sketch.FullPath.RelTo(f)
7676
if err != nil {
7777
return "", errors.Wrap(err, tr("unable to compute relative path to the sketch for the item"))
7878
}
@@ -87,7 +87,7 @@ func sketchMergeSources(sk *sketch.Sketch, overrides map[string]string) (int, st
8787
}
8888

8989
// add Arduino.h inclusion directive if missing
90-
mainSrc, err := getSource(sk.MainFile)
90+
mainSrc, err := getSource(b.sketch.MainFile)
9191
if err != nil {
9292
return 0, "", err
9393
}
@@ -96,11 +96,11 @@ func sketchMergeSources(sk *sketch.Sketch, overrides map[string]string) (int, st
9696
lineOffset++
9797
}
9898

99-
mergedSource += "#line 1 " + cpp.QuoteString(sk.MainFile.String()) + "\n"
99+
mergedSource += "#line 1 " + cpp.QuoteString(b.sketch.MainFile.String()) + "\n"
100100
mergedSource += mainSrc + "\n"
101101
lineOffset++
102102

103-
for _, file := range sk.OtherSketchFiles {
103+
for _, file := range b.sketch.OtherSketchFiles {
104104
src, err := getSource(file)
105105
if err != nil {
106106
return 0, "", err

arduino/builder/sketch_test.go

+26-34
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ package builder
1717

1818
import (
1919
"fmt"
20-
"os"
21-
"path/filepath"
2220
"runtime"
2321
"strings"
2422
"testing"
@@ -28,21 +26,14 @@ import (
2826
"github.com/stretchr/testify/require"
2927
)
3028

31-
func tmpDirOrDie() *paths.Path {
32-
dir, err := os.MkdirTemp(os.TempDir(), "builder_test")
33-
if err != nil {
34-
panic(fmt.Sprintf("error creating tmp dir: %v", err))
35-
}
36-
return paths.New(dir)
37-
}
38-
3929
func TestSaveSketch(t *testing.T) {
40-
sketchName := t.Name() + ".ino"
41-
outName := sketchName + ".cpp"
42-
sketchFile := filepath.Join("testdata", sketchName)
43-
tmp := tmpDirOrDie()
30+
sketchName := t.Name() + ".ino" // "TestSaveSketch.ino"
31+
outName := sketchName + ".cpp" // "TestSaveSketch.ino.cpp"
32+
sketchFile := paths.New("testdata", sketchName) // "testdata/TestSaveSketch.ino.cpp"
33+
tmp, err := paths.MkTempDir("", "")
34+
require.NoError(t, err)
4435
defer tmp.RemoveAll()
45-
source, err := os.ReadFile(sketchFile)
36+
source, err := sketchFile.ReadFile()
4637
if err != nil {
4738
t.Fatalf("unable to read golden file %s: %v", sketchFile, err)
4839
}
@@ -59,76 +50,77 @@ func TestSaveSketch(t *testing.T) {
5950

6051
func TestMergeSketchSources(t *testing.T) {
6152
// borrow the sketch from TestLoadSketchFolder to avoid boilerplate
62-
s, err := sketch.New(paths.New("testdata", "TestLoadSketchFolder"))
53+
sk, err := sketch.New(paths.New("testdata", "TestLoadSketchFolder"))
6354
require.Nil(t, err)
64-
require.NotNil(t, s)
55+
require.NotNil(t, sk)
6556

6657
// load expected result
6758
suffix := ".txt"
6859
if runtime.GOOS == "windows" {
6960
suffix = "_win.txt"
7061
}
7162
mergedPath := paths.New("testdata", t.Name()+suffix)
63+
require.NoError(t, mergedPath.ToAbs())
7264
mergedBytes, err := mergedPath.ReadFile()
73-
if err != nil {
74-
t.Fatalf("unable to read golden file %s: %v", mergedPath, err)
75-
}
65+
require.NoError(t, err, "reading golden file %s: %v", mergedPath, err)
7666

77-
mergedPath.ToAbs()
7867
pathToGoldenSource := mergedPath.Parent().Parent().String()
7968
if runtime.GOOS == "windows" {
8069
pathToGoldenSource = strings.ReplaceAll(pathToGoldenSource, `\`, `\\`)
8170
}
8271
mergedSources := strings.ReplaceAll(string(mergedBytes), "%s", pathToGoldenSource)
8372

84-
offset, source, err := sketchMergeSources(s, nil)
73+
b := NewBuilder(sk)
74+
offset, source, err := b.sketchMergeSources(nil)
8575
require.Nil(t, err)
8676
require.Equal(t, 2, offset)
8777
require.Equal(t, mergedSources, source)
8878
}
8979

9080
func TestMergeSketchSourcesArduinoIncluded(t *testing.T) {
91-
s, err := sketch.New(paths.New("testdata", t.Name()))
81+
sk, err := sketch.New(paths.New("testdata", t.Name()))
9282
require.Nil(t, err)
93-
require.NotNil(t, s)
83+
require.NotNil(t, sk)
9484

9585
// ensure not to include Arduino.h when it's already there
96-
_, source, err := sketchMergeSources(s, nil)
86+
b := NewBuilder(sk)
87+
_, source, err := b.sketchMergeSources(nil)
9788
require.Nil(t, err)
9889
require.Equal(t, 1, strings.Count(source, "<Arduino.h>"))
9990
}
10091

10192
func TestCopyAdditionalFiles(t *testing.T) {
102-
tmp := tmpDirOrDie()
93+
tmp, err := paths.MkTempDir("", "")
94+
require.NoError(t, err)
10395
defer tmp.RemoveAll()
10496

10597
// load the golden sketch
106-
s1, err := sketch.New(paths.New("testdata", t.Name()))
98+
sk1, err := sketch.New(paths.New("testdata", t.Name()))
10799
require.Nil(t, err)
108-
require.Equal(t, s1.AdditionalFiles.Len(), 1)
100+
require.Equal(t, sk1.AdditionalFiles.Len(), 1)
109101

110102
// copy the sketch over, create a fake main file we don't care about it
111103
// but we need it for `SketchLoad` to succeed later
112-
err = sketchCopyAdditionalFiles(s1, tmp, nil)
104+
err = sketchCopyAdditionalFiles(sk1, tmp, nil)
113105
require.Nil(t, err)
114106
fakeIno := tmp.Join(fmt.Sprintf("%s.ino", tmp.Base()))
115107
require.Nil(t, fakeIno.WriteFile([]byte{}))
116108

117109
// compare
118-
s2, err := sketch.New(tmp)
110+
sk2, err := sketch.New(tmp)
119111
require.Nil(t, err)
120-
require.Equal(t, s2.AdditionalFiles.Len(), 1)
112+
require.Equal(t, sk2.AdditionalFiles.Len(), 1)
121113

122114
// save file info
123-
info1, err := s2.AdditionalFiles[0].Stat()
115+
info1, err := sk2.AdditionalFiles[0].Stat()
124116
require.Nil(t, err)
125117

126118
// copy again
127-
err = sketchCopyAdditionalFiles(s1, tmp, nil)
119+
err = sketchCopyAdditionalFiles(sk1, tmp, nil)
128120
require.Nil(t, err)
129121

130122
// verify file hasn't changed
131-
info2, err := s2.AdditionalFiles[0].Stat()
123+
info2, err := sk2.AdditionalFiles[0].Stat()
132124
require.NoError(t, err)
133125
require.Equal(t, info1.ModTime(), info2.ModTime())
134126
}

0 commit comments

Comments
 (0)