16
16
package utils
17
17
18
18
import (
19
+ "os"
19
20
"testing"
21
+ "time"
20
22
23
+ "github.com/arduino/go-paths-helper"
21
24
"github.com/stretchr/testify/require"
22
25
)
23
26
@@ -39,3 +42,133 @@ func TestPrintableCommand(t *testing.T) {
39
42
result := printableCommand (parts )
40
43
require .Equal (t , correct , result )
41
44
}
45
+
46
+ func tempFile (t * testing.T , prefix string ) * paths.Path {
47
+ file , err := os .CreateTemp ("" , prefix )
48
+ file .Close ()
49
+ require .NoError (t , err )
50
+ return paths .New (file .Name ())
51
+ }
52
+
53
+ func TestObjFileIsUpToDateObjMissing (t * testing.T ) {
54
+ sourceFile := tempFile (t , "source" )
55
+ defer sourceFile .RemoveAll ()
56
+
57
+ upToDate , err := ObjFileIsUpToDate (sourceFile , nil , nil )
58
+ require .NoError (t , err )
59
+ require .False (t , upToDate )
60
+ }
61
+
62
+ func TestObjFileIsUpToDateDepMissing (t * testing.T ) {
63
+ sourceFile := tempFile (t , "source" )
64
+ defer sourceFile .RemoveAll ()
65
+
66
+ objFile := tempFile (t , "obj" )
67
+ defer objFile .RemoveAll ()
68
+
69
+ upToDate , err := ObjFileIsUpToDate (sourceFile , objFile , nil )
70
+ require .NoError (t , err )
71
+ require .False (t , upToDate )
72
+ }
73
+
74
+ func TestObjFileIsUpToDateObjOlder (t * testing.T ) {
75
+ objFile := tempFile (t , "obj" )
76
+ defer objFile .RemoveAll ()
77
+ depFile := tempFile (t , "dep" )
78
+ defer depFile .RemoveAll ()
79
+
80
+ time .Sleep (time .Second )
81
+
82
+ sourceFile := tempFile (t , "source" )
83
+ defer sourceFile .RemoveAll ()
84
+
85
+ upToDate , err := ObjFileIsUpToDate (sourceFile , objFile , depFile )
86
+ require .NoError (t , err )
87
+ require .False (t , upToDate )
88
+ }
89
+
90
+ func TestObjFileIsUpToDateObjNewer (t * testing.T ) {
91
+ sourceFile := tempFile (t , "source" )
92
+ defer sourceFile .RemoveAll ()
93
+
94
+ time .Sleep (time .Second )
95
+
96
+ objFile := tempFile (t , "obj" )
97
+ defer objFile .RemoveAll ()
98
+ depFile := tempFile (t , "dep" )
99
+ defer depFile .RemoveAll ()
100
+
101
+ upToDate , err := ObjFileIsUpToDate (sourceFile , objFile , depFile )
102
+ require .NoError (t , err )
103
+ require .True (t , upToDate )
104
+ }
105
+
106
+ func TestObjFileIsUpToDateDepIsNewer (t * testing.T ) {
107
+ sourceFile := tempFile (t , "source" )
108
+ defer sourceFile .RemoveAll ()
109
+
110
+ time .Sleep (time .Second )
111
+
112
+ objFile := tempFile (t , "obj" )
113
+ defer objFile .RemoveAll ()
114
+ depFile := tempFile (t , "dep" )
115
+ defer depFile .RemoveAll ()
116
+
117
+ time .Sleep (time .Second )
118
+
119
+ headerFile := tempFile (t , "header" )
120
+ defer headerFile .RemoveAll ()
121
+
122
+ data := objFile .String () + ": \\ \n \t " + sourceFile .String () + " \\ \n \t " + headerFile .String ()
123
+ depFile .WriteFile ([]byte (data ))
124
+
125
+ upToDate , err := ObjFileIsUpToDate (sourceFile , objFile , depFile )
126
+ require .NoError (t , err )
127
+ require .False (t , upToDate )
128
+ }
129
+
130
+ func TestObjFileIsUpToDateDepIsOlder (t * testing.T ) {
131
+ sourceFile := tempFile (t , "source" )
132
+ defer sourceFile .RemoveAll ()
133
+
134
+ headerFile := tempFile (t , "header" )
135
+ defer headerFile .RemoveAll ()
136
+
137
+ time .Sleep (time .Second )
138
+
139
+ objFile := tempFile (t , "obj" )
140
+ defer objFile .RemoveAll ()
141
+ depFile := tempFile (t , "dep" )
142
+ defer depFile .RemoveAll ()
143
+
144
+ res := objFile .String () + ": \\ \n \t " + sourceFile .String () + " \\ \n \t " + headerFile .String ()
145
+ depFile .WriteFile ([]byte (res ))
146
+
147
+ upToDate , err := ObjFileIsUpToDate (sourceFile , objFile , depFile )
148
+ require .NoError (t , err )
149
+ require .True (t , upToDate )
150
+ }
151
+
152
+ func TestObjFileIsUpToDateDepIsWrong (t * testing.T ) {
153
+ sourceFile := tempFile (t , "source" )
154
+ defer sourceFile .RemoveAll ()
155
+
156
+ time .Sleep (time .Second )
157
+
158
+ objFile := tempFile (t , "obj" )
159
+ defer objFile .RemoveAll ()
160
+ depFile := tempFile (t , "dep" )
161
+ defer depFile .RemoveAll ()
162
+
163
+ time .Sleep (time .Second )
164
+
165
+ headerFile := tempFile (t , "header" )
166
+ defer headerFile .RemoveAll ()
167
+
168
+ res := sourceFile .String () + ": \\ \n \t " + sourceFile .String () + " \\ \n \t " + headerFile .String ()
169
+ depFile .WriteFile ([]byte (res ))
170
+
171
+ upToDate , err := ObjFileIsUpToDate (sourceFile , objFile , depFile )
172
+ require .NoError (t , err )
173
+ require .False (t , upToDate )
174
+ }
0 commit comments