[cl-selenium-cvs] CVS cl-selenium
mkennedy
mkennedy at common-lisp.net
Tue Jul 1 06:53:31 UTC 2008
Update of /project/cl-selenium/cvsroot/cl-selenium
In directory clnet:/tmp/cvs-serv14903
Modified Files:
selenium.lisp iedoc.lisp ChangeLog
Log Message:
Don't do our own URL encoding.
--- /project/cl-selenium/cvsroot/cl-selenium/selenium.lisp 2008/05/19 06:37:05 1.3
+++ /project/cl-selenium/cvsroot/cl-selenium/selenium.lisp 2008/07/01 06:53:30 1.4
@@ -15,14 +15,13 @@
(defun do-get-new-browser-session (browser url)
"Create a session by using the the given browser and initial URL."
- (execute (puri:merge-uris (make-instance 'puri:uri :query (marshall-request "getNewBrowserSession" browser url))
- *selenium-driver-url*)
+ (execute *selenium-driver-url*
+ (marshall-request "getNewBrowserSession" browser url)
'string))
(defun do-test-complete (&optional (session *selenium-session*))
- (let ((query (concatenate 'string
- "cmd=testComplete&sessionId="
- (format nil "~A" session))))
- (execute (puri:merge-uris (make-instance 'puri:uri :query query)
- *selenium-driver-url*))))
+ "Destroy session, closing the browser."
+ (execute *selenium-driver-url*
+ (cons `("sessionId" . ,session)
+ (marshall-request "testComplete"))))
--- /project/cl-selenium/cvsroot/cl-selenium/iedoc.lisp 2008/05/19 06:37:05 1.3
+++ /project/cl-selenium/cvsroot/cl-selenium/iedoc.lisp 2008/07/01 06:53:30 1.4
@@ -81,35 +81,13 @@
(convert-parameter-name (iedoc-parameter-name parameter)))
iedoc-function-parameters))
-(defun replace-all (string part replacement &key (test #'char=))
- "Returns a new string in which all the occurences of the part
- is replaced with replacement."
- (with-output-to-string (out)
- (loop with part-length = (length part)
- for old-pos = 0 then (+ pos part-length)
- for pos = (search part string
- :start2 old-pos
- :test test)
- do (write-string string out
- :start old-pos
- :end (or pos (length string)))
- when pos do (write-string replacement out)
- while pos)))
-
-(defun encode (s)
- ;;; Must replace % first!
- (loop for disallowed-char in '("%" " " "<" ">" "#" "{" "}" "|" "\\" "^"
- "~" "[" "]" "`" ";" "/" "?" ":" "@" "=" "&"
- "$")
- do
- (setf s (replace-all s disallowed-char (format nil "%~x" (char-code (elt disallowed-char 0))))))
- s)
-
(defun marshall-request (command &rest parameters)
- (with-output-to-string (stream)
- (format stream "cmd=~A" command #+nil(html-encode:encode-for-http "asdf% asdf"))
- (dotimes (i (length parameters))
- (format stream "&~D=~A" (1+ i) (encode (elt parameters i))))))
+ (cons `("cmd" . ,command)
+ (let ((argument-count 0))
+ (mapcar #'(lambda (parameter)
+ (cons (format nil "~D" (incf argument-count))
+ (format nil "~A" parameter)))
+ parameters))))
(defun starts-with (s prefix)
"Returns t if s starts with prefix"
@@ -170,9 +148,9 @@
(format s "Selenium execution error: ~A"
(description c)))))
-(defun execute (url &optional return-type)
+(defun execute (url parameters &optional return-type)
(multiple-value-bind (reply status-code headers reply-from stream some-bool reason)
- (drakma:http-request url :method :get)
+ (drakma:http-request url :method :get :parameters parameters)
(declare (ignore headers reply-from stream some-bool))
(when (/= 200 status-code)
(error 'http-error :status-code status-code :reason reason))
@@ -189,14 +167,13 @@
`(defun ,function-name
(, at parameters &optional (session *selenium-session*))
,(iedoc-function-comment iedoc-function)
- (let ((query (concatenate 'string
- (marshall-request ,(iedoc-function-name iedoc-function) , at parameters)
- (format nil "&sessionId=~d" session))))
- (execute (puri:merge-uris (make-instance 'puri:uri :query query)
- *selenium-driver-url*)
+ (let ((parameters (cons `("sessionId" . ,session)
+ (marshall-request ,(iedoc-function-name iedoc-function) , at parameters))))
+ (execute *selenium-driver-url*
+ parameters
',(iedoc-return-type iedoc-function))))))
-#+nil (mapcar #'convert-function (parse-iedoc #p"/selenium-core-0.8.2/core/iedoc.xml"))
+#+nil (mapcar #'convert-function (parse-iedoc #p"/home/mkennedy/src/cl-selenium/iedoc-0.8.3-1879.xml"))
(defvar *selenium-driver-url* (puri:parse-uri "http://localhost:9999/selenium-server/driver/")
"The URL of the Selenium Remote Control server.")
--- /project/cl-selenium/cvsroot/cl-selenium/ChangeLog 2008/05/19 06:37:05 1.3
+++ /project/cl-selenium/cvsroot/cl-selenium/ChangeLog 2008/07/01 06:53:30 1.4
@@ -1,3 +1,10 @@
+2008-07-01 Matthew Kennedy
+
+ * iedoc.lisp (marshall-request): Change the result to an
+ associative list of parameters which can be passed to Drakma's
+ http-request function. This way we don't have to do our own URL
+ encoding. Thanks to Robin Lee Powell for noting this problem.
+
2008-05-19 Matthew Kennedy
* iedoc.lisp, selenium.lisp: Apply patch from Chaitanya Gupta to
More information about the Cl-selenium-cvs
mailing list