1616package utils
1717
1818import (
19+ "os"
1920 "testing"
21+ "time"
2022
23+ "github.com/arduino/go-paths-helper"
2124 "github.com/stretchr/testify/require"
2225)
2326
@@ -39,3 +42,133 @@ func TestPrintableCommand(t *testing.T) {
3942 result := printableCommand (parts )
4043 require .Equal (t , correct , result )
4144}
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