...

Source file src/github.com/google/go-cmp/cmp/report.go

Documentation: github.com/google/go-cmp/cmp

     1  // Copyright 2017, The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package cmp
     6  
     7  // defaultReporter implements the reporter interface.
     8  //
     9  // As Equal serially calls the PushStep, Report, and PopStep methods, the
    10  // defaultReporter constructs a tree-based representation of the compared value
    11  // and the result of each comparison (see valueNode).
    12  //
    13  // When the String method is called, the FormatDiff method transforms the
    14  // valueNode tree into a textNode tree, which is a tree-based representation
    15  // of the textual output (see textNode).
    16  //
    17  // Lastly, the textNode.String method produces the final report as a string.
    18  type defaultReporter struct {
    19  	root *valueNode
    20  	curr *valueNode
    21  }
    22  
    23  func (r *defaultReporter) PushStep(ps PathStep) {
    24  	r.curr = r.curr.PushStep(ps)
    25  	if r.root == nil {
    26  		r.root = r.curr
    27  	}
    28  }
    29  func (r *defaultReporter) Report(rs Result) {
    30  	r.curr.Report(rs)
    31  }
    32  func (r *defaultReporter) PopStep() {
    33  	r.curr = r.curr.PopStep()
    34  }
    35  
    36  // String provides a full report of the differences detected as a structured
    37  // literal in pseudo-Go syntax. String may only be called after the entire tree
    38  // has been traversed.
    39  func (r *defaultReporter) String() string {
    40  	assert(r.root != nil && r.curr == nil)
    41  	if r.root.NumDiff == 0 {
    42  		return ""
    43  	}
    44  	ptrs := new(pointerReferences)
    45  	text := formatOptions{}.FormatDiff(r.root, ptrs)
    46  	resolveReferences(text)
    47  	return text.String()
    48  }
    49  
    50  func assert(ok bool) {
    51  	if !ok {
    52  		panic("assertion failure")
    53  	}
    54  }
    55  

View as plain text