Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
mass-0910 committed Oct 14, 2023
2 parents fe4d314 + 2dbf48f commit 5fa35ed
Show file tree
Hide file tree
Showing 27 changed files with 336 additions and 355 deletions.
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# hspスクリプトをdiffでShift_JISとして認識させるための設定
*.hsp diff=sjis
*.as diff=sjis
11 changes: 11 additions & 0 deletions .github/release_note.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
changelog:
categories:
- title: ✨新機能
labels:
- enhancement
- title: 💊バグ修正
labels:
- bug
- title: 🛠その他の変更
labels:
- "*"
85 changes: 85 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: release

on:
push:
tags:
- 'v*'

jobs:
test:
name: リリース作業
runs-on: windows-latest
steps:
- uses: actions/checkout@v3

- name: cache HSP3.6
id: cache-hsp36
uses: actions/cache@v3
with:
path: C:/hsp36
key: ${{ runner.os }}-hsp36-official
restore-keys: |
${{ runner.os }}-hsp36-official
- name: download HSP3.6
if: ${{ steps.cache-hsp36.outputs.cache-hit != 'true' }}
shell: pwsh
run: Invoke-Webrequest -Uri https://www.onionsoft.net/hsp/file/hsp36.zip -OutFile hsp36.zip

- name: unzip hsp36en.zip
if: ${{ steps.cache-hsp36.outputs.cache-hit != 'true' }}
run: 7z x hsp36.zip -oC:/

- name: add hsp36 to path
shell: pwsh
run: echo "C:/hsp36" >> $env:GITHUB_PATH

