Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

pro1-tester

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pro1-tester

  • 0.1.6
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

pro1-tester

BDD for Pro1

Overview

プロ1のテストを自動化するためのスクリプトです。 テストを実行するにはtestcase.ymlを書く必要がありますが、 https://github.com/Kumassy/pro1-tester-testcases で共有しています。

Usage

testcase.default.yml または testcase.yml をソースコード *.c と同じディレクトリに置いてください:

.
├── assignment_09-a-01.c
├── assignment_09-a-02.c
├── assignment_09-a-03.c
├── assignment_09-a-04.c
├── assignment_09-a-05.c
├── assignment_09-b-01.c
├── assignment_09-b-02.c
├── assignment_09-b-03.c
├── assignment_09-b-04.c
├── assignment_09-c-01.c
├── assignment_09-c-02.c
├── assignment_09-d-01.c
├── testcase.yml
└── testcase.default.yml

そして

pro1-tester

を実行するとテスト結果がでます。

オプション説明
-dデフォルトではtestcase.ymlがある場合はそちらを実行しますが、このオプションをつけるとtestcase.default.ymlを使うようになります
-sストリクトモード で実行します。デフォルトでは標準出力とexpectはスペースと改行を無視して比較されますが、ストリクトモードでは厳密に比較します

Setup (KO Unix)

KO の Unix で使う場合、Rubyはインストールされているので gem のインストールだけすれば OK です。
--user-installオプションをつけてユーザー領域に gem をインストールするようにします:

gem install pro1-tester --user-install
gem install rspec --user-install

pro1-testerコマンドを使えるようにパスを通します。

vim ~/.bash_profile

PATH=$PATH:$HOME/binという行があると思うので、次のように$HOME/.gem/ruby/2.3.0/binを追記します:

# 追記
PATH=$PATH:$HOME/.gem/ruby/2.3.0/bin

.bash_profileを再読み込みします

source ~/.bash_profile

これでパスが通りました

which pro1-tester
~/.gem/ruby/2.3.0/bin/pro1-tester

Setup (Basic)

Vagrant でも使って CentOS 環境で動かしましょう。 Ruby のインストールをしましょう。

そして、次のコマンドで gem をインストールしてください:

gem install pro1-tester

Setup (docker)

Docker イメージのビルド

git clone https://github.com/Kumassy/pro1-tester
cd pro1-tester
docker build -t my-ruby-image .

Docker コンテナの実行

cd /path/to/source/and/testcase.yml/
docker run -it --rm -v "$PWD":/app/ -w /app/ my-ruby-image pro1-tester

Writing testcase.yml

YAML の記法で書いていきます。 基本的に雰囲気で書けばOKです。

- target: a-01
  testcase:
    - input: |
        stdin
      args: |
        command line args
      expect: |
        expectation of stdout
      label: |
        printed when this testcase raises error

  • 出力だけ見るプログラムの場合、inputは省略可能です。
  • labelitに渡すアレです。省略した場合はデフォルトのラベルが使われます。
  • inputに特定の文字("とか\とか)が含まれるときはエスケープが必要です。
  • inputの最後に改行が必要でinputを1行で書くときは、input""で囲って最後に\nをつけてください。
  • 複数行の文字列を書くときには注意しましょう。
- expect: |
    A(65)  # ここでインデントつける
    B(66)
    C(67)
    D(68)
    E(69)

- expect: |
  A(65)  # これはシンタックスエラー
  B(66)
  C(67)
  D(68)
  E(69)

注意

  • 無限ループ内で標準入力を読んでいて、C-dをスルーするプログラムの場合はこのスクリプトも無限ループに陥ります(OS がプロセスを強制終了する場合もあります)。
  • 仕様上、標準入力に書き込んでその標準出力を見て、その結果に応じてさらに標準入力にデータを流すことはできません。標準入力にガーッと書き込んでダーッと結果を検証する感じでお願いします。
  • 標準エラー出力は無視されます。
  • このテストケースをパスすればあなたのプログラムが確実に正しい動作をする、ということは完全には保証できません。提出前には手動で最終確認をすることを推奨します。

仕様

  • 標準入力にはinputのパース結果がそのまま渡されます
    • input を1行で書いたときは明示的に\nを指定しない限り改行コードは渡されません(Enter キー押さないのと同じ)。
    • input|を使って複数行で書いたときは、最終行も含めそれぞれの行末に\nがつきます。

My Environment (on Vagrant)

cat /etc/redhat-release
CentOS release 6.7 (Final)
ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
rspec -v
3.4.4
gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
スレッドモデル: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
docker -v
Docker version 1.7.1, build 786b29d

TODO

  • 無限ループするプログラムに対してのタイムアウト処理

FAQs

Package last updated on 13 Jul 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc