mirror of
				https://github.com/gohugoio/hugo.git
				synced 2024-05-11 05:54:58 +00:00 
			
		
		
		
	| @@ -41,6 +41,7 @@ type Template interface { | |||||||
| 	LoadTemplates(absPath string) | 	LoadTemplates(absPath string) | ||||||
| 	LoadTemplatesWithPrefix(absPath, prefix string) | 	LoadTemplatesWithPrefix(absPath, prefix string) | ||||||
| 	AddTemplate(name, tpl string) error | 	AddTemplate(name, tpl string) error | ||||||
|  | 	AddAceTemplate(name, basePath, innerPath string, baseContent, innerContent []byte) error | ||||||
| 	AddInternalTemplate(prefix, name, tpl string) error | 	AddInternalTemplate(prefix, name, tpl string) error | ||||||
| 	AddInternalShortcode(name, tpl string) error | 	AddInternalShortcode(name, tpl string) error | ||||||
| 	PrintErrors() | 	PrintErrors() | ||||||
|   | |||||||
| @@ -1,11 +1,83 @@ | |||||||
| package tpl | package tpl | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"bytes" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
|  | 	"os" | ||||||
|  | 	"path/filepath" | ||||||
| 	"testing" | 	"testing" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | // Some tests for Issue #1178 -- Ace | ||||||
|  | func TestAceTemplates(t *testing.T) { | ||||||
|  |  | ||||||
|  | 	for i, this := range []struct { | ||||||
|  | 		basePath     string | ||||||
|  | 		innerPath    string | ||||||
|  | 		baseContent  string | ||||||
|  | 		innerContent string | ||||||
|  | 		expect       string | ||||||
|  | 		expectErr    int | ||||||
|  | 	}{ | ||||||
|  | 		{"", filepath.FromSlash("_default/single.ace"), "", "{{ . }}", "DATA", 0}, | ||||||
|  | 		{filepath.FromSlash("_default/baseof.ace"), filepath.FromSlash("_default/single.ace"), | ||||||
|  | 			`= content main | ||||||
|  |   h2 This is a content named "main" of an inner template. {{ . }}`, | ||||||
|  | 			`= doctype html | ||||||
|  | html lang=en | ||||||
|  |   head | ||||||
|  |     meta charset=utf-8 | ||||||
|  |     title Base and Inner Template | ||||||
|  |   body | ||||||
|  |     h1 This is a base template {{ . }} | ||||||
|  |     = yield main`, `<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>Base and Inner Template</title></head><body><h1>This is a base template DATA</h1></body></html>`, 0}, | ||||||
|  | 	} { | ||||||
|  |  | ||||||
|  | 		for _, root := range []string{"", os.TempDir()} { | ||||||
|  |  | ||||||
|  | 			templ := New() | ||||||
|  |  | ||||||
|  | 			basePath := this.basePath | ||||||
|  | 			innerPath := this.innerPath | ||||||
|  |  | ||||||
|  | 			if basePath != "" && root != "" { | ||||||
|  | 				basePath = filepath.Join(root, basePath) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if innerPath != "" && root != "" { | ||||||
|  | 				innerPath = filepath.Join(root, innerPath) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			d := "DATA" | ||||||
|  |  | ||||||
|  | 			err := templ.AddAceTemplate("mytemplate.ace", basePath, innerPath, | ||||||
|  | 				[]byte(this.baseContent), []byte(this.innerContent)) | ||||||
|  |  | ||||||
|  | 			if err != nil && this.expectErr == 0 { | ||||||
|  | 				t.Errorf("Test %d with root '%s' errored: %s", i, root, err) | ||||||
|  | 			} else if err == nil && this.expectErr == 1 { | ||||||
|  | 				t.Errorf("#1 Test %d with root '%s' should have errored", i, root) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			var buff bytes.Buffer | ||||||
|  | 			err = templ.ExecuteTemplate(&buff, "mytemplate.html", d) | ||||||
|  |  | ||||||
|  | 			if err != nil && this.expectErr == 0 { | ||||||
|  | 				t.Errorf("Test %d with root '%s' errored: %s", i, root, err) | ||||||
|  | 			} else if err == nil && this.expectErr == 2 { | ||||||
|  | 				t.Errorf("#2 Test with root '%s' %d should have errored", root, i) | ||||||
|  | 			} else { | ||||||
|  | 				result := buff.String() | ||||||
|  | 				if result != this.expect { | ||||||
|  | 					t.Errorf("Test %d  with root '%s' got\n%s\nexpected\n%s", i, root, result, this.expect) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
| // Test for bugs discovered by https://github.com/dvyukov/go-fuzz | // Test for bugs discovered by https://github.com/dvyukov/go-fuzz | ||||||
| func TestTplGoFuzzReports(t *testing.T) { | func TestTplGoFuzzReports(t *testing.T) { | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user