Home | History | Annotate | Download | only in test
      1 // errorcheck
      2 
      3 // Copyright 2011 The Go Authors.  All rights reserved.
      4 // Use of this source code is governed by a BSD-style
      5 // license that can be found in the LICENSE file.
      6 
      7 // Verify that illegal conversions involving strings are detected.
      8 // Does not compile.
      9 
     10 package main
     11 
     12 type Tbyte []byte
     13 type Trune []rune
     14 type Tint64 []int64
     15 type Tstring string
     16 
     17 func main() {
     18 	s := "hello"
     19 	sb := []byte("hello")
     20 	sr := []rune("hello")
     21 	si := []int64{'h', 'e', 'l', 'l', 'o'}
     22 
     23 	ts := Tstring(s)
     24 	tsb := Tbyte(sb)
     25 	tsr := Trune(sr)
     26 	tsi := Tint64(si)
     27 
     28 	_ = string(s)
     29 	_ = []byte(s)
     30 	_ = []rune(s)
     31 	_ = []int64(s) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
     32 	_ = Tstring(s)
     33 	_ = Tbyte(s)
     34 	_ = Trune(s)
     35 	_ = Tint64(s) // ERROR "cannot convert.*Tint64|invalid type conversion"
     36 
     37 	_ = string(sb)
     38 	_ = []byte(sb)
     39 	_ = []rune(sb)  // ERROR "cannot convert.*\[\]rune|invalid type conversion"
     40 	_ = []int64(sb) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
     41 	_ = Tstring(sb)
     42 	_ = Tbyte(sb)
     43 	_ = Trune(sb)  // ERROR "cannot convert.*Trune|invalid type conversion"
     44 	_ = Tint64(sb) // ERROR "cannot convert.*Tint64|invalid type conversion"
     45 
     46 	_ = string(sr)
     47 	_ = []byte(sr) // ERROR "cannot convert.*\[\]byte|invalid type conversion"
     48 	_ = []rune(sr)
     49 	_ = []int64(sr) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
     50 	_ = Tstring(sr)
     51 	_ = Tbyte(sr) // ERROR "cannot convert.*Tbyte|invalid type conversion"
     52 	_ = Trune(sr)
     53 	_ = Tint64(sr) // ERROR "cannot convert.*Tint64|invalid type conversion"
     54 
     55 	_ = string(si) // ERROR "cannot convert.* string|invalid type conversion"
     56 	_ = []byte(si) // ERROR "cannot convert.*\[\]byte|invalid type conversion"
     57 	_ = []rune(si) // ERROR "cannot convert.*\[\]rune|invalid type conversion"
     58 	_ = []int64(si)
     59 	_ = Tstring(si) // ERROR "cannot convert.*Tstring|invalid type conversion"
     60 	_ = Tbyte(si)   // ERROR "cannot convert.*Tbyte|invalid type conversion"
     61 	_ = Trune(si)   // ERROR "cannot convert.*Trune|invalid type conversion"
     62 	_ = Tint64(si)
     63 
     64 	_ = string(ts)
     65 	_ = []byte(ts)
     66 	_ = []rune(ts)
     67 	_ = []int64(ts) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
     68 	_ = Tstring(ts)
     69 	_ = Tbyte(ts)
     70 	_ = Trune(ts)
     71 	_ = Tint64(ts) // ERROR "cannot convert.*Tint64|invalid type conversion"
     72 
     73 	_ = string(tsb)
     74 	_ = []byte(tsb)
     75 	_ = []rune(tsb)  // ERROR "cannot convert.*\[\]rune|invalid type conversion"
     76 	_ = []int64(tsb) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
     77 	_ = Tstring(tsb)
     78 	_ = Tbyte(tsb)
     79 	_ = Trune(tsb)  // ERROR "cannot convert.*Trune|invalid type conversion"
     80 	_ = Tint64(tsb) // ERROR "cannot convert.*Tint64|invalid type conversion"
     81 
     82 	_ = string(tsr)
     83 	_ = []byte(tsr) // ERROR "cannot convert.*\[\]byte|invalid type conversion"
     84 	_ = []rune(tsr)
     85 	_ = []int64(tsr) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
     86 	_ = Tstring(tsr)
     87 	_ = Tbyte(tsr) // ERROR "cannot convert.*Tbyte|invalid type conversion"
     88 	_ = Trune(tsr)
     89 	_ = Tint64(tsr) // ERROR "cannot convert.*Tint64|invalid type conversion"
     90 
     91 	_ = string(tsi) // ERROR "cannot convert.* string|invalid type conversion"
     92 	_ = []byte(tsi) // ERROR "cannot convert.*\[\]byte|invalid type conversion"
     93 	_ = []rune(tsi) // ERROR "cannot convert.*\[\]rune|invalid type conversion"
     94 	_ = []int64(tsi)
     95 	_ = Tstring(tsi) // ERROR "cannot convert.*Tstring|invalid type conversion"
     96 	_ = Tbyte(tsi)   // ERROR "cannot convert.*Tbyte|invalid type conversion"
     97 	_ = Trune(tsi)   // ERROR "cannot convert.*Trune|invalid type conversion"
     98 	_ = Tint64(tsi)
     99 }
    100