]> git.proxmox.com Git - rustc.git/blobdiff - vendor/semver/tests/diesel.rs
New upstream version 1.52.1+dfsg1
[rustc.git] / vendor / semver / tests / diesel.rs
diff --git a/vendor/semver/tests/diesel.rs b/vendor/semver/tests/diesel.rs
new file mode 100644 (file)
index 0000000..c07cc78
--- /dev/null
@@ -0,0 +1,209 @@
+#![cfg(feature = "diesel")]\r
+\r
+#[macro_use]\r
+extern crate diesel;\r
+extern crate semver;\r
+\r
+use diesel::connection::SimpleConnection;\r
+use diesel::sql_types::Text;\r
+use diesel::*;\r
+use semver::{Version, VersionReq};\r
+\r
+table! {\r
+    versions (name) {\r
+        name -> Text,\r
+        vers -> Text,\r
+    }\r
+}\r
+\r
+table! {\r
+    version_reqs (name) {\r
+        name -> Text,\r
+        req -> Text,\r
+    }\r
+}\r
+\r
+fn connection() -> SqliteConnection {\r
+    let conn = SqliteConnection::establish(":memory:").unwrap();\r
+    conn.batch_execute(\r
+        "\r
+        CREATE TABLE versions (name TEXT PRIMARY KEY NOT NULL, vers TEXT NOT NULL);\r
+        CREATE TABLE version_reqs (name TEXT PRIMARY KEY NOT NULL, req TEXT NOT NULL);\r
+    ",\r
+    )\r
+    .unwrap();\r
+    conn\r
+}\r
+\r
+const VERSIONS_TO_TEST: &[&str] = &[\r
+    "0.0.1",\r
+    "0.1.0",\r
+    "1.0.0",\r
+    "1.0.0-beta1",\r
+    "1.0.0-beta.1",\r
+    "1.0.0+129384712983",\r
+    "1.0.0-beta.1+1234.5678",\r
+];\r
+\r
+#[test]\r
+fn version_round_trips() {\r
+    let conn = connection();\r
+    for version in VERSIONS_TO_TEST {\r
+        let version = version.parse::<Version>().unwrap();\r
+        let result = select(version.as_sql::<Text>()).get_result(&conn);\r
+        assert_eq!(Ok(version), result);\r
+    }\r
+}\r
+\r
+#[test]\r
+fn version_inserts_and_loads() {\r
+    use self::versions::dsl::*;\r
+\r
+    let conn = connection();\r
+    let semver_versions = VERSIONS_TO_TEST\r
+        .iter()\r
+        .enumerate()\r
+        .map(|(i, v)| (format!("Version {}", i), v.parse::<Version>().unwrap()))\r
+        .collect::<Vec<_>>();\r
+\r
+    let new_versions = semver_versions\r
+        .iter()\r
+        .map(|&(ref n, ref v)| (name.eq(n), vers.eq(v)))\r
+        .collect::<Vec<_>>();\r
+    let inserted_rows = insert_into(versions).values(&new_versions).execute(&conn);\r
+    assert_eq!(Ok(VERSIONS_TO_TEST.len()), inserted_rows);\r
+\r
+    let actual_data = versions.load(&conn);\r
+    assert_eq!(Ok(semver_versions.clone()), actual_data);\r
+}\r
+\r
+#[test]\r
+fn version_inserts_and_loads_on_struct() {\r
+    #[derive(Debug, PartialEq, Queryable, Insertable)]\r
+    #[table_name = "versions"]\r
+    struct Versioned {\r
+        name: String,\r
+        vers: Version,\r
+    }\r
+\r
+    let conn = connection();\r
+    let semver_versions = VERSIONS_TO_TEST\r
+        .iter()\r
+        .enumerate()\r
+        .map(|(i, v)| Versioned {\r
+            name: format!("Version {}", i),\r
+            vers: v.parse::<Version>().unwrap(),\r
+        })\r
+        .collect::<Vec<_>>();\r
+\r
+    let inserted_rows = insert_into(versions::table)\r
+        .values(&semver_versions)\r
+        .execute(&conn);\r
+    assert_eq!(Ok(VERSIONS_TO_TEST.len()), inserted_rows);\r
+\r
+    let actual_data = versions::table.load(&conn);\r
+    assert_eq!(Ok(semver_versions), actual_data);\r
+}\r
+\r
+const VERSION_REQS_TO_TEST: &[&str] = &[\r
+    "^1.0.0",\r
+    "= 1.0.0",\r
+    "= 0.9.0",\r
+    "= 0.1.0-beta2.a",\r
+    ">= 1.0.0",\r
+    ">= 2.1.0-alpha2",\r
+    "< 1.0.0",\r
+    "<= 2.1.0-alpha2",\r
+    "^ 1.2.3+meta",\r
+    "= 1.2.3+meta",\r
+    "> 1.2.3+meta",\r
+    ">= 1.2.3+meta",\r
+    "< 1.2.3+meta",\r
+    "<= 1.2.3+meta",\r
+    "~ 1.2.3+meta",\r
+    "> 0.0.9, <= 2.5.3",\r
+    "0.3.0, 0.4.0",\r
+    "<= 0.2.0, >= 0.5.0",\r
+    "0.1.0, 0.1.4, 0.1.6",\r
+    ">=0.5.1-alpha3, <0.6",\r
+    "~1",\r
+    "~1.2",\r
+    "~1.2.2",\r
+    "~1.2.3-beta.2",\r
+    "^1",\r
+    "^1.1",\r
+    "^1.1.2",\r
+    "^0.1.2",\r
+    "^0.5.1-alpha3",\r
+    "",\r
+    "*",\r
+    "x",\r
+    "1.*",\r
+];\r
+\r
+#[test]\r
+fn version_req_round_trips() {\r
+    let conn = connection();\r
+    for version_req in VERSION_REQS_TO_TEST {\r
+        let version_req = version_req.parse::<VersionReq>().unwrap();\r
+        let result = select(version_req.as_sql::<Text>()).get_result(&conn);\r
+        assert_eq!(Ok(version_req), result);\r
+    }\r
+}\r
+\r
+#[test]\r
+fn version_req_inserts_and_loads() {\r
+    use self::version_reqs::dsl::*;\r
+\r
+    let conn = connection();\r
+    let semver_version_reqs = VERSION_REQS_TO_TEST\r
+        .iter()\r
+        .enumerate()\r
+        .map(|(i, v)| {\r
+            (\r
+                format!("VersionReq {}", i),\r
+                v.parse::<VersionReq>().unwrap(),\r
+            )\r
+        })\r
+        .collect::<Vec<_>>();\r
+\r
+    let new_version_reqs = semver_version_reqs\r
+        .iter()\r
+        .map(|&(ref n, ref v)| (name.eq(n), req.eq(v)))\r
+        .collect::<Vec<_>>();\r
+    let inserted_rows = insert_into(version_reqs)\r
+        .values(&new_version_reqs)\r
+        .execute(&conn);\r
+    assert_eq!(Ok(VERSION_REQS_TO_TEST.len()), inserted_rows);\r
+\r
+    let actual_data = version_reqs.load(&conn);\r
+    assert_eq!(Ok(semver_version_reqs.clone()), actual_data);\r
+}\r
+\r
+#[test]\r
+fn version_req_inserts_and_loads_on_struct() {\r
+    #[derive(Debug, PartialEq, Queryable, Insertable)]\r
+    #[table_name = "version_reqs"]\r
+    struct VersionReqed {\r
+        name: String,\r
+        req: VersionReq,\r
+    }\r
+\r
+    let conn = connection();\r
+    let semver_version_reqs = VERSION_REQS_TO_TEST\r
+        .iter()\r
+        .enumerate()\r
+        .map(|(i, v)| VersionReqed {\r
+            name: format!("VersionReq {}", i),\r
+            req: v.parse::<VersionReq>().unwrap(),\r
+        })\r
+        .collect::<Vec<_>>();\r
+\r
+    let inserted_rows = insert_into(version_reqs::table)\r
+        .values(&semver_version_reqs)\r
+        .execute(&conn);\r
+    assert_eq!(Ok(VERSION_REQS_TO_TEST.len()), inserted_rows);\r
+\r
+    let actual_data = version_reqs::table.load(&conn);\r
+    assert_eq!(Ok(semver_version_reqs), actual_data);\r
+}\r