Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 13692] ファイルの概要

このコミットは、Go言語のテストスイート、特にtest/fixedbugsディレクトリ内の既存のテストにおいて、テスト実行方法をシェルスクリプトベースのコマンドから、Goのテストフレームワークが提供するrun.goスクリプトが解釈するディレクティブ形式に移行するものです。これにより、テストの記述がより宣言的になり、異なる環境でのテスト実行の移植性と保守性が向上します。

コミット

  • コミットハッシュ: a85fa33ece194e5b8709330e85575575c1c3b2e2
  • Author: Rémy Oudompheng oudomphe@phare.normalesup.org
  • Date: Sat Aug 25 10:16:02 2012 +0200

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/a85fa33ece194e5b8709330e85575575c1c3b2e2

元コミット内容

test: use run.go for more tests.

R=golang-dev, alex.brainman, minux.ma
CC=golang-dev
https://golang.org/cl/6443110

変更の背景

Go言語のテストスイートは、初期の段階ではテストの実行にシェルスクリプトのコマンドを直接使用していました。これは、特定のテストケースをコンパイルしたり実行したりするための柔軟な方法を提供しましたが、いくつかの課題がありました。

  1. 移植性の問題: シェルスクリプトのコマンドは、オペレーティングシステム(OS)やシェル環境に依存する可能性があり、Windowsのような異なるOSでのテスト実行に問題を引き起こすことがありました。
  2. 保守性の問題: テストのロジックと実行コマンドが混在しているため、テストの意図を理解しにくく、変更が困難になることがありました。
  3. 冗長性: 多くのテストで同様のコンパイルや実行パターンが繰り返され、コードの冗長性につながっていました。

これらの課題を解決するため、Goのテストフレームワークはrun.goというヘルパースクリプトを導入し、テストファイル内で特定のディレクティブ(指示)を使用することで、テストのコンパイルや実行方法を宣言的に指定できるようにしました。このコミットは、既存のテストをこの新しいディレクティブベースのシステムに移行し、テストスイート全体の堅牢性と保守性を向上させることを目的としています。

前提知識の解説

Go言語のテスト

Go言語には、標準ライブラリとしてtestingパッケージが提供されており、ユニットテスト、ベンチマークテスト、サンプルテストなどを簡単に記述できます。テストファイルは通常、テスト対象のファイルと同じディレクトリに配置され、ファイル名の末尾に_test.goが付きます。

test/fixedbugsディレクトリ

Goのソースコードリポジトリには、test/fixedbugsというディレクトリが存在します。このディレクトリには、過去に発見され修正されたバグの再現テストケースが格納されています。これらのテストは、将来的に同じバグが再発しないことを保証するために重要です。

run.goとテストディレクティブ

run.goは、Goのテストスイート内で使用される内部的なヘルパースクリプトです。このスクリプトは、テストファイルの先頭に記述された特定のコメント行(ディレクティブ)を解析し、それに基づいてテストのコンパイルや実行を行います。これにより、テストの実行ロジックがGoのコードベース内で一元的に管理され、OS間の差異を吸収できるようになります。

このコミットで導入または利用されている主なディレクティブは以下の通りです。

  • // cmpout: このディレクティブは、テストの標準出力(stdout)が、対応する.outファイルの内容と一致することを期待します。テストが実行され、その出力が.outファイルと比較されます。
  • // compiledir: このディレクティブは、現在のディレクトリ内のGoソースファイルをコンパイルすることを指示します。これは、複数のファイルから構成されるパッケージや、特定のコンパイル順序が必要なテストケースで特に有用です。

Goのパッケージとインポート

Goのソースファイルはパッケージに属し、他のパッケージをインポートしてその機能を利用できます。相対パスでのインポート(例: "./one")は、同じモジュール内のローカルパッケージを指すために使用されます。

技術的詳細

このコミットの主要な技術的変更は、test/fixedbugsディレクトリ内の複数のテストファイルにおいて、テストの実行方法を定義していたシェルコマンドのコメント行を、run.goが解釈するディレクティブに置き換えた点です。

以前は、テストファイルの先頭に以下のようなコメントがありました。

