github.com/gofiber/pug@v1.0.1/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  }