github.com/AndrienkoAleksandr/go@v0.0.19/src/testing/slogtest/example_test.go (about)

     1  // Copyright 2023 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 slogtest_test
     6  
     7  import (
     8  	"bytes"
     9  	"encoding/json"
    10  	"log"
    11  	"log/slog"
    12  	"testing/slogtest"
    13  )
    14  
    15  // This example demonstrates one technique for testing a handler with this
    16  // package. The handler is given a [bytes.Buffer] to write to, and each line
    17  // of the resulting output is parsed.
    18  // For JSON output, [encoding/json.Unmarshal] produces a result in the desired
    19  // format when given a pointer to a map[string]any.
    20  func Example_parsing() {
    21  	var buf bytes.Buffer
    22  	h := slog.NewJSONHandler(&buf, nil)
    23  
    24  	results := func() []map[string]any {
    25  		var ms []map[string]any
    26  		for _, line := range bytes.Split(buf.Bytes(), []byte{'\n'}) {
    27  			if len(line) == 0 {
    28  				continue
    29  			}
    30  			var m map[string]any
    31  			if err := json.Unmarshal(line, &m); err != nil {
    32  				panic(err) // In a real test, use t.Fatal.
    33  			}
    34  			ms = append(ms, m)
    35  		}
    36  		return ms
    37  	}
    38  	err := slogtest.TestHandler(h, results)
    39  	if err != nil {
    40  		log.Fatal(err)
    41  	}
    42  
    43  	// Output:
    44  }