             child (add-fork parent (fn [e] (async/put! os (str "[child] " e))) (add-info " (pass child)"))
             grandchild (add-fork child (fn [e] (async/put! os (str "[grandchild] " e))) (add-info " (pass grandchild)"))]
         (trigger bottom "event")
-        (is (= (sort ["[grandchild] event (pass parent) (pass child)"
-                      "[child] event (pass parent)"
-                      "[parent] event"])
-               (sort (take-all! os))))))
+        (is (matches? ["[grandchild] event (pass parent) (pass child)"
+                       "[child] event (pass parent)"
+                       "[parent] event"]
+                      (take-all! os)))))
 
     (testing "downstream legs"
       (let [os (async/chan 1024)

            child (add-leg parent (add-info " (pass child)"))
            grandchild (add-leg child (add-info " (pass grandchild)"))]
        (trigger grandchild "event")
        (is (= (sort ["[parent] event (pass grandchild) (pass child)"])
               (sort (take-all! os))))))

    (testing "upstream legs"
      (let [os (async/chan 1024)

            child (add-leg parent (add-info " (pass child)"))
            grandchild (add-fork child (fn [e] (async/put! os (str "[grandchild] " e))) (add-info " (pass grandchild)"))]
        (trigger bottom "event")
        (is (matches? ["[grandchild] event (pass parent) (pass child)"]
                      (take-all! os)))))))

; TODO: Attempt to use in core (downstream only).
; TODO: Move descriptor-related code to om-event-bus.descriptor.
; TODO: Use upstream in core.
