go.fuchsia.dev/jiri@v0.0.0-20240502161911-b66513b29486/jiritest/xtest/x.go (about)

     1  // Copyright 2015 The Vanadium 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 xtest provides utilities for testing jiri functionality.
     6  package xtest
     7  
     8  import (
     9  	"os"
    10  	"path/filepath"
    11  	"testing"
    12  	"time"
    13  
    14  	"go.fuchsia.dev/jiri"
    15  	"go.fuchsia.dev/jiri/cmdline"
    16  	"go.fuchsia.dev/jiri/color"
    17  	"go.fuchsia.dev/jiri/log"
    18  	"go.fuchsia.dev/jiri/tool"
    19  )
    20  
    21  // NewX is similar to jiri.NewX, but is meant for usage in a testing environment.
    22  func NewX(t *testing.T) (*jiri.X, func()) {
    23  	ctx := tool.NewContextFromEnv(cmdline.EnvFromOS())
    24  	cwd, err := os.Getwd()
    25  	if err != nil {
    26  		t.Fatal(err)
    27  	}
    28  	color := color.NewColor(color.ColorNever)
    29  	logger := log.NewLogger(log.InfoLevel, color, false, 0, time.Second*100, nil, nil)
    30  	root, err := os.MkdirTemp("", "")
    31  	if err != nil {
    32  		t.Fatalf("TempDir() failed: %v", err)
    33  	}
    34  	if err := os.Chdir(root); err != nil {
    35  		t.Fatalf("Setting cwd failed: %v", err)
    36  	}
    37  	if err := os.Mkdir(filepath.Join(root, jiri.RootMetaDir), 0755); err != nil {
    38  		t.Fatalf("TempDir() failed: %v", err)
    39  	}
    40  	cleanup := func() {
    41  		if err := os.Chdir(cwd); err != nil {
    42  			t.Fatalf("Setting cwd failed: %v", err)
    43  		}
    44  		if err := os.RemoveAll(root); err != nil {
    45  			t.Fatalf("RemoveAll(%q) failed: %v", root, err)
    46  		}
    47  	}
    48  	return &jiri.X{Context: ctx, Root: root, Jobs: jiri.DefaultJobs, Color: color, Logger: logger, Attempts: 1, LockfileEnabled: false}, cleanup
    49  }