// $G $D/$F.go && $L $F.$A && ./$A.out >/dev/null 2>&1 || echo BUG: bug206

これは、Goコンパイラ($G)、リンカ($L)などのツールを直接呼び出し、テストのコンパイル、リンク、実行、そして出力の検証を行うシェルコマンドでした。この形式は、OSのシェル環境に依存し、特にWindows環境での互換性の問題を引き起こす可能性がありました。

このコミットでは、これらのシェルコマンドを、より抽象的で移植性の高いディレクティブに置き換えています。

  • bug206.gobug222.goでは、テストの出力比較やコンパイル指示のために、それぞれ// cmpout// compiledirディレクティブが導入されました。
  • bug335.gobug392.gobug415.goでは、複数のファイルから構成されるテストケースのコンパイルを指示するために// compiledirディレクティブが使用されています。

また、bug392.dirbug415.dir内のファイル名とパッケージ名が変更されています。これは、テストの構造をより明確にし、Goのパッケージ命名規則に合わせるためのリファクタリングの一環と考えられます。例えば、two.gopkg2.goに、three.gopkg3.goにリネームされ、それに伴いパッケージ名とインポートパスも更新されています。

これらの変更により、テストの実行はrun.goスクリプトによって抽象化され、Goのテストフレームワークがテストのコンパイルと実行の詳細を処理するようになります。これにより、テストの記述が簡潔になり、異なるプラットフォームでのテスト実行の信頼性が向上します。

コアとなるコードの変更箇所

このコミットでは、以下のファイルが変更されています。

  • test/fixedbugs/bug206.go: テスト実行コマンドを// cmpoutディレクティブに置き換え。
  • test/fixedbugs/bug206.out: bug206.goの期待される出力を含む新規ファイル。
  • test/fixedbugs/bug222.go: テスト実行コマンドを// compiledirディレクティブに置き換え。
  • test/fixedbugs/bug335.dir/a.go: パッケージ間の循環参照を解消するためのコード変更。
  • test/fixedbugs/bug335.dir/b.go: パッケージ間の循環参照を解消するためのコード変更。
  • test/fixedbugs/bug335.go: テスト実行コマンドを// compiledirディレクティブに置き換え。
  • test/fixedbugs/bug392.dir/{two.go => pkg2.go}: ファイル名をtwo.goからpkg2.goにリネーム。
  • test/fixedbugs/bug392.dir/{three.go => pkg3.go}: ファイル名をthree.goからpkg3.goにリネーム。
  • test/fixedbugs/bug392.go: テスト実行コマンドを// compiledirディレクティブに置き換え。
  • test/fixedbugs/bug415.dir/{main.go => prog.go}: ファイル名をmain.goからprog.goにリネーム。
  • test/fixedbugs/bug415.go: テスト実行コマンドを// compiledirディレクティブに置き換え。

コアとなるコードの解説

test/fixedbugs/bug206.go

--- a/test/fixedbugs/bug206.go
+++ b/test/fixedbugs/bug206.go
@@ -1,4 +1,4 @@
-// $G $D/$F.go && $L $F.$A && ./$A.out >/dev/null 2>&1 || echo BUG: bug206
+// cmpout
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
  • 変更前: シェルコマンドでGoプログラムをコンパイル、リンク、実行し、その出力を/dev/nullにリダイレクトし、エラーがないかチェックしていました。
  • 変更後: // cmpoutディレクティブに置き換えられました。これは、run.goがこのテストの出力をbug206.outファイルと比較することを指示します。これにより、テストの意図(特定の出力が期待されること)がより明確になり、実行環境に依存しないテストが可能になります。

test/fixedbugs/bug206.out

--- /dev/null
+++ b/test/fixedbugs/bug206.out
@@ -0,0 +1,2 @@
+0
+0
  • bug206.goのテストが期待する出力がこのファイルに記述されています。// cmpoutディレクティブと組み合わせて使用されます。

test/fixedbugs/bug222.go

