forked from arduino/arduino-cli
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcpp_test.go
88 lines (80 loc) · 3.49 KB
/
cpp_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*
* This file is part of arduino-cli.
*
* Copyright 2018 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 [email protected].
*/
package librariesresolver
import (
"testing"
"github.com/arduino/arduino-cli/arduino/libraries"
"github.com/stretchr/testify/require"
)
var l1 = &libraries.Library{Name: "Calculus Lib", Location: libraries.Sketchbook}
var l2 = &libraries.Library{Name: "Calculus Lib-master", Location: libraries.Sketchbook}
var l3 = &libraries.Library{Name: "Calculus Lib Improved", Location: libraries.Sketchbook}
var l4 = &libraries.Library{Name: "Another Calculus Lib", Location: libraries.Sketchbook}
var l5 = &libraries.Library{Name: "Yet Another Calculus Lib Improved", Location: libraries.Sketchbook}
var l6 = &libraries.Library{Name: "Calculus Unified Lib", Location: libraries.Sketchbook}
var l7 = &libraries.Library{Name: "AnotherLib", Location: libraries.Sketchbook}
func TestClosestMatchWithTotallyDifferentNames(t *testing.T) {
libraryList := libraries.List{}
libraryList.Add(l5)
libraryList.Add(l6)
libraryList.Add(l7)
resolver := NewCppResolver()
resolver.headers["XYZ.h"] = libraryList
res := resolver.ResolveFor("XYZ.h", "xyz")
require.NotNil(t, res)
require.Equal(t, l7, res, "selected library")
}
func TestCppHeaderPriority(t *testing.T) {
r1 := computePriority(l1, "calculus_lib.h", "avr")
r2 := computePriority(l2, "calculus_lib.h", "avr")
r3 := computePriority(l3, "calculus_lib.h", "avr")
r4 := computePriority(l4, "calculus_lib.h", "avr")
r5 := computePriority(l5, "calculus_lib.h", "avr")
r6 := computePriority(l6, "calculus_lib.h", "avr")
r7 := computePriority(l7, "calculus_lib.h", "avr")
require.True(t, r1 > r2)
require.True(t, r2 > r3)
require.True(t, r3 > r4)
require.True(t, r4 > r5)
require.True(t, r5 > r6)
require.True(t, r6 == r7)
}
func TestCppHeaderResolverWithNilResult(t *testing.T) {
resolver := NewCppResolver()
libraryList := libraries.List{}
libraryList.Add(l1)
resolver.headers["aaa.h"] = libraryList
require.Nil(t, resolver.ResolveFor("bbb.h", "avr"))
}
func TestCppHeaderResolver(t *testing.T) {
resolve := func(header string, libs ...*libraries.Library) string {
resolver := NewCppResolver()
librarylist := libraries.List{}
for _, lib := range libs {
librarylist.Add(lib)
}
resolver.headers[header] = librarylist
return resolver.ResolveFor(header, "avr").Name
}
require.Equal(t, "Calculus Lib", resolve("calculus_lib.h", l1, l2, l3, l4, l5, l6, l7))
require.Equal(t, "Calculus Lib-master", resolve("calculus_lib.h", l2, l3, l4, l5, l6, l7))
require.Equal(t, "Calculus Lib Improved", resolve("calculus_lib.h", l3, l4, l5, l6, l7))
require.Equal(t, "Another Calculus Lib", resolve("calculus_lib.h", l4, l5, l6, l7))
require.Equal(t, "Yet Another Calculus Lib Improved", resolve("calculus_lib.h", l5, l6, l7))
require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l6, l7))
require.Equal(t, "Calculus Unified Lib", resolve("calculus_lib.h", l7, l6))
}