+++ /dev/null
-// Copyright 2013 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.
-
-// This program is processed by the cover command, and then testAll is called.
-// The test driver in main.go can then compare the coverage statistics with expectation.
-
-// The word LINE is replaced by the line number in this file. When the file is executed,
-// the coverage processing has changed the line numbers, so we can't use runtime.Caller.
-
-package main
-
-const anything = 1e9 // Just some unlikely value that means "we got here, don't care how often"
-
-func testAll() {
- testSimple()
- testBlockRun()
- testIf()
- testFor()
- testRange()
- testSwitch()
- testTypeSwitch()
- testSelect1()
- testSelect2()
- testPanic()
- testEmptySwitches()
-}
-
-// The indexes of the counters in testPanic are known to main.go
-const panicIndex = 3
-
-// This test appears first because the index of its counters is known to main.go
-func testPanic() {
- defer func() {
- recover()
- }()
- check(LINE, 1)
- panic("should not get next line")
- check(LINE, 0) // this is GoCover.Count[panicIndex]
- // The next counter is in testSimple and it will be non-zero.
- // If the panic above does not trigger a counter, the test will fail
- // because GoCover.Count[panicIndex] will be the one in testSimple.
-}
-
-func testSimple() {
- check(LINE, 1)
-}
-
-func testIf() {
- if true {
- check(LINE, 1)
- } else {
- check(LINE, 0)
- }
- if false {
- check(LINE, 0)
- } else {
- check(LINE, 1)
- }
- for i := 0; i < 3; i++ {
- if checkVal(LINE, 3, i) <= 2 {
- check(LINE, 3)
- }
- if checkVal(LINE, 3, i) <= 1 {
- check(LINE, 2)
- }
- if checkVal(LINE, 3, i) <= 0 {
- check(LINE, 1)
- }
- }
- for i := 0; i < 3; i++ {
- if checkVal(LINE, 3, i) <= 1 {
- check(LINE, 2)
- } else {
- check(LINE, 1)
- }
- }
- for i := 0; i < 3; i++ {
- if checkVal(LINE, 3, i) <= 0 {
- check(LINE, 1)
- } else if checkVal(LINE, 2, i) <= 1 {
- check(LINE, 1)
- } else if checkVal(LINE, 1, i) <= 2 {
- check(LINE, 1)
- } else if checkVal(LINE, 0, i) <= 3 {
- check(LINE, 0)
- }
- }
- if func(a, b int) bool { return a < b }(3, 4) {
- check(LINE, 1)
- }
-}
-
-func testFor() {
- for i := 0; i < 10; func() { i++; check(LINE, 10) }() {
- check(LINE, 10)
- }
-}
-
-func testRange() {
- for _, f := range []func(){
- func() { check(LINE, 1) },
- } {
- f()
- check(LINE, 1)
- }
-}
-
-func testBlockRun() {
- check(LINE, 1)
- {
- check(LINE, 1)
- }
- {
- check(LINE, 1)
- }
- check(LINE, 1)
- {
- check(LINE, 1)
- }
- {
- check(LINE, 1)
- }
- check(LINE, 1)
-}
-
-func testSwitch() {
- for i := 0; i < 5; func() { i++; check(LINE, 5) }() {
- switch i {
- case 0:
- check(LINE, 1)
- case 1:
- check(LINE, 1)
- case 2:
- check(LINE, 1)
- default:
- check(LINE, 2)
- }
- }
-}
-
-func testTypeSwitch() {
- var x = []interface{}{1, 2.0, "hi"}
- for _, v := range x {
- switch func() { check(LINE, 3) }(); v.(type) {
- case int:
- check(LINE, 1)
- case float64:
- check(LINE, 1)
- case string:
- check(LINE, 1)
- case complex128:
- check(LINE, 0)
- default:
- check(LINE, 0)
- }
- }
-}
-
-func testSelect1() {
- c := make(chan int)
- go func() {
- for i := 0; i < 1000; i++ {
- c <- i
- }
- }()
- for {
- select {
- case <-c:
- check(LINE, anything)
- case <-c:
- check(LINE, anything)
- default:
- check(LINE, 1)
- return
- }
- }
-}
-
-func testSelect2() {
- c1 := make(chan int, 1000)
- c2 := make(chan int, 1000)
- for i := 0; i < 1000; i++ {
- c1 <- i
- c2 <- i
- }
- for {
- select {
- case <-c1:
- check(LINE, 1000)
- case <-c2:
- check(LINE, 1000)
- default:
- check(LINE, 1)
- return
- }
- }
-}
-
-// Empty control statements created syntax errors. This function
-// is here just to be sure that those are handled correctly now.
-func testEmptySwitches() {
- check(LINE, 1)
- switch 3 {
- }
- check(LINE, 1)
- switch i := (interface{})(3).(int); i {
- }
- check(LINE, 1)
- c := make(chan int)
- go func() {
- check(LINE, 1)
- c <- 1
- select {}
- }()
- <-c
- check(LINE, 1)
-}