- name: compile hsptest
shell: pwsh
run: |
hspcmp -o"compile.ax" --compath="C:/hsp36/common" ./compile.hsp
cp common/* C:/hsp36/common/
hsp3cl compile.ax
- name: create artifact zip file
shell: pwsh
run: |
mkdir hsptest
Copy-Item -Recurse -Path common -Destination hsptest/common
Copy-Item -Path hsptest.exe -Destination hsptest
Copy-Item -Path install.bat -Destination hsptest
Copy-Item -Path run_hsptest.bat -Destination hsptest
7z a -tzip hsptest.zip hsptest
- name: get previout tag name
id: get_previous_tag
shell: bash
run: |
git fetch -a
echo value=$(git tag --sort "-committerdate" | cut -d$'\n' -f2) >> $GITHUB_OUTPUT
- name: fetch auto generated release note
id: generate_release_note
shell: bash
run: |
echo "$(curl -X POST -H 'Accept: application/vnd.github.v3+json' -H 'Authorization: token ${{ secrets.GITHUB_TOKEN }}' https://api.github.com/repos/${{ github.repository }}/releases/generate-notes -d '{"tag_name":"${{ github.ref_name }}", "previous_tag_name":"${{ steps.get_previous_tag.outputs.value }}", "configuration_file_path":".github/release_note.yml"}' | jq .body | sed 's/"//g' | sed s/\\\\n/\\$'\n'/g | sed 's/What'\''s Changed/${{ steps.get_previous_tag.outputs.value }}からの変更点/g')" >> generated_release_note.txt
- name: create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref_name }}
release_name: hsptest ${{ github.ref_name }}
body_path: ./generated_release_note.txt

- name: upload zip to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./hsptest.zip
asset_name: hsptest.zip
asset_content_type: application/zip
126 changes: 4 additions & 122 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,7 @@ HSP3言語で書かれたプログラムをテストするためのフレーム

## インストール

hsptestを使用する手段によって、以下の2通りのインストール方法があります。
1. バッチファイル(`run_hsptest.bat`)からhsptestを実行する場合
2. コマンドラインからhsptestを実行する場合

### バッチファイル(`run_hsptest.bat`)からhsptestを実行する場合

起動用のバッチファイルからhsptestを実行する場合は、以下の手順でインストールしてください。

1. [Releases](https://github.com/mass-0910/hsptest/releases/latest)からhsptest.zipをダウンロードします
2. hsptest.zipを解凍し、中に含まれる`install.bat`を実行します。
3. 以下の画像のように、`run_hsptest.bat`ファイルをテストスクリプトが格納されたフォルダに移動させます

![run_hsptest](https://github.com/mass-0910/hsptest/assets/53329734/7f256589-39dc-448a-a5a8-6c67be9ac7c8)

### コマンドラインからhsptestを実行する場合

hsptestをコマンドラインからhsptestを実行する場合は、以下の手順でインストールしてください。
hsptestは以下の手順でインストールしてください。

1. HSP3インストールフォルダ(例:`C:/hsp36`)を環境変数PATHに追加します
2. [Releases](https://github.com/mass-0910/hsptest/releases/latest)からhsptest.zipをダウンロードします
Expand All @@ -35,7 +19,7 @@ hsptestをコマンドラインからhsptestを実行する場合は、以下の

また、hsptest_log.txtというファイルが生成され、その中にテストのログが出力されます。

コマンドラインからhsptestを実行する場合、`run_hsptest.bat`は使用しません
開発中にコマンドを叩かないスタイルの方は是非お使いください

## コマンドラインからの使い方

Expand Down Expand Up @@ -64,108 +48,6 @@ hsptest path/to/test.hsp # test.hsp内のテストのみを実行
```powershell
hsptest path/to/testfolder1 path/to/testfolder2 # testfolder1とtestfolder2の中身を連続でテストする
```
## hsptestユーザマニュアルのリンク

### コマンドラインオプション

hsptestを実行する際に以下のオプションを指定できます。

|オプション|引数|説明|
|---|---|---|
|`-v`, `--verbose`||テスト結果ごとに結果を出力します|
|`-s`, `--stdout`||テスト実行中にHSPランタイムから出力された文字列を表示します|
|`-l`, `--logfile`|LOGFILE|LOGFILEで指定したファイルにテストログを出力します|
|`-r`, `--runtime`|RUNTIME|テストを実行するデフォルトのランタイム名を指定します。ランタイム名はランタイム実行ファイルから`.exe`を除いたものです(例:`hsp3`, `hsp3utf`, `hsp3cl`など)|
|`-h`, `--help`||ヘルプを表示します|
|`--version`||hsptestのバージョン情報を表示します|
<!-- |`-j`, `--junitxml`|p1|p1で指定したファイルにJUnit形式のログを出力します(未実装)| -->


## テストスクリプトの書き方

hsptestは、`test`を名前に含むHSPスクリプトファイルをテストスクリプトとして認識し、それらを実行します。
hsptestで実行されるテストは、テスト一つに対して一つのサブルーチンで記述する必要があります。テストサブルーチンのラベル名は、`*test`から始まるものである必要があります。以下の例のようにテストスクリプトを記述してください。

```
#include "assertion.as" ; 各種assertionをincludeする
;ラベル名は*testXXX...のような名前にしてください
;テストサブルーチン
*test1
b = 2
a = 10 / b
assertEqual a, 5, "a is not 5"
return
;テストサブルーチン
*test2
s = "test"
strrep s, "t", "s"
mes s
assertEqual s, "sess"
return
;テストサブルーチン
*test3
zero = 0
divide_0 = 1 / zero ;0割りを発生させる
return
```

テストごとにhsp3clランタイムのインスタンスが起動するため、他のテストサブルーチンで発生した変数代入やエラーなどは現在実行してるテストサブルーチンには影響しません。テストサブルーチン内でなにかのエラーが発生した場合、またはassertionが失敗したとき、そのテストは失敗となります。


## hsptestの出力

hsptestが実行終了すると、以下のような出力がされます。
```
hsptest test
```
![image](https://user-images.githubusercontent.com/53329734/185728062-e691c608-75f7-492d-ad7e-7c7bf10cb797.png)

実行の際に`-v`オプションを追加すると、それぞれのテストの結果と、テスト失敗の原因が出力されます。
```
hsptest -v test
```
![image](https://user-images.githubusercontent.com/53329734/185728084-efd6a2d4-ec9c-4412-85f9-e24f97f96210.png)

さらに、`-l LOGFILE`オプション(`LOGFILE`は出力するログファイルへのパス)を指定すると、より詳細なログデータがファイルに出力されます

```
hsptest -l hogehoge.log test
```

## `assertion.as`の使い方

`common`フォルダに入れていただいた`assertion.as`は、世界に数多あるテストフレームワークで使用されている各種assertion命令を再現するためのマクロ定義ファイルです。これをテストスクリプト内でincludeしていただくと、以下のようなassertion命令が使用できます。[]で囲われている引数は省略可能です。

|assertion命令|引数|説明||
|---|---|---|---|
|assertTrue|p1[,p2]|p1がtrue(非0)のとき成功。p2はエラー説明|`assertTrue a == 1, "a is not 1"`|
|assertFalse|p1[,p2]|p1がfalse(0)のとき成功。p2はエラー説明|`assertFalse a > 0, "a is positive"`|
|assertEqual|p1,p2[,p3]|p1とp2が同値のとき成功。p3はエラー説明|`assertEqual a, b, "a is not same as b"`|
|assertNear|p1,p2,[p3][,p4]|p1とp2の差がp3以下のとき成功。p3のデフォルト値は0.0001。p4はエラー説明|`assertNear a, b, , "a is far from b"`|

## アノテーションによるテストの設定

テストスクリプトに記述したテストサブルーチンには、それぞれタイムアウトやランタイム指定などの設定を記述することができます。これをhsptestではアノテーションと呼びます。

アノテーションは**テストサブルーチンラベルの1行前に、`;@`で始まるコメントとして記述できます**

```
;@ runtime=hsp3, timeout=10
*test_subroutine
mes "このテストはhsp3.exeランタイムで実行され、10秒でタイムアウトします。"
return
```

アノテーションは以下の通りに記述する必要があります。(文字間の空白文字は入れなくても大丈夫です。)
```
;@ <設定項目1> = <値>, <設定項目2> = <値>, ...
```

使用できるアノテーションの設定項目は以下のとおりです。
|設定項目|説明|
|---|---|
|runtime|このテストが実行されるランタイム名を指定します。ランタイム名はランタイム実行ファイルから`.exe`を除いたものです。(例:`hsp3`, `hsp3utf`, `hsp3cl`など)|
|timeout|このテストのタイムアウト時間を数値で指定します。小数点を含むこともできます。タイムアウトしたテストは失敗したものとして扱われます。単位は秒[s]です。|
|ignore|このテストをhsptestが無視するかどうかを指定します。値が`true`の場合、このテストは無視されます。それ以外の値の場合は実行されます。|
hsptestの詳しい使い方は、[hsptestユーザマニュアル](https://github.com/mass-0910/hsptest/wiki/hsptest%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB)をご覧ください。
6 changes: 3 additions & 3 deletions VERSION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# encoing Shift-JIS
_PRODUCTVERSION=0.8
Comments=HSP3�e�X�g�t���[�����[�N
FileDescription=HSP3�e�X�g�t���[�����[�N���s�t�@�C��
_PRODUCTVERSION=0.9
Comments=HSP3 testing framework
FileDescription=hsptest exe file
LegalCopyright=(c)2023 mass-0910
ProductName=hsptest
18 changes: 9 additions & 9 deletions annotation.hsp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#module

/*
アノテーションパーサの初期化を行う
�A�m�e�[�V�����p�[�T�̏��������s��
*/
#deffunc annotation_init
annotation_attr_names = {"
Expand All @@ -22,9 +22,9 @@
return

/*
アノテーション行をパースする
引数
annotation_line: アノテーションが書かれてある行の文字列
�A�m�e�[�V�����s���p�[�X����
����
annotation_line: �A�m�e�[�V������������Ă���s�̕�����
*/
#deffunc annotation_parse str annotation_line
annotation_str = submatch(annotation_line, ";@\s*(.+)", 0, 0)
Expand All @@ -43,11 +43,11 @@
return

/*
アノテーションに書かれた属性(設定項目)の値を取得する
引数
attr_name: 設定項目名
返り値
設定項目の値
�A�m�e�[�V�����ɏ����ꂽ����(�ݒ荀��)�̒l���擾����
����
attr_name: �ݒ荀�ږ�
�Ԃ�l
�ݒ荀�ڂ̒l
*/
#defcfunc get_annotation_attr_val str attr_name
retval = ""
Expand Down
42 changes: 21 additions & 21 deletions append_data.hsp
Original file line number Diff line number Diff line change
@@ -1,39 +1,39 @@
#ifndef append_data_hsp_included
#define append_data_hsp_included

#include "result_format.as"
#include "hsptest_result_format.as"

#module

#define SUCCESS 1
#define FAILURE 0

/*
引数が単語に使用される文字コードかどうかを判定する
引数
ch: 文字コード
返り値
文字コードが単語に使用されるものの場合true
�������P��Ɏg�p����镶���R�[�h���ǂ����𔻒肷��
����
ch: �����R�[�h
�Ԃ�l
�����R�[�h���P��Ɏg�p�������̂̏ꍇtrue
*/
#defcfunc is_name_alphabet int ch
return ('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z') || ('0' <= ch && ch <= '9') || ch == '_'

/*
引数が空白文字コードかどうかを判定する
引数
ch: 文字コード
返り値
文字コードが空白文字の場合true
�������󔒕����R�[�h���ǂ����𔻒肷��
����
ch: �����R�[�h
�Ԃ�l
�����R�[�h���󔒕����̏ꍇtrue
*/
#defcfunc is_space int ch
return ch == ' ' || ch == '\t'

/*
引数の行文字列がHSP3におけるマルチラインコードかどうかを判定する
引数
line_str: HSP3スクリプトの1行コード文字列
返り値
コードがマルチラインコードの場合true
�����̍s������HSP3�ɂ�����}���`���C���R�[�h���ǂ����𔻒肷��
����
line_str: HSP3�X�N���v�g��1�s�R�[�h������
�Ԃ�l
�R�[�h���}���`���C���R�[�h�̏ꍇtrue
*/
#defcfunc is_multi_line str line_str
line_str_buf = line_str
Expand All @@ -50,10 +50,10 @@
return result

/*
スクリプトに状態取得用プログラムを挿入したコピーを作成する
引数
src_file_path: コピー元スクリプトへのパス
dest_file_path: コピー先スクリプトへのパス
�X�N���v�g�ɏ�Ԏ擾�p�v���O������}�������R�s�[���쐬����
����
src_file_path: �R�s�[���X�N���v�g�ւ̃p�X
dest_file_path: �R�s�[��X�N���v�g�ւ̃p�X
*/
#deffunc copy_with_edit str src_file_path, str dest_file_path
notesel buf
Expand All @@ -79,7 +79,7 @@
reading_index++
}
ignore_multiline_inst = 0
// マルチライン文字列には挿入しない
// �}���`���C��������ɂ͑}�����Ȃ�
if ignore_multiline_str == 0 && instr(l, 0, "{\"") != -1 && instr(l, 0, "\"}") == -1 {
ignore_multiline_str = 1
}
Expand Down
Loading

0 comments on commit 5fa35ed

Please sign in to comment.