Build Status Crates Package Status License: MIT

Polish

Polish is a test frammework designed to allow the construction of test-driven development processes written in Rust.

Getting Started

Installing the Package

The crates.io package is kept up-to-date with all the major changes which means you can use it by simply including the following in your Cargo.toml under your dependencies section:

yaml polish = "*"

But if you'd like to use nightly (most recent) releases, you can include the GitHub package repo instead:

yaml polish = { git = "https://github.com/alkass/polish", branch = "master" }

Writing Test Cases

single Test Cases

The simplest test case can take the following form:

```rust extern crate polish;

use polish::test_case::{TestRunner, TestCaseStatus, TestCase}; use polish::logger::Logger;

fn mytestcase(logger: &mut Logger) -> TestCaseStatus { // TODO: Your test case code goes here TestCaseStatus::PASSED // Other valid statuses are (FAILED, SKIPPED, and UNKNOWN) }

fn main() { let testcase = TestCase::new("Test Case Title", "Test Case Criteria", Box::new(mytestcase)); TestRunner::new(0).runtest(test_case); } ```

This produces the following:

The example listed above is available here

You can also pass a Rust closure instead of a function pointer as so:

```rust extern crate polish;

use polish::test_case::{TestRunner, TestCaseStatus, TestCase}; use polish::logger::Logger;

fn main() { let testcase = TestCase::new("Test Case Title", "Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus { // TODO: Your test case code goes here TestCaseStatus::PASSED })); TestRunner::new(0).runtest(test_case); } ```

The example listed above is available here

Multiple Test Cases

You can run multiple test cases as follows:

```rust extern crate polish;

use polish::test_case::{TestRunner, TestCaseStatus, TestCase}; use polish::logger::Logger;

fn main() { let mut runner = TestRunner::new(0); runner.runtest(TestCase::new("1st Test Case Title", "Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus { // TODO: Your test case code goes here TestCaseStatus::PASSED }))); runner.runtest(TestCase::new("2nd Test Case Title", "Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus { // TODO: Your test case code goes here TestCaseStatus::PASSED }))); runner.run_test(TestCase::new("3rd Test Case Title", "Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus { // TODO: Your test case code goes here TestCaseStatus::PASSED }))); } ```

But a more convenient way would be to pass a Vector of your test cases to run_tests as so:

```rust extern crate polish;

use polish::test_case::{TestRunner, TestCaseStatus, TestCase}; use polish::logger::Logger;

fn main() { let mytests = vec![ TestCase::new("1st Test Case Title", "1st Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus { // TODO: Your test case goes here TestCaseStatus::PASSED })), TestCase::new("2nd Test Case Title", "2nd Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus { // TODO: Your test case goes here TestCaseStatus::UNKNOWN })), TestCase::new("3rd Test Case Title", "3rd Test Case Criteria", Box::new(|logger: &mut Logger| -> TestCaseStatus { // TODO: Your test case goes here TestCaseStatus::FAILED }))]; TestRunner::new(0).runtests(my_tests); } ```

Embedded Test Cases

...

Attributes

...

Logging

The logger object that's passed to each test case offers 4 logging functions (pass, fail, warn, and info). Each of these functions take a message argument of type String which allows you to use the format! macro to format your logs, e.g.:

rust logger.info(format!("{} + {} = {sum}", 1, 2, sum=(1 + 2)));

Author

Fadi Hanna Al-Kass