From cdb22692278d5f68cfdf1d44b795c0bef9c18377 Mon Sep 17 00:00:00 2001 From: Olexiy Zamkoviy Date: Tue, 19 Feb 2013 16:31:36 +0200 Subject: [PATCH] Added navigation demonstration and test for weblocks pull request #15 --- tests-server.sbclrc | 1 + utils.lisp | 17 ++++++++ .../pub/stylesheets/main.css | 8 ++++ .../src/init-session.lisp | 41 +++++++++++++++++++ weblocks-selenium-tests.asd | 2 +- weblocks-selenium-tests.lisp | 15 +++++++ 6 files changed, 83 insertions(+), 1 deletion(-) diff --git a/tests-server.sbclrc b/tests-server.sbclrc index dd96c6b..41751a6 100644 --- a/tests-server.sbclrc +++ b/tests-server.sbclrc @@ -1,4 +1,5 @@ (require :sb-posix) +(setf sb-impl::*default-external-format* :utf-8) (defvar *port* (parse-integer (nth 1 *posix-argv*))) (defvar *swank-port* (parse-integer (nth 2 *posix-argv*))) (load ".quicklisp/setup.lisp") diff --git a/utils.lisp b/utils.lisp index 8ecf618..916b074 100644 --- a/utils.lisp +++ b/utils.lisp @@ -32,3 +32,20 @@ `(if (browser-is-google-chrome-p) (progn ,@body) (warn "Skipping test, browser is not google-chrome"))) + +(defun ensure-jquery-loaded-into-document () + (do-get-eval + (remove #\Newline (format nil " + function addJavascript(jsname,pos, callback){ + var th = window.document.getElementsByTagName(pos)[0]; + var s = window.document.createElement('script'); + s.setAttribute('type','text/javascript'); + s.setAttribute('src',jsname); + s.onload = callback; + th.appendChild(s); + } + + addJavascript('~Apub/scripts/jquery-1.8.2.js', 'body', function(){ + window.jQuery.noConflict(); + }); " *site-root-url*))) + (sleep 1)) diff --git a/weblocks-selenium-tests-app/pub/stylesheets/main.css b/weblocks-selenium-tests-app/pub/stylesheets/main.css index faf0744..1669dff 100644 --- a/weblocks-selenium-tests-app/pub/stylesheets/main.css +++ b/weblocks-selenium-tests-app/pub/stylesheets/main.css @@ -270,3 +270,11 @@ div.empty p span.caption color:gray; } +#toplevel-nav .menu { + float:left; +} + +#toplevel-nav .navigation-body { + float: left; + padding-left: 10px; +} diff --git a/weblocks-selenium-tests-app/src/init-session.lisp b/weblocks-selenium-tests-app/src/init-session.lisp index 5116c38..9568c33 100644 --- a/weblocks-selenium-tests-app/src/init-session.lisp +++ b/weblocks-selenium-tests-app/src/init-session.lisp @@ -31,6 +31,46 @@ "Close dialog"))))) (do-dialog "Dialog title" widget))) +(defun navigation-demonstration-action (&rest args) + (let ((widget) + (navigation)) + (setf navigation (make-navigation + "toplevel-nav" + (list "First pane" (make-widget "First pane value") nil) + (list "Second pane" (make-widget "Second pane value") "second-pane") + (list "Third pane (first nested pane)" + (make-navigation + "second-level-nav-1" + (list "First nested pane" (make-widget "First nested pane") nil) + (list "Second nested pane" (make-widget "Second nested pane") "second-nested-pane") + (list "Third nested pane (with 2-level nesting)" + (make-navigation + "third-level-nav" + (list "First nested pane" (make-widget "First nested pane") nil) + (list "Second nested pane" (make-widget "Second nested pane") "second-nested-pane")) + "third-nested-pane")) "third-pane") + (list "Fourth pane (second nested pane)" + (make-navigation + "second-level-nav-2" + (list "First nested pane" (make-widget "First nested pane")) + (list "Second nested pane" (make-widget "Second nested pane") "second-nested-pane")) "fourth-pane") + (list "Fifth pane" (make-widget "Fifth pane") "fifth-pane") + (list "Sixth pane (third nested pane)" + (make-navigation + "second-level-nav-3" + (list "First nested pane" (make-widget "First nested pane")) + (list "Second nested pane" (make-widget "Second nested pane") "second-nested-pane")) "sixth-pane"))) + (setf widget + (make-instance 'composite + :widgets (list + navigation + (lambda (&rest args) + (with-html + (:div :style "clear:both" + (render-link (lambda (&rest args) + (answer widget t)) "back"))))))) + (do-page widget))) + (defun define-demo-action (link-name action &key (prototype-engine-p t) (jquery-engine-p t)) "Used to add action to demo list, :prototype-engine-p and :jquery-engine-p keys @@ -39,6 +79,7 @@ (define-demo-action "File field form presentation" #'file-field-demonstration-action :jquery-engine-p nil) (define-demo-action "Dialog sample" #'dialog-demonstration-action :jquery-engine-p nil) +(define-demo-action "Navigation sample" #'navigation-demonstration-action) ;; Define callback function to initialize new sessions (defun init-user-session-prototype (root) diff --git a/weblocks-selenium-tests.asd b/weblocks-selenium-tests.asd index 320c237..f59f8a8 100644 --- a/weblocks-selenium-tests.asd +++ b/weblocks-selenium-tests.asd @@ -4,7 +4,7 @@ :serial t :description "Selenium tests suite for weblocks" :author "Olexiy Zamkoviy " - :version "0.2.0" + :version "0.2.1" :license "LLGPL" :depends-on (#:stefil #:selenium #:weblocks-selenium-tests-app) :components diff --git a/weblocks-selenium-tests.lisp b/weblocks-selenium-tests.lisp index 12d8086..4f46a0a 100644 --- a/weblocks-selenium-tests.lisp +++ b/weblocks-selenium-tests.lisp @@ -46,3 +46,18 @@ (do-open-and-wait *site-url*) (sample-dialog-assertions) (do-click-and-wait "link=Close dialog"))) + +(deftest selects-child-navigation-properly () + (with-new-or-existing-selenium-session + (do-click-and-wait "link=Navigation sample") + (do-click-and-wait "link=Fourth pane (second nested pane)") + (do-click-and-wait "link=First pane") + (do-click-and-wait "link=Fourth pane (second nested pane)") + (ensure-jquery-loaded-into-document) + (is (string= + "true" + (do-get-eval + (ps:ps + (ps:chain + (window.j-query "#second-level-nav-2 li:first") + (has-class "selected-item"))))))))