quinjet 0.0.48

A fast, live, keyboard-first Git source-control interface for the terminal
use unicode_width::UnicodeWidthStr;

use super::*;

#[test]
fn recognizes_exact_ecosystem_files_before_their_extensions() {
    assert_eq!(for_path(Path::new("Cargo.toml")), RUST);
    assert_eq!(for_path(Path::new("pyproject.toml")), PYTHON);
    assert_eq!(for_path(Path::new("package.json")), NPM);
    assert_eq!(for_path(Path::new("Dockerfile")), DOCKER);
    assert_eq!(for_path(Path::new("go.mod")), GO);
}

#[test]
fn recognizes_extensions_without_allocating_or_requiring_lowercase() {
    assert_eq!(for_path(Path::new("src/main.RS")), RUST);
    assert_eq!(for_path(Path::new("types/index.D.TS")), TYPESCRIPT);
    assert_eq!(for_path(Path::new("assets/logo.SVG")), IMAGE);
    assert_eq!(for_path(Path::new("backup.TAR.GZ")), ARCHIVE);
}

#[test]
fn uses_language_brand_glyphs_instead_of_generic_symbols() {
    assert_eq!(for_path(Path::new("main.py")).glyph, "\u{ed1b}");
    assert_eq!(for_path(Path::new("main.js")).glyph, "\u{e781}");
    assert_eq!(for_path(Path::new("main.ts")).glyph, "\u{e8ca}");
    assert_eq!(for_path(Path::new("main.rs")).glyph, "\u{e7a8}");
    assert_eq!(for_path(Path::new("main.go")).glyph, "\u{e724}");
}

#[test]
fn recognizes_environment_variants_and_falls_back_for_unknown_files() {
    assert_eq!(for_path(Path::new(".env.local")), KEY);
    assert_eq!(for_path(Path::new(".ENV")), KEY);
    assert_eq!(for_path(Path::new("source.unknown")), FILE);
    assert_eq!(for_path(Path::new("LICENSE")), CERTIFICATE);
}

#[test]
fn every_icon_occupies_one_terminal_cell() {
    let icons = [
        FILE,
        CODE,
        RUST,
        PYTHON,
        JAVASCRIPT,
        TYPESCRIPT,
        HTML,
        CSS,
        SASS,
        LESS,
        REACT,
        VUE,
        ANGULAR,
        NODE,
        NPM,
        YARN,
        JAVA,
        PHP,
        SWIFT,
        GO,
        HASKELL,
        DART,
        R_PROJECT,
        RUBY,
        LUA,
        ELIXIR,
        C_LANGUAGE,
        CPP,
        C_SHARP,
        F_SHARP,
        KOTLIN,
        SCALA,
        CLOJURE,
        ERLANG,
        PERL,
        JULIA,
        ZIG,
        NIM,
        FORTRAN,
        COBOL,
        OCAML,
        PROLOG,
        RACKET,
        SOLIDITY,
        GRAPHQL,
        NIXOS,
        TERRAFORM,
        JSON,
        YAML,
        XML,
        POWERSHELL,
        LATEX,
        BASH,
        SHELL,
        MARKDOWN,
        GIT,
        DOCKER,
        DATABASE,
        CONFIG,
        PACKAGE,
        LOCK,
        KEY,
        IMAGE,
        AUDIO,
        VIDEO,
        ARCHIVE,
        PDF,
        WORD,
        SPREADSHEET,
        PRESENTATION,
        FONT,
        CERTIFICATE,
        BINARY,
    ];
    assert!(icons.iter().all(|icon| icon.glyph.width() == 1));
}