checks: add tests for core extensions (#1727)

100% code coverage of core extensions
diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml
index 441c99c..0ecb4d2 100644
--- a/.github/workflows/dart.yml
+++ b/.github/workflows/dart.yml
@@ -241,16 +241,16 @@
       - job_001
       - job_002
   job_006:
-    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0`"
+    name: "unit_test; linux; Dart dev; PKG: pkgs/checks; `dart test`"
     runs-on: ubuntu-latest
     steps:
       - name: Cache Pub hosted dependencies
         uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
         with:
           path: "~/.pub-cache/hosted"
-          key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:pkgs/test;commands:command_00"
+          key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:pkgs/checks;commands:command_00"
           restore-keys: |
-            os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:pkgs/test
+            os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:pkgs/checks
             os:ubuntu-latest;pub-cache-hosted;sdk:dev
             os:ubuntu-latest;pub-cache-hosted
             os:ubuntu-latest
@@ -259,20 +259,20 @@
           sdk: dev
       - id: checkout
         uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
-      - id: pkgs_test_pub_upgrade
-        name: pkgs/test; dart pub upgrade
+      - id: pkgs_checks_pub_upgrade
+        name: pkgs/checks; dart pub upgrade
         if: "always() && steps.checkout.conclusion == 'success'"
-        working-directory: pkgs/test
+        working-directory: pkgs/checks
         run: dart pub upgrade
-      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0"
-        if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
-        working-directory: pkgs/test
-        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0"
+      - name: pkgs/checks; dart test
+        if: "always() && steps.pkgs_checks_pub_upgrade.conclusion == 'success'"
+        working-directory: pkgs/checks
+        run: dart test
     needs:
       - job_001
       - job_002
   job_007:
-    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1`"
+    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0`"
     runs-on: ubuntu-latest
     steps:
       - name: Cache Pub hosted dependencies
@@ -295,15 +295,15 @@
         if: "always() && steps.checkout.conclusion == 'success'"
         working-directory: pkgs/test
         run: dart pub upgrade
-      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1"
+      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0"
         if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
         working-directory: pkgs/test
-        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1"
+        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0"
     needs:
       - job_001
       - job_002
   job_008:
-    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2`"
+    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1`"
     runs-on: ubuntu-latest
     steps:
       - name: Cache Pub hosted dependencies
@@ -326,15 +326,15 @@
         if: "always() && steps.checkout.conclusion == 'success'"
         working-directory: pkgs/test
         run: dart pub upgrade
-      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2"
+      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1"
         if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
         working-directory: pkgs/test
-        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2"
+        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1"
     needs:
       - job_001
       - job_002
   job_009:
-    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3`"
+    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2`"
     runs-on: ubuntu-latest
     steps:
       - name: Cache Pub hosted dependencies
@@ -357,15 +357,15 @@
         if: "always() && steps.checkout.conclusion == 'success'"
         working-directory: pkgs/test
         run: dart pub upgrade
-      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3"
+      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2"
         if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
         working-directory: pkgs/test
-        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3"
+        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2"
     needs:
       - job_001
       - job_002
   job_010:
-    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 4`"
+    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3`"
     runs-on: ubuntu-latest
     steps:
       - name: Cache Pub hosted dependencies
@@ -388,6 +388,37 @@
         if: "always() && steps.checkout.conclusion == 'success'"
         working-directory: pkgs/test
         run: dart pub upgrade
+      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3"
+        if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
+        working-directory: pkgs/test
+        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3"
+    needs:
+      - job_001
+      - job_002
+  job_011:
+    name: "unit_test; linux; Dart dev; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 4`"
+    runs-on: ubuntu-latest
+    steps:
+      - name: Cache Pub hosted dependencies
+        uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
+        with:
+          path: "~/.pub-cache/hosted"
+          key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:pkgs/test;commands:command_05"
+          restore-keys: |
+            os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:pkgs/test
+            os:ubuntu-latest;pub-cache-hosted;sdk:dev
+            os:ubuntu-latest;pub-cache-hosted
+            os:ubuntu-latest
+      - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d
+        with:
+          sdk: dev
+      - id: checkout
+        uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
+      - id: pkgs_test_pub_upgrade
+        name: pkgs/test; dart pub upgrade
+        if: "always() && steps.checkout.conclusion == 'success'"
+        working-directory: pkgs/test
+        run: dart pub upgrade
       - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 4"
         if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
         working-directory: pkgs/test
@@ -395,7 +426,7 @@
     needs:
       - job_001
       - job_002
-  job_011:
+  job_012:
     name: "unit_test; linux; Dart dev; PKG: pkgs/test_api; `dart test --preset travis -x browser`"
     runs-on: ubuntu-latest
     steps:
@@ -403,7 +434,7 @@
         uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
         with:
           path: "~/.pub-cache/hosted"
-          key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:pkgs/test_api;commands:command_10"
+          key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:pkgs/test_api;commands:command_11"
           restore-keys: |
             os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:pkgs/test_api
             os:ubuntu-latest;pub-cache-hosted;sdk:dev
@@ -426,7 +457,7 @@
     needs:
       - job_001
       - job_002
-  job_012:
+  job_013:
     name: "unit_test; linux; Dart stable; PKG: integration_tests/nnbd_opted_in; `dart test -p chrome,vm,node`"
     runs-on: ubuntu-latest
     steps:
@@ -457,7 +488,7 @@
     needs:
       - job_001
       - job_002
-  job_013:
+  job_014:
     name: "unit_test; linux; Dart stable; PKG: integration_tests/nnbd_opted_out; `dart test -p chrome,vm,node`"
     runs-on: ubuntu-latest
     steps:
@@ -488,7 +519,7 @@
     needs:
       - job_001
       - job_002
-  job_014:
+  job_015:
     name: "unit_test; linux; Dart stable; PKG: integration_tests/spawn_hybrid; `dart test -p chrome,vm,node`"
     runs-on: ubuntu-latest
     steps:
@@ -519,39 +550,8 @@
     needs:
       - job_001
       - job_002
-  job_015:
-    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0`"
-    runs-on: ubuntu-latest
-    steps:
-      - name: Cache Pub hosted dependencies
-        uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
-        with:
-          path: "~/.pub-cache/hosted"
-          key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:pkgs/test;commands:command_00"
-          restore-keys: |
-            os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:pkgs/test
-            os:ubuntu-latest;pub-cache-hosted;sdk:stable
-            os:ubuntu-latest;pub-cache-hosted
-            os:ubuntu-latest
-      - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d
-        with:
-          sdk: stable
-      - id: checkout
-        uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
-      - id: pkgs_test_pub_upgrade
-        name: pkgs/test; dart pub upgrade
-        if: "always() && steps.checkout.conclusion == 'success'"
-        working-directory: pkgs/test
-        run: dart pub upgrade
-      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0"
-        if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
-        working-directory: pkgs/test
-        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0"
-    needs:
-      - job_001
-      - job_002
   job_016:
-    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1`"
+    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0`"
     runs-on: ubuntu-latest
     steps:
       - name: Cache Pub hosted dependencies
@@ -574,15 +574,15 @@
         if: "always() && steps.checkout.conclusion == 'success'"
         working-directory: pkgs/test
         run: dart pub upgrade
-      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1"
+      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0"
         if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
         working-directory: pkgs/test
-        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1"
+        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 0"
     needs:
       - job_001
       - job_002
   job_017:
-    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2`"
+    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1`"
     runs-on: ubuntu-latest
     steps:
       - name: Cache Pub hosted dependencies
@@ -605,15 +605,15 @@
         if: "always() && steps.checkout.conclusion == 'success'"
         working-directory: pkgs/test
         run: dart pub upgrade
-      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2"
+      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1"
         if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
         working-directory: pkgs/test
-        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2"
+        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 1"
     needs:
       - job_001
       - job_002
   job_018:
-    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3`"
+    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2`"
     runs-on: ubuntu-latest
     steps:
       - name: Cache Pub hosted dependencies
@@ -636,15 +636,15 @@
         if: "always() && steps.checkout.conclusion == 'success'"
         working-directory: pkgs/test
         run: dart pub upgrade
-      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3"
+      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2"
         if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
         working-directory: pkgs/test
-        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3"
+        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 2"
     needs:
       - job_001
       - job_002
   job_019:
-    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 4`"
+    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3`"
     runs-on: ubuntu-latest
     steps:
       - name: Cache Pub hosted dependencies
@@ -667,6 +667,37 @@
         if: "always() && steps.checkout.conclusion == 'success'"
         working-directory: pkgs/test
         run: dart pub upgrade
+      - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3"
+        if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
+        working-directory: pkgs/test
+        run: "xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 3"
+    needs:
+      - job_001
+      - job_002
+  job_020:
+    name: "unit_test; linux; Dart stable; PKG: pkgs/test; `xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 4`"
+    runs-on: ubuntu-latest
+    steps:
+      - name: Cache Pub hosted dependencies
+        uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
+        with:
+          path: "~/.pub-cache/hosted"
+          key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:pkgs/test;commands:command_05"
+          restore-keys: |
+            os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:pkgs/test
+            os:ubuntu-latest;pub-cache-hosted;sdk:stable
+            os:ubuntu-latest;pub-cache-hosted
+            os:ubuntu-latest
+      - uses: dart-lang/setup-dart@6a218f2413a3e78e9087f638a238f6b40893203d
+        with:
+          sdk: stable
+      - id: checkout
+        uses: actions/checkout@d0651293c4a5a52e711f25b41b05b2212f385d28
+      - id: pkgs_test_pub_upgrade
+        name: pkgs/test; dart pub upgrade
+        if: "always() && steps.checkout.conclusion == 'success'"
+        working-directory: pkgs/test
+        run: dart pub upgrade
       - name: "pkgs/test; xvfb-run -s \"-screen 0 1024x768x24\" dart test --preset travis --total-shards 5 --shard-index 4"
         if: "always() && steps.pkgs_test_pub_upgrade.conclusion == 'success'"
         working-directory: pkgs/test
@@ -674,7 +705,7 @@
     needs:
       - job_001
       - job_002
-  job_020:
+  job_021:
     name: "unit_test; linux; Dart stable; PKG: pkgs/test_api; `dart test --preset travis -x browser`"
     runs-on: ubuntu-latest
     steps:
@@ -682,7 +713,7 @@
         uses: actions/cache@4504faf7e9bcf8f3ed0bc863c4e1d21499ab8ef8
         with:
           path: "~/.pub-cache/hosted"
-          key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:pkgs/test_api;commands:command_10"
+          key: "os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:pkgs/test_api;commands:command_11"
           restore-keys: |
             os:ubuntu-latest;pub-cache-hosted;sdk:stable;packages:pkgs/test_api
             os:ubuntu-latest;pub-cache-hosted;sdk:stable
@@ -705,7 +736,7 @@
     needs:
       - job_001
       - job_002
-  job_021:
+  job_022:
     name: "unit_test; windows; Dart dev; PKG: integration_tests/nnbd_opted_in; `dart test -p chrome,vm,node`"
     runs-on: windows-latest
     steps:
@@ -726,7 +757,7 @@
     needs:
       - job_001
       - job_002
-  job_022:
+  job_023:
     name: "unit_test; windows; Dart dev; PKG: integration_tests/nnbd_opted_out; `dart test -p chrome,vm,node`"
     runs-on: windows-latest
     steps:
@@ -747,7 +778,7 @@
     needs:
       - job_001
       - job_002
-  job_023:
+  job_024:
     name: "unit_test; windows; Dart dev; PKG: integration_tests/spawn_hybrid; `dart test -p chrome,vm,node`"
     runs-on: windows-latest
     steps:
@@ -768,7 +799,7 @@
     needs:
       - job_001
       - job_002
-  job_024:
+  job_025:
     name: "unit_test; windows; Dart stable; PKG: integration_tests/nnbd_opted_in; `dart test -p chrome,vm,node`"
     runs-on: windows-latest
     steps:
@@ -789,7 +820,7 @@
     needs:
       - job_001
       - job_002
-  job_025:
+  job_026:
     name: "unit_test; windows; Dart stable; PKG: integration_tests/nnbd_opted_out; `dart test -p chrome,vm,node`"
     runs-on: windows-latest
     steps:
@@ -810,7 +841,7 @@
     needs:
       - job_001
       - job_002
-  job_026:
+  job_027:
     name: "unit_test; windows; Dart stable; PKG: integration_tests/spawn_hybrid; `dart test -p chrome,vm,node`"
     runs-on: windows-latest
     steps:
@@ -831,7 +862,7 @@
     needs:
       - job_001
       - job_002
-  job_027:
+  job_028:
     name: "unit_test; windows; Dart stable; PKG: pkgs/test; `dart test --preset travis --total-shards 5 --shard-index 0`"
     runs-on: windows-latest
     steps:
@@ -852,7 +883,7 @@
     needs:
       - job_001
       - job_002
-  job_028:
+  job_029:
     name: "unit_test; windows; Dart stable; PKG: pkgs/test; `dart test --preset travis --total-shards 5 --shard-index 1`"
     runs-on: windows-latest
     steps:
@@ -873,7 +904,7 @@
     needs:
       - job_001
       - job_002
-  job_029:
+  job_030:
     name: "unit_test; windows; Dart stable; PKG: pkgs/test; `dart test --preset travis --total-shards 5 --shard-index 2`"
     runs-on: windows-latest
     steps:
@@ -894,7 +925,7 @@
     needs:
       - job_001
       - job_002
-  job_030:
+  job_031:
     name: "unit_test; windows; Dart stable; PKG: pkgs/test; `dart test --preset travis --total-shards 5 --shard-index 3`"
     runs-on: windows-latest
     steps:
@@ -915,7 +946,7 @@
     needs:
       - job_001
       - job_002
-  job_031:
+  job_032:
     name: "unit_test; windows; Dart stable; PKG: pkgs/test; `dart test --preset travis --total-shards 5 --shard-index 4`"
     runs-on: windows-latest
     steps:
@@ -936,7 +967,7 @@
     needs:
       - job_001
       - job_002
-  job_032:
+  job_033:
     name: Notify failure
     runs-on: ubuntu-latest
     if: "(github.event_name == 'push' || github.event_name == 'schedule') && failure()"
@@ -979,3 +1010,4 @@
       - job_029
       - job_030
       - job_031
+      - job_032
diff --git a/pkgs/checks/lib/src/extensions/core.dart b/pkgs/checks/lib/src/extensions/core.dart
index 2fe29a2..446bea2 100644
--- a/pkgs/checks/lib/src/extensions/core.dart
+++ b/pkgs/checks/lib/src/extensions/core.dart
@@ -52,26 +52,36 @@
   ///
   /// Asynchronous expectations are not allowed in [condition].
   void not(void Function(Check<T>) condition) {
-    context.expect(() {
-      return ['is not a value that:', ...indent(describe(condition))];
-    }, (actual) {
-      if (softCheck(actual, condition) != null) return null;
-      return Rejection(
+    context.expect(
+      () => ['is not a value that:', ...indent(describe(condition))],
+      (actual) {
+        if (softCheck(actual, condition) != null) return null;
+        return Rejection(
           actual: literal(actual),
-          which: ['is a value that: ', ...indent(describe(condition))]);
-    });
+          which: ['is a value that: ', ...indent(describe(condition))],
+        );
+      },
+    );
   }
 }
 
 extension BoolChecks on Check<bool> {
   void isTrue() {
-    context.expect(() => ['is true'],
-        (actual) => actual ? null : Rejection(actual: literal(actual)));
+    context.expect(
+      () => ['is true'],
+      (actual) => actual
+          ? null // force coverage
+          : Rejection(actual: literal(actual)),
+    );
   }
 
   void isFalse() {
-    context.expect(() => ['is false'],
-        (actual) => !actual ? null : Rejection(actual: literal(actual)));
+    context.expect(
+      () => ['is false'],
+      (actual) => !actual
+          ? null // force coverage
+          : Rejection(actual: literal(actual)),
+    );
   }
 }
 
@@ -112,10 +122,12 @@
 extension StringChecks on Check<String> {
   /// Expects that the value contains [pattern] according to [String.contains];
   void contains(Pattern pattern) {
-    context.expect(() => ['contains $pattern'], (actual) {
+    context.expect(() => ['contains ${literal(pattern)}'], (actual) {
       if (actual.contains(pattern)) return null;
       return Rejection(
-          actual: literal(actual), which: ['Does not contain $pattern']);
+        actual: literal(actual),
+        which: ['Does not contain ${literal(pattern)}'],
+      );
     });
   }
 
diff --git a/pkgs/checks/mono_pkg.yaml b/pkgs/checks/mono_pkg.yaml
index 099f481..033bd63 100644
--- a/pkgs/checks/mono_pkg.yaml
+++ b/pkgs/checks/mono_pkg.yaml
@@ -8,3 +8,6 @@
   - group:
     - format
     - analyze: --fatal-infos
+- unit_test:
+  - group:
+    - command: dart test
diff --git a/pkgs/checks/test/extensions/core_test.dart b/pkgs/checks/test/extensions/core_test.dart
new file mode 100644
index 0000000..432419e
--- /dev/null
+++ b/pkgs/checks/test/extensions/core_test.dart
@@ -0,0 +1,159 @@
+import 'package:checks/checks.dart';
+import 'package:checks/context.dart';
+import 'package:test/scaffolding.dart';
+
+void main() {
+  group('TypeChecks', () {
+    test('isA', () {
+      checkThat(1).isA<int>();
+
+      checkThat(
+        softCheck(1, (p0) => p0.isA<String>()),
+      ).isARejection(actual: '<1>', which: ['Is a int']);
+    });
+  });
+
+  group('HasField', () {
+    test('has', () {
+      checkThat(1).has((v) => v.isOdd, 'isOdd').isTrue();
+
+      checkThat(
+        softCheck<int>(
+          2,
+          (p0) => p0.has((v) => throw UnimplementedError(), 'isOdd'),
+        ),
+      ).isARejection(
+        actual: '<2>',
+        which: ['threw while trying to read property'],
+      );
+    });
+
+    test('that', () {
+      checkThat(true).that((p0) => p0.isTrue());
+    });
+
+    test('not', () {
+      checkThat(false).not((p0) => p0.isTrue());
+
+      checkThat(
+        softCheck<bool>(
+          true,
+          (p0) => p0.not((p0) => p0.isTrue()),
+        ),
+      ).isARejection(
+        actual: '<true>',
+        which: ['is a value that: ', '    is true'],
+      );
+    });
+  });
+
+  group('BoolChecks', () {
+    test('isTrue', () {
+      checkThat(true).isTrue();
+
+      checkThat(
+        softCheck<bool>(
+          false,
+          (p0) => p0.isTrue(),
+        ),
+      ).isARejection(actual: '<false>');
+    });
+
+    test('isFalse', () {
+      checkThat(false).isFalse();
+
+      checkThat(softCheck<bool>(
+        true,
+        (p0) => p0.isFalse(),
+      )).isARejection(actual: '<true>');
+    });
+  });
+
+  group('EqualityChecks', () {
+    test('equals', () {
+      checkThat(1).equals(1);
+
+      checkThat(
+        softCheck(1, (p0) => p0.equals(2)),
+      ).isARejection(actual: '<1>', which: ['are not equal']);
+    });
+
+    test('identical', () {
+      checkThat(1).identicalTo(1);
+
+      checkThat(softCheck(1, (p0) => p0.identicalTo(2)))
+          .isARejection(actual: '<1>', which: ['is not identical']);
+    });
+  });
+
+  group('NullabilityChecks', () {
+    test('isNotNull', () {
+      checkThat(1).isNotNull();
+
+      checkThat(softCheck(null, (p0) => p0.isNotNull()))
+          .isARejection(actual: '<null>');
+    });
+
+    test('isNull', () {
+      checkThat(null).isNull();
+
+      checkThat(softCheck(1, (p0) => p0.isNull())).isARejection(actual: '<1>');
+    });
+  });
+
+  group('StringChecks', () {
+    test('contains', () {
+      checkThat('bob').contains('bo');
+      checkThat(
+        softCheck<String>('bob', (p0) => p0.contains('kayleb')),
+      ).isARejection(actual: "'bob'", which: ["Does not contain 'kayleb'"]);
+    });
+    test('length', () {
+      checkThat('bob').length.equals(3);
+    });
+    test('isEmpty', () {
+      checkThat('').isEmpty();
+      checkThat(
+        softCheck<String>('bob', (p0) => p0.isEmpty()),
+      ).isARejection(actual: "'bob'", which: ['is not empty']);
+    });
+    test('isNotEmpty', () {
+      checkThat('bob').isNotEmpty();
+      checkThat(
+        softCheck<String>('', (p0) => p0.isNotEmpty()),
+      ).isARejection(actual: "''", which: ['is empty']);
+    });
+    test('startsWith', () {
+      checkThat('bob').startsWith('bo');
+      checkThat(
+        softCheck<String>('bob', (p0) => p0.startsWith('kayleb')),
+      ).isARejection(actual: "'bob'", which: ["does not start with 'kayleb'"]);
+    });
+    test('endsWith', () {
+      checkThat('bob').endsWith('ob');
+      checkThat(softCheck<String>('bob', (p0) => p0.endsWith('kayleb')))
+          .isARejection(actual: "'bob'", which: ["does not end with 'kayleb'"]);
+    });
+  });
+}
+
+extension on Check<Iterable<String>?> {
+  // TODO: remove this once we have a deepEquals or equivalent
+  void toStringEquals(List<String>? other) {
+    final otherToString = other.toString();
+    context.expect(() => ['toString equals'], (actual) {
+      final actualToString = actual.toString();
+      return actual.toString() == otherToString
+          ? null
+          : Rejection(actual: actualToString);
+    });
+  }
+}
+
+extension on Check<Rejection?> {
+  void isARejection({List<String>? which, required String actual}) {
+    this.isNotNull()
+      ..has((p0) => p0.actual, 'actual').equals(actual)
+      ..has((p0) => p0.which, 'which').toStringEquals(which);
+  }
+}
diff --git a/tool/ci.sh b/tool/ci.sh
index b5178ff..ec94227 100755
--- a/tool/ci.sh
+++ b/tool/ci.sh
@@ -72,46 +72,50 @@
         dart analyze --fatal-infos || EXIT_CODE=$?
         ;;
       command_00)
+        echo 'dart test'
+        dart test || EXIT_CODE=$?
+        ;;
+      command_01)
         echo 'xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 0'
         xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 0 || EXIT_CODE=$?
         ;;
-      command_01)
+      command_02)
         echo 'xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 1'
         xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 1 || EXIT_CODE=$?
         ;;
-      command_02)
+      command_03)
         echo 'xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 2'
         xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 2 || EXIT_CODE=$?
         ;;
-      command_03)
+      command_04)
         echo 'xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 3'
         xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 3 || EXIT_CODE=$?
         ;;
-      command_04)
+      command_05)
         echo 'xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 4'
         xvfb-run -s "-screen 0 1024x768x24" dart test --preset travis --total-shards 5 --shard-index 4 || EXIT_CODE=$?
         ;;
-      command_05)
+      command_06)
         echo 'dart test --preset travis --total-shards 5 --shard-index 0'
         dart test --preset travis --total-shards 5 --shard-index 0 || EXIT_CODE=$?
         ;;
-      command_06)
+      command_07)
         echo 'dart test --preset travis --total-shards 5 --shard-index 1'
         dart test --preset travis --total-shards 5 --shard-index 1 || EXIT_CODE=$?
         ;;
-      command_07)
+      command_08)
         echo 'dart test --preset travis --total-shards 5 --shard-index 2'
         dart test --preset travis --total-shards 5 --shard-index 2 || EXIT_CODE=$?
         ;;
-      command_08)
+      command_09)
         echo 'dart test --preset travis --total-shards 5 --shard-index 3'
         dart test --preset travis --total-shards 5 --shard-index 3 || EXIT_CODE=$?
         ;;
-      command_09)
+      command_10)
         echo 'dart test --preset travis --total-shards 5 --shard-index 4'
         dart test --preset travis --total-shards 5 --shard-index 4 || EXIT_CODE=$?
         ;;
-      command_10)
+      command_11)
         echo 'dart test --preset travis -x browser'
         dart test --preset travis -x browser || EXIT_CODE=$?
         ;;