 
 (defmacro using [& decl]
   (let [[doc decl] (get-arg string? decl)
-	[opts decl] (get-options decl)
+	[opts decl] (get-arg map? decl)
 	[bindings body] (get-arg vector? decl)
 	children (vec body)
 	metadata (merge (meta &form) {:doc doc} opts)]

  (if (pred (first args))
    [(first args) (next args)]
    [nil args]))

(defn- get-options
  "Extracts keyword-value pairs from head of args, until next arg is
  not a keyword.  Returns a vector [options-map remaining-args]"
  [args]
  (loop [options nil args args]
    (if (and (seq args) (keyword? (first args)))
      (recur (assoc options (first args) (second args)) (nnext args))
      [options args])))

(defn- firsts [coll]
  (take-nth 2 coll))

(defmacro describe [& decl]
  (let [[sym decl] (get-arg symbol? decl)
	[doc decl] (get-arg string? decl)
	[opts body] (get-arg map? decl)
	children (vec body)
	metadata (merge (meta &form) {:doc doc} opts)]
    `(test-group ~children ~metadata)))

(defmacro given [& decl]
  (let [[doc decl] (get-arg string? decl)
	[opts decl] (get-arg map? decl)
	[bindings body] (get-arg vector? decl)
	children (vec body)
	metadata (merge (meta &form) {:doc doc} opts)]
