sashite-sin 1.0.0

Style Identifier Notation (SIN): a compact, ASCII-only, no_std token encoding a player's side and style in abstract strategy board games.
Documentation
//! Tests for the `serde` feature: an `Identifier` (de)serializes as its
//! canonical token string.
#![cfg(feature = "serde")]

use sashite_sin::Identifier;
use serde_test::{assert_de_tokens_error, assert_tokens, Token};

#[test]
fn serializes_and_deserializes_as_token_string() {
    // Both sides, across the alphabet (including its boundaries).
    for token in ["W", "w", "C", "c", "J", "S", "A", "z"] {
        let id = Identifier::parse(token).unwrap();
        assert_tokens(&id, &[Token::Str(token)]);
    }
}

#[test]
fn invalid_strings_fail_to_deserialize() {
    assert_de_tokens_error::<Identifier>(&[Token::Str("")], "empty SIN token");
    assert_de_tokens_error::<Identifier>(
        &[Token::Str("WW")],
        "SIN token longer than one character",
    );
    assert_de_tokens_error::<Identifier>(
        &[Token::Str("1")],
        "SIN token must contain exactly one ASCII letter",
    );
}