--- a/test/fixedbugs/bug222.go
+++ b/test/fixedbugs/bug222.go
@@ -1,4 +1,4 @@
-// $G $D/$F.dir/chanbug.go && $G -I. $D/$F.dir/chanbug2.go
+// compiledir
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
  • 変更前: 複数のGoソースファイルを個別にコンパイルするシェルコマンドでした。
  • 変更後: // compiledirディレクティブに置き換えられました。これは、run.goがこのテストのディレクトリ内のすべてのGoソースファイルをコンパイルすることを指示します。これにより、複数のファイルからなるテストケースのコンパイルが簡素化されます。

test/fixedbugs/bug335.dir/a.gotest/fixedbugs/bug335.dir/b.go

これらのファイルは、パッケージ間の循環参照に関するバグ(Issue 1705)のテストケースです。このコミットでは、循環参照のテスト方法が変更されています。

a.goの変更:

--- a/test/fixedbugs/bug335.dir/a.go
+++ b/test/fixedbugs/bug335.dir/a.go
@@ -4,6 +4,8 @@
 
  package a
 
- import "./b"
+ type T interface{}
 
- var Bar = b.Foo
+ func f() T { return nil }
+
+ var Foo T = f()

b.goの変更:

--- a/test/fixedbugs/bug335.dir/b.go
+++ b/test/fixedbugs/bug335.dir/b.go
@@ -4,8 +4,6 @@
 
  package b
 
- type T interface{}
+ import "./a"
 
- func f() T { return nil }
-
- var Foo T = f()
+ var Bar = a.Foo
  • 変更前: a.gobをインポートし、b.goaをインポートすることで循環参照を意図的に作成していました。
  • 変更後: a.gob.goのインポートと変数定義が変更され、a.gobをインポートせず、b.goaをインポートする形になりました。これにより、循環参照の検出ロジックがより適切にテストされるようになります。

test/fixedbugs/bug335.go

--- a/test/fixedbugs/bug335.go
+++ b/test/fixedbugs/bug335.go
@@ -1,5 +1,4 @@
-// $G $D/$F.dir/b.go && $G $D/$F.dir/a.go
-// rm -f a.$A b.$A
+// compiledir
 
 // Copyright 2011 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -7,4 +6,4 @@
 
  // Issue 1705.
 
- unused (see script at top of file)
+ package ignored
  • 変更前: 複数のファイルをコンパイルし、生成されたバイナリを削除するシェルコマンドでした。
  • 変更後: // compiledirディレクティブに置き換えられました。これにより、bug335.dir内のすべてのGoソースファイルがコンパイルされます。また、ファイルの末尾のコメントがpackage ignoredに変更され、テストの意図がより明確になりました。

test/fixedbugs/bug392.dir/two.go -> pkg2.go および test/fixedbugs/bug392.dir/three.go -> pkg3.go

これらのファイルはリネームされ、パッケージ名とインポートパスが変更されました。

pkg2.go (旧 two.go):

--- a/test/fixedbugs/bug392.dir/two.go
+++ b/test/fixedbugs/bug392.dir/pkg2.go
@@ -5,7 +5,7 @@
  // Use the functions in one.go so that the inlined
  // forms get type-checked.
 
- package two
+ package pkg2
 
  import "./one"

pkg3.go (旧 three.go):

--- a/test/fixedbugs/bug392.dir/three.go
+++ b/test/fixedbugs/bug392.dir/pkg3.go
@@ -2,12 +2,12 @@
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
 
-// Use the functions in one.go so that the inlined
+// Use the functions in pkg2.go so that the inlined
  // forms get type-checked.
 
- package three
+ package pkg3
 
- import "./two"
+ import "./pkg2"
 
- var x = two.F()
- var v = two.V
+ var x = pkg2.F()
+ var v = pkg2.V
  • 変更点: ファイル名がより一般的なpkg2.gopkg3.goに変更され、それに伴いパッケージ名もpkg2pkg3に更新されました。また、pkg3.go内のインポートパスも./twoから./pkg2に修正されています。これは、テストの構造をより明確にし、Goのパッケージ命名規則に合わせるためのリファクタリングです。

test/fixedbugs/bug392.go

