diff --git a/main.go b/main.go index 415f834..d003709 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "bytes" "errors" "flag" "io" @@ -9,6 +10,8 @@ import ( ) var ( + stdin io.Reader = os.Stdin + stdout io.Writer = os.Stdout columnDelimiter string pageDelimiter string minimumInstances int @@ -19,20 +22,26 @@ func main() { flag.StringVar(&columnDelimiter, "d", " ", "column delimiter character") flag.IntVar(&minimumInstances, "m", 2, "minimum non-leading instances of delimiter to break a column") flag.Parse() + if err := _main(); err != nil { + panic(err) + } +} - r := bufio.NewReader(os.Stdin) +func _main() error { + r := bufio.NewReader(stdin) for { b, err := readPage(r) if err != nil && err != io.EOF { - panic(err) + return err } if err := putPage(b); err != nil { - panic(err) + return err } if err == io.EOF { break } } + return nil } func readPage(r *bufio.Reader) ([]byte, error) { @@ -48,5 +57,16 @@ func _readPage(d byte, r *bufio.Reader) ([]byte, error) { } func putPage(b []byte) error { + return _putPage(stdout, b) +} + +func _putPage(w io.Writer, b []byte) error { + for _, line := range lines(b) { + _ = line + } return errors.New("not impl") } + +func lines(b []byte) [][]byte { + return bytes.Split(b, []byte{'\n'}) +} diff --git a/main_test.go b/main_test.go index 830ee27..2eadc87 100644 --- a/main_test.go +++ b/main_test.go @@ -2,12 +2,25 @@ package main import ( "bufio" + "bytes" "fmt" "io" "strings" "testing" ) +func Test_Main(t *testing.T) { + stdin = strings.NewReader("\ta a a\t\tb b b\na a\t\tb b\fc c\td d\nc c\td.") + stdout = bytes.NewBuffer(nil) + columnDelimiter = "\t" + pageDelimiter = "\f" + minimumInstances = 1 + if err := _main(); err != nil { + t.Error(err) + } + t.Errorf("%s", stdout.(*bytes.Buffer).Bytes()) +} + func TestReadPage(t *testing.T) { cases := map[string]struct { input string