Import tokio-test v0.4.0

Bug: 179649848
Test: atest
Change-Id: I5e69ddc88c6f8d6d8a54927eb21736c9589d0f68
diff --git a/tests/macros.rs b/tests/macros.rs
new file mode 100644
index 0000000..2183fc8
--- /dev/null
+++ b/tests/macros.rs
@@ -0,0 +1,107 @@
+#![warn(rust_2018_idioms)]
+
+use std::task::Poll;
+use tokio_test::{
+    assert_pending, assert_ready, assert_ready_eq, assert_ready_err, assert_ready_ok,
+};
+
+fn ready() -> Poll<()> {
+    Poll::Ready(())
+}
+
+fn ready_ok() -> Poll<Result<(), ()>> {
+    Poll::Ready(Ok(()))
+}
+
+fn ready_err() -> Poll<Result<(), ()>> {
+    Poll::Ready(Err(()))
+}
+
+fn pending() -> Poll<()> {
+    Poll::Pending
+}
+
+#[derive(Debug)]
+enum Test {
+    Data,
+}
+
+#[test]
+fn assert_ready() {
+    let poll = ready();
+    assert_ready!(poll);
+    assert_ready!(poll, "some message");
+    assert_ready!(poll, "{:?}", ());
+    assert_ready!(poll, "{:?}", Test::Data);
+}
+
+#[test]
+#[should_panic]
+fn assert_ready_on_pending() {
+    let poll = pending();
+    assert_ready!(poll);
+}
+
+#[test]
+fn assert_pending() {
+    let poll = pending();
+    assert_pending!(poll);
+    assert_pending!(poll, "some message");
+    assert_pending!(poll, "{:?}", ());
+    assert_pending!(poll, "{:?}", Test::Data);
+}
+
+#[test]
+#[should_panic]
+fn assert_pending_on_ready() {
+    let poll = ready();
+    assert_pending!(poll);
+}
+
+#[test]
+fn assert_ready_ok() {
+    let poll = ready_ok();
+    assert_ready_ok!(poll);
+    assert_ready_ok!(poll, "some message");
+    assert_ready_ok!(poll, "{:?}", ());
+    assert_ready_ok!(poll, "{:?}", Test::Data);
+}
+
+#[test]
+#[should_panic]
+fn assert_ok_on_err() {
+    let poll = ready_err();
+    assert_ready_ok!(poll);
+}
+
+#[test]
+fn assert_ready_err() {
+    let poll = ready_err();
+    assert_ready_err!(poll);
+    assert_ready_err!(poll, "some message");
+    assert_ready_err!(poll, "{:?}", ());
+    assert_ready_err!(poll, "{:?}", Test::Data);
+}
+
+#[test]
+#[should_panic]
+fn assert_err_on_ok() {
+    let poll = ready_ok();
+    assert_ready_err!(poll);
+}
+
+#[test]
+fn assert_ready_eq() {
+    let poll = ready();
+    assert_ready_eq!(poll, ());
+    assert_ready_eq!(poll, (), "some message");
+    assert_ready_eq!(poll, (), "{:?}", ());
+    assert_ready_eq!(poll, (), "{:?}", Test::Data);
+}
+
+#[test]
+#[should_panic]
+fn assert_eq_on_not_eq() {
+    let poll = ready_err();
+    assert_ready_eq!(poll, Ok(()));
+}