diff --git a/components/net/cookie.rs b/components/net/cookie.rs index cce566785d4..48b9fab41ed 100644 --- a/components/net/cookie.rs +++ b/components/net/cookie.rs @@ -96,7 +96,7 @@ impl Cookie { } // http://tools.ietf.org/html/rfc6265#section-5.1.4 - fn default_path(request_path: &str) -> &str { + pub fn default_path(request_path: &str) -> &str { // Step 2 if request_path.is_empty() || !request_path.starts_with("/") { return "/"; @@ -166,77 +166,3 @@ impl Cookie { return true; } } - -#[test] -fn test_domain_match() { - assert!(Cookie::domain_match("foo.com", "foo.com")); - assert!(Cookie::domain_match("bar.foo.com", "foo.com")); - assert!(Cookie::domain_match("baz.bar.foo.com", "foo.com")); - - assert!(!Cookie::domain_match("bar.foo.com", "bar.com")); - assert!(!Cookie::domain_match("bar.com", "baz.bar.com")); - assert!(!Cookie::domain_match("foo.com", "bar.com")); - - assert!(!Cookie::domain_match("bar.com", "bbar.com")); - assert!(Cookie::domain_match("235.132.2.3", "235.132.2.3")); - assert!(!Cookie::domain_match("235.132.2.3", "1.1.1.1")); - assert!(!Cookie::domain_match("235.132.2.3", ".2.3")); -} - -#[test] -fn test_default_path() { - assert!(&*Cookie::default_path("/foo/bar/baz/") == "/foo/bar/baz"); - assert!(&*Cookie::default_path("/foo/bar/baz") == "/foo/bar"); - assert!(&*Cookie::default_path("/foo/") == "/foo"); - assert!(&*Cookie::default_path("/foo") == "/"); - assert!(&*Cookie::default_path("/") == "/"); - assert!(&*Cookie::default_path("") == "/"); - assert!(&*Cookie::default_path("foo") == "/"); -} - -#[test] -fn fn_cookie_constructor() { - use net_traits::CookieSource; - - let url = &Url::parse("http://example.com/foo").unwrap(); - - let gov_url = &Url::parse("http://gov.ac/foo").unwrap(); - // cookie name/value test - assert!(cookie_rs::Cookie::parse(" baz ").is_err()); - assert!(cookie_rs::Cookie::parse(" = bar ").is_err()); - assert!(cookie_rs::Cookie::parse(" baz = ").is_ok()); - - // cookie domains test - let cookie = cookie_rs::Cookie::parse(" baz = bar; Domain = ").unwrap(); - assert!(Cookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_some()); - let cookie = Cookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap(); - assert!(&**cookie.cookie.domain.as_ref().unwrap() == "example.com"); - - // cookie public domains test - let cookie = cookie_rs::Cookie::parse(" baz = bar; Domain = gov.ac").unwrap(); - assert!(Cookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_none()); - assert!(Cookie::new_wrapped(cookie, gov_url, CookieSource::HTTP).is_some()); - - // cookie domain matching test - let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Domain = bazample.com").unwrap(); - assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none()); - - let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap(); - assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some()); - - let cookie = cookie_rs::Cookie::parse(" baz = bar ; HttpOnly").unwrap(); - assert!(Cookie::new_wrapped(cookie, url, CookieSource::NonHTTP).is_none()); - - let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap(); - let cookie = Cookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap(); - assert!(cookie.cookie.value.as_slice() == "bar"); - assert!(cookie.cookie.name.as_slice() == "baz"); - assert!(cookie.cookie.secure); - assert!(cookie.cookie.path.as_ref().unwrap().as_slice() == "/foo/bar/"); - assert!(cookie.cookie.domain.as_ref().unwrap().as_slice() == "example.com"); - assert!(cookie.host_only); - - let u = &Url::parse("http://example.com/foobar").unwrap(); - let cookie = cookie_rs::Cookie::parse("foobar=value;path=/").unwrap(); - assert!(Cookie::new_wrapped(cookie, u, CookieSource::HTTP).is_some()); -} diff --git a/components/net/cookie_storage.rs b/components/net/cookie_storage.rs index 6af661ee60c..80c69a45809 100644 --- a/components/net/cookie_storage.rs +++ b/components/net/cookie_storage.rs @@ -68,7 +68,7 @@ impl CookieStorage { self.cookies.push(cookie); } - fn cookie_comparator(a: &Cookie, b: &Cookie) -> Ordering { + pub fn cookie_comparator(a: &Cookie, b: &Cookie) -> Ordering { let a_path_len = a.cookie.path.as_ref().map(|p| p.len()).unwrap_or(0); let b_path_len = b.cookie.path.as_ref().map(|p| p.len()).unwrap_or(0); match a_path_len.cmp(&b_path_len) { @@ -115,21 +115,3 @@ impl CookieStorage { } } } - -#[test] -fn test_sort_order() { - use cookie_rs; - let url = &Url::parse("http://example.com/foo").unwrap(); - let a_wrapped = cookie_rs::Cookie::parse("baz=bar; Path=/foo/bar/").unwrap(); - let a = Cookie::new_wrapped(a_wrapped.clone(), url, CookieSource::HTTP).unwrap(); - let a_prime = Cookie::new_wrapped(a_wrapped, url, CookieSource::HTTP).unwrap(); - let b = cookie_rs::Cookie::parse("baz=bar;Path=/foo/bar/baz/").unwrap(); - let b = Cookie::new_wrapped(b, url, CookieSource::HTTP).unwrap(); - - assert!(b.cookie.path.as_ref().unwrap().len() > a.cookie.path.as_ref().unwrap().len()); - assert!(CookieStorage::cookie_comparator(&a, &b) == Ordering::Greater); - assert!(CookieStorage::cookie_comparator(&b, &a) == Ordering::Less); - assert!(CookieStorage::cookie_comparator(&a, &a_prime) == Ordering::Less); - assert!(CookieStorage::cookie_comparator(&a_prime, &a) == Ordering::Greater); - assert!(CookieStorage::cookie_comparator(&a, &a) == Ordering::Equal); -} diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 4e01bc323ac..59afb2dcf66 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -925,8 +925,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "unit_tests" version = "0.0.1" dependencies = [ + "cookie 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", "geom 0.1.0 (git+https://github.com/servo/rust-geom)", "gfx 0.0.1", + "net 0.0.1", + "net_traits 0.0.1", + "url 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", "util 0.0.1", ] diff --git a/tests/unit/Cargo.toml b/tests/unit/Cargo.toml index a6b96b54cef..7b995ce669a 100644 --- a/tests/unit/Cargo.toml +++ b/tests/unit/Cargo.toml @@ -14,5 +14,15 @@ path = "../../components/util" [dependencies.gfx] path = "../../components/gfx" +[dependencies.net] +path = "../../components/net" + +[dependencies.net_traits] +path = "../../components/net_traits" + [dependencies.geom] git = "https://github.com/servo/rust-geom" + +[dependencies] +cookie = "*" +url = "*" diff --git a/tests/unit/lib.rs b/tests/unit/lib.rs index 8efc6cc894b..de3799ef1e6 100644 --- a/tests/unit/lib.rs +++ b/tests/unit/lib.rs @@ -1,6 +1,10 @@ extern crate geom; extern crate gfx; +extern crate net; +extern crate net_traits; extern crate util; -#[cfg(test)] #[path="util/mod.rs"] mod util_tests; #[cfg(test)] #[path="gfx/mod.rs"] mod gfx_tests; +#[cfg(test)] #[path="net/mod.rs"] mod net_tests; +#[cfg(test)] #[path="util/mod.rs"] mod util_tests; + diff --git a/tests/unit/net/cookie.rs b/tests/unit/net/cookie.rs new file mode 100644 index 00000000000..d76a0cda253 --- /dev/null +++ b/tests/unit/net/cookie.rs @@ -0,0 +1,101 @@ +extern crate "cookie" as cookie_rs; +extern crate url; + +use net::cookie::Cookie; +use net::cookie_storage::CookieStorage; +use net_traits::CookieSource; +use self::url::Url; + + +#[test] +fn test_domain_match() { + assert!(Cookie::domain_match("foo.com", "foo.com")); + assert!(Cookie::domain_match("bar.foo.com", "foo.com")); + assert!(Cookie::domain_match("baz.bar.foo.com", "foo.com")); + + assert!(!Cookie::domain_match("bar.foo.com", "bar.com")); + assert!(!Cookie::domain_match("bar.com", "baz.bar.com")); + assert!(!Cookie::domain_match("foo.com", "bar.com")); + + assert!(!Cookie::domain_match("bar.com", "bbar.com")); + assert!(Cookie::domain_match("235.132.2.3", "235.132.2.3")); + assert!(!Cookie::domain_match("235.132.2.3", "1.1.1.1")); + assert!(!Cookie::domain_match("235.132.2.3", ".2.3")); +} + +#[test] +fn test_default_path() { + assert!(&*Cookie::default_path("/foo/bar/baz/") == "/foo/bar/baz"); + assert!(&*Cookie::default_path("/foo/bar/baz") == "/foo/bar"); + assert!(&*Cookie::default_path("/foo/") == "/foo"); + assert!(&*Cookie::default_path("/foo") == "/"); + assert!(&*Cookie::default_path("/") == "/"); + assert!(&*Cookie::default_path("") == "/"); + assert!(&*Cookie::default_path("foo") == "/"); +} + +#[test] +fn fn_cookie_constructor() { + use net_traits::CookieSource; + + let url = &Url::parse("http://example.com/foo").unwrap(); + + let gov_url = &Url::parse("http://gov.ac/foo").unwrap(); + // cookie name/value test + assert!(cookie_rs::Cookie::parse(" baz ").is_err()); + assert!(cookie_rs::Cookie::parse(" = bar ").is_err()); + assert!(cookie_rs::Cookie::parse(" baz = ").is_ok()); + + // cookie domains test + let cookie = cookie_rs::Cookie::parse(" baz = bar; Domain = ").unwrap(); + assert!(Cookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_some()); + let cookie = Cookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap(); + assert!(&**cookie.cookie.domain.as_ref().unwrap() == "example.com"); + + // cookie public domains test + let cookie = cookie_rs::Cookie::parse(" baz = bar; Domain = gov.ac").unwrap(); + assert!(Cookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_none()); + assert!(Cookie::new_wrapped(cookie, gov_url, CookieSource::HTTP).is_some()); + + // cookie domain matching test + let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Domain = bazample.com").unwrap(); + assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none()); + + let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap(); + assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some()); + + let cookie = cookie_rs::Cookie::parse(" baz = bar ; HttpOnly").unwrap(); + assert!(Cookie::new_wrapped(cookie, url, CookieSource::NonHTTP).is_none()); + + let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap(); + let cookie = Cookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap(); + assert!(cookie.cookie.value == "bar"); + assert!(cookie.cookie.name == "baz"); + assert!(cookie.cookie.secure); + assert!(&cookie.cookie.path.as_ref().unwrap()[..] == "/foo/bar/"); + assert!(&cookie.cookie.domain.as_ref().unwrap()[..] == "example.com"); + assert!(cookie.host_only); + + let u = &Url::parse("http://example.com/foobar").unwrap(); + let cookie = cookie_rs::Cookie::parse("foobar=value;path=/").unwrap(); + assert!(Cookie::new_wrapped(cookie, u, CookieSource::HTTP).is_some()); +} + +#[test] +fn test_sort_order() { + use std::cmp::Ordering; + + let url = &Url::parse("http://example.com/foo").unwrap(); + let a_wrapped = cookie_rs::Cookie::parse("baz=bar; Path=/foo/bar/").unwrap(); + let a = Cookie::new_wrapped(a_wrapped.clone(), url, CookieSource::HTTP).unwrap(); + let a_prime = Cookie::new_wrapped(a_wrapped, url, CookieSource::HTTP).unwrap(); + let b = cookie_rs::Cookie::parse("baz=bar;Path=/foo/bar/baz/").unwrap(); + let b = Cookie::new_wrapped(b, url, CookieSource::HTTP).unwrap(); + + assert!(b.cookie.path.as_ref().unwrap().len() > a.cookie.path.as_ref().unwrap().len()); + assert!(CookieStorage::cookie_comparator(&a, &b) == Ordering::Greater); + assert!(CookieStorage::cookie_comparator(&b, &a) == Ordering::Less); + assert!(CookieStorage::cookie_comparator(&a, &a_prime) == Ordering::Less); + assert!(CookieStorage::cookie_comparator(&a_prime, &a) == Ordering::Greater); + assert!(CookieStorage::cookie_comparator(&a, &a) == Ordering::Equal); +} diff --git a/tests/unit/net/mod.rs b/tests/unit/net/mod.rs new file mode 100644 index 00000000000..72388d19f18 --- /dev/null +++ b/tests/unit/net/mod.rs @@ -0,0 +1 @@ +mod cookie;