package gocheck_test

import (
    .   "launchpad.net/gocheck"
)

var _ = Suite(&PrinterS{})

type PrinterS struct{}

func (s *PrinterS) TestCountSuite(c *C) {
    suitesRun += 1
}

var printTestFuncLine int

func init() {
    printTestFuncLine = getMyLine() + 3
}

func printTestFunc() {
    println(1)           // Comment1
    if 2 == 2 {          // Comment2
        println(3)       // Comment3
    }
    switch 5 {
    case 6: println(6)   // Comment6
        println(7)
    }
    switch interface{}(9).(type) {// Comment9
    case int: println(10)
        println(11)
    }
    select {
    case <-(chan bool)(nil): println(14)
        println(15)
    default: println(16)
        println(17)
    }
    println(19,
        20)
    _ = func() { println(21)
        println(22)
    }
    println(24, func() {
        println(25)
    })
    // Leading comment
    // with multiple lines.
    println(29)  // Comment29
}

var printLineTests = []struct {
    line   int
    output string
}{
    {1, "println(1) // Comment1"},
    {2, "if 2 == 2 { // Comment2\n    ...\n}"},
    {3, "println(3) // Comment3"},
    {5, "switch 5 {\n...\n}"},
    {6, "case 6:\n    println(6) // Comment6\n    ..."},
    {7, "println(7)"},
    {9, "switch interface{}(9).(type) { // Comment9\n...\n}"},
    {10, "case int:\n    println(10)\n    ..."},
    {14, "case <-(chan bool)(nil):\n    println(14)\n    ..."},
    {15, "println(15)"},
    {16, "default:\n    println(16)\n    ..."},
    {17, "println(17)"},
    {19, "println(19,\n    20)"},
    {20, "println(19,\n    20)"},
    {21, "_ = func() {\n    println(21)\n    println(22)\n}"},
    {22, "println(22)"},
    {24, "println(24, func() {\n    println(25)\n})"},
    {25, "println(25)"},
    {26, "println(24, func() {\n    println(25)\n})"},
    {29, "// Leading comment\n// with multiple lines.\nprintln(29) // Comment29"},
}

func (s *PrinterS) TestPrintLine(c *C) {
    for _, test := range printLineTests {
        output, err := PrintLine("printer_test.go", printTestFuncLine+test.line)
        c.Assert(err, IsNil)
        c.Assert(output, Equals, test.output)
    }
}

var indentTests = []struct {
    in, out string
}{
    {"", ""},
    {"\n", "\n"},
    {"a", ">>>a"},
    {"a\n", ">>>a\n"},
    {"a\nb", ">>>a\n>>>b"},
    {" ", ">>> "},
}

func (s *PrinterS) TestIndent(c *C) {
    for _, test := range indentTests {
        out := Indent(test.in, ">>>")
        c.Assert(out, Equals, test.out)
    }

}
