Skip to content
Snippets Groups Projects
testing_test.go 1.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • // Copyright 2014 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 testing_test
    
    import (
    
    	"io/ioutil"
    
    // This is exactly what a test would do without a TestMain.
    // It's here only so that there is at least one package in the
    // standard library with a TestMain, so that code is executed.
    
    func TestMain(m *testing.M) {
    	os.Exit(m.Run())
    
    
    func TestTempDir(t *testing.T) {
    
    	testTempDir(t)
    	t.Run("InSubtest", testTempDir)
    
    	t.Run("test/subtest", testTempDir)
    	t.Run("test\\subtest", testTempDir)
    	t.Run("test:subtest", testTempDir)
    	t.Run("test/..", testTempDir)
    	t.Run("../test", testTempDir)
    
    }
    
    func testTempDir(t *testing.T) {
    
    	dirCh := make(chan string, 1)
    	t.Cleanup(func() {
    		// Verify directory has been removed.
    		select {
    		case dir := <-dirCh:
    			fi, err := os.Stat(dir)
    			if os.IsNotExist(err) {
    				// All good
    				return
    			}
    			if err != nil {
    				t.Fatal(err)
    			}
    			t.Errorf("directory %q stil exists: %v, isDir=%v", dir, fi, fi.IsDir())
    		default:
    			if !t.Failed() {
    				t.Fatal("never received dir channel")
    			}
    		}
    	})
    
    	dir := t.TempDir()
    	if dir == "" {
    		t.Fatal("expected dir")
    	}
    	dir2 := t.TempDir()
    
    	if dir == dir2 {
    		t.Fatal("subsequent calls to TempDir returned the same directory")
    	}
    	if filepath.Dir(dir) != filepath.Dir(dir2) {
    		t.Fatalf("calls to TempDir do not share a parent; got %q, %q", dir, dir2)
    
    	}
    	dirCh <- dir
    	fi, err := os.Stat(dir)
    	if err != nil {
    		t.Fatal(err)
    	}
    	if !fi.IsDir() {
    		t.Errorf("dir %q is not a dir", dir)
    	}
    	fis, err := ioutil.ReadDir(dir)
    	if err != nil {
    		t.Fatal(err)
    	}
    	if len(fis) > 0 {
    		t.Errorf("unexpected %d files in TempDir: %v", len(fis), fis)
    	}
    }