1// Copyright 2009 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
5package ioutil
6
7import (
8	"os"
9	"testing"
10)
11
12func checkSize(t *testing.T, path string, size int64) {
13	dir, err := os.Stat(path)
14	if err != nil {
15		t.Fatalf("Stat %q (looking for size %d): %s", path, size, err)
16	}
17	if dir.Size() != size {
18		t.Errorf("Stat %q: size %d want %d", path, dir.Size(), size)
19	}
20}
21
22func TestReadFile(t *testing.T) {
23	filename := "rumpelstilzchen"
24	contents, err := ReadFile(filename)
25	if err == nil {
26		t.Fatalf("ReadFile %s: error expected, none found", filename)
27	}
28
29	filename = "ioutil_test.go"
30	contents, err = ReadFile(filename)
31	if err != nil {
32		t.Fatalf("ReadFile %s: %v", filename, err)
33	}
34
35	checkSize(t, filename, int64(len(contents)))
36}
37
38func TestWriteFile(t *testing.T) {
39	f, err := TempFile("", "ioutil-test")
40	if err != nil {
41		t.Fatal(err)
42	}
43	filename := f.Name()
44	data := "Programming today is a race between software engineers striving to " +
45		"build bigger and better idiot-proof programs, and the Universe trying " +
46		"to produce bigger and better idiots. So far, the Universe is winning."
47
48	if err := WriteFile(filename, []byte(data), 0644); err != nil {
49		t.Fatalf("WriteFile %s: %v", filename, err)
50	}
51
52	contents, err := ReadFile(filename)
53	if err != nil {
54		t.Fatalf("ReadFile %s: %v", filename, err)
55	}
56
57	if string(contents) != data {
58		t.Fatalf("contents = %q\nexpected = %q", string(contents), data)
59	}
60
61	// cleanup
62	f.Close()
63	os.Remove(filename) // ignore error
64}
65
66func TestReadDir(t *testing.T) {
67	dirname := "rumpelstilzchen"
68	_, err := ReadDir(dirname)
69	if err == nil {
70		t.Fatalf("ReadDir %s: error expected, none found", dirname)
71	}
72
73	/* Does not work in gccgo testing environment.
74	dirname = ".."
75	list, err := ReadDir(dirname)
76	if err != nil {
77		t.Fatalf("ReadDir %s: %v", dirname, err)
78	}
79
80	foundFile := false
81	foundSubDir := false
82	for _, dir := range list {
83		switch {
84		case !dir.IsDir() && dir.Name() == "io_test.go":
85			foundFile = true
86		case dir.IsDir() && dir.Name() == "ioutil":
87			foundSubDir = true
88		}
89	}
90	if !foundFile {
91		t.Fatalf("ReadDir %s: io_test.go file not found", dirname)
92	}
93	if !foundSubDir {
94		t.Fatalf("ReadDir %s: ioutil directory not found", dirname)
95	}
96	*/
97}
98