github.com/opentofu/opentofu@v1.7.1/internal/tofu/transform_vertex_test.go (about)

     1  // Copyright (c) The OpenTofu Authors
     2  // SPDX-License-Identifier: MPL-2.0
     3  // Copyright (c) 2023 HashiCorp, Inc.
     4  // SPDX-License-Identifier: MPL-2.0
     5  
     6  package tofu
     7  
     8  import (
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/opentofu/opentofu/internal/dag"
    13  )
    14  
    15  func TestVertexTransformer_impl(t *testing.T) {
    16  	var _ GraphTransformer = new(VertexTransformer)
    17  }
    18  
    19  func TestVertexTransformer(t *testing.T) {
    20  	var g Graph
    21  	g.Add(1)
    22  	g.Add(2)
    23  	g.Add(3)
    24  	g.Connect(dag.BasicEdge(1, 2))
    25  	g.Connect(dag.BasicEdge(2, 3))
    26  
    27  	{
    28  		tf := &VertexTransformer{
    29  			Transforms: []GraphVertexTransformer{
    30  				&testVertexTransform{Source: 2, Target: 42},
    31  			},
    32  		}
    33  		if err := tf.Transform(&g); err != nil {
    34  			t.Fatalf("err: %s", err)
    35  		}
    36  	}
    37  
    38  	actual := strings.TrimSpace(g.String())
    39  	expected := strings.TrimSpace(testVertexTransformerStr)
    40  	if actual != expected {
    41  		t.Fatalf("bad: %s", actual)
    42  	}
    43  }
    44  
    45  type testVertexTransform struct {
    46  	Source, Target dag.Vertex
    47  }
    48  
    49  func (t *testVertexTransform) Transform(v dag.Vertex) (dag.Vertex, error) {
    50  	if t.Source == v {
    51  		v = t.Target
    52  	}
    53  
    54  	return v, nil
    55  }
    56  
    57  const testVertexTransformerStr = `
    58  1
    59    42
    60  3
    61  42
    62    3
    63  `