1
1
package tmx_test
2
2
3
3
import (
4
+ "errors"
4
5
"image"
6
+ "io"
7
+ "os"
5
8
6
9
. "github.com/manyminds/tmx"
7
10
. "github.com/onsi/ginkgo"
@@ -15,6 +18,21 @@ func (m nilResourceLoader) LocateResource(filepath string) (image.Image, error)
15
18
return nil , nil
16
19
}
17
20
21
+ type moduloErrorResourceLoader struct {
22
+ callCount int
23
+ }
24
+
25
+ var errAlreadyLoaded = errors .New ("Already loaded" )
26
+
27
+ func (m * moduloErrorResourceLoader ) LocateResource (filepath string ) (image.Image , error ) {
28
+ m .callCount ++
29
+ if m .callCount % 2 == 0 {
30
+ return nil , errAlreadyLoaded
31
+ }
32
+
33
+ return nil , nil
34
+ }
35
+
18
36
var _ = Describe ("Test public api" , func () {
19
37
Context ("check types for interface interface" , func () {
20
38
It ("can be implemented" , func () {
@@ -36,5 +54,54 @@ var _ = Describe("Test public api", func() {
36
54
_ , err := loader .LocateResource ("/null" )
37
55
Expect (err ).To (HaveOccurred ())
38
56
})
57
+
58
+ It ("will find a testfile" , func () {
59
+ loader := FilesystemLocator {}
60
+ _ , err := loader .LocateResource ("testfiles/chipset.png" )
61
+ Expect (err ).ToNot (HaveOccurred ())
62
+ })
63
+ })
64
+
65
+ Context ("test lazy resource locator" , func () {
66
+ BeforeEach (func () {
67
+ c , err := os .Open ("testfiles/chipset.png" )
68
+ Expect (err ).ToNot (HaveOccurred ())
69
+ t , err := os .Create ("testfiles/chipset_copy.png" )
70
+ Expect (err ).ToNot (HaveOccurred ())
71
+ _ , err = io .Copy (t , c )
72
+ Expect (err ).ToNot (HaveOccurred ())
73
+ })
74
+
75
+ AfterEach (func () {
76
+ os .Remove ("testfiles/chipset_copy.png" )
77
+ })
78
+
79
+ It ("caches files even after remove" , func () {
80
+ loader := NewLazyResourceLocator (FilesystemLocator {})
81
+ img , err := loader .LocateResource ("testfiles/chipset_copy.png" )
82
+ Expect (err ).ToNot (HaveOccurred ())
83
+ Expect (img ).ToNot (BeNil ())
84
+ err = os .Remove ("testfiles/chipset_copy.png" )
85
+ Expect (err ).ToNot (HaveOccurred ())
86
+ img , err = loader .LocateResource ("testfiles/chipset_copy.png" )
87
+ Expect (err ).ToNot (HaveOccurred ())
88
+ Expect (img ).ToNot (BeNil ())
89
+
90
+ manager , ok := loader .(ResourceManager )
91
+ Expect (ok ).To (BeTrue ())
92
+ manager .UnsetResource ("testfiles/chipset_copy.png" )
93
+ img , err = loader .LocateResource ("testfiles/chipset_copy.png" )
94
+ Expect (err ).To (HaveOccurred ())
95
+ Expect (img ).To (BeNil ())
96
+ })
97
+
98
+ It ("will only load a specific resource once" , func () {
99
+ loader := & moduloErrorResourceLoader {}
100
+ lazyLoader := NewLazyResourceLocator (loader )
101
+ _ , err := lazyLoader .LocateResource ("lol" )
102
+ Expect (err ).ToNot (HaveOccurred ())
103
+ _ , err = lazyLoader .LocateResource ("lol" )
104
+ Expect (err ).ToNot (HaveOccurred ())
105
+ })
39
106
})
40
107
})
0 commit comments