mod common;
#[tokio::test]
async fn two_browsers_independent() {
let mut b1 = common::launch_browser().await;
let mut b2 = common::launch_browser().await;
let p1 = b1.new_page("about:blank").await.unwrap();
let p2 = b2.new_page("about:blank").await.unwrap();
let _: String = p1
.evaluate("document.title = 'B1'; 'done'")
.await
.unwrap()
.into_value()
.unwrap();
let _: String = p2
.evaluate("document.title = 'B2'; 'done'")
.await
.unwrap()
.into_value()
.unwrap();
let t1: String = p1
.evaluate("document.title")
.await
.unwrap()
.into_value()
.unwrap();
let t2: String = p2
.evaluate("document.title")
.await
.unwrap()
.into_value()
.unwrap();
assert_eq!(t1, "B1");
assert_eq!(t2, "B2");
b1.close().await.unwrap();
b2.close().await.unwrap();
}
#[tokio::test]
async fn sequential_pages_same_browser_isolated() {
let mut browser = common::launch_browser().await;
let p1 = browser.new_page("about:blank").await.unwrap();
let _: String = p1
.evaluate("document.title = 'First'; 'done'")
.await
.unwrap()
.into_value()
.unwrap();
let p2 = browser.new_page("about:blank").await.unwrap();
let _: String = p2
.evaluate("document.title = 'Second'; 'done'")
.await
.unwrap()
.into_value()
.unwrap();
let t1: String = p1
.evaluate("document.title")
.await
.unwrap()
.into_value()
.unwrap();
let t2: String = p2
.evaluate("document.title")
.await
.unwrap()
.into_value()
.unwrap();
assert_eq!(t1, "First");
assert_eq!(t2, "Second");
browser.close().await.unwrap();
}
#[tokio::test]
async fn concurrent_evaluates_on_same_page() {
let mut browser = common::launch_browser().await;
let page = browser.new_page("about:blank").await.unwrap();
let f1 = page.evaluate("1 + 1");
let f2 = page.evaluate("2 + 2");
let f3 = page.evaluate("3 + 3");
let (r1, r2, r3) = tokio::join!(f1, f2, f3);
assert_eq!(r1.unwrap().into_value::<i32>().unwrap(), 2);
assert_eq!(r2.unwrap().into_value::<i32>().unwrap(), 4);
assert_eq!(r3.unwrap().into_value::<i32>().unwrap(), 6);
browser.close().await.unwrap();
}