--- a/test/fixedbugs/bug392.go
+++ b/test/fixedbugs/bug392.go
@@ -1,4 +1,4 @@
-// $G $D/$F.dir/one.go && $G $D/$F.dir/two.go && $G $D/$F.dir/three.go
+// compiledir
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
  • 変更前: 複数のGoソースファイルを個別にコンパイルするシェルコマンドでした。
  • 変更後: // compiledirディレクティブに置き換えられました。これにより、bug392.dir内のすべてのGoソースファイルがコンパイルされます。

test/fixedbugs/bug415.dir/main.go -> prog.go

--- a/test/fixedbugs/bug415.dir/main.go
+++ b/test/fixedbugs/bug415.dir/prog.go
  • 変更点: ファイル名がmain.goからprog.goにリネームされました。これは、テストの意図をより明確にするためのリファクタリングです。

test/fixedbugs/bug415.go

--- a/test/fixedbugs/bug415.go
+++ b/test/fixedbugs/bug415.go
@@ -1,4 +1,4 @@
-// $G $D/$F.dir/p.go && $G $D/$F.dir/main.go
+// compiledir
 
 // Copyright 2012 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
  • 変更前: 複数のGoソースファイルを個別にコンパイルするシェルコマンドでした。
  • 変更後: // compiledirディレクティブに置き換えられました。これにより、bug415.dir内のすべてのGoソースファイルがコンパイルされます。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント (testingパッケージ): https://pkg.go.dev/testing
  • Go言語のテストに関する一般的な情報 (Go Wikiなど): https://go.dev/wiki/TestComments (これは一般的な情報源であり、特定のrun.goディレクティブに関する直接的な公式ドキュメントは公開されていない可能性がありますが、Goのテストの慣習を理解するのに役立ちます。)
  • Go言語のソースコード (特にsrc/cmd/go/test.gosrc/run.goなど、テスト実行に関連する部分): https://github.com/golang/go (具体的なファイルパスはGoのバージョンによって異なる場合があります。)I have generated the detailed explanation based on the provided commit data and the specified chapter structure. I have also included relevant technical details and background information.
# [インデックス 13692] ファイルの概要

このコミットは、Go言語のテストスイート、特に`test/fixedbugs`ディレクトリ内の既存のテストにおいて、テスト実行方法をシェルスクリプトベースのコマンドから、Goのテストフレームワークが提供する`run.go`スクリプトが解釈するディレクティブ形式に移行するものです。これにより、テストの記述がより宣言的になり、異なる環境でのテスト実行の移植性と保守性が向上します。

## コミット

- **コミットハッシュ**: `a85fa33ece194e5b8709330e85575575c1c3b2e2`
- **Author**: Rémy Oudompheng <oudomphe@phare.normalesup.org>
- **Date**: Sat Aug 25 10:16:02 2012 +0200

## GitHub上でのコミットページへのリンク

