[インデックス 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言語のテストスイートは、初期の段階ではテストの実行にシェルスクリプトのコマンドを直接使用していました。これは、特定のテストケースをコンパイルしたり実行したりするための柔軟な方法を提供しましたが、いくつかの課題がありました。
- 移植性の問題: シェルスクリプトのコマンドは、オペレーティングシステム(OS)やシェル環境に依存する可能性があり、Windowsのような異なるOSでのテスト実行に問題を引き起こすことがありました。
- 保守性の問題: テストのロジックと実行コマンドが混在しているため、テストの意図を理解しにくく、変更が困難になることがありました。
- 冗長性: 多くのテストで同様のコンパイルや実行パターンが繰り返され、コードの冗長性につながっていました。
これらの課題を解決するため、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.go
とbug222.go
では、テストの出力比較やコンパイル指示のために、それぞれ// cmpout
と// compiledir
ディレクティブが導入されました。bug335.go
、bug392.go
、bug415.go
では、複数のファイルから構成されるテストケースのコンパイルを指示するために// compiledir
ディレクティブが使用されています。
また、bug392.dir
とbug415.dir
内のファイル名とパッケージ名が変更されています。これは、テストの構造をより明確にし、Goのパッケージ命名規則に合わせるためのリファクタリングの一環と考えられます。例えば、two.go
がpkg2.go
に、three.go
がpkg3.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.go
と test/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.go
がb
をインポートし、b.go
がa
をインポートすることで循環参照を意図的に作成していました。 - 変更後:
a.go
とb.go
のインポートと変数定義が変更され、a.go
がb
をインポートせず、b.go
がa
をインポートする形になりました。これにより、循環参照の検出ロジックがより適切にテストされるようになります。
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.go
とpkg3.go
に変更され、それに伴いパッケージ名もpkg2
とpkg3
に更新されました。また、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 CL 6443110: https://golang.org/cl/6443110
参考にした情報源リンク
- Go言語の公式ドキュメント (testingパッケージ): https://pkg.go.dev/testing
- Go言語のテストに関する一般的な情報 (Go Wikiなど): https://go.dev/wiki/TestComments (これは一般的な情報源であり、特定の
run.go
ディレクティブに関する直接的な公式ドキュメントは公開されていない可能性がありますが、Goのテストの慣習を理解するのに役立ちます。) - Go言語のソースコード (特に
src/cmd/go/test.go
やsrc/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.go
とbug222.go
では、テストの出力比較やコンパイル指示のために、それぞれ// cmpout
と// compiledir
ディレクティブが導入されました。bug335.go
、bug392.go
、bug415.go
では、複数のファイルから構成されるテストケースのコンパイルを指示するために// compiledir
ディレクティブが使用されています。
また、bug392.dir
とbug415.dir
内のファイル名とパッケージ名が変更されています。これは、テストの構造をより明確にし、Goのパッケージ命名規則に合わせるためのリファクタリングの一環と考えられます。例えば、two.go
がpkg2.go
に、three.go
がpkg3.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.go
と test/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.go
がb
をインポートし、b.go
がa
をインポートすることで循環参照を意図的に作成していました。 - 変更後:
a.go
とb.go
のインポートと変数定義が変更され、a.go
がb
をインポートせず、b.go
がa
をインポートする形になりました。これにより、循環参照の検出ロジックがより適切にテストされるようになります。
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.go
とpkg3.go
に変更され、それに伴いパッケージ名もpkg2
とpkg3
に更新されました。また、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 CL 6443110: https://golang.org/cl/6443110
参考にした情報源リンク
- Go言語の公式ドキュメント (testingパッケージ): https://pkg.go.dev/testing
- Go言語のテストに関する一般的な情報 (Go Wikiなど): https://go.dev/wiki/TestComments (これは一般的な情報源であり、特定の
run.go
ディレクティブに関する直接的な公式ドキュメントは公開されていない可能性がありますが、Goのテストの慣習を理解するのに役立ちます。) - Go言語のソースコード (特に
src/cmd/go/test.go
やsrc/run.go
など、テスト実行に関連する部分): https://github.com/golang/go (具体的なファイルパスはGoのバージョンによって異なる場合があります。)