github.com/aavshr/aws-sdk-go@v1.41.3/internal/ini/parse_stack_test.go (about)

     1  //go:build go1.7
     2  // +build go1.7
     3  
     4  package ini
     5  
     6  import (
     7  	"reflect"
     8  	"testing"
     9  )
    10  
    11  func newMockAST(v []rune) AST {
    12  	return newASTWithRootToken(ASTKindNone, Token{raw: v})
    13  }
    14  
    15  func TestStack(t *testing.T) {
    16  	cases := []struct {
    17  		asts     []AST
    18  		expected []AST
    19  	}{
    20  		{
    21  			asts: []AST{
    22  				newMockAST([]rune("0")),
    23  				newMockAST([]rune("1")),
    24  				newMockAST([]rune("2")),
    25  				newMockAST([]rune("3")),
    26  				newMockAST([]rune("4")),
    27  			},
    28  			expected: []AST{
    29  				newMockAST([]rune("0")),
    30  				newMockAST([]rune("1")),
    31  				newMockAST([]rune("2")),
    32  				newMockAST([]rune("3")),
    33  				newMockAST([]rune("4")),
    34  			},
    35  		},
    36  	}
    37  
    38  	for _, c := range cases {
    39  		p := newParseStack(10, 10)
    40  		for _, ast := range c.asts {
    41  			p.Push(ast)
    42  			p.MarkComplete(ast)
    43  		}
    44  
    45  		if e, a := len(c.expected), p.Len(); e != a {
    46  			t.Errorf("expected the same legnth with %d, but received %d", e, a)
    47  		}
    48  		for i := len(c.expected) - 1; i >= 0; i-- {
    49  			if e, a := c.expected[i], p.Pop(); !reflect.DeepEqual(e, a) {
    50  				t.Errorf("stack element %d invalid: expected %v, but received %v", i, e, a)
    51  			}
    52  		}
    53  
    54  		if e, a := len(c.expected), p.index; e != a {
    55  			t.Errorf("expected %d, but received %d", e, a)
    56  		}
    57  
    58  		if e, a := c.asts, p.list[:p.index]; !reflect.DeepEqual(e, a) {
    59  			t.Errorf("expected %v, but received %v", e, a)
    60  		}
    61  	}
    62  }