| 175 | } |
| 176 | |
| 177 | func TestRegistryLoadFS(t *testing.T) { |
| 178 | r := NewRegistry() |
| 179 | |
| 180 | t.Run("invalid fs", func(t *testing.T) { |
| 181 | fs := os.DirFS("__missing__") |
| 182 | |
| 183 | files := []string{"missing1", "missing2"} |
| 184 | |
| 185 | key := fmt.Sprintf("%v%v", fs, files) |
| 186 | |
| 187 | r.LoadFS(fs, files...) |
| 188 | |
| 189 | renderer := r.cache.Get(key) |
| 190 | |
| 191 | if renderer == nil { |
| 192 | t.Fatal("Expected renderer to be initialized even if invalid, got nil") |
| 193 | } |
| 194 | |
| 195 | if renderer.template != nil { |
| 196 | t.Fatalf("Expected renderer template to be nil, got %v", renderer.template) |
| 197 | } |
| 198 | |
| 199 | if renderer.parseError == nil { |
| 200 | t.Fatalf("Expected renderer parseError to be set, got nil") |
| 201 | } |
| 202 | }) |
| 203 | |
| 204 | t.Run("valid fs", func(t *testing.T) { |
| 205 | // create test templates |
| 206 | dir, err := os.MkdirTemp(os.TempDir(), "template_test2") |
| 207 | if err != nil { |
| 208 | t.Fatal(err) |
| 209 | } |
| 210 | if err := os.WriteFile(filepath.Join(dir, "base.html"), []byte(`Base:{{template "content" .}}`), 0644); err != nil { |
| 211 | t.Fatal(err) |
| 212 | } |
| 213 | if err := os.WriteFile(filepath.Join(dir, "content.html"), []byte(`{{define "content"}}Content:{{.|raw}}{{end}}`), 0644); err != nil { |
| 214 | t.Fatal(err) |
| 215 | } |
| 216 | defer os.RemoveAll(dir) |
| 217 | |
| 218 | fs := os.DirFS(dir) |
| 219 | |
| 220 | files := []string{"base.html", "content.html"} |
| 221 | |
| 222 | key := fmt.Sprintf("%v%v", fs, files) |
| 223 | |
| 224 | r.LoadFS(fs, files...) |
| 225 | |
| 226 | renderer := r.cache.Get(key) |
| 227 | |
| 228 | if renderer == nil { |
| 229 | t.Fatal("Expected renderer to be initialized even if invalid, got nil") |
| 230 | } |
| 231 | |
| 232 | if renderer.template == nil { |
| 233 | t.Fatal("Expected renderer template to be set, got nil") |
| 234 | } |