mirror of
				https://github.com/tailscale/tailscale.git
				synced 2025-11-04 02:01:14 +01:00 
			
		
		
		
	This adds a new generic result type (motivated by golang/go#70084) to try it out, and uses it in the new lineutil package (replacing the old lineread package), changing that package to return iterators: sometimes over []byte (when the input is all in memory), but sometimes iterators over results of []byte, if errors might happen at runtime. Updates #12912 Updates golang/go#70084 Change-Id: Iacdc1070e661b5fb163907b1e8b07ac7d51d3f83 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
		
			
				
	
	
		
			33 lines
		
	
	
		
			696 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			696 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (c) Tailscale Inc & AUTHORS
 | 
						|
// SPDX-License-Identifier: BSD-3-Clause
 | 
						|
 | 
						|
package lineiter
 | 
						|
 | 
						|
import (
 | 
						|
	"slices"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestBytesLines(t *testing.T) {
 | 
						|
	var got []string
 | 
						|
	for line := range Bytes([]byte("foo\n\nbar\nbaz")) {
 | 
						|
		got = append(got, string(line))
 | 
						|
	}
 | 
						|
	want := []string{"foo", "", "bar", "baz"}
 | 
						|
	if !slices.Equal(got, want) {
 | 
						|
		t.Errorf("got %q; want %q", got, want)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestReader(t *testing.T) {
 | 
						|
	var got []string
 | 
						|
	for line := range Reader(strings.NewReader("foo\n\nbar\nbaz")) {
 | 
						|
		got = append(got, string(line.MustValue()))
 | 
						|
	}
 | 
						|
	want := []string{"foo", "", "bar", "baz"}
 | 
						|
	if !slices.Equal(got, want) {
 | 
						|
		t.Errorf("got %q; want %q", got, want)
 | 
						|
	}
 | 
						|
}
 |