gonum.org/v1/gonum@v0.14.0/graph/formats/dot/ast/ast_test.go (about)

     1  // This file is dual licensed under CC0 and The Gonum License.
     2  //
     3  // Copyright ©2017 The Gonum 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  // Copyright ©2017 Robin Eklind.
     8  // This file is made available under a Creative Commons CC0 1.0
     9  // Universal Public Domain Dedication.
    10  
    11  package ast_test
    12  
    13  import (
    14  	"bytes"
    15  	"os"
    16  	"testing"
    17  
    18  	"gonum.org/v1/gonum/graph/formats/dot"
    19  	"gonum.org/v1/gonum/graph/formats/dot/ast"
    20  )
    21  
    22  func TestParseFile(t *testing.T) {
    23  	golden := []struct {
    24  		in  string
    25  		out string
    26  	}{
    27  		{in: "../internal/testdata/empty.dot"},
    28  		{in: "../internal/testdata/graph.dot"},
    29  		{in: "../internal/testdata/digraph.dot"},
    30  		{in: "../internal/testdata/strict.dot"},
    31  		{in: "../internal/testdata/multi.dot"},
    32  		{in: "../internal/testdata/named_graph.dot"},
    33  		{in: "../internal/testdata/node_stmt.dot"},
    34  		{in: "../internal/testdata/edge_stmt.dot"},
    35  		{in: "../internal/testdata/attr_stmt.dot"},
    36  		{in: "../internal/testdata/attr.dot"},
    37  		{
    38  			in:  "../internal/testdata/subgraph.dot",
    39  			out: "../internal/testdata/subgraph.golden",
    40  		},
    41  		{
    42  			in:  "../internal/testdata/semi.dot",
    43  			out: "../internal/testdata/semi.golden",
    44  		},
    45  		{
    46  			in:  "../internal/testdata/empty_attr.dot",
    47  			out: "../internal/testdata/empty_attr.golden",
    48  		},
    49  		{
    50  			in:  "../internal/testdata/attr_lists.dot",
    51  			out: "../internal/testdata/attr_lists.golden",
    52  		},
    53  		{
    54  			in:  "../internal/testdata/attr_sep.dot",
    55  			out: "../internal/testdata/attr_sep.golden",
    56  		},
    57  		{in: "../internal/testdata/subgraph_vertex.dot"},
    58  		{in: "../internal/testdata/port.dot"},
    59  	}
    60  	for _, g := range golden {
    61  		file, err := dot.ParseFile(g.in)
    62  		if err != nil {
    63  			t.Errorf("%q: unable to parse file; %v", g.in, err)
    64  			continue
    65  		}
    66  		// If no output path is specified, the input is already golden.
    67  		out := g.in
    68  		if len(g.out) > 0 {
    69  			out = g.out
    70  		}
    71  		buf, err := os.ReadFile(out)
    72  		if err != nil {
    73  			t.Errorf("%q: unable to read file; %v", g.in, err)
    74  			continue
    75  		}
    76  		got := file.String()
    77  		// Remove trailing newline.
    78  		want := string(bytes.TrimSpace(buf))
    79  		if got != want {
    80  			t.Errorf("%q: graph mismatch; expected %q, got %q", g.in, want, got)
    81  		}
    82  	}
    83  }
    84  
    85  // Verify that all statements implement the Stmt interface.
    86  var (
    87  	_ ast.Stmt = (*ast.NodeStmt)(nil)
    88  	_ ast.Stmt = (*ast.EdgeStmt)(nil)
    89  	_ ast.Stmt = (*ast.AttrStmt)(nil)
    90  	_ ast.Stmt = (*ast.Attr)(nil)
    91  	_ ast.Stmt = (*ast.Subgraph)(nil)
    92  )
    93  
    94  // Verify that all vertices implement the Vertex interface.
    95  var (
    96  	_ ast.Vertex = (*ast.Node)(nil)
    97  	_ ast.Vertex = (*ast.Subgraph)(nil)
    98  )