| mod util; |
| |
| use crate::util::*; |
| use semver::{BuildMetadata, Prerelease, Version}; |
| |
| #[test] |
| fn test_parse() { |
| let err = version_err(""); |
| assert_to_string( |
| err, |
| "unexpected end of input while parsing major version number", |
| ); |
| |
| let err = version_err(" "); |
| assert_to_string( |
| err, |
| "unexpected character ' ' while parsing major version number", |
| ); |
| |
| let err = version_err("1"); |
| assert_to_string( |
| err, |
| "unexpected end of input while parsing major version number", |
| ); |
| |
| let err = version_err("1.2"); |
| assert_to_string( |
| err, |
| "unexpected end of input while parsing minor version number", |
| ); |
| |
| let err = version_err("1.2.3-"); |
| assert_to_string(err, "empty identifier segment in pre-release identifier"); |
| |
| let err = version_err("a.b.c"); |
| assert_to_string( |
| err, |
| "unexpected character 'a' while parsing major version number", |
| ); |
| |
| let err = version_err("1.2.3 abc"); |
| assert_to_string(err, "unexpected character ' ' after patch version number"); |
| |
| let err = version_err("1.2.3-01"); |
| assert_to_string(err, "invalid leading zero in pre-release identifier"); |
| |
| let parsed = version("1.2.3"); |
| let expected = Version::new(1, 2, 3); |
| assert_eq!(parsed, expected); |
| let expected = Version { |
| major: 1, |
| minor: 2, |
| patch: 3, |
| pre: Prerelease::EMPTY, |
| build: BuildMetadata::EMPTY, |
| }; |
| assert_eq!(parsed, expected); |
| |
| let parsed = version("1.2.3-alpha1"); |
| let expected = Version { |
| major: 1, |
| minor: 2, |
| patch: 3, |
| pre: prerelease("alpha1"), |
| build: BuildMetadata::EMPTY, |
| }; |
| assert_eq!(parsed, expected); |
| |
| let parsed = version("1.2.3+build5"); |
| let expected = Version { |
| major: 1, |
| minor: 2, |
| patch: 3, |
| pre: Prerelease::EMPTY, |
| build: build_metadata("build5"), |
| }; |
| assert_eq!(parsed, expected); |
| |
| let parsed = version("1.2.3+5build"); |
| let expected = Version { |
| major: 1, |
| minor: 2, |
| patch: 3, |
| pre: Prerelease::EMPTY, |
| build: build_metadata("5build"), |
| }; |
| assert_eq!(parsed, expected); |
| |
| let parsed = version("1.2.3-alpha1+build5"); |
| let expected = Version { |
| major: 1, |
| minor: 2, |
| patch: 3, |
| pre: prerelease("alpha1"), |
| build: build_metadata("build5"), |
| }; |
| assert_eq!(parsed, expected); |
| |
| let parsed = version("1.2.3-1.alpha1.9+build5.7.3aedf"); |
| let expected = Version { |
| major: 1, |
| minor: 2, |
| patch: 3, |
| pre: prerelease("1.alpha1.9"), |
| build: build_metadata("build5.7.3aedf"), |
| }; |
| assert_eq!(parsed, expected); |
| |
| let parsed = version("1.2.3-0a.alpha1.9+05build.7.3aedf"); |
| let expected = Version { |
| major: 1, |
| minor: 2, |
| patch: 3, |
| pre: prerelease("0a.alpha1.9"), |
| build: build_metadata("05build.7.3aedf"), |
| }; |
| assert_eq!(parsed, expected); |
| |
| let parsed = version("0.4.0-beta.1+0851523"); |
| let expected = Version { |
| major: 0, |
| minor: 4, |
| patch: 0, |
| pre: prerelease("beta.1"), |
| build: build_metadata("0851523"), |
| }; |
| assert_eq!(parsed, expected); |
| |
| // for https://nodejs.org/dist/index.json, where some older npm versions are "1.1.0-beta-10" |
| let parsed = version("1.1.0-beta-10"); |
| let expected = Version { |
| major: 1, |
| minor: 1, |
| patch: 0, |
| pre: prerelease("beta-10"), |
| build: BuildMetadata::EMPTY, |
| }; |
| assert_eq!(parsed, expected); |
| } |
| |
| #[test] |
| fn test_eq() { |
| assert_eq!(version("1.2.3"), version("1.2.3")); |
| assert_eq!(version("1.2.3-alpha1"), version("1.2.3-alpha1")); |
| assert_eq!(version("1.2.3+build.42"), version("1.2.3+build.42")); |
| assert_eq!(version("1.2.3-alpha1+42"), version("1.2.3-alpha1+42")); |
| } |
| |
| #[test] |
| fn test_ne() { |
| assert_ne!(version("0.0.0"), version("0.0.1")); |
| assert_ne!(version("0.0.0"), version("0.1.0")); |
| assert_ne!(version("0.0.0"), version("1.0.0")); |
| assert_ne!(version("1.2.3-alpha"), version("1.2.3-beta")); |
| assert_ne!(version("1.2.3+23"), version("1.2.3+42")); |
| } |
| |
| #[test] |
| fn test_display() { |
| assert_to_string(version("1.2.3"), "1.2.3"); |
| assert_to_string(version("1.2.3-alpha1"), "1.2.3-alpha1"); |
| assert_to_string(version("1.2.3+build.42"), "1.2.3+build.42"); |
| assert_to_string(version("1.2.3-alpha1+42"), "1.2.3-alpha1+42"); |
| } |
| |
| #[test] |
| fn test_lt() { |
| assert!(version("0.0.0") < version("1.2.3-alpha2")); |
| assert!(version("1.0.0") < version("1.2.3-alpha2")); |
| assert!(version("1.2.0") < version("1.2.3-alpha2")); |
| assert!(version("1.2.3-alpha1") < version("1.2.3")); |
| assert!(version("1.2.3-alpha1") < version("1.2.3-alpha2")); |
| assert!(!(version("1.2.3-alpha2") < version("1.2.3-alpha2"))); |
| assert!(version("1.2.3+23") < version("1.2.3+42")); |
| } |
| |
| #[test] |
| fn test_le() { |
| assert!(version("0.0.0") <= version("1.2.3-alpha2")); |
| assert!(version("1.0.0") <= version("1.2.3-alpha2")); |
| assert!(version("1.2.0") <= version("1.2.3-alpha2")); |
| assert!(version("1.2.3-alpha1") <= version("1.2.3-alpha2")); |
| assert!(version("1.2.3-alpha2") <= version("1.2.3-alpha2")); |
| assert!(version("1.2.3+23") <= version("1.2.3+42")); |
| } |
| |
| #[test] |
| fn test_gt() { |
| assert!(version("1.2.3-alpha2") > version("0.0.0")); |
| assert!(version("1.2.3-alpha2") > version("1.0.0")); |
| assert!(version("1.2.3-alpha2") > version("1.2.0")); |
| assert!(version("1.2.3-alpha2") > version("1.2.3-alpha1")); |
| assert!(version("1.2.3") > version("1.2.3-alpha2")); |
| assert!(!(version("1.2.3-alpha2") > version("1.2.3-alpha2"))); |
| assert!(!(version("1.2.3+23") > version("1.2.3+42"))); |
| } |
| |
| #[test] |
| fn test_ge() { |
| assert!(version("1.2.3-alpha2") >= version("0.0.0")); |
| assert!(version("1.2.3-alpha2") >= version("1.0.0")); |
| assert!(version("1.2.3-alpha2") >= version("1.2.0")); |
| assert!(version("1.2.3-alpha2") >= version("1.2.3-alpha1")); |
| assert!(version("1.2.3-alpha2") >= version("1.2.3-alpha2")); |
| assert!(!(version("1.2.3+23") >= version("1.2.3+42"))); |
| } |
| |
| #[test] |
| fn test_spec_order() { |
| let vs = [ |
| "1.0.0-alpha", |
| "1.0.0-alpha.1", |
| "1.0.0-alpha.beta", |
| "1.0.0-beta", |
| "1.0.0-beta.2", |
| "1.0.0-beta.11", |
| "1.0.0-rc.1", |
| "1.0.0", |
| ]; |
| let mut i = 1; |
| while i < vs.len() { |
| let a = version(vs[i - 1]); |
| let b = version(vs[i]); |
| assert!(a < b, "nope {:?} < {:?}", a, b); |
| i += 1; |
| } |
| } |
| |
| #[test] |
| fn test_align() { |
| let version = version("1.2.3-rc1"); |
| assert_eq!("1.2.3-rc1 ", format!("{:20}", version)); |
| assert_eq!("*****1.2.3-rc1******", format!("{:*^20}", version)); |
| assert_eq!(" 1.2.3-rc1", format!("{:>20}", version)); |
| } |