URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [text/] [tabwriter/] [tabwriter_test.go] - Rev 747
Compare with Previous | Blame | View Log
// Copyright 2009 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package tabwriterimport ("io""testing")type buffer struct {a []byte}func (b *buffer) init(n int) { b.a = make([]byte, n)[0:0] }func (b *buffer) clear() { b.a = b.a[0:0] }func (b *buffer) Write(buf []byte) (written int, err error) {n := len(b.a)m := len(buf)if n+m <= cap(b.a) {b.a = b.a[0 : n+m]for i := 0; i < m; i++ {b.a[n+i] = buf[i]}} else {panic("buffer.Write: buffer too small")}return len(buf), nil}func (b *buffer) String() string { return string(b.a) }func write(t *testing.T, testname string, w *Writer, src string) {written, err := io.WriteString(w, src)if err != nil {t.Errorf("--- test: %s\n--- src:\n%q\n--- write error: %v\n", testname, src, err)}if written != len(src) {t.Errorf("--- test: %s\n--- src:\n%q\n--- written = %d, len(src) = %d\n", testname, src, written, len(src))}}func verify(t *testing.T, testname string, w *Writer, b *buffer, src, expected string) {err := w.Flush()if err != nil {t.Errorf("--- test: %s\n--- src:\n%q\n--- flush error: %v\n", testname, src, err)}res := b.String()if res != expected {t.Errorf("--- test: %s\n--- src:\n%q\n--- found:\n%q\n--- expected:\n%q\n", testname, src, res, expected)}}func check(t *testing.T, testname string, minwidth, tabwidth, padding int, padchar byte, flags uint, src, expected string) {var b bufferb.init(1000)var w Writerw.Init(&b, minwidth, tabwidth, padding, padchar, flags)// write all at oncetitle := testname + " (written all at once)"b.clear()write(t, title, &w, src)verify(t, title, &w, &b, src, expected)// write byte-by-bytetitle = testname + " (written byte-by-byte)"b.clear()for i := 0; i < len(src); i++ {write(t, title, &w, src[i:i+1])}verify(t, title, &w, &b, src, expected)// write using Fibonacci slice sizestitle = testname + " (written in fibonacci slices)"b.clear()for i, d := 0, 0; i < len(src); {write(t, title, &w, src[i:i+d])i, d = i+d, d+1if i+d > len(src) {d = len(src) - i}}verify(t, title, &w, &b, src, expected)}var tests = []struct {testname stringminwidth, tabwidth, padding intpadchar byteflags uintsrc, expected string}{{"1a",8, 0, 1, '.', 0,"","",},{"1a debug",8, 0, 1, '.', Debug,"","",},{"1b esc stripped",8, 0, 1, '.', StripEscape,"\xff\xff","",},{"1b esc",8, 0, 1, '.', 0,"\xff\xff","\xff\xff",},{"1c esc stripped",8, 0, 1, '.', StripEscape,"\xff\t\xff","\t",},{"1c esc",8, 0, 1, '.', 0,"\xff\t\xff","\xff\t\xff",},{"1d esc stripped",8, 0, 1, '.', StripEscape,"\xff\"foo\t\n\tbar\"\xff","\"foo\t\n\tbar\"",},{"1d esc",8, 0, 1, '.', 0,"\xff\"foo\t\n\tbar\"\xff","\xff\"foo\t\n\tbar\"\xff",},{"1e esc stripped",8, 0, 1, '.', StripEscape,"abc\xff\tdef", // unterminated escape"abc\tdef",},{"1e esc",8, 0, 1, '.', 0,"abc\xff\tdef", // unterminated escape"abc\xff\tdef",},{"2",8, 0, 1, '.', 0,"\n\n\n","\n\n\n",},{"3",8, 0, 1, '.', 0,"a\nb\nc","a\nb\nc",},{"4a",8, 0, 1, '.', 0,"\t", // '\t' terminates an empty cell on last line - nothing to print"",},{"4b",8, 0, 1, '.', AlignRight,"\t", // '\t' terminates an empty cell on last line - nothing to print"",},{"5",8, 0, 1, '.', 0,"*\t*","*.......*",},{"5b",8, 0, 1, '.', 0,"*\t*\n","*.......*\n",},{"5c",8, 0, 1, '.', 0,"*\t*\t","*.......*",},{"5c debug",8, 0, 1, '.', Debug,"*\t*\t","*.......|*",},{"5d",8, 0, 1, '.', AlignRight,"*\t*\t",".......**",},{"6",8, 0, 1, '.', 0,"\t\n","........\n",},{"7a",8, 0, 1, '.', 0,"a) foo","a) foo",},{"7b",8, 0, 1, ' ', 0,"b) foo\tbar","b) foo bar",},{"7c",8, 0, 1, '.', 0,"c) foo\tbar\t","c) foo..bar",},{"7d",8, 0, 1, '.', 0,"d) foo\tbar\n","d) foo..bar\n",},{"7e",8, 0, 1, '.', 0,"e) foo\tbar\t\n","e) foo..bar.....\n",},{"7f",8, 0, 1, '.', FilterHTML,"f) f<o\t<b>bar</b>\t\n","f) f<o..<b>bar</b>.....\n",},{"7g",8, 0, 1, '.', FilterHTML,"g) f<o\t<b>bar</b>\t non-terminated entity &","g) f<o..<b>bar</b>..... non-terminated entity &",},{"7g debug",8, 0, 1, '.', FilterHTML | Debug,"g) f<o\t<b>bar</b>\t non-terminated entity &","g) f<o..|<b>bar</b>.....| non-terminated entity &",},{"8",8, 0, 1, '*', 0,"Hello, world!\n","Hello, world!\n",},{"9a",1, 0, 0, '.', 0,"1\t2\t3\t4\n" +"11\t222\t3333\t44444\n","1.2..3...4\n" +"11222333344444\n",},{"9b",1, 0, 0, '.', FilterHTML,"1\t2<!---\f--->\t3\t4\n" + // \f inside HTML is ignored"11\t222\t3333\t44444\n","1.2<!---\f--->..3...4\n" +"11222333344444\n",},{"9c",1, 0, 0, '.', 0,"1\t2\t3\t4\f" + // \f causes a newline and flush"11\t222\t3333\t44444\n","1234\n" +"11222333344444\n",},{"9c debug",1, 0, 0, '.', Debug,"1\t2\t3\t4\f" + // \f causes a newline and flush"11\t222\t3333\t44444\n","1|2|3|4\n" +"---\n" +"11|222|3333|44444\n",},{"10a",5, 0, 0, '.', 0,"1\t2\t3\t4\n","1....2....3....4\n",},{"10b",5, 0, 0, '.', 0,"1\t2\t3\t4\t\n","1....2....3....4....\n",},{"11",8, 0, 1, '.', 0,"本\tb\tc\n" +"aa\t\u672c\u672c\u672c\tcccc\tddddd\n" +"aaa\tbbbb\n","本.......b.......c\n" +"aa......本本本.....cccc....ddddd\n" +"aaa.....bbbb\n",},{"12a",8, 0, 1, ' ', AlignRight,"a\tè\tc\t\n" +"aa\tèèè\tcccc\tddddd\t\n" +"aaa\tèèèè\t\n"," a è c\n" +" aa èèè cccc ddddd\n" +" aaa èèèè\n",},{"12b",2, 0, 0, ' ', 0,"a\tb\tc\n" +"aa\tbbb\tcccc\n" +"aaa\tbbbb\n","a b c\n" +"aa bbbcccc\n" +"aaabbbb\n",},{"12c",8, 0, 1, '_', 0,"a\tb\tc\n" +"aa\tbbb\tcccc\n" +"aaa\tbbbb\n","a_______b_______c\n" +"aa______bbb_____cccc\n" +"aaa_____bbbb\n",},{"13a",4, 0, 1, '-', 0,"4444\t日本語\t22\t1\t333\n" +"999999999\t22\n" +"7\t22\n" +"\t\t\t88888888\n" +"\n" +"666666\t666666\t666666\t4444\n" +"1\t1\t999999999\t0000000000\n","4444------日本語-22--1---333\n" +"999999999-22\n" +"7---------22\n" +"------------------88888888\n" +"\n" +"666666-666666-666666----4444\n" +"1------1------999999999-0000000000\n",},{"13b",4, 0, 3, '.', 0,"4444\t333\t22\t1\t333\n" +"999999999\t22\n" +"7\t22\n" +"\t\t\t88888888\n" +"\n" +"666666\t666666\t666666\t4444\n" +"1\t1\t999999999\t0000000000\n","4444........333...22...1...333\n" +"999999999...22\n" +"7...........22\n" +"....................88888888\n" +"\n" +"666666...666666...666666......4444\n" +"1........1........999999999...0000000000\n",},{"13c",8, 8, 1, '\t', FilterHTML,"4444\t333\t22\t1\t333\n" +"999999999\t22\n" +"7\t22\n" +"\t\t\t88888888\n" +"\n" +"666666\t666666\t666666\t4444\n" +"1\t1\t<font color=red attr=日本語>999999999</font>\t0000000000\n","4444\t\t333\t22\t1\t333\n" +"999999999\t22\n" +"7\t\t22\n" +"\t\t\t\t88888888\n" +"\n" +"666666\t666666\t666666\t\t4444\n" +"1\t1\t<font color=red attr=日本語>999999999</font>\t0000000000\n",},{"14",1, 0, 2, ' ', AlignRight,".0\t.3\t2.4\t-5.1\t\n" +"23.0\t12345678.9\t2.4\t-989.4\t\n" +"5.1\t12.0\t2.4\t-7.0\t\n" +".0\t0.0\t332.0\t8908.0\t\n" +".0\t-.3\t456.4\t22.1\t\n" +".0\t1.2\t44.4\t-13.3\t\t"," .0 .3 2.4 -5.1\n" +" 23.0 12345678.9 2.4 -989.4\n" +" 5.1 12.0 2.4 -7.0\n" +" .0 0.0 332.0 8908.0\n" +" .0 -.3 456.4 22.1\n" +" .0 1.2 44.4 -13.3",},{"14 debug",1, 0, 2, ' ', AlignRight | Debug,".0\t.3\t2.4\t-5.1\t\n" +"23.0\t12345678.9\t2.4\t-989.4\t\n" +"5.1\t12.0\t2.4\t-7.0\t\n" +".0\t0.0\t332.0\t8908.0\t\n" +".0\t-.3\t456.4\t22.1\t\n" +".0\t1.2\t44.4\t-13.3\t\t"," .0| .3| 2.4| -5.1|\n" +" 23.0| 12345678.9| 2.4| -989.4|\n" +" 5.1| 12.0| 2.4| -7.0|\n" +" .0| 0.0| 332.0| 8908.0|\n" +" .0| -.3| 456.4| 22.1|\n" +" .0| 1.2| 44.4| -13.3|",},{"15a",4, 0, 0, '.', 0,"a\t\tb","a.......b",},{"15b",4, 0, 0, '.', DiscardEmptyColumns,"a\t\tb", // htabs - do not discard column"a.......b",},{"15c",4, 0, 0, '.', DiscardEmptyColumns,"a\v\vb","a...b",},{"15d",4, 0, 0, '.', AlignRight | DiscardEmptyColumns,"a\v\vb","...ab",},{"16a",100, 100, 0, '\t', 0,"a\tb\t\td\n" +"a\tb\t\td\te\n" +"a\n" +"a\tb\tc\td\n" +"a\tb\tc\td\te\n","a\tb\t\td\n" +"a\tb\t\td\te\n" +"a\n" +"a\tb\tc\td\n" +"a\tb\tc\td\te\n",},{"16b",100, 100, 0, '\t', DiscardEmptyColumns,"a\vb\v\vd\n" +"a\vb\v\vd\ve\n" +"a\n" +"a\vb\vc\vd\n" +"a\vb\vc\vd\ve\n","a\tb\td\n" +"a\tb\td\te\n" +"a\n" +"a\tb\tc\td\n" +"a\tb\tc\td\te\n",},{"16b debug",100, 100, 0, '\t', DiscardEmptyColumns | Debug,"a\vb\v\vd\n" +"a\vb\v\vd\ve\n" +"a\n" +"a\vb\vc\vd\n" +"a\vb\vc\vd\ve\n","a\t|b\t||d\n" +"a\t|b\t||d\t|e\n" +"a\n" +"a\t|b\t|c\t|d\n" +"a\t|b\t|c\t|d\t|e\n",},{"16c",100, 100, 0, '\t', DiscardEmptyColumns,"a\tb\t\td\n" + // hard tabs - do not discard column"a\tb\t\td\te\n" +"a\n" +"a\tb\tc\td\n" +"a\tb\tc\td\te\n","a\tb\t\td\n" +"a\tb\t\td\te\n" +"a\n" +"a\tb\tc\td\n" +"a\tb\tc\td\te\n",},{"16c debug",100, 100, 0, '\t', DiscardEmptyColumns | Debug,"a\tb\t\td\n" + // hard tabs - do not discard column"a\tb\t\td\te\n" +"a\n" +"a\tb\tc\td\n" +"a\tb\tc\td\te\n","a\t|b\t|\t|d\n" +"a\t|b\t|\t|d\t|e\n" +"a\n" +"a\t|b\t|c\t|d\n" +"a\t|b\t|c\t|d\t|e\n",},}func Test(t *testing.T) {for _, e := range tests {check(t, e.testname, e.minwidth, e.tabwidth, e.padding, e.padchar, e.flags, e.src, e.expected)}}
