Hey, Thanks Herwig & Mohit.

So, I have one more solution.

Here is the original wait-until function-


(defn wait-until
  ([pred] (wait/wait-until *driver* (fn [_] pred)))  ([pred timeout] (wait/
wait-until *driver* (fn [_] pred) timeout))  ([pred timeout interval] (wait/
wait-until *driver* (fn [_] pred) timeout interval))  ([driver pred timeout 
interval] (wait/wait-until driver (fn [d] (pred d)) timeout interval)))

I have converted function to macro like - 

(defmacro with-wait-until-error-log
  [pred & body]
  `(try
     ~@body
     (catch Exception e#
       (println "\nWait-until failed for: " ~pred "\n")
       e#)))


(defmacro wait-until
  [& args]
  `(if (= (count '~args) 4)
     (let [pred# (nth '~args 1)]
       (with-wait-until-error-log
         pred#
         (wait/wait-until (eval (nth '~args 0))
                          (fn [_#] (eval pred#))
                          (nth '~args 2)
                          (nth '~args 3))))
     (let [pred# (first '~args)]
       (with-wait-until-error-log
         pred#
         (wait/wait-until *driver* (fn [_#] (eval pred#))
                          (nth '~args 1)
                          (nth '~args 2))))))

So, by this way I am not breaking input format or fn behaviour, but need to 
use `eval`. So, is there any other way for doing same as eval? Or, is it OK 
to use eval?



On Friday, May 29, 2015 at 12:55:20 PM UTC+5:30, Mohit Thatte wrote:
>
> I see what you mean, this is nice 
>
> On Thu, May 28, 2015 at 11:25 PM, Herwig Hochleitner <hhochl...@gmail.com 
> <javascript:>> wrote:
>
>> 2015-05-28 19:42 GMT+02:00 Mohit Thatte <mohit....@gmail.com 
>> <javascript:>>:
>>>
>>> The interesting question here is what constitutes useful information!
>>>
>>
>> (let [pred #(exists? ".foo")]
>>   (wait-until pred)) ;; <- the fact that it's called 'pred is not 
>> interesting in most cases
>>  
>>
>>> The trade-off is breaking an existing public API.
>>>
>>
>> How so?
>>
>> (defmacro op [msg args expr]
>>   `(with-meta (fn ~args ~expr) {:msg ~msg :args '~args :expr '~expr}))
>>
>> (let [pred1 #(exists? ".foo")
>>       pred2 (op "checks existance" [] (exists? ".foo"))]
>>   ;; both these will work, the one with pred1 will give less useful 
>> errors. the API of wait-until is unchanged
>>   (wait-until pred1)
>>   (wait-until pred2))
>>
>> If Shalaka's primary goal is prettier errors in test failures, I'd settle 
>>> for the fn body itself as the error message and that could be achieved 
>>> without breaking the API.
>>>
>>
>> The op macro can include the code in its information.
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> -Mohit Thatte
>  

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to