File: //opt/go/pkg/mod/github.com/gogo/
[email protected]/test/issue530/issue530_test.go
// Protocol Buffers for Go with Gadgets
//
// Copyright (c) 2019, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package issue530
import (
"strings"
"testing"
)
// NN : NonNullable
// N : Nullable
// R : Repeated
func TestStringNNMessageNNString(t *testing.T) {
exp := "MessageWith&Ampersand"
m := &Foo5{
Bar1: Bar1{Str: exp},
}
check(t, "Bar1", m.String(), exp)
}
func TestStringNMessageNNString(t *testing.T) {
exp := "MessageWith&Ampersand"
m := &Foo5{
Bar2: &Bar1{Str: exp},
}
check(t, "Bar2", m.String(), exp)
}
func TestStringNNMessageNString(t *testing.T) {
exp := "MessageWith&Ampersand"
m := &Foo5{
Bar3: Bar2{Str: &exp},
}
check(t, "Bar3", m.String(), exp)
}
func TestStringNMessageNString(t *testing.T) {
exp := "MessageWith&Ampersand"
m := &Foo5{
Bar4: &Bar2{Str: &exp},
}
check(t, "Bar4", m.String(), exp)
}
func TestStringRNNMessageNNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
m := &Foo5{
Bars1: []Bar1{{Str: exp1}, {Str: exp2}},
}
check(t, "Bars1", m.String(), exp1, exp2)
}
func TestStringRNMessageNNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
m := &Foo5{
Bars2: []*Bar1{{Str: exp1}, nil, {Str: exp2}},
}
check(t, "Bars2", m.String(), exp1, exp2)
}
func TestStringRNNMessageNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
m := &Foo5{
Bars3: []Bar2{{Str: &exp1}, {Str: &exp2}},
}
check(t, "Bars3", m.String(), exp1, exp2)
}
func TestStringRNMessageNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
m := &Foo5{
Bars4: []*Bar2{{Str: &exp1}, {Str: &exp2}},
}
check(t, "Bars4", m.String(), exp1, exp2)
}
func TestStringDeepRNNMessageRNNMessageNNStringAndNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
m := &Foo5{
Barrs1: []Bar3{
{
Bars4: []Bar4{
{
Str: exp1,
},
},
Bars2: []Bar2{
{
Str: &exp2,
},
},
},
},
}
check(t, "Barrs1", m.String(), exp1, exp2)
}
func TestStringDeepRNNMessageRNMessageNNStringAndNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
m := &Foo5{
Barrs2: []Bar5{
{
Bars2: []*Bar2{
{
Str: &exp1,
},
},
Bars1: []*Bar1{
{
Str: exp2,
},
},
},
},
}
check(t, "Barrs2", m.String(), exp1, exp2)
}
func TestStringMapNMessageRNNMessageNNStringAndNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
m := &Foo5{
Barmap1: map[string]*Bar3{
"one": {
Bars4: []Bar4{
{
Str: exp1,
},
},
Bars2: []Bar2{
{
Str: &exp2,
},
},
},
},
}
check(t, "Barmap1", m.String(), exp1, exp2)
}
func TestStringMapNMessageRNMessageNNStringAndNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
m := &Foo5{
Barmap2: map[string]*Bar5{
"one": {
Bars2: []*Bar2{
{
Str: &exp1,
},
},
Bars1: []*Bar1{
{
Str: exp2,
},
},
},
},
}
check(t, "Barmap2", m.String(), exp1, exp2)
}
func TestStringRNNMessageNNStringRNMessageNStringNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
exp3 := "MessageWith&Ampersand3"
m := &Bar7{
Bars71: []Bar7{
{
Bars72: []*Bar7{
{
Str2: &exp3,
},
},
Str2: &exp2,
},
},
Str1: exp1,
}
check(t, "Bar7", m.String(), exp1, exp2, exp3)
}
func TestStringRNNMessageWithNoStringerNNString(t *testing.T) {
exp1 := "MessageWith&Ampersand1"
exp2 := "MessageWith&Ampersand2"
m := &Bar8{
Bars1: []Bar9{{Str: exp1}, {Str: exp2}},
}
check(t, "Bars1", m.String(), exp1, exp2)
}
func check(t *testing.T, field, result string, expects ...string) {
// t.Logf("result: %s \n", result)
for _, expect := range expects {
if !strings.Contains(result, expect) {
t.Fatalf("Expected %s to contain: %s, but got: %s\n", field, expect, result)
}
}
}