// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package net

import (
	"bufio";
	"os";
	"testing";
)

func TestReadLine(t *testing.T) {
	filename := "/etc/services";	// a nice big file

	fd, err := os.Open(filename, os.O_RDONLY, 0);
	if err != nil {
		t.Fatalf("open %s: %v", filename, err);
	}
	br := bufio.NewReader(fd);

	var file *file;
	file, err = open(filename);
	if file == nil {
		t.Fatalf("net.open(%s) = nil", filename);
	}

	lineno := 1;
	byteno := 0;
	for {
		bline, berr := br.ReadString('\n');
		if n := len(bline); n > 0 {
			bline = bline[0:n-1];
		}
		line, ok := file.readLine();
		if (berr != nil) != !ok || bline != line {
			t.Fatalf("%s:%d (#%d)\nbufio => %q, %v\nnet => %q, %v",
				filename, lineno, byteno, bline, berr, line, ok);
		}
		if !ok {
			break
		}
		lineno++;
		byteno += len(line) + 1;
	}
}