[https://github.com/golang/go/commit/a85fa33ece194e5b8709330e85575575c1c3b2e2](https://github.com/golang/go/commit/a85fa33ece194e5b8709330e85575575c1c3b2e2)

## 元コミット内容

test: use run.go for more tests.

R=golang-dev, alex.brainman, minux.ma CC=golang-dev https://golang.org/cl/6443110


## 変更の背景

Go言語のテストスイートは、初期の段階ではテストの実行にシェルスクリプトのコマンドを直接使用していました。これは、特定のテストケースをコンパイルしたり実行したりするための柔軟な方法を提供しましたが、いくつかの課題がありました。

1.  **移植性の問題**: シェルスクリプトのコマンドは、オペレーティングシステム(OS)やシェル環境に依存する可能性があり、Windowsのような異なるOSでのテスト実行に問題を引き起こすことがありました。
2.  **保守性の問題**: テストのロジックと実行コマンドが混在しているため、テストの意図を理解しにくく、変更が困難になることがありました。
3.  **冗長性**: 多くのテストで同様のコンパイルや実行パターンが繰り返され、コードの冗長性につながっていました。

これらの課題を解決するため、Goのテストフレームワークは`run.go`というヘルパースクリプトを導入し、テストファイル内で特定のディレクティブ(指示)を使用することで、テストのコンパイルや実行方法を宣言的に指定できるようにしました。このコミットは、既存のテストをこの新しいディレクティブベースのシステムに移行し、テストスイート全体の堅牢性と保守性を向上させることを目的としています。

## 前提知識の解説

### Go言語のテスト

Go言語には、標準ライブラリとして`testing`パッケージが提供されており、ユニットテスト、ベンチマークテスト、サンプルテストなどを簡単に記述できます。テストファイルは通常、テスト対象のファイルと同じディレクトリに配置され、ファイル名の末尾に`_test.go`が付きます。

### `test/fixedbugs`ディレクトリ

Goのソースコードリポジトリには、`test/fixedbugs`というディレクトリが存在します。このディレクトリには、過去に発見され修正されたバグの再現テストケースが格納されています。これらのテストは、将来的に同じバグが再発しないことを保証するために重要です。

### `run.go`とテストディレクティブ

`run.go`は、Goのテストスイート内で使用される内部的なヘルパースクリプトです。このスクリプトは、テストファイルの先頭に記述された特定のコメント行(ディレクティブ)を解析し、それに基づいてテストのコンパイルや実行を行います。これにより、テストの実行ロジックがGoのコードベース内で一元的に管理され、OS間の差異を吸収できるようになります。

このコミットで導入または利用されている主なディレクティブは以下の通りです。

-   **`// cmpout`**: このディレクティブは、テストの標準出力(stdout)が、対応する`.out`ファイルの内容と一致することを期待します。テストが実行され、その出力が`.out`ファイルと比較されます。
-   **`// compiledir`**: このディレクティブは、現在のディレクトリ内のGoソースファイルをコンパイルすることを指示します。これは、複数のファイルから構成されるパッケージや、特定のコンパイル順序が必要なテストケースで特に有用です。

### Goのパッケージとインポート

Goのソースファイルはパッケージに属し、他のパッケージをインポートしてその機能を利用できます。相対パスでのインポート(例: `"./one"`)は、同じモジュール内のローカルパッケージを指すために使用されます。

## 技術的詳細

このコミットの主要な技術的変更は、`test/fixedbugs`ディレクトリ内の複数のテストファイルにおいて、テストの実行方法を定義していたシェルコマンドのコメント行を、`run.go`が解釈するディレクティブに置き換えた点です。

以前は、テストファイルの先頭に以下のようなコメントがありました。

```go
// $G $D/$F.go && $L $F.$A && ./$A.out >/dev/null 2>&1 || echo BUG: bug206

これは、Goコンパイラ($G)、リンカ($L)などのツールを直接呼び出し、テストのコンパイル、リンク、実行、そして出力の検証を行うシェルコマンドでした。この形式は、OSのシェル環境に依存し、特にWindows環境での互換性の問題を引き起こす可能性がありました。

このコミットでは、これらのシェルコマンドを、より抽象的で移植性の高いディレクティブに置き換えています。

  • bug206.gobug222.goでは、テストの出力比較やコンパイル指示のために、それぞれ// cmpout// compiledirディレクティブが導入されました。
  • bug335.gobug392.gobug415.goでは、複数のファイルから構成されるテストケースのコンパイルを指示するために// compiledirディレクティブが使用されています。

また、bug392.dirbug415.dir内のファイル名とパッケージ名が変更されています。これは、テストの構造をより明確にし、Goのパッケージ命名規則に合わせるためのリファクタリングの一環と考えられます。例えば、two.gopkg2.goに、three.gopkg3.goにリネームされ、それに伴いパッケージ名とインポートパスも更新されています。

これらの変更により、テストの実行はrun.goスクリプトによって抽象化され、Goのテストフレームワークがテストのコンパイルと実行の詳細を処理するようになります。これにより、テストの記述が簡潔になり、異なるプラットフォームでのテスト実行の信頼性が向上します。

コアとなるコードの変更箇所

このコミットでは、以下のファイルが変更されています。

  • test/fixedbugs/bug206.go: テスト実行コマンドを// cmpoutディレクティブに置き換え。
  • test/fixedbugs/bug206.out: bug206.goの期待される出力を含む新規ファイル。
  • test/fixedbugs/bug222.go: テスト実行コマンドを// compiledirディレクティブに置き換え。
  • test/fixedbugs/bug335.dir/a.go: パッケージ間の循環参照を解消するためのコード変更。
  • test/fixedbugs/bug335.dir/b.go: パッケージ間の循環参照を解消するためのコード変更。
  • test/fixedbugs/bug335.go: テスト実行コマンドを// compiledirディレクティブに置き換え。
  • test/fixedbugs/bug392.dir/{two.go => pkg2.go}: ファイル名をtwo.goからpkg2.goにリネーム。
  • test/fixedbugs/bug392.dir/{three.go => pkg3.go}: ファイル名をthree.goからpkg3.goにリネーム。
  • test/fixedbugs/bug392.go: テスト実行コマンドを// compiledirディレクティブに置き換え。
  • test/fixedbugs/bug415.dir/{main.go => prog.go}: ファイル名をmain.goからprog.goにリネーム。
  • test/fixedbugs/bug415.go: テスト実行コマンドを// compiledirディレクティブに置き換え。

コアとなるコードの解説

test/fixedbugs/bug206.go

--- a/test/fixedbugs/bug206.go
+++ b/test/fixedbugs/bug206.go
@@ -1,4 +1,4 @@
-// $G $D/$F.go && $L $F.$A && ./$A.out >/dev/null 2>&1 || echo BUG: bug206
+// cmpout
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
  • 変更前: シェルコマンドでGoプログラムをコンパイル、リンク、実行し、その出力を/dev/nullにリダイレクトし、エラーがないかチェックしていました。
  • 変更後: // cmpoutディレクティブに置き換えられました。これは、run.goがこのテストの出力をbug206.outファイルと比較することを指示します。これにより、テストの意図(特定の出力が期待されること)がより明確になり、実行環境に依存しないテストが可能になります。

test/fixedbugs/bug206.out

--- /dev/null
+++ b/test/fixedbugs/bug206.out
@@ -0,0 +1,2 @@
+0
+0
  • bug206.goのテストが期待する出力がこのファイルに記述されています。// cmpoutディレクティブと組み合わせて使用されます。

test/fixedbugs/bug222.go

--- a/test/fixedbugs/bug222.go
+++ b/test/fixedbugs/bug222.go
@@ -1,4 +1,4 @@
-// $G $D/$F.dir/chanbug.go && $G -I. $D/$F.dir/chanbug2.go
+// compiledir
 
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
  • 変更前: 複数のGoソースファイルを個別にコンパイルするシェルコマンドでした。
  • 変更後: // compiledirディレクティブに置き換えられました。これは、run.goがこのテストのディレクトリ内のすべてのGoソースファイルをコンパイルすることを指示します。これにより、複数のファイルからなるテストケースのコンパイルが簡素化されます。

test/fixedbugs/bug335.dir/a.gotest/fixedbugs/bug335.dir/b.go

これらのファイルは、パッケージ間の循環参照に関するバグ(Issue 1705)のテストケースです。このコミットでは、循環参照のテスト方法が変更されています。

a.goの変更:

--- a/test/fixedbugs/bug335.dir/a.go
+++ b/test/fixedbugs/bug335.dir/a.go
@@ -4,6 +4,8 @@
 
  package a
 
- import "./b"
+ type T interface{}
 
- var Bar = b.Foo
+ func f() T { return nil }
+
+ var Foo = f()

b.goの変更:

--- a/test/fixedbugs/bug335.dir/b.go
+++ b/test/fixedbugs/bug335.dir/b.go
@@ -4,8 +4,6 @@
 
  package b
 
- type T interface{}
+ import "./a"
 
- func f() T { return nil }
-
- var Foo = f()
+ var Bar = a.Foo
  • 変更前: a.gobをインポートし、b.goaをインポートすることで循環参照を意図的に作成していました。
  • 変更後: a.gob.goのインポートと変数定義が変更され、a.gobをインポートせず、b.goaをインポートする形になりました。これにより、循環参照の検出ロジックがより適切にテストされるようになります。

test/fixedbugs/bug335.go

--- a/test/fixedbugs/bug335.go
+++ b/test/fixedbugs/bug335.go
@@ -1,5 +1,4 @@
-// $G $D/$F.dir/b.go && $G $D/$F.dir/a.go
-// rm -f a.$A b.$A
+// compiledir
 
 // Copyright 2011 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -7,4 +6,4 @@
 
  // Issue 1705.
 
- unused (see script at top of file)
+ package ignored
  • 変更前: 複数のファイルをコンパイルし、生成されたバイナリを削除するシェルコマンドでした。
  • 変更後: // compiledirディレクティブに置き換えられました。これにより、bug335.dir内のすべてのGoソースファイルがコンパイルされます。また、ファイルの末尾のコメントがpackage ignoredに変更され、テストの意図がより明確になりました。

test/fixedbugs/bug392.dir/two.go -> pkg2.go および test/fixedbugs/bug392.dir/three.go -> pkg3.go

これらのファイルはリネームされ、パッケージ名とインポートパスが変更されました。

pkg2.go (旧 two.go):

--- a/test/fixedbugs/bug392.dir/two.go
+++ b/test/fixedbugs/bug392.dir/pkg2.go
@@ -5,7 +5,7 @@
  // Use the functions in one.go so that the inlined
  // forms get type-checked.
 
- package two
+ package pkg2
 
  import "./one"

pkg3.go (旧 three.go):

--- a/test/fixedbugs/bug392.dir/three.go
+++ b/test/fixedbugs/bug392.dir/pkg3.go
@@ -2,12 +2,12 @@
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
 
-// Use the functions in one.go so that the inlined
+// Use the functions in pkg2.go so that the inlined
  // forms get type-checked.
 
- package three
+ package pkg3
 
- import "./two"
+ import "./pkg2"
 
- var x = two.F()
- var v = two.V
+ var x = pkg2.F()
+ var v = pkg2.V
  • 変更点: ファイル名がより一般的なpkg2.gopkg3.goに変更され、それに伴いパッケージ名もpkg2pkg3に更新されました。また、pkg3.go内のインポートパスも./twoから./pkg2に修正されています。これは、テストの構造をより明確にし、Goのパッケージ命名規則に合わせるためのリファクタリングです。

test/fixedbugs/bug392.go

--- a/test/fixedbugs/bug392.go
+++ b/test/fixedbugs/bug392.go
@@ -1,4 +1,4 @@
-// $G $D/$F.dir/one.go && $G $D/$F.dir/two.go && $G $D/$F.dir/three.go
+// compiledir
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
  • 変更前: 複数のGoソースファイルを個別にコンパイルするシェルコマンドでした。
  • 変更後: // compiledirディレクティブに置き換えられました。これにより、bug392.dir内のすべてのGoソースファイルがコンパイルされます。

test/fixedbugs/bug415.dir/main.go -> prog.go

--- a/test/fixedbugs/bug415.dir/main.go
+++ b/test/fixedbugs/bug415.dir/prog.go
  • 変更点: ファイル名がmain.goからprog.goにリネームされました。これは、テストの意図をより明確にするためのリファクタリングです。

test/fixedbugs/bug415.go

--- a/test/fixedbugs/bug415.go
+++ b/test/fixedbugs/bug415.go
@@ -1,4 +1,4 @@
-// $G $D/$F.dir/p.go && $G $D/$F.dir/main.go
+// compiledir
 
 // Copyright 2012 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
  • 変更前: 複数のGoソースファイルを個別にコンパイルするシェルコマンドでした。
  • 変更後: // compiledirディレクティブに置き換えられました。これにより、bug415.dir内のすべてのGoソースファイルがコンパイルされます。

関連リンク

参考にした情報源リンク

  • Go言語の公式ドキュメント (testingパッケージ): https://pkg.go.dev/testing
  • Go言語のテストに関する一般的な情報 (Go Wikiなど): https://go.dev/wiki/TestComments (これは一般的な情報源であり、特定のrun.goディレクティブに関する直接的な公式ドキュメントは公開されていない可能性がありますが、Goのテストの慣習を理解するのに役立ちます。)
  • Go言語のソースコード (特にsrc/cmd/go/test.gosrc/run.goなど、テスト実行に関連する部分): https://github.com/golang/go (具体的なファイルパスはGoのバージョンによって異なる場合があります。)