 (assert (= ::AssertionThrown (type (a5 "a" "b"))))
 
 ;; defcontext form
-(defcontext c7 "Context c7" [c5] (fn [s5] 7) (fn [s7 s5] nil))
+(defcontext c7 "Context c7" [s5 c5]
+  (assert (= s5 5))
+  7
+  :after [s7]
+  (assert (= s7 7)))
 (assert (= ::Context (type c7)))
 (assert (= 'c7 (:name (meta c7))))
 (assert (= "Context c7" (:doc (meta c7))))
 (assert (= [c5] (:parents c7)))
+(assert (fn? (:before c7)))
+(assert (fn? (:after c7)))
 
 ;; deftest form
 (deftest t10 "Test t10"

    (assert (vector? bindings))
    (assert (even? (count bindings)))
    (let [locals (vec (map first (partition 2 bindings)))
          contexts (vec (map second (partition 2 bindings)))]
      (assert (every? symbol locals))
      `(def ~name
            (with-meta (TestCase ~contexts

        (TestResult t results))
      (catch Throwable e (TestThrown t e)))))

(defn- coerce-context [c]
  (if (and (symbol? c) (= ::Context (type (var-get (resolve c)))))
    c (Context [] (fn [] c) nil)))

(defmacro deftest
  "Defines a test case containing assertions that share the same contexts.
  decl => docstring? [binding*] assertion*
