github.com/gofiber/fork/pug@v0.0.0-20200214110346-f65d4b7a0c82/jade_test.go (about) 1 package jade 2 3 import ( 4 "bufio" 5 "bytes" 6 "fmt" 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "strings" 11 "testing" 12 13 "github.com/Joker/hpp" 14 ) 15 16 var wdir string 17 18 func init() { 19 wdir, _ = os.Getwd() 20 } 21 22 func TestStrFilter(t *testing.T) { 23 a := `"aaa'a" + 'b\"bb"b' + 'c' | +"dddd" + "eeee"+"ffff" +` + " `iiii ${jjjj} kkkk`" 24 b := "\"aaa'ab\\\"bb\\\"bc\" | +\"ddddeeeeffff\" + `iiii `+jjjj+` kkkk`" 25 if filterString(a) != b { 26 t.Fail() 27 } 28 } 29 30 func examination(test func(dat []byte) (string, error), ext, path string, t *testing.T) { 31 os.Chdir(path) 32 files, err := ioutil.ReadDir(path) 33 if err != nil { 34 fmt.Printf("--- FAIL: ReadDir error: %v\n\n", err) 35 t.Fail() 36 } 37 38 var name, fext string 39 for _, file := range files { 40 name = file.Name() 41 fext = filepath.Ext(name) 42 43 if fext != ".jade" && fext != ".pug" { 44 continue 45 } 46 47 dat, err := ioutil.ReadFile(path + name) 48 if err != nil { 49 fmt.Println("_________" + name) 50 fmt.Printf("--- FAIL: ReadFile error: %v\n\n", err) 51 t.Fail() 52 continue 53 } 54 55 tpl, err := test(dat) 56 if err != nil { 57 fmt.Println("_________" + name) 58 fmt.Printf("--- FAIL: test run() error: \n%s\n\n", err) 59 t.Fail() 60 continue 61 } 62 63 tmpl := bufio.NewScanner(strings.NewReader(tpl)) 64 tmpl.Split(bufio.ScanLines) 65 66 inFile, err := os.Open(path + strings.TrimSuffix(name, fext) + ext) 67 if err != nil { 68 69 // make files 70 ioutil.WriteFile(path+strings.TrimSuffix(name, fext)+ext, []byte(tpl), 0644) 71 72 fmt.Println("```", tpl, "\n\n```") 73 continue 74 } 75 76 html := bufio.NewScanner(inFile) 77 html.Split(bufio.ScanLines) 78 79 nilerr, line := 0, 0 80 81 for tmpl.Scan() { 82 html.Scan() 83 84 a := tmpl.Text() 85 b := html.Text() 86 line += 1 87 88 if strings.Compare(a, b) != 0 && nilerr < 4 { 89 if nilerr == 0 { 90 fmt.Println("_________" + name + "\n") 91 } 92 fmt.Printf("%s\n%s\n%d^___________________________\n", a, b, line) 93 nilerr += 1 94 t.Fail() 95 } 96 } 97 inFile.Close() 98 99 if nilerr != 0 { 100 fmt.Print("--- FAIL\n\n\n\n") 101 } 102 } 103 } 104 105 func lexerTest(dat []byte) (string, error) { 106 var buf bytes.Buffer 107 108 l := lex("test", dat) 109 for i := range l.items { 110 switch { 111 case i.typ == itemError: 112 buf.WriteString("\n\n\nError:\n\t") 113 buf.WriteString(fmt.Sprintf("%s line: %d", i.val, i.line)) 114 buf.WriteString("\n\n\n") 115 return "", fmt.Errorf("%s", buf.String()) 116 case i.typ == itemEOF: 117 buf.WriteString("\nEOF") 118 case i.typ == itemEndL: 119 buf.WriteByte('\n') 120 case i.typ == itemEmptyLine: 121 buf.WriteString(i.val) 122 case i.typ == itemIdent: 123 buf.WriteString(i.val) 124 default: 125 buf.WriteString(fmt.Sprintf("[%d %s \"%s\"]\t", i.depth, i.typ, i.val)) 126 } 127 } 128 return buf.String(), nil 129 } 130 131 func xTestJadeLex(t *testing.T) { 132 examination(lexerTest, ".lex", wdir+"/testdata/v1/", t) 133 examination(lexerTest, ".lex", wdir+"/testdata/v2/", t) 134 } 135 136 // 137 138 func parserTest(text []byte) (string, error) { 139 outTpl, err := New("test").Parse(text) 140 if err != nil { 141 return "", err 142 } 143 b := new(bytes.Buffer) 144 outTpl.WriteIn(b) 145 return string(hpp.Print(b)), nil 146 } 147 148 func TestJadeParse(t *testing.T) { 149 examination(parserTest, ".tpl", wdir+"/testdata/v1/", t) 150 examination(parserTest, ".tpl", wdir+"/testdata/v2/", t) 151 examination(parserTest, ".tpl", wdir+"/testdata/v2/includes/", t) 152 examination(parserTest, ".tpl", wdir+"/testdata/v2/inheritance/", t) 153 }