summaryrefslogtreecommitdiff
path: root/semver/tests
diff options
context:
space:
mode:
Diffstat (limited to 'semver/tests')
-rw-r--r--semver/tests/deprecation.rs22
-rw-r--r--semver/tests/regression.rs25
-rw-r--r--semver/tests/serde.rs90
3 files changed, 137 insertions, 0 deletions
diff --git a/semver/tests/deprecation.rs b/semver/tests/deprecation.rs
new file mode 100644
index 0000000..a5f533a
--- /dev/null
+++ b/semver/tests/deprecation.rs
@@ -0,0 +1,22 @@
+extern crate semver;
+
+#[test]
+fn test_regressions() {
+ use semver::VersionReq;
+ use semver::ReqParseError;
+
+ let versions = vec![
+ (".*", VersionReq::any()),
+ ("0.1.0.", VersionReq::parse("0.1.0").unwrap()),
+ ("0.3.1.3", VersionReq::parse("0.3.13").unwrap()),
+ ("0.2*", VersionReq::parse("0.2.*").unwrap()),
+ ("*.0", VersionReq::any()),
+ ];
+
+ for (version, requirement) in versions.into_iter() {
+ let parsed = VersionReq::parse(version);
+ let error = parsed.err().unwrap();
+
+ assert_eq!(ReqParseError::DeprecatedVersionRequirement(requirement), error);
+ }
+}
diff --git a/semver/tests/regression.rs b/semver/tests/regression.rs
new file mode 100644
index 0000000..ef568a7
--- /dev/null
+++ b/semver/tests/regression.rs
@@ -0,0 +1,25 @@
+extern crate semver;
+extern crate crates_index;
+extern crate tempdir;
+
+// This test checks to see if every existing crate parses successfully. Important to not break the
+// Rust universe!
+
+#[cfg(feature = "ci")]
+#[test]
+fn test_regressions() {
+ use tempdir::TempDir;
+ use crates_index::Index;
+ use semver::Version;
+
+ let dir = TempDir::new("semver").unwrap();
+ let index = Index::new(dir.into_path());
+ index.clone().unwrap();
+
+ for krate in index.crates() {
+ for version in krate.versions() {
+ let v = version.version();
+ assert!(Version::parse(v).is_ok(), "failed: {} ({})", version.name(), v);
+ }
+ }
+}
diff --git a/semver/tests/serde.rs b/semver/tests/serde.rs
new file mode 100644
index 0000000..bcb9264
--- /dev/null
+++ b/semver/tests/serde.rs
@@ -0,0 +1,90 @@
+#![cfg(feature = "serde")]
+
+#[macro_use]
+extern crate serde_derive;
+
+extern crate semver;
+extern crate serde_json;
+
+use semver::{Identifier, Version, VersionReq};
+
+#[derive(Serialize, Deserialize, PartialEq, Debug)]
+struct Identified {
+ name: String,
+ identifier: Identifier,
+}
+
+#[derive(Serialize, Deserialize, PartialEq, Debug)]
+struct Versioned {
+ name: String,
+ vers: Version,
+}
+
+#[test]
+fn serialize_identifier() {
+ let id = Identified {
+ name: "serde".to_owned(),
+ identifier: Identifier::Numeric(100),
+ };
+ let j = serde_json::to_string(&id).unwrap();
+ assert_eq!(j, r#"{"name":"serde","identifier":100}"#);
+
+ let id = Identified {
+ name: "serde".to_owned(),
+ identifier: Identifier::AlphaNumeric("b100".to_owned()),
+ };
+ let j = serde_json::to_string(&id).unwrap();
+ assert_eq!(j, r#"{"name":"serde","identifier":"b100"}"#);
+}
+
+#[test]
+fn deserialize_identifier() {
+ let j = r#"{"name":"serde","identifier":100}"#;
+ let id = serde_json::from_str::<Identified>(j).unwrap();
+ let expected = Identified {
+ name: "serde".to_owned(),
+ identifier: Identifier::Numeric(100),
+ };
+ assert_eq!(id, expected);
+
+ let j = r#"{"name":"serde","identifier":"b100"}"#;
+ let id = serde_json::from_str::<Identified>(j).unwrap();
+ let expected = Identified {
+ name: "serde".to_owned(),
+ identifier: Identifier::AlphaNumeric("b100".to_owned()),
+ };
+ assert_eq!(id, expected);
+}
+
+#[test]
+fn serialize_version() {
+ let v = Versioned {
+ name: "serde".to_owned(),
+ vers: Version::parse("1.0.0").unwrap(),
+ };
+ let j = serde_json::to_string(&v).unwrap();
+ assert_eq!(j, r#"{"name":"serde","vers":"1.0.0"}"#);
+}
+
+#[test]
+fn deserialize_version() {
+ let j = r#"{"name":"serde","vers":"1.0.0"}"#;
+ let v = serde_json::from_str::<Versioned>(j).unwrap();
+ let expected = Versioned {
+ name: "serde".to_owned(),
+ vers: Version::parse("1.0.0").unwrap(),
+ };
+ assert_eq!(v, expected);
+}
+
+#[test]
+fn serialize_versionreq() {
+ let v = VersionReq::exact(&Version::parse("1.0.0").unwrap());
+
+ assert_eq!(serde_json::to_string(&v).unwrap(), r#""= 1.0.0""#);
+}
+
+#[test]
+fn deserialize_versionreq() {
+ assert_eq!("1.0.0".parse::<VersionReq>().unwrap(), serde_json::from_str(r#""1.0.0""#).unwrap());
+}