pray-core 1.9.2

Core library for Prayfile, the package manager for the language placed before inference
Documentation
use pray_core::manifest::parse_manifest;
use pray_core::package_spec::parse_package_spec;
use proptest::prelude::*;

proptest! {
    #[test]
    fn parse_manifest_does_not_panic(input in "\\PC*") {
        let _ = parse_manifest(&input);
    }

    #[test]
    fn parse_package_spec_does_not_panic(input in "\\PC*") {
        let _ = parse_package_spec(&input);
    }

    #[test]
    fn parse_manifest_lossy_bytes_do_not_panic(bytes in prop::collection::vec(any::<u8>(), 0..512)) {
        let input = String::from_utf8_lossy(&bytes);
        let _ = parse_manifest(&input);
    }

    #[test]
    fn parse_package_spec_lossy_bytes_do_not_panic(
        bytes in prop::collection::vec(any::<u8>(), 0..512)
    ) {
        let input = String::from_utf8_lossy(&bytes);
        let _ = parse_package_spec(&input);
    }
}

#[test]
fn known_valid_manifest_still_parses_under_fuzz_suite() {
    let manifest = parse_manifest(
        r#"
prayfile "1"
target :tool_a do
  output "INSTRUCTIONS.md"
end
pray "sample/base", "~> 1.0"
"#,
    )
    .expect("valid manifest");
    assert_eq!(manifest.packages[0].name, "sample/base");
}

#[test]
fn known_valid_package_spec_still_parses_under_fuzz_suite() {
    let package = parse_package_spec(
        r#"
Package::Specification.new do |spec|
  spec.name = "sample/base"
  spec.version = "1.0.0"
  spec.files = ["README.md"]
end
"#,
    )
    .expect("valid package spec");
    assert_eq!(package.name, "sample/base");
}