From cd37fdeb5d110f19c1c3560bebe5fa32fc7ef2d5 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Fri, 15 Jun 2012 14:34:56 +0200 Subject: [PATCH] OO-280: build the infrastructure for Selenium 2, Arquillian and a managed Tomcat 7.0, remove old selenium 1 tests, remove profile of Firefox... --- TESTING.README.LATEST | 23 +- pom.xml | 636 +----- .../bps/onyx/plugin/_spring/onyxContext.xml | 2 +- .../basesecurity/AuthenticationImpl.hbm.xml | 2 +- .../basesecurity/SecurityGroupImpl.hbm.xml | 2 +- .../org/olat/course/_spring/courseContext.xml | 2 +- src/main/resources/package.html | 35 +- .../resources/serviceconfig/olat.properties | 3 + src/test/HOWTO-UnitTesting | 52 - ...king.java => OlatcoreTestWithMocking.java} | 2 +- .../org/olat/core/util/i18n/I18nTest.java | 4 +- .../org/olat/core/util/mail/MailTest.java | 4 +- .../org/olat/login/FunctionalLoginTest.java | 84 + .../org/olat/test/ArquillianDeployments.java | 223 ++ .../MockServletContextWebContextLoader.java | 8 +- ...tSearch.java => Selenium2TestsJunit4.java} | 30 +- .../SpringInitDestroyVerficationTest.java | 3 - .../org/olat/test/demo/CourseImportTest.java | 61 - .../olat/test/demo/CourseOpenCloseTest.java | 45 - .../olat/test/demo/OpenForumThreadTest.java | 50 - .../org/olat/test/demo/SeleniumDemo1Test.java | 77 - .../org/olat/test/demo/SeleniumDemo2Test.java | 86 - .../demo/SeleniumTestingDemoTest3_html.html | 77 - .../olat/test/demo/ShowCourseContentTest.java | 52 - src/test/java/org/olat/test/demo/package.html | 12 - .../test/demo/selenium.olat.uzh.context.xml | 28 - .../administration/ASetupFNTestCase.java | 94 - .../InfoMessageClusterTest.java | 70 - .../cluster/AssessmentWithCodepointsTest.java | 346 --- .../cluster/ClusteredCourseExportTest.java | 188 -- ...oncurrentEnrolmentWithCheckpointsTest.java | 225 -- .../codepoints/cluster/CopyCourseTest.java | 179 -- .../codepoints/cluster/CourseEditingTest.java | 176 -- .../cluster/CourseGroupChatClusterTest.java | 170 -- ...sterDeleteProjectGroupTstDISABLED3654.java | 138 -- ...ClusterNewLearningAreaTstDisabled3440.java | 130 -- .../cluster/NewLearningGroupTest.java | 127 -- .../cluster/Open2NewFoTopicsTest.java | 181 -- .../cluster/OpenNewFoTopicTest.java | 131 -- .../codepoints/cluster/package.html | 34 - .../functional/course/CopyCourseTest2.java | 121 - .../functional/course/CourseCloseTest.java | 156 -- .../course/CourseWizardVisibiltyTest.java | 112 - .../assessment/AssessmentElementTest.java | 158 -- .../course/assessment/AssessmentFormTest.java | 206 -- .../course/assessment/AssessmentTest.java | 229 -- .../course/assessment/BulkAssessmentTest.java | 177 -- .../GroupDependentAssessmentTest.java | 186 -- .../functional/course/assessment/package.html | 36 - .../test/functional/course/chat/ChatTest.java | 230 -- .../chat/CourseGroupChatAndPollingTest.java | 99 - .../course/run/AccessVisibilityTest.java | 170 -- .../run/AssessmentToolRemoveTutorTest.java | 179 -- .../run/ConcurrentEditCourseNodeTest.java | 232 -- .../run/ConcurrentForumRepliesTest.java | 184 -- .../course/run/CourseImportWithAllBBTest.java | 236 -- .../course/run/EditAndConfigureBlogTest.java | 183 -- .../run/EditAndConfigurePodcastTest.java | 205 -- .../course/run/EditInfoMessageTest.java | 241 -- .../course/run/UploadFilesInCourseTest.java | 161 -- .../functional/course/run/UseLTITest.java | 172 -- .../run/assessmentTool_RemoveTutor_step1.html | 152 -- .../run/assessmentTool_RemoveTutor_step2.html | 102 - .../run/assessmentTool_RemoveTutor_step3.html | 132 -- .../run/course_run_access_visibility.html | 616 ------ ...urse_run_concurrent_edit_course_nodes.html | 487 ---- .../course_run_concurrent_forum_replies.html | 284 --- ...CreateAndConfigureTopicAssignmentTest.java | 114 - .../CreateTopicInTopicAssignmentTest.java | 141 -- .../SelectTopicsAndAcceptCandidatesTest.java | 265 --- .../course/topic/TopicAssignmentSuite.java | 82 - .../course/topic/UploadInTopicsTest.java | 264 --- ...CourseEditor_EditCoursePreviewRunTest.java | 91 - ...seEditor_concurrencyEditAndExportTest.java | 103 - .../CoursePublishInvalidateClusterTest.java | 139 -- .../CoursePublishInvalidateSingleVMTest.java | 90 - .../courseeditor/CourseRenameTest.java | 82 - .../courseeditor/CreateBlogTest.java | 126 -- .../courseeditor/CreatePodcastTest.java | 137 -- .../DeletePublishIncompleteElementsTest.java | 116 - .../EnrolmentCreateGroupsWithCSVTest.java | 96 - .../courseeditor/MoveDeleteElementsTest.java | 150 -- .../courseeditor/OpenEditSessionTest.java | 90 - .../courseEditor_concurrenciesEditTest.java | 108 - .../courseEditor_consistencyPublishTest.java | 124 -- .../courseEditor_insertElementsAMTest.java | 124 -- .../management/CollaborationToolsTest.java | 68 - .../management/ConcurrentEnrolmentTest.java | 161 -- .../management/ConcurrentVisibilityTest.java | 132 -- .../ConfigureToolsLearningGroup.java | 108 - .../CreateLearningGroupLearningArea.java | 120 - .../EnrollmentWithSizeLimitationTest.java | 160 -- .../management/EnrolmentLearningGroup.java | 85 - .../management/EnrolmentWaitinglistTest.java | 141 -- .../management/GroupManagementCombiTest.java | 66 - ...sterUpdateLearningAreaTstDisabled3444.java | 125 -- .../management/concurrent_visibility.html | 384 ---- .../group/management/configure_tools.html | 297 --- .../create_learning_group_learning_area.html | 537 ----- .../createprojectgroup_add_users.html | 257 --- .../group/management/enrolment.html | 211 -- .../CreateProjectGroupAddUsersTest.java | 89 - .../CreateProjectGroupConfigureToolsTest.java | 101 - .../groups/CreateProjectGroupTest.java | 57 - .../groups/GroupConcurrenciesTest.java | 105 - .../functional/groups/createprojectgroup.html | 108 - .../groups_createprojectgroup_add_users | 257 --- .../groups_createprojectgroup_configure_tools | 362 --- .../olat/test/functional/home/FolderTest.java | 166 -- .../functional/home/HomeSettingsTest.java | 97 - .../org/olat/test/functional/lr/CPTest.java | 144 -- .../test/functional/lr/ClusterWikiTest.java | 146 -- .../lr/CreateLearningRessourcesTest.java | 151 -- .../functional/lr/DeleteAllCoursesTest.java | 55 - .../lr/TestBlogAndPodcastLinks.java | 98 - .../functional/lr/lr_RemoveOwnerTest.java | 94 - .../functional/lr/lr_concurrenciesDelete.java | 96 - .../functional/lr/lr_createCourseAMTest.java | 68 - .../functional/lr/lr_createCourseTest.java | 61 - .../functional/lr/lr_createGlossaryTest.java | 65 - .../lr/lr_createQuestionnaireTest.java | 59 - .../lr/lr_createResourcefolderTest.java | 61 - .../test/functional/lr/lr_createTestTest.java | 59 - .../test/functional/lr/lr_createWikiTest.java | 57 - .../CollectOrCreateArtefactTest.java | 127 -- .../portfolio/CreateFillAndShareMapTest.java | 134 -- .../search/MultiUserSearchTest.java | 262 --- .../functional/search/searchTest.properties | 24 - .../functional/test/ChangeTstInEditor.java | 91 - .../functional/test/CheckTestAttempts.java | 142 -- .../test/CombiQuestionnaireTest.java | 59 - ...eateQuestionnaireWithAllQuestionTypes.java | 106 - .../functional/test/CreateTstInEditor.java | 108 - ...ntegrateQuestionnaireAndCheckAttempts.java | 112 - .../functional/test/IntegrateTstInCourse.java | 78 - .../functional/test/TestEditorCombiTest.java | 70 - .../org/olat/test/functional/test/TstRun.java | 182 -- .../olat/test/functional/test/package.html | 12 - .../test/test_editor_combitest.html | 1429 ------------ .../usermanagement/DeleteUserTest.java | 87 - .../usermanagement/ImportUserTest.java | 103 - .../usermanagement/UserRolesTest.java | 150 -- .../usermanagement/UserSettingsTest.java | 79 - .../org/olat/test/load/LoginLoadTest.java | 108 - ...BrowserClusterEnrolmentLoadManualtest.java | 212 -- .../load/OpenAllCoursesOnFirstPageTest.java | 107 - .../olat/test/load/OpenAllCoursesTest.java | 84 - src/test/java/org/olat/test/load/package.html | 11 - .../olat/test/sandbox/CreateCourseTest.java | 361 --- .../test/sandbox/PreviewExternalPageTest.java | 70 - .../java/org/olat/test/sandbox/package.html | 12 - .../test/tutorial/cluster/clean/package.html | 14 - .../java/org/olat/test/tutorial/package.html | 12 - .../test/tutorial/reg/ServerRestartTest.java | 56 - .../testng/CourseOpenCloseTest.java | 48 - .../singlenode/testng/CoursePublishTest.java | 78 - .../singlenode/testng/CreateUserTest.java | 47 - .../testng/SimpleTutorialJUnitTest.java | 69 - .../singlenode/testng/SimpleTutorialTest.java | 67 - .../olat/test/util/MessageOrderingTest.java | 83 - .../util/selenium/BaseSeleneseTestCase.java | 100 - .../test/util/selenium/OlatLoginHelper.java | 300 --- .../olat/test/util/selenium/PageLoadWait.java | 72 - .../test/util/selenium/SeleniumHelper.java | 81 - .../test/util/selenium/SeleniumManager.java | 237 -- .../util/selenium/log/Log4jSocketServer.java | 159 -- .../selenium/log/LoggingSeleniumWrapper.java | 770 ------- .../olatapi/CannotExecuteException.java | 44 - .../selenium/olatapi/OLATSeleniumWrapper.java | 102 - .../selenium/olatapi/OLATWorkflowHelper.java | 130 -- .../util/selenium/olatapi/WorkflowHelper.java | 797 ------- .../olatapi/admin/Administration.java | 54 - .../olatapi/components/ChatComponent.java | 205 -- .../components/UserTableComponent.java | 64 - .../course/editor/AssessmentEditor.java | 88 - .../olatapi/course/editor/BlogEditor.java | 134 -- .../olatapi/course/editor/CPEditor.java | 43 - .../olatapi/course/editor/CourseEditor.java | 608 ----- .../course/editor/CourseElementEditor.java | 310 --- .../olatapi/course/editor/CoursePreview.java | 69 - .../course/editor/EnrolmentEditor.java | 131 -- .../olatapi/course/editor/FolderEditor.java | 79 - .../olatapi/course/editor/LTIPageEditor.java | 114 - .../olatapi/course/editor/PodcastEditor.java | 142 -- .../editor/QuestionnaireElementEditor.java | 83 - .../course/editor/SelfTestElementEditor.java | 109 - .../course/editor/SinglePageEditor.java | 119 - .../course/editor/StructureEditor.java | 59 - .../course/editor/TestElementEditor.java | 145 -- .../course/editor/TopicAssignmentEditor.java | 108 - .../olatapi/course/run/AssessmentElement.java | 62 - .../olatapi/course/run/AssessmentForm.java | 154 -- .../olatapi/course/run/AssessmentTool.java | 142 -- .../selenium/olatapi/course/run/BlogRun.java | 65 - .../olatapi/course/run/CourseElement.java | 42 - .../olatapi/course/run/CourseRun.java | 418 ---- .../olatapi/course/run/DisposedCourseRun.java | 54 - .../olatapi/course/run/EnrolmentRun.java | 70 - .../olatapi/course/run/FileDialog.java | 61 - .../selenium/olatapi/course/run/Forum.java | 242 -- .../olatapi/course/run/InfoMessageRun.java | 149 -- .../selenium/olatapi/course/run/LTIRun.java | 49 - .../olatapi/course/run/PodcastRun.java | 53 - .../olatapi/course/run/QTIHelper.java | 59 - .../course/run/QuestionnaireElement.java | 56 - .../olatapi/course/run/QuestionnaireRun.java | 129 -- .../selenium/olatapi/course/run/SCORM.java | 62 - .../olatapi/course/run/StructureElement.java | 50 - .../olatapi/course/run/TestElement.java | 94 - .../selenium/olatapi/course/run/TestRun.java | 201 -- .../course/run/TopicAssignmentRun.java | 212 -- .../olatapi/course/run/TopicEditor.java | 236 -- .../selenium/olatapi/course/run/WikiRun.java | 197 -- .../util/selenium/olatapi/folder/Folder.java | 336 --- .../util/selenium/olatapi/group/Group.java | 144 -- .../selenium/olatapi/group/GroupAdmin.java | 418 ---- .../olatapi/group/GroupManagement.java | 249 --- .../util/selenium/olatapi/group/Groups.java | 112 - .../selenium/olatapi/group/LearningArea.java | 63 - .../selenium/olatapi/group/RightsAdmin.java | 83 - .../olatapi/group/RightsManagement.java | 78 - .../olatapi/home/EvidencesOfAchievement.java | 118 - .../test/util/selenium/olatapi/home/Home.java | 115 - .../olatapi/home/HomeConfigurator.java | 84 - .../selenium/olatapi/home/MySettings.java | 179 -- .../olatapi/i18n/LocalStringProvider.java | 33 - .../selenium/olatapi/lr/BlogResource.java | 169 -- .../selenium/olatapi/lr/CPResourceEditor.java | 246 --- .../util/selenium/olatapi/lr/Catalog.java | 55 - .../selenium/olatapi/lr/CourseWizard.java | 145 -- .../selenium/olatapi/lr/LRDetailedView.java | 390 ---- .../olatapi/lr/LearningResources.java | 613 ------ .../selenium/olatapi/lr/PodcastResource.java | 137 -- .../selenium/olatapi/lr/ResourceEditor.java | 59 - .../test/util/selenium/olatapi/package.html | 24 - .../olatapi/portfolio/EPCollectWizard.java | 110 - .../olatapi/portfolio/EPExtensions.java | 96 - .../olatapi/portfolio/EPMapEditor.java | 121 - .../olatapi/qti/EssayQuestionEditor.java | 51 - .../olatapi/qti/FIBQuestionEditor.java | 105 - .../olatapi/qti/KPrimQuestionEditor.java | 96 - .../olatapi/qti/MCQuestionEditor.java | 87 - .../selenium/olatapi/qti/QuestionEditor.java | 98 - .../olatapi/qti/QuestionnaireEditor.java | 94 - .../olatapi/qti/SCQuestionEditor.java | 86 - .../selenium/olatapi/qti/SectionEditor.java | 62 - .../util/selenium/olatapi/qti/TestEditor.java | 242 -- .../selenium/olatapi/user/UserManagement.java | 263 --- .../selenium/olatapi/user/UserSettings.java | 169 -- .../olat/test/util/setup/OlatLoginInfos.java | 95 - .../org/olat/test/util/setup/SetupType.java | 51 - .../olat/test/util/setup/context/Context.java | 535 ----- .../setup/context/SeleniumLocallyContext.java | 116 - .../util/setup/context/SeleniumSuite.java | 74 - .../util/setup/steps/RuntimeExecHelper.java | 220 -- .../test/util/testng/JUnitXMLReporter.java | 410 ---- .../testng/JUnitXMLReporterOutputStream.java | 66 - .../test/util/testng/SysOutPrintStream.java | 42 - .../java/org/olat/test/util/testng/Tuple.java | 56 - .../profile/cluster/activemq/activemq.xml | 16 - .../cluster/tomcat-one/conf/server.xml | 151 -- .../tomcat-one/lib/olat.local.properties | 82 - .../cluster/tomcat-one/lib/treecache.xml | 228 -- .../cluster/tomcat-two/conf/server.xml | 151 -- .../tomcat-two/lib/olat.local.properties | 81 - .../cluster/tomcat-two/lib/treecache.xml | 228 -- .../profile/mysql/olat.arquillian.properties | 53 + .../selenium/config/additionalUserContext.xml | 115 - .../selenium/config/defaultcontext.xml | 46 - src/test/profile/selenium/config/testng.xml | 132 -- .../selenium/firefoxprofile/.parentlock | 0 .../selenium/firefoxprofile/Cache/_CACHE_001_ | Bin 4096 -> 0 bytes .../selenium/firefoxprofile/Cache/_CACHE_002_ | Bin 4096 -> 0 bytes .../selenium/firefoxprofile/Cache/_CACHE_003_ | Bin 4096 -> 0 bytes .../selenium/firefoxprofile/Cache/_CACHE_MAP_ | Bin 8468 -> 0 bytes .../profile/selenium/firefoxprofile/XPC.mfasl | Bin 2430754 -> 0 bytes .../profile/selenium/firefoxprofile/XUL.mfasl | Bin 2839668 -> 0 bytes .../bookmarkbackups/bookmarks-2011-04-29.json | 1 - .../profile/selenium/firefoxprofile/cert8.db | Bin 65536 -> 0 bytes .../selenium/firefoxprofile/compatibility.ini | 5 - .../selenium/firefoxprofile/compreg.dat | 1957 ----------------- .../firefoxprofile/content-prefs.sqlite | Bin 7168 -> 0 bytes .../selenium/firefoxprofile/cookies.sqlite | Bin 2048 -> 0 bytes .../selenium/firefoxprofile/downloads.sqlite | Bin 2048 -> 0 bytes .../selenium/firefoxprofile/extensions.cache | 7 - .../selenium/firefoxprofile/extensions.ini | 9 - .../selenium/firefoxprofile/extensions.rdf | 159 -- .../firefoxprofile/firebug/annotations.json | 1 - .../firefoxprofile/formhistory.sqlite | Bin 4096 -> 0 bytes .../profile/selenium/firefoxprofile/key3.db | Bin 16384 -> 0 bytes .../selenium/firefoxprofile/localstore.rdf | 66 - .../selenium/firefoxprofile/mimeTypes.rdf | 67 - .../firefoxprofile/permissions.sqlite | Bin 2048 -> 0 bytes .../selenium/firefoxprofile/places.sqlite | Bin 143360 -> 0 bytes .../firefoxprofile/places.sqlite-journal | 0 .../selenium/firefoxprofile/pluginreg.dat | 90 - .../profile/selenium/firefoxprofile/prefs.js | 48 - .../selenium/firefoxprofile/search.json | 1 - .../selenium/firefoxprofile/search.sqlite | Bin 2048 -> 0 bytes .../profile/selenium/firefoxprofile/secmod.db | Bin 16384 -> 0 bytes .../selenium/firefoxprofile/sessionstore.js | 1 - .../firefoxprofile/urlclassifier3.sqlite | Bin 32768 -> 0 bytes .../firefoxprofile/webappsstore.sqlite | Bin 3072 -> 0 bytes .../profile/selenium/firefoxprofile/xpti.dat | 1442 ------------ .../selenium/ui-map/commons-pageset.xml | 334 --- .../selenium/ui-map/course-pageset.xml | 322 --- .../selenium/ui-map/courseEditor-pageset.xml | 928 -------- .../profile/selenium/ui-map/dmz-pageset.xml | 17 - .../profile/selenium/ui-map/group-pageset.xml | 81 - .../ui-map/groupAdministration-pageset.xml | 8 - .../ui-map/groupManagement-pageset.xml | 114 - .../selenium/ui-map/groups-pageset.xml | 46 - .../profile/selenium/ui-map/home-pageset.xml | 202 -- .../selenium/ui-map/infoMessage-pageset.xml | 26 - .../ui-map/learningResources-pageset.xml | 254 --- .../profile/selenium/ui-map/olat-ui-map.xml | 31 - .../selenium/ui-map/portfolio-pageset.xml | 79 - .../selenium/ui-map/projectBroker-pageset.xml | 86 - .../profile/selenium/ui-map/qti-pageset.xml | 57 - .../ui-map/resources/gen_olat-ui-map.xsl | 476 ---- .../resources/gen_selenium-map-tests.xsl | 694 ------ .../ui-map/resources/olat-ui-map-include.dtd | 72 - .../selenium/ui-map/resources/olat-ui-map.dtd | 72 - .../ui-map/resources/resolve_includes.xsl | 23 - .../selenium/ui-map/resources/rollups.js | 35 - .../selenium/ui-map/resources/ui-element.js | 1627 -------------- .../ui-map/rightsManagement-pageset.xml | 26 - .../ui-map/systemAdministration-pageset.xml | 20 - .../profile/selenium/ui-map/tabs-pageset.xml | 37 - .../selenium/ui-map/testEditor-pageset.xml | 177 -- .../ui-map/userAdministration-pageset.xml | 122 - src/test/resources/arquillian.xml | 18 + 332 files changed, 529 insertions(+), 47982 deletions(-) delete mode 100644 src/test/HOWTO-UnitTesting rename src/test/java/org/olat/core/test/{OlatcoreTestCaseWithMocking.java => OlatcoreTestWithMocking.java} (97%) create mode 100644 src/test/java/org/olat/login/FunctionalLoginTest.java create mode 100644 src/test/java/org/olat/test/ArquillianDeployments.java rename src/test/java/org/olat/test/{util/selenium/olatapi/portfolio/EPArtefactSearch.java => Selenium2TestsJunit4.java} (56%) delete mode 100644 src/test/java/org/olat/test/demo/CourseImportTest.java delete mode 100644 src/test/java/org/olat/test/demo/CourseOpenCloseTest.java delete mode 100644 src/test/java/org/olat/test/demo/OpenForumThreadTest.java delete mode 100644 src/test/java/org/olat/test/demo/SeleniumDemo1Test.java delete mode 100644 src/test/java/org/olat/test/demo/SeleniumDemo2Test.java delete mode 100644 src/test/java/org/olat/test/demo/SeleniumTestingDemoTest3_html.html delete mode 100644 src/test/java/org/olat/test/demo/ShowCourseContentTest.java delete mode 100644 src/test/java/org/olat/test/demo/package.html delete mode 100644 src/test/java/org/olat/test/demo/selenium.olat.uzh.context.xml delete mode 100644 src/test/java/org/olat/test/functional/administration/ASetupFNTestCase.java delete mode 100644 src/test/java/org/olat/test/functional/administration/InfoMessageClusterTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/AssessmentWithCodepointsTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/ClusteredCourseExportTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/ConcurrentEnrolmentWithCheckpointsTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/CopyCourseTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/CourseEditingTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/CourseGroupChatClusterTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/MultiBrowserClusterDeleteProjectGroupTstDISABLED3654.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/MultiBrowserClusterNewLearningAreaTstDisabled3440.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/NewLearningGroupTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/Open2NewFoTopicsTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/OpenNewFoTopicTest.java delete mode 100644 src/test/java/org/olat/test/functional/codepoints/cluster/package.html delete mode 100644 src/test/java/org/olat/test/functional/course/CopyCourseTest2.java delete mode 100644 src/test/java/org/olat/test/functional/course/CourseCloseTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/CourseWizardVisibiltyTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/assessment/AssessmentElementTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/assessment/AssessmentFormTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/assessment/AssessmentTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/assessment/BulkAssessmentTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/assessment/GroupDependentAssessmentTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/assessment/package.html delete mode 100644 src/test/java/org/olat/test/functional/course/chat/ChatTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/chat/CourseGroupChatAndPollingTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/AccessVisibilityTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/AssessmentToolRemoveTutorTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/ConcurrentEditCourseNodeTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/ConcurrentForumRepliesTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/CourseImportWithAllBBTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/EditAndConfigureBlogTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/EditAndConfigurePodcastTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/EditInfoMessageTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/UploadFilesInCourseTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/UseLTITest.java delete mode 100644 src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step1.html delete mode 100644 src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step2.html delete mode 100644 src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step3.html delete mode 100644 src/test/java/org/olat/test/functional/course/run/course_run_access_visibility.html delete mode 100644 src/test/java/org/olat/test/functional/course/run/course_run_concurrent_edit_course_nodes.html delete mode 100644 src/test/java/org/olat/test/functional/course/run/course_run_concurrent_forum_replies.html delete mode 100644 src/test/java/org/olat/test/functional/course/topic/CreateAndConfigureTopicAssignmentTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/topic/CreateTopicInTopicAssignmentTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/topic/SelectTopicsAndAcceptCandidatesTest.java delete mode 100644 src/test/java/org/olat/test/functional/course/topic/TopicAssignmentSuite.java delete mode 100644 src/test/java/org/olat/test/functional/course/topic/UploadInTopicsTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/CourseEditor_EditCoursePreviewRunTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/CourseEditor_concurrencyEditAndExportTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/CoursePublishInvalidateClusterTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/CoursePublishInvalidateSingleVMTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/CourseRenameTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/CreateBlogTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/CreatePodcastTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/DeletePublishIncompleteElementsTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/EnrolmentCreateGroupsWithCSVTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/MoveDeleteElementsTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/OpenEditSessionTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/courseEditor_concurrenciesEditTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/courseEditor_consistencyPublishTest.java delete mode 100644 src/test/java/org/olat/test/functional/courseeditor/courseEditor_insertElementsAMTest.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/CollaborationToolsTest.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/ConcurrentEnrolmentTest.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/ConcurrentVisibilityTest.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/ConfigureToolsLearningGroup.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/CreateLearningGroupLearningArea.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/EnrollmentWithSizeLimitationTest.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/EnrolmentLearningGroup.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/EnrolmentWaitinglistTest.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/GroupManagementCombiTest.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/MultiBrowserClusterUpdateLearningAreaTstDisabled3444.java delete mode 100644 src/test/java/org/olat/test/functional/group/management/concurrent_visibility.html delete mode 100644 src/test/java/org/olat/test/functional/group/management/configure_tools.html delete mode 100644 src/test/java/org/olat/test/functional/group/management/create_learning_group_learning_area.html delete mode 100644 src/test/java/org/olat/test/functional/group/management/createprojectgroup_add_users.html delete mode 100644 src/test/java/org/olat/test/functional/group/management/enrolment.html delete mode 100644 src/test/java/org/olat/test/functional/groups/CreateProjectGroupAddUsersTest.java delete mode 100644 src/test/java/org/olat/test/functional/groups/CreateProjectGroupConfigureToolsTest.java delete mode 100644 src/test/java/org/olat/test/functional/groups/CreateProjectGroupTest.java delete mode 100644 src/test/java/org/olat/test/functional/groups/GroupConcurrenciesTest.java delete mode 100644 src/test/java/org/olat/test/functional/groups/createprojectgroup.html delete mode 100644 src/test/java/org/olat/test/functional/groups/groups_createprojectgroup_add_users delete mode 100644 src/test/java/org/olat/test/functional/groups/groups_createprojectgroup_configure_tools delete mode 100644 src/test/java/org/olat/test/functional/home/FolderTest.java delete mode 100644 src/test/java/org/olat/test/functional/home/HomeSettingsTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/CPTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/ClusterWikiTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/CreateLearningRessourcesTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/DeleteAllCoursesTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/TestBlogAndPodcastLinks.java delete mode 100644 src/test/java/org/olat/test/functional/lr/lr_RemoveOwnerTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/lr_concurrenciesDelete.java delete mode 100644 src/test/java/org/olat/test/functional/lr/lr_createCourseAMTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/lr_createCourseTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/lr_createGlossaryTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/lr_createQuestionnaireTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/lr_createResourcefolderTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/lr_createTestTest.java delete mode 100644 src/test/java/org/olat/test/functional/lr/lr_createWikiTest.java delete mode 100644 src/test/java/org/olat/test/functional/portfolio/CollectOrCreateArtefactTest.java delete mode 100644 src/test/java/org/olat/test/functional/portfolio/CreateFillAndShareMapTest.java delete mode 100644 src/test/java/org/olat/test/functional/search/MultiUserSearchTest.java delete mode 100644 src/test/java/org/olat/test/functional/search/searchTest.properties delete mode 100644 src/test/java/org/olat/test/functional/test/ChangeTstInEditor.java delete mode 100644 src/test/java/org/olat/test/functional/test/CheckTestAttempts.java delete mode 100644 src/test/java/org/olat/test/functional/test/CombiQuestionnaireTest.java delete mode 100644 src/test/java/org/olat/test/functional/test/CreateQuestionnaireWithAllQuestionTypes.java delete mode 100644 src/test/java/org/olat/test/functional/test/CreateTstInEditor.java delete mode 100644 src/test/java/org/olat/test/functional/test/IntegrateQuestionnaireAndCheckAttempts.java delete mode 100644 src/test/java/org/olat/test/functional/test/IntegrateTstInCourse.java delete mode 100644 src/test/java/org/olat/test/functional/test/TestEditorCombiTest.java delete mode 100644 src/test/java/org/olat/test/functional/test/TstRun.java delete mode 100644 src/test/java/org/olat/test/functional/test/package.html delete mode 100644 src/test/java/org/olat/test/functional/test/test_editor_combitest.html delete mode 100644 src/test/java/org/olat/test/functional/usermanagement/DeleteUserTest.java delete mode 100644 src/test/java/org/olat/test/functional/usermanagement/ImportUserTest.java delete mode 100644 src/test/java/org/olat/test/functional/usermanagement/UserRolesTest.java delete mode 100644 src/test/java/org/olat/test/functional/usermanagement/UserSettingsTest.java delete mode 100644 src/test/java/org/olat/test/load/LoginLoadTest.java delete mode 100644 src/test/java/org/olat/test/load/MultiBrowserClusterEnrolmentLoadManualtest.java delete mode 100644 src/test/java/org/olat/test/load/OpenAllCoursesOnFirstPageTest.java delete mode 100644 src/test/java/org/olat/test/load/OpenAllCoursesTest.java delete mode 100644 src/test/java/org/olat/test/load/package.html delete mode 100644 src/test/java/org/olat/test/sandbox/CreateCourseTest.java delete mode 100644 src/test/java/org/olat/test/sandbox/PreviewExternalPageTest.java delete mode 100644 src/test/java/org/olat/test/sandbox/package.html delete mode 100644 src/test/java/org/olat/test/tutorial/cluster/clean/package.html delete mode 100644 src/test/java/org/olat/test/tutorial/package.html delete mode 100644 src/test/java/org/olat/test/tutorial/reg/ServerRestartTest.java delete mode 100644 src/test/java/org/olat/test/tutorial/singlenode/testng/CourseOpenCloseTest.java delete mode 100644 src/test/java/org/olat/test/tutorial/singlenode/testng/CoursePublishTest.java delete mode 100644 src/test/java/org/olat/test/tutorial/singlenode/testng/CreateUserTest.java delete mode 100644 src/test/java/org/olat/test/tutorial/singlenode/testng/SimpleTutorialJUnitTest.java delete mode 100644 src/test/java/org/olat/test/tutorial/singlenode/testng/SimpleTutorialTest.java delete mode 100644 src/test/java/org/olat/test/util/MessageOrderingTest.java delete mode 100644 src/test/java/org/olat/test/util/selenium/BaseSeleneseTestCase.java delete mode 100644 src/test/java/org/olat/test/util/selenium/OlatLoginHelper.java delete mode 100644 src/test/java/org/olat/test/util/selenium/PageLoadWait.java delete mode 100644 src/test/java/org/olat/test/util/selenium/SeleniumHelper.java delete mode 100644 src/test/java/org/olat/test/util/selenium/SeleniumManager.java delete mode 100644 src/test/java/org/olat/test/util/selenium/log/Log4jSocketServer.java delete mode 100644 src/test/java/org/olat/test/util/selenium/log/LoggingSeleniumWrapper.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/CannotExecuteException.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/OLATSeleniumWrapper.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/OLATWorkflowHelper.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/WorkflowHelper.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/admin/Administration.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/components/ChatComponent.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/components/UserTableComponent.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/AssessmentEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/BlogEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CPEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CourseEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CourseElementEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CoursePreview.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/EnrolmentEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/FolderEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/LTIPageEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/PodcastEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/QuestionnaireElementEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/SelfTestElementEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/SinglePageEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/StructureEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/TestElementEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/editor/TopicAssignmentEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentElement.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentForm.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentTool.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/BlogRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/CourseElement.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/CourseRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/DisposedCourseRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/EnrolmentRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/FileDialog.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/Forum.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/InfoMessageRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/LTIRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/PodcastRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/QTIHelper.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/QuestionnaireElement.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/QuestionnaireRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/SCORM.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/StructureElement.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/TestElement.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/TestRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/TopicAssignmentRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/TopicEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/course/run/WikiRun.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/folder/Folder.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/group/Group.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/group/GroupAdmin.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/group/GroupManagement.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/group/Groups.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/group/LearningArea.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/group/RightsAdmin.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/group/RightsManagement.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/home/EvidencesOfAchievement.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/home/Home.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/home/HomeConfigurator.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/home/MySettings.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/i18n/LocalStringProvider.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/lr/BlogResource.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/lr/CPResourceEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/lr/Catalog.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/lr/CourseWizard.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/lr/LRDetailedView.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/lr/LearningResources.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/lr/PodcastResource.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/lr/ResourceEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/package.html delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPCollectWizard.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPExtensions.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPMapEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/qti/EssayQuestionEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/qti/FIBQuestionEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/qti/KPrimQuestionEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/qti/MCQuestionEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/qti/QuestionEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/qti/QuestionnaireEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/qti/SCQuestionEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/qti/SectionEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/qti/TestEditor.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/user/UserManagement.java delete mode 100644 src/test/java/org/olat/test/util/selenium/olatapi/user/UserSettings.java delete mode 100644 src/test/java/org/olat/test/util/setup/OlatLoginInfos.java delete mode 100644 src/test/java/org/olat/test/util/setup/SetupType.java delete mode 100644 src/test/java/org/olat/test/util/setup/context/Context.java delete mode 100644 src/test/java/org/olat/test/util/setup/context/SeleniumLocallyContext.java delete mode 100644 src/test/java/org/olat/test/util/setup/context/SeleniumSuite.java delete mode 100644 src/test/java/org/olat/test/util/setup/steps/RuntimeExecHelper.java delete mode 100644 src/test/java/org/olat/test/util/testng/JUnitXMLReporter.java delete mode 100644 src/test/java/org/olat/test/util/testng/JUnitXMLReporterOutputStream.java delete mode 100644 src/test/java/org/olat/test/util/testng/SysOutPrintStream.java delete mode 100644 src/test/java/org/olat/test/util/testng/Tuple.java delete mode 100644 src/test/profile/cluster/activemq/activemq.xml delete mode 100644 src/test/profile/cluster/tomcat-one/conf/server.xml delete mode 100644 src/test/profile/cluster/tomcat-one/lib/olat.local.properties delete mode 100644 src/test/profile/cluster/tomcat-one/lib/treecache.xml delete mode 100644 src/test/profile/cluster/tomcat-two/conf/server.xml delete mode 100644 src/test/profile/cluster/tomcat-two/lib/olat.local.properties delete mode 100644 src/test/profile/cluster/tomcat-two/lib/treecache.xml create mode 100644 src/test/profile/mysql/olat.arquillian.properties delete mode 100644 src/test/profile/selenium/config/additionalUserContext.xml delete mode 100644 src/test/profile/selenium/config/defaultcontext.xml delete mode 100644 src/test/profile/selenium/config/testng.xml delete mode 100644 src/test/profile/selenium/firefoxprofile/.parentlock delete mode 100644 src/test/profile/selenium/firefoxprofile/Cache/_CACHE_001_ delete mode 100644 src/test/profile/selenium/firefoxprofile/Cache/_CACHE_002_ delete mode 100644 src/test/profile/selenium/firefoxprofile/Cache/_CACHE_003_ delete mode 100644 src/test/profile/selenium/firefoxprofile/Cache/_CACHE_MAP_ delete mode 100644 src/test/profile/selenium/firefoxprofile/XPC.mfasl delete mode 100644 src/test/profile/selenium/firefoxprofile/XUL.mfasl delete mode 100644 src/test/profile/selenium/firefoxprofile/bookmarkbackups/bookmarks-2011-04-29.json delete mode 100644 src/test/profile/selenium/firefoxprofile/cert8.db delete mode 100644 src/test/profile/selenium/firefoxprofile/compatibility.ini delete mode 100644 src/test/profile/selenium/firefoxprofile/compreg.dat delete mode 100644 src/test/profile/selenium/firefoxprofile/content-prefs.sqlite delete mode 100644 src/test/profile/selenium/firefoxprofile/cookies.sqlite delete mode 100644 src/test/profile/selenium/firefoxprofile/downloads.sqlite delete mode 100644 src/test/profile/selenium/firefoxprofile/extensions.cache delete mode 100644 src/test/profile/selenium/firefoxprofile/extensions.ini delete mode 100644 src/test/profile/selenium/firefoxprofile/extensions.rdf delete mode 100644 src/test/profile/selenium/firefoxprofile/firebug/annotations.json delete mode 100644 src/test/profile/selenium/firefoxprofile/formhistory.sqlite delete mode 100644 src/test/profile/selenium/firefoxprofile/key3.db delete mode 100644 src/test/profile/selenium/firefoxprofile/localstore.rdf delete mode 100644 src/test/profile/selenium/firefoxprofile/mimeTypes.rdf delete mode 100644 src/test/profile/selenium/firefoxprofile/permissions.sqlite delete mode 100644 src/test/profile/selenium/firefoxprofile/places.sqlite delete mode 100644 src/test/profile/selenium/firefoxprofile/places.sqlite-journal delete mode 100644 src/test/profile/selenium/firefoxprofile/pluginreg.dat delete mode 100644 src/test/profile/selenium/firefoxprofile/prefs.js delete mode 100644 src/test/profile/selenium/firefoxprofile/search.json delete mode 100644 src/test/profile/selenium/firefoxprofile/search.sqlite delete mode 100644 src/test/profile/selenium/firefoxprofile/secmod.db delete mode 100644 src/test/profile/selenium/firefoxprofile/sessionstore.js delete mode 100644 src/test/profile/selenium/firefoxprofile/urlclassifier3.sqlite delete mode 100644 src/test/profile/selenium/firefoxprofile/webappsstore.sqlite delete mode 100644 src/test/profile/selenium/firefoxprofile/xpti.dat delete mode 100644 src/test/profile/selenium/ui-map/commons-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/course-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/courseEditor-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/dmz-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/group-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/groupAdministration-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/groupManagement-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/groups-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/home-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/infoMessage-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/learningResources-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/olat-ui-map.xml delete mode 100644 src/test/profile/selenium/ui-map/portfolio-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/projectBroker-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/qti-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/resources/gen_olat-ui-map.xsl delete mode 100644 src/test/profile/selenium/ui-map/resources/gen_selenium-map-tests.xsl delete mode 100644 src/test/profile/selenium/ui-map/resources/olat-ui-map-include.dtd delete mode 100644 src/test/profile/selenium/ui-map/resources/olat-ui-map.dtd delete mode 100644 src/test/profile/selenium/ui-map/resources/resolve_includes.xsl delete mode 100644 src/test/profile/selenium/ui-map/resources/rollups.js delete mode 100644 src/test/profile/selenium/ui-map/resources/ui-element.js delete mode 100644 src/test/profile/selenium/ui-map/rightsManagement-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/systemAdministration-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/tabs-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/testEditor-pageset.xml delete mode 100644 src/test/profile/selenium/ui-map/userAdministration-pageset.xml create mode 100644 src/test/resources/arquillian.xml diff --git a/TESTING.README.LATEST b/TESTING.README.LATEST index 8b1c7bc9620..0c8471e4734 100644 --- a/TESTING.README.LATEST +++ b/TESTING.README.LATEST @@ -66,14 +66,11 @@ junit and integration tests in OpenOLAT 8 * Execute selenium functional integration tests ----------------------------------------- -- Selenium functional tests on GUI layer that load OpenOLAT in a two node cluster (execution time ca. 5-6h!) - mvn clean verify -Pseleniumtests +- Selenium functional tests on GUI layer that load OpenOLAT with Arquillian in a Tomcat 7.0.27 managed by Arquillian + mvn -Parquillian clean package - The selenium test results can be found at target/failsafe-reports/SeleniumTesting72x/* -- When Seleniums don't work, try to debug like this: - mvn verify -Pseleniumtests,debug | tee /tmp/mvn72x.log | grep execution - - It is recommended to use a Jenkins setup to administrate the test results. The Selenium results have the same format as the junit test protocols @@ -87,19 +84,3 @@ junit and integration tests in OpenOLAT 8 - Wait until the servers have started (in the log /tmp/mvn72.log an information appears that the server can be stopped with Crl-C) - In Eclipse right-click a selenium testcase form src/test/java/org/olat/test/functional/* and select "run in jUnit" - - -* Execute a single selenium functional integration test on the command line ------------------------------------------ -- Configure the tests to be run in the file src/test/profile/selenium/config/testng.xml - -- Run the tests - mvn clean verify -Pseleniumtests - - -* Fixing Selenium testcases ------------------------------------------ -- Fix broken code or broken testcases in src/test/profile/selenium/ui-map/* - -- When changing the pagesets, update UI-map afterwards using the following command - mvn clean package -Pseleniumtests diff --git a/pom.xml b/pom.xml index 7277cc4b7c2..3feb8fb5d17 100644 --- a/pom.xml +++ b/pom.xml @@ -64,7 +64,7 @@ <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <targetJdk>1.6</targetJdk> - <org.springframework.version>3.0.5.RELEASE</org.springframework.version> + <org.springframework.version>3.1.1.RELEASE</org.springframework.version> <!-- properties for testing and Q&A --> <!-- by default no tests are executed so far (April 2011). Use appropriate profiles and properties on the command line --> @@ -696,480 +696,59 @@ </dependency> </dependencies> </profile> - - <profile> - <!-- activate this profile to run Selenium based Integration Tests against a cluster running locally - configures: - - surefire-plugin to include none of the IntegrationTests - - failsafe-plugin to include Seleniumtests via testng.xml - - in general hooks into: (please check the profile execution against the docu) - - initialize - ... cleans the tomcats working directories. - - generate-resources - ... resources-plugin to copy the maven.build.properties and selenium specific additionalUserContext.xml and specific olat.local.properties for tomcat-one and tomcat-two. - ... copies jms configuration - - generate-test-resources - ... antrun-plugin to transform the olat page sets into selenium JS, creates the olat-user-extension.js file for selenium server start. - ... resources-plugin to copy the maven.build.properties to the test-classes tree, would be needed for failsafe *ITCase tests. - - pre-integration-test - ... selenium-maven-plugin to start the selenium server (runs in the background and logs output to target/selenium/server.log) using the generated olat-user-extension.js - ... starts an active mq jms for cluster instances. - ... cargo-maven2-plugin deploying the asset openolat-lms into two tomcats which must be installed beforehand with (-Pinstall-tomcats) - - post-integration-test - ... cargo-maven2-plugin stops the started tomcat(s) - ... stops active mq - ... stops selenium - --> - <id>seleniumtests</id> - <properties> - <!-- seleniumtests are started with the command mvn verify -Pseleniumtests --> - <skipTests>false</skipTests> - <skipITs>false</skipITs> - </properties> - <build> - - <plugins> - - <plugin> - <!-- Documentation: http://maven.apache.org/plugins/maven-surefire-plugin/ --> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <version>2.7.2</version> - <configuration> - <includes> - <include>none</include> - </includes> - </configuration> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-antrun-plugin</artifactId> - <version>1.6</version> - <executions> - <execution> - <phase>generate-test-resources</phase> - <configuration> - <target unless="maven.test.skip"> - <echo message="Generate ../target/olat-user-extensions.js for Seleniumserverstart"/> - <xslt in="${basedir}/src/test/profile/selenium/ui-map/olat-ui-map.xml" out="${basedir}/target/generated_combined_olat-ui-map.xml" style="${basedir}/src/test/profile/selenium/ui-map/resources/resolve_includes.xsl"/> - <xslt in="${basedir}/target/generated_combined_olat-ui-map.xml" out="${basedir}/target/olat-ui-map.js" style="${basedir}/src/test/profile/selenium/ui-map/resources/gen_olat-ui-map.xsl"> - </xslt> - <concat destfile="${basedir}/target/olat-user-extensions.js"> - <fileset file="${basedir}/target/olat-ui-map.js"/> - <fileset file="${basedir}/src/test/profile/selenium/ui-map/resources/rollups.js"/> - </concat> - </target> - </configuration> - <goals> - <goal>run</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <artifactId>maven-resources-plugin</artifactId> - <version>2.4.3</version> - <executions> - <execution> - <id>tomcat-one-server_xml</id> - <phase>initialize</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>${container.tomcat.one.home}/conf/</outputDirectory> - <resources> - <resource> - <directory>src/test/profile/cluster/tomcat-one/conf</directory> - <includes> - <include>server.xml</include> - </includes> - <filtering>true</filtering> - </resource> - </resources> - </configuration> - </execution> - <execution> - <id>tomcat-two-server_xml</id> - <phase>initialize</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>${container.tomcat.two.home}/conf/</outputDirectory> - <resources> - <resource> - <directory>src/test/profile/cluster/tomcat-two/conf</directory> - <includes> - <include>server.xml</include> - </includes> - <filtering>true</filtering> - </resource> - </resources> - </configuration> - </execution> - <execution> - <id>seleniumtests-config-tomcat-one</id> - <phase>initialize</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>${container.tomcat.one.home}/lib/</outputDirectory> - <overwrite>true</overwrite> - <resources> - <!-- olat.local.properties with different environments - typically meant for mysql / postgresql / etc. --> - <resource> - <directory>src/test/profile/cluster/tomcat-one/lib</directory> - <includes> - <include>olat.local.properties</include> - <include>treecache.xml</include> - </includes> - <filtering>true</filtering> - </resource> - <!-- Users to be created on OLAT startup for selenium testcases are configured in this file --> - <resource> - <directory>${selenium.config.files.path}</directory> - <includes> - <include>additionalUserContext.xml</include> - </includes> - <filtering>true</filtering> - </resource> - </resources> - </configuration> - </execution> - <execution> - <id>seleniumtests-config-activemq</id> - <phase>initialize</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>cargo/</outputDirectory> - <overwrite>true</overwrite> - <resources> - <resource> - <directory>src/test/profile/cluster/activemq</directory> - <includes> - <include>activemq.xml</include> - </includes> - <filtering>true</filtering> - </resource> - </resources> - </configuration> - </execution> - <execution> - <id>seleniumtests-config-tomcat-two</id> - <phase>initialize</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>${container.tomcat.two.home}/lib/</outputDirectory> - <overwrite>true</overwrite> - <resources> - <resource> - <directory>src/test/profile/cluster/tomcat-two/lib</directory> - <includes> - <include>olat.local.properties</include> - <include>treecache.xml</include> - </includes> - <filtering>true</filtering> - </resource> - </resources> - </configuration> - </execution> - <execution> - <id>seleniumtests-config-misc</id> - <phase>process-test-resources</phase> - <goals> - <goal>copy-resources</goal> - </goals> - <configuration> - <outputDirectory>${basedir}/target/test-classes</outputDirectory> - <resources> - <resource> - <directory>${selenium.config.files.path}</directory> - <includes> - <include>defaultcontext.xml</include> - <include>testng.xml</include> - </includes> - <filtering>true</filtering> - </resource> - </resources> - </configuration> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.apache.activemq.tooling</groupId> - <artifactId>maven-activemq-plugin</artifactId> - <version>5.3.0</version> - <executions> - <execution> - <phase>pre-integration-test</phase> - <goals> - <goal>run</goal> - </goals> - <configuration> - <configUri>xbean:file:${basedir}/cargo/activemq.xml</configUri> - <fork>true</fork> - <systemProperties> - <property> - <name>org.apache.activemq.default.directory.prefix</name> - <value>./target/</value> - </property> - </systemProperties> - </configuration> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>selenium-maven-plugin</artifactId> - <version>1.1</version> - <executions> - <execution> - <phase>pre-integration-test</phase> - <goals> - <goal>start-server</goal> - </goals> - <configuration> - <!-- run selenium server in background and log output ${basedir}target/server.log. - Append to ${basedir}/target/selenium/user-extensions.js --> - <background>true</background> - <logOutput>true</logOutput> - <userExtensions>${basedir}/target/olat-user-extensions.js</userExtensions> - </configuration> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - <version>2.7.2</version> - <configuration> - <suiteXmlFiles> - <!-- Seleniumtests run with testng, the included tests are defined in the following suite xml. - The file is located in src/test/resources/testng.xml. Dependencies of tests are defined - over annotations. --> - <suiteXmlFile>target/test-classes/testng.xml</suiteXmlFile> - </suiteXmlFiles> - <testFailureIgnore>true</testFailureIgnore> - </configuration> - <executions> - <execution> - <id>integration-test</id> - <goals> - <goal>integration-test</goal> - </goals> - </execution> - <execution> - <id>verify</id> - <goals> - <goal>verify</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.codehaus.cargo</groupId> - <artifactId>cargo-maven2-plugin</artifactId> - <version>1.1.3</version> - <configuration> - <container> - <containerId>tomcat6x</containerId> - <timeout>${cargo.container.timeout}</timeout> - </container> - </configuration> - <executions> - <!-- start tomcat 1 --> - <execution> - <id>tomcat-one-start</id> - <phase>pre-integration-test</phase> - <goals> - <goal>start</goal> - </goals> - <configuration> - <wait>false</wait> - <container> - <containerId>tomcat6x</containerId> - <type>installed</type> - <home>${container.tomcat.one.home}</home> - </container> - <configuration> - <type>existing</type> - <home>${container.tomcat.one.home}</home> - <properties> - <cargo.servlet.port>${container.tomcat.one.port}</cargo.servlet.port> - <cargo.logging>high</cargo.logging> - </properties> - <deployables> - <deployable> - <groupId>org.openolat</groupId> - <artifactId>openolat-lms</artifactId> - <type>war</type> - <properties> - <context>olat</context> - </properties> - <pingURL>http://localhost:${container.tomcat.one.port}/cargocpc/</pingURL> - <pingTimeout>300000</pingTimeout> - </deployable> - </deployables> - </configuration> - </configuration> - </execution> - <!-- start tomcat 2 --> - <execution> - <id>tomcat-two-start</id> - <phase>pre-integration-test</phase> - <goals> - <goal>start</goal> - </goals> - <configuration> - <wait>${cargo.container.wait}</wait> - <container> - <containerId>tomcat6x</containerId> - <type>installed</type> - <home>${container.tomcat.two.home}</home> - </container> - <configuration> - <type>existing</type> - <home>${container.tomcat.two.home}</home> - <properties> - <cargo.servlet.port>${container.tomcat.two.port}</cargo.servlet.port> - <cargo.logging>high</cargo.logging> - </properties> - <deployables> - <deployable> - <groupId>org.openolat</groupId> - <artifactId>openolat-lms</artifactId> - <type>war</type> - <properties> - <context>olat</context> - </properties> - <pingURL>http://localhost:${container.tomcat.two.port}/cargocpc/</pingURL> - <pingTimeout>300000</pingTimeout> - </deployable> - </deployables> - </configuration> - </configuration> - </execution> - - <!-- stop tomcat 1 --> - <execution> - <id>tomcat-one-stop</id> - <phase>post-integration-test</phase> - <goals> - <goal>stop</goal> - </goals> - <configuration> - <configuration> - <type>existing</type> - <home>${container.tomcat.one.home}</home> - </configuration> - </configuration> - </execution> - - <!-- stop tomcat 2 --> - <execution> - <id>tomcat-two-stop</id> - <phase>post-integration-test</phase> - <goals> - <goal>stop</goal> - </goals> - <configuration> - <configuration> - <type>existing</type> - <home>${container.tomcat.two.home}</home> - </configuration> - </configuration> - </execution> - </executions> - </plugin> - - <plugin> - <artifactId>maven-clean-plugin</artifactId> - <version>2.4.1</version> - <executions> - <execution> - <id>clean-tomcat-directories</id> - <phase>initialize</phase> - <goals> - <goal> - clean - </goal> - </goals> - <configuration> - <excludeDefaultDirectories>true</excludeDefaultDirectories> - <filesets> - <fileset> - <directory>${container.tomcat.one.home}/webapps/</directory> - <includes> - <include>olat.war</include> - <include>**/olat/**</include> - </includes> - </fileset> - <fileset> - <directory>${container.tomcat.one.home}/work/</directory> - <includes> - <include>**/SESSIONS.ser</include> - </includes> - </fileset> - <fileset> - <directory>${container.tomcat.two.home}/webapps/</directory> - <includes> - <include>olat.war</include> - <include>**/olat/**</include> - </includes> - </fileset> - <fileset> - <directory>${container.tomcat.two.home}/work/</directory> - <includes> - <include>**/SESSIONS.ser</include> - </includes> - </fileset> - </filesets> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - - <dependencies> - <dependency> - <groupId>org.jboss</groupId> - <artifactId>jboss-common-core</artifactId> - <version>2.2.8.GA</version> - </dependency> - <dependency> - <groupId>org.jboss.logging</groupId> - <artifactId>jboss-logging-spi</artifactId> - <version>2.0.5.GA</version> - </dependency> - <dependency> - <groupId>org.jboss.cache</groupId> - <artifactId>jbosscache-core</artifactId> - <version>3.2.2.GA</version> - </dependency> + + <profile> + <id>arquillian</id> + <properties> + <skipTests>false</skipTests> + </properties> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <version>1.7</version> + <executions> + <execution> + <phase>generate-test-resources</phase> + <configuration> + <tasks> + <mkdir dir="${project.build.directory}/downloads" /> + <get src="http://nexus.openolat.org/nexus/content/repositories/openolat/org/apache/tomcat/apache-tomcat-arq/7.0.27/apache-tomcat-arq-7.0.27.zip" dest="${project.build.directory}/downloads" verbose="true" skipexisting="true" /> + <unzip src="${project.build.directory}/downloads/apache-tomcat-arq-7.0.27.zip" dest="${project.build.directory}" /> + </tasks> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.12</version> + <configuration> + <systemProperties> + <arquillian.launch>tomcat-7-managed</arquillian.launch> + </systemProperties> + <testNGArtifactName>none:none</testNGArtifactName> + <includes> + <include>org/olat/test/Selenium2TestsJunit4.java</include> + </includes> + </configuration> + </plugin> + </plugins> + </build> + <dependencies> <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-jbosscache2</artifactId> - <version>3.3.2.GA</version> - <scope>runtime</scope> - </dependency> - </dependencies> - </profile> - + <groupId>org.jboss.arquillian.container</groupId> + <artifactId>arquillian-tomcat-managed-7</artifactId> + <version>1.0.0.Final-SNAPSHOT</version> + <scope>test</scope> + </dependency> + </dependencies> + </profile> </profiles> <repositories> <repository> @@ -2052,7 +1631,7 @@ <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> - <version>4.5</version> <!-- 4.7 somehow does not work with spring 3.0, may test later... --> + <version>4.8.2</version> <scope>test</scope> </dependency> <dependency> @@ -2268,46 +1847,6 @@ </exclusions> </dependency> - <!-- - <dependency> - <groupId>com.sun.jersey.contribs</groupId> - <artifactId>jersey-spring</artifactId> - <version>1.1.5.1</version> - <exclusions> - <exclusion> - <groupId>org.springframework</groupId> - <artifactId>spring-core</artifactId> - </exclusion> - <exclusion> - <groupId>org.springframework</groupId> - <artifactId>spring</artifactId> - </exclusion> - <exclusion> - <groupId>org.springframework</groupId> - <artifactId>spring-beans</artifactId> - </exclusion> - <exclusion> - <groupId>org.springframework</groupId> - <artifactId>spring-context</artifactId> - </exclusion> - <exclusion> - <groupId>org.springframework</groupId> - <artifactId>spring-web</artifactId> - </exclusion> - <exclusion> - <groupId>org.springframework</groupId> - <artifactId>spring-aop</artifactId> - </exclusion> - </exclusions> - </dependency> - - <dependency> - <groupId>com.sun.jersey.contribs</groupId> - <artifactId>jersey-multipart</artifactId> - <version>1.1.5.1</version> - </dependency> - --> - <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId> @@ -2378,7 +1917,7 @@ <!-- fxdiff: FXOLAT-243 only for testing purpose --> <scope>test</scope> </dependency> - <!-- START selenium tests dependencies --> + <!-- START selenium tests dependencies <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> @@ -2391,11 +1930,68 @@ <version>${selenium-client.version}</version> <scope>test</scope> </dependency> - <!-- END selenium tests dependencies --> - - - + END selenium tests dependencies --> + + + <!-- Start test dependencies for Arquillian and Selenium --> + <dependency> + <groupId>org.jboss.arquillian.junit</groupId> + <artifactId>arquillian-junit-container</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.jboss.arquillian.extension</groupId> + <artifactId>arquillian-drone-impl</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.jboss.arquillian.extension</groupId> + <artifactId>arquillian-drone-selenium</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.jboss.arquillian.extension</groupId> + <artifactId>arquillian-drone-selenium-server</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.seleniumhq.selenium</groupId> + <artifactId>selenium-java</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.seleniumhq.selenium</groupId> + <artifactId>selenium-server</artifactId> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>org.mortbay.jetty</groupId> + <artifactId>servlet-api-2.5</artifactId> + </exclusion> + </exclusions> + </dependency> + <!-- End test dependencies --> </dependencies> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.jboss.arquillian</groupId> + <artifactId>arquillian-bom</artifactId> + <version>1.0.1.Final</version> + <scope>import</scope> + <type>pom</type> + </dependency> + <dependency> + <groupId>org.jboss.arquillian.extension</groupId> + <artifactId>arquillian-drone-bom</artifactId> + <version>1.0.0.Final</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + <reporting> <plugins> <plugin> diff --git a/src/main/java/de/bps/onyx/plugin/_spring/onyxContext.xml b/src/main/java/de/bps/onyx/plugin/_spring/onyxContext.xml index 24479bde4c3..db55db9531b 100644 --- a/src/main/java/de/bps/onyx/plugin/_spring/onyxContext.xml +++ b/src/main/java/de/bps/onyx/plugin/_spring/onyxContext.xml @@ -5,7 +5,7 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> -<bean id="onyxModule" class="de.bps.onyx.plugin.OnyxModule"> +<bean id="onyxModule" class="de.bps.onyx.plugin.OnyxModule" depends-on="coordinatorManager"> <property name="onyxPluginWSLocation" value="${onyx.plugin.wslocation}" /> <!-- <OLATCE-713> --> <property name="onyxUserViewLocation" value="${onyx.plugin.userviewlocation}" /> diff --git a/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml b/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml index 02361b57abf..f63502f297f 100644 --- a/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml +++ b/src/main/java/org/olat/basesecurity/AuthenticationImpl.hbm.xml @@ -2,7 +2,7 @@ <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> - <class name="org.olat.basesecurity.AuthenticationImpl" proxy="org.olat.basesecurity.Authentication" table="o_bs_authentication"> + <class name="org.olat.basesecurity.AuthenticationImpl" table="o_bs_authentication"> <!-- the default columns --> <id name="key" column="id" type="long" unsaved-value="null"> <generator class="hilo"/> diff --git a/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml b/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml index e4b4e1c5e44..55eb566b168 100644 --- a/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml +++ b/src/main/java/org/olat/basesecurity/SecurityGroupImpl.hbm.xml @@ -2,7 +2,7 @@ <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-lazy="false"> - <class proxy="org.olat.basesecurity.SecurityGroup" name="org.olat.basesecurity.SecurityGroupImpl" table="o_bs_secgroup"> + <class name="org.olat.basesecurity.SecurityGroupImpl" table="o_bs_secgroup"> <!-- the default columns --> <id name="key" column="id" type="long" unsaved-value="null"> <generator class="hilo"/> diff --git a/src/main/java/org/olat/course/_spring/courseContext.xml b/src/main/java/org/olat/course/_spring/courseContext.xml index 21fa8a0f0b6..2904c41cf0d 100644 --- a/src/main/java/org/olat/course/_spring/courseContext.xml +++ b/src/main/java/org/olat/course/_spring/courseContext.xml @@ -103,7 +103,7 @@ enableCourseChat=true <!-- Select exported demo courses to be deployed automatically. --> - deployCourseExportsEnabled=true + deployCourseExportsEnabled=${deploy.course.exports} <!-- whether the toolbox should display the current participant count or not --> displayParticipantsCount=${course.display.participants.count} diff --git a/src/main/resources/package.html b/src/main/resources/package.html index 7c824ec99e9..8a1741a7020 100644 --- a/src/main/resources/package.html +++ b/src/main/resources/package.html @@ -1,38 +1,11 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html> <head> -<!-- -/** - * <pre> - * OLAT - Online Learning and Training<br> - * http://www.olat.org - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at - * <p> - * http://www.apache.org/licenses/LICENSE-2.0 - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> - * University of Zurich, Switzerland. - * <p> - * </pre> - */ ---> + <title>OpenOLAT</title> </head> <body bgcolor="white"> - -<ul> - <li><a href="http://www.olat.org">OLAT Home Page</a> -</ul> - -<!-- Put @see and @since tags down here. --> - + <ul> + <li><a href="http://www.openolat.org">OpenOLAT Home Page</a> + </ul> </body> </html> diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties index 1543bc0c989..0c0ae53edf1 100644 --- a/src/main/resources/serviceconfig/olat.properties +++ b/src/main/resources/serviceconfig/olat.properties @@ -242,6 +242,9 @@ help.course.enabled=true help.course.softkey=OLAT::help-course_de.zip help.context.enabled=true help.context.rating.enabled=true +#Deploy the embbeded courses as the help course +deploy.course.exports=true +deploy.course.exports.values=true,false ######################################################################## # OLAT technical settings diff --git a/src/test/HOWTO-UnitTesting b/src/test/HOWTO-UnitTesting deleted file mode 100644 index 2cb2c0f0f14..00000000000 --- a/src/test/HOWTO-UnitTesting +++ /dev/null @@ -1,52 +0,0 @@ -Unittesting with Spring and Junit4 - -@autor: Guido Schnider - 19.05.2010 -------------------------------------------------------------- - -(Wikipedia http://en.wikipedia.org/wiki/Unit_testing) -In computer programming, unit testing is a software verification and validation method in which a programmer tests if individual units of source code are fit for use. -A unit is the smallest testable part of an application. In procedural programming a unit may be an individual function or procedure. - -Because some classes may have references to other classes, testing a class can frequently spill over into testing another class. -A common example of this is classes that depend on a database: in order to test the class, the tester often writes code that interacts with the database. -This is a mistake, because a unit test should usually not go outside of its own class boundary. - - -Eclipse setup ------------------------------------ -If you have problems running the junit tests (Errors like: Could not find olat.propeties file). Check your build path for the src/test/java settings that it includes -ALL files and not only *.java classes! - -To achive this there are some different approaches: - -1: You like to test code which does not depend on any spring beans or any other olat framework stuff - -Solution: Use the junit4 annotations @RunWith for the class and @Test for every method you like to test ------------------------------------ - -@RunWith(JUnit4.class) -public class AddBaseURLToMediaRelativeURLFilterTest {... - -@Test -public void testPlainText() {... ------------------------------------ - -2: You like to test code which includes managers/modules that are spring beans you can use this setup: - ------------------------------------ -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = { - "/org/olat/core/test/_spring/yourSpringContext.xml"}) - -public class YourTestClass {... - -------------------------------------- - -The Springcontext gets loaded and you can use @Autowire or access directly the "applicationContext" var and do you testing - -3: If you need more stuff from the framework like Coordinator or database access in your code you can use the OlatcoreTestCaseWithMocking which -already has some mocked stuff inside (Coordinator.getEventBus() calls) or create your own mocks based on the example. The library we use for mocking is -Mockito (http://mockito.org/) -When you run all tests in a suite, the spring context gets cached and only loaded once for better performance. But if you load the same spring beans twice, -the beans will not get overwritten and instead they get created again and a new instance gets assigned for e.g. a singleton. - diff --git a/src/test/java/org/olat/core/test/OlatcoreTestCaseWithMocking.java b/src/test/java/org/olat/core/test/OlatcoreTestWithMocking.java similarity index 97% rename from src/test/java/org/olat/core/test/OlatcoreTestCaseWithMocking.java rename to src/test/java/org/olat/core/test/OlatcoreTestWithMocking.java index 0b0342ee59a..08540a29fe4 100644 --- a/src/test/java/org/olat/core/test/OlatcoreTestCaseWithMocking.java +++ b/src/test/java/org/olat/core/test/OlatcoreTestWithMocking.java @@ -49,6 +49,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; "classpath*:/org/olat/core/util/i18n/devtools/_spring/devtoolsCorecontext.xml", "classpath*:/org/olat/core/util/_spring/utilCorecontext.xml"}) -public class OlatcoreTestCaseWithMocking { +public class OlatcoreTestWithMocking { } diff --git a/src/test/java/org/olat/core/util/i18n/I18nTest.java b/src/test/java/org/olat/core/util/i18n/I18nTest.java index db979dc8dbb..8b5bdc36047 100644 --- a/src/test/java/org/olat/core/util/i18n/I18nTest.java +++ b/src/test/java/org/olat/core/util/i18n/I18nTest.java @@ -51,7 +51,7 @@ import org.olat.core.helpers.Settings; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; -import org.olat.core.test.OlatcoreTestCaseWithMocking; +import org.olat.core.test.OlatcoreTestWithMocking; import org.olat.core.util.FileUtils; import org.olat.core.util.Util; import org.olat.core.util.i18n.devtools.TranslationDevManager; @@ -70,7 +70,7 @@ import org.springframework.beans.factory.annotation.Autowired; -public class I18nTest extends OlatcoreTestCaseWithMocking { +public class I18nTest extends OlatcoreTestWithMocking { private OLog log = Tracing.createLoggerFor(I18nTest.class); diff --git a/src/test/java/org/olat/core/util/mail/MailTest.java b/src/test/java/org/olat/core/util/mail/MailTest.java index deef9edcacf..7a616f303ed 100644 --- a/src/test/java/org/olat/core/util/mail/MailTest.java +++ b/src/test/java/org/olat/core/util/mail/MailTest.java @@ -50,7 +50,7 @@ import org.olat.core.id.Preferences; import org.olat.core.id.User; import org.olat.core.id.UserConstants; import org.olat.core.logging.AssertException; -import org.olat.core.test.OlatcoreTestCaseWithMocking; +import org.olat.core.test.OlatcoreTestWithMocking; /** * Description:<br> @@ -61,7 +61,7 @@ import org.olat.core.test.OlatcoreTestCaseWithMocking; * @author Florian Gnaegi, frentix GmbH<br> * http://www.frentix.com */ -public class MailTest extends OlatcoreTestCaseWithMocking { +public class MailTest extends OlatcoreTestWithMocking { private static Logger log = Logger.getLogger(MailTest.class); private Identity id1, id2, id3, id4, id5, id6; diff --git a/src/test/java/org/olat/login/FunctionalLoginTest.java b/src/test/java/org/olat/login/FunctionalLoginTest.java new file mode 100644 index 00000000000..6e644a153b5 --- /dev/null +++ b/src/test/java/org/olat/login/FunctionalLoginTest.java @@ -0,0 +1,84 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.login; + +import java.net.URL; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.drone.api.annotation.Drone; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.olat.test.ArquillianDeployments; + +import com.thoughtworks.selenium.DefaultSelenium; + +/** + * + * + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +@RunWith(Arquillian.class) +public class FunctionalLoginTest { + + @Deployment(testable = false) + public static WebArchive createDeployment() { + return ArquillianDeployments.createDeployment(); + } + + @Drone + DefaultSelenium browser; + + @ArquillianResource + URL deploymentUrl; + + @Test + @RunAsClient + public void loadIndex() { + browser.open(deploymentUrl + "dmz"); + browser.waitForPageToLoad("5000"); + boolean isLoginFormPresent = browser.isElementPresent("xpath=//div[@class='o_login_form']"); + Assert.assertTrue(isLoginFormPresent); + } + + @Test + @RunAsClient + public void loadLogin() { + browser.open(deploymentUrl + "dmz"); + browser.waitForPageToLoad("5000"); + boolean isLoginFormPresent = browser.isElementPresent("xpath=//div[@class='o_login_form']"); + Assert.assertTrue(isLoginFormPresent); + + //type the password + browser.type("id=o_fiooolat_login_name", "administrator"); + browser.type("id=o_fiooolat_login_pass", "openolat"); + browser.click("id=o_fiooolat_login_button"); + browser.waitForPageToLoad("15000"); + + //check if administrator appears in the footer + boolean loginAs = browser.isElementPresent("xpath=//div[@id='b_footer_user']//i[contains(text(), 'administrator')]"); + Assert.assertTrue("User should be logged in!", loginAs); + } +} diff --git a/src/test/java/org/olat/test/ArquillianDeployments.java b/src/test/java/org/olat/test/ArquillianDeployments.java new file mode 100644 index 00000000000..f5e1fb2d1b6 --- /dev/null +++ b/src/test/java/org/olat/test/ArquillianDeployments.java @@ -0,0 +1,223 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.test; + +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; + +import org.jboss.shrinkwrap.api.ArchivePath; +import org.jboss.shrinkwrap.api.Filter; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; + +public class ArquillianDeployments { + + public static final String MAIN_JAVA = "src/main/java"; + public static final String MAIN_RSRC = "src/main/resources"; + public static final String WEBAPP = "src/main/webapp"; + public static final String WEBINF = "src/main/webapp/WEB-INF"; + public static final String TEST_RSRC = "src/test/resources"; + public static final String LIB_DIR = "target/openolat-lms-8.1-SNAPSHOT/WEB-INF/lib"; + + + public static WebArchive createDeployment() { + return createDeployment("openolat.war"); + } + + + public static WebArchive createDeployment(String name) { + WebArchive archive = ShrinkWrap.create(WebArchive.class, name); + + + + addClasses(archive); + addLibraries(archive); + addWebInfResources(archive); + addResourceRecursive(new File(MAIN_JAVA), null, new JavaResourcesFilter(), archive); + addResourceRecursive(new File(MAIN_RSRC), null, new AllFileFilter(), archive); + addWebResourceRecursive(new File(WEBAPP), "static", new StaticFileFilter(), archive); + + archive.addAsResource(new File("src/test/profile/mysql", "olat.arquillian.properties"), "olat.local.properties"); + archive.setWebXML(new File(WEBINF, "web.xml")); + return archive; + } + + public static WebArchive addLibraries(WebArchive archive) { + File libDir = new File(LIB_DIR); + File[] libs = libDir.listFiles(new LibrariesFilter()); + return archive.addAsLibraries(libs); + } + + /* + public static WebArchive addMavenDependencies(WebArchive archive) { + File[] jars = DependencyResolvers + .use(MavenDependencyResolver.class) + .loadEffectivePom("pom.xml") + .importAnyDependencies(); + + return archive.addAsLibraries(jars); + } + */ + + public static WebArchive addClasses(WebArchive archive) { + return archive + .addPackages(true, new FilterUnusedPackage(), "org.olat", "de.bps", "de.tuchemnitz.wizard"); + } + + public static WebArchive addWebInfResources(WebArchive archive) { + return archive + .addAsWebInfResource(new File(WEBINF, "olat_portals_links.xsd"), "olat_portals_links.xsd") + .addAsWebInfResource(new File(WEBINF, "olat_portals_links.xml"), "olat_portals_links.xml") + .addAsWebInfResource(new File(WEBINF, "olat_portals_institution.xml"), "olat_portals_institution.xml"); + //.addAsWebInfResource(new File(WEBINF, "services/ReturnWSService/META-INF/ReturnWSService.wsdl"), "services/ReturnWSService/META-INF/ReturnWSService.wsdl") + //.addAsWebInfResource(new File(WEBINF, "services/ReturnWSService/META-INF/services.xml"), "services/ReturnWSService/META-INF/services.xml"); + } + + public static WebArchive addWebResourceRecursive(File root, String startPath, FileFilter filter, WebArchive archive) { + File startDir = startPath == null ? root : new File(root, startPath); + if(startPath == null) { + startPath = "/"; + } else if(!startPath.endsWith("/")) { + startPath += "/"; + } + for(File resource:startDir.listFiles(filter)) { + if(resource.isHidden()) { + continue; + } else if(resource.isFile()) { + archive.addAsWebResource(resource, startPath + resource.getName()); + } else if(resource.isDirectory()) { + String nextPath = startPath + resource.getName() + "/"; + addWebResourceRecursive(root, nextPath, filter, archive); + } + } + return archive; + } + + + public static WebArchive addResourceRecursive(File root, String startPath, FileFilter filter, WebArchive archive) { + File startDir = startPath == null ? root : new File(root, startPath); + if(startPath == null) { + startPath = "/"; + } else if(!startPath.endsWith("/")) { + startPath += "/"; + } + for(File resource:startDir.listFiles(filter)) { + if(resource.isHidden()) { + continue; + } else if(resource.isFile()) { + archive.addAsResource(resource, startPath + resource.getName()); + } else if(resource.isDirectory()) { + String nextPath = startPath + resource.getName() + "/"; + addResourceRecursive(root, nextPath, filter, archive); + } + } + return archive; + } + + private static class JavaResourcesFilter implements FileFilter { + @Override + public boolean accept(File pathname) { + String filename = pathname.getName(); + if(filename.endsWith(".properties")) { + if(filename.endsWith("_ar.properties") + || filename.endsWith("_bg.properties") + || filename.endsWith("_cs.properties") + || filename.endsWith("_da.properties") + || filename.endsWith("_el.properties") + || filename.endsWith("_es.properties") + || filename.endsWith("_fa.properties") + || filename.endsWith("_fr.properties") + || filename.endsWith("_it.properties") + || filename.endsWith("_jp.properties") + || filename.endsWith("_lt.properties") + || filename.endsWith("_nl_NL.properties") + || filename.endsWith("_pl.properties") + || filename.endsWith("_pt_BR.properties") + || filename.endsWith("_pt_PT.properties") + || filename.endsWith("_ru.properties") + || filename.endsWith("_sq.properties") + || filename.endsWith("_bg.properties") + || filename.endsWith("_zh_CN.properties") + || filename.endsWith("_zh_TW.properties")) { + return false; + } + } else if (filename.endsWith(".java") || filename.endsWith("instantMessagingTestContext.xml") || filename.endsWith("Mock.xml")) { + return false; + } + return true; + } + } + + private static class LibrariesFilter implements FileFilter { + @Override + public boolean accept(File pathname) { + return true; + } + } + + private static class StaticFileFilter implements FileFilter { + @Override + public boolean accept(File pathname) { + String filename = pathname.getName(); + + if(filename.endsWith(".scss") || filename.endsWith(".psd")) { + return false; + } + if(filename.endsWith(".js")) { + try { + String path = pathname.getCanonicalPath(); + if(path.contains("js/ext/src")) { + return false; + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return true; + } + } + + private static class AllFileFilter implements FileFilter { + @Override + public boolean accept(File pathname) { + return true; + } + } + + private static class FilterUnusedPackage implements Filter<ArchivePath> { + @Override + public boolean include(ArchivePath path) { + String pathStr = path.toString(); + if(pathStr.contains("/org/olat/core/test")) { + return false; + } + if(pathStr.contains("/org/olat/test/_spring") || pathStr.contains("/org/olat/test/file_resources") + || pathStr.contains("/org/olat/test/functional") || pathStr.contains("/org/olat/test/load") + || pathStr.contains("/org/olat/test/sandbox")) { + return false; + } + if(pathStr.endsWith("Test.class]") || pathStr.endsWith("TestWithMocking.class]") || pathStr.endsWith("Junit4.class]")) { + return false; + } + return true; + } + } +} diff --git a/src/test/java/org/olat/test/MockServletContextWebContextLoader.java b/src/test/java/org/olat/test/MockServletContextWebContextLoader.java index 74728e82bfc..f5cbbe2546f 100644 --- a/src/test/java/org/olat/test/MockServletContextWebContextLoader.java +++ b/src/test/java/org/olat/test/MockServletContextWebContextLoader.java @@ -26,8 +26,10 @@ package org.olat.test; import org.springframework.beans.factory.support.BeanDefinitionReader; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; +import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericApplicationContext; import org.springframework.mock.web.MockServletContext; +import org.springframework.test.context.MergedContextConfiguration; import org.springframework.test.context.support.AbstractContextLoader; import org.springframework.util.StringUtils; import org.springframework.web.context.WebApplicationContext; @@ -69,9 +71,13 @@ public class MockServletContextWebContextLoader extends AbstractContextLoader { } + @Override + public ApplicationContext loadContext(MergedContextConfiguration config) throws Exception { + return this.loadContext(config.getLocations()); + } + @Override protected String getResourceSuffix() { - // TODO Auto-generated method stub return ""; } diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPArtefactSearch.java b/src/test/java/org/olat/test/Selenium2TestsJunit4.java similarity index 56% rename from src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPArtefactSearch.java rename to src/test/java/org/olat/test/Selenium2TestsJunit4.java index 8270f404ef4..13fda0f465b 100644 --- a/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPArtefactSearch.java +++ b/src/test/java/org/olat/test/Selenium2TestsJunit4.java @@ -17,29 +17,19 @@ * frentix GmbH, http://www.frentix.com * <p> */ +package org.olat.test; -package org.olat.test.util.selenium.olatapi.portfolio; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; /** - * API wrapper for ePortfolio -> artefactview -> search-segment * - * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ -public class EPArtefactSearch extends OLATSeleniumWrapper { - - public EPArtefactSearch(Selenium selenium) { - super(selenium); - } - - public void toggleTextArtefactFilter(){ - if (selenium.isElementPresent("ui=epArtefactSearch::textartefact()")) { - selenium.click("ui=epArtefactSearch::textartefact()"); - selenium.waitForPageToLoad("30000"); - } - } - +@RunWith(Suite.class) +@Suite.SuiteClasses({ + org.olat.login.FunctionalLoginTest.class,//ok +}) +public class Selenium2TestsJunit4 { + // } diff --git a/src/test/java/org/olat/test/SpringInitDestroyVerficationTest.java b/src/test/java/org/olat/test/SpringInitDestroyVerficationTest.java index 97c36ebd851..6953f3634ea 100644 --- a/src/test/java/org/olat/test/SpringInitDestroyVerficationTest.java +++ b/src/test/java/org/olat/test/SpringInitDestroyVerficationTest.java @@ -31,13 +31,10 @@ import static org.junit.Assert.assertTrue; import java.util.Iterator; import java.util.Map; -import javax.annotation.PostConstruct; - import org.junit.Test; import org.olat.core.configuration.Destroyable; import org.olat.core.configuration.Initializable; import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.GenericBeanDefinition; import org.springframework.web.context.support.XmlWebApplicationContext; diff --git a/src/test/java/org/olat/test/demo/CourseImportTest.java b/src/test/java/org/olat/test/demo/CourseImportTest.java deleted file mode 100644 index 4fc8ae03b76..00000000000 --- a/src/test/java/org/olat/test/demo/CourseImportTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ -package org.olat.test.demo; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - - -/** - * - * @author eglis - * - */ -public class CourseImportTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "/CourseImportCourse.zip"; - - public void testCourseImport() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - File f = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - assertNotNull("Could not locate the course zip!", f); - assertTrue("file "+f.getAbsolutePath()+" not found!", f.exists()); - String courseTitle = "CourseImportTestCourse-"+System.currentTimeMillis(); - WorkflowHelper.importCourse(f, courseTitle, "Whatever right?"); - - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos()); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(courseTitle); - courseRun.close(courseTitle); - - } - -} diff --git a/src/test/java/org/olat/test/demo/CourseOpenCloseTest.java b/src/test/java/org/olat/test/demo/CourseOpenCloseTest.java deleted file mode 100644 index 927c1343db2..00000000000 --- a/src/test/java/org/olat/test/demo/CourseOpenCloseTest.java +++ /dev/null @@ -1,45 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ -package org.olat.test.demo; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -public class CourseOpenCloseTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = Context.DEMO_COURSE_NAME_1; - - public void testCourseOpenClose() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.CLEAN_AND_RESTARTED_SINGLE_VM); - //context.checkSeleniumServerStarted(); - - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos()); - CourseRun courseRun = workflow.getLearningResources().showCourseContent(COURSE_NAME); - courseRun.close(COURSE_NAME); - } -} diff --git a/src/test/java/org/olat/test/demo/OpenForumThreadTest.java b/src/test/java/org/olat/test/demo/OpenForumThreadTest.java deleted file mode 100644 index d48413652ac..00000000000 --- a/src/test/java/org/olat/test/demo/OpenForumThreadTest.java +++ /dev/null @@ -1,50 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ -package org.olat.test.demo; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.Forum; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -public class OpenForumThreadTest extends BaseSeleneseTestCase { - - public void setUp() throws Exception { - Context.setupContext(getFullName(), SetupType.CLEAN_AND_RESTARTED_SINGLE_VM); - } - - public void testShowCourseContent() throws Exception { - selenium = Context.getContext().createSeleniumAndLogin(); //login as the default admin user - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(Context.DEMO_COURSE_NAME_1); - Forum forum = courseRun.selectForum("Forum"); - forum.openNewTopic("abc", "MESSAGE BODY"); - courseRun.selectForum("Forum").viewTopic("abcd"); - - workflow.logout(); - } -} diff --git a/src/test/java/org/olat/test/demo/SeleniumDemo1Test.java b/src/test/java/org/olat/test/demo/SeleniumDemo1Test.java deleted file mode 100644 index af096cfc57b..00000000000 --- a/src/test/java/org/olat/test/demo/SeleniumDemo1Test.java +++ /dev/null @@ -1,77 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.demo; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Demo test class. - * Uses selenium commands calls and OLAT testing framework. - * - * @author Lavinia Dumitrescu - * - * @deprecated Do not use selenium commands directly, - * use the abstraction layer api <code> org.olat.test.util.selenium.olatapi </code> instead. - * - */ -public class SeleniumDemo1Test extends BaseSeleneseTestCase { - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - //selenium = context.createSelenium(); - } - - /** - * Login, go to Learning resources, select Courses, select "Demo Course", Show content, - * open Course Editor, insert a Forum course element, publish course, logout. - * - * @throws Exception - */ - public void testCourseEditing() throws Exception { - - selenium = Context.getContext().createSeleniumAndLogin(); //login as the default admin user - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_courses()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::content_clickLearningResource(nameOfLearningResource=Demo Course)"); - selenium.waitForPageToLoad("30000"); - - selenium.click("ui=course::toolbox_courseTools_courseEditor()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertForum()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()"); - selenium.click("ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_selectall()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_finish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=tabs::logOut()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/demo/SeleniumDemo2Test.java b/src/test/java/org/olat/test/demo/SeleniumDemo2Test.java deleted file mode 100644 index 4053bbbb70d..00000000000 --- a/src/test/java/org/olat/test/demo/SeleniumDemo2Test.java +++ /dev/null @@ -1,86 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.demo; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Demo test class. - * Uses the OLAT testing framework, including the OLAT abstraction layer. - * - * <br/> - * Test setup: none, since any OLAT instance has a "Demo Course" per default. - * <br/> - * Test case: <br/> - * - login, <br/> - * - go to Learning resources, <br/> - * - search for "Demo Course", <br/> - * - Show content, <br/> - * - open Course Editor, <br/> - * - insert a Forum course element, <br/> - * - publish course, <br/> - * - logout. - * - * @author Lavinia Dumitrescu - * - */ -public class SeleniumDemo2Test extends BaseSeleneseTestCase { - - private static final String COURSE_NAME = Context.DEMO_COURSE_NAME_1; - private static final String FORUM_NAME = "Special Forum Name"; - - public void setUp() throws Exception { - //each test has to setup a context - Context.setupContext(getFullName(), SetupType.SINGLE_VM); - } - - /** - * Login, go to Learning resources, select Courses, select "Demo Course", Show content, - * open Course Editor, insert a Forum course element, publish course, logout. - * - * @throws Exception - */ - public void testCourseEditing() throws Exception { - //Get a workflow object for the default administrator user. - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - - //go to learning resources, search and show the course named COURSE_NAME, get a CourseRun object - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - - //go to the course editor - CourseEditor courseEditor = courseRun.getCourseEditor(); - - //insert a course element of type FORUM, with a specified title - CourseElementEditor courseElementEditor = courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FORUM, true, FORUM_NAME); - assertTrue(courseElementEditor.isTextPresent(FORUM_NAME)); - - //publish course - courseEditor.publishCourse(); - - //logout - workflow.logout(); - } -} diff --git a/src/test/java/org/olat/test/demo/SeleniumTestingDemoTest3_html.html b/src/test/java/org/olat/test/demo/SeleniumTestingDemoTest3_html.html deleted file mode 100644 index bb85b75f9f5..00000000000 --- a/src/test/java/org/olat/test/demo/SeleniumTestingDemoTest3_html.html +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>SeleniumTestingDemoTest3_html</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">SeleniumTestingDemoTest3_html</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>/olat/dmz/</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>administrator</td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::password()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>nightly1</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Learning</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=Demo Course)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Demo</td> - <td>Demo</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/demo/ShowCourseContentTest.java b/src/test/java/org/olat/test/demo/ShowCourseContentTest.java deleted file mode 100644 index a5f22b99e04..00000000000 --- a/src/test/java/org/olat/test/demo/ShowCourseContentTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.demo; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - - -public class ShowCourseContentTest extends BaseSeleneseTestCase { - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - //selenium = context.createSelenium(); - } - - /** - * Login, go to learning resources and show content of "Demo Course", logout. - * @throws Exception - */ - public void testShowCourseContent() throws Exception { - - selenium = Context.getContext().createSeleniumAndLogin(); //login as the default admin user - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_courses()"); - selenium.waitForPageToLoad("30000"); - //selenium.click("ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=Demo Course)"); - selenium.click("ui=learningResources::content_clickLearningResource(nameOfLearningResource=Demo Course)"); - selenium.waitForPageToLoad("30000"); - assertTrue(selenium.isTextPresent("Demo")); - selenium.click("ui=tabs::logOut()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/demo/package.html b/src/test/java/org/olat/test/demo/package.html deleted file mode 100644 index aa234280e32..00000000000 --- a/src/test/java/org/olat/test/demo/package.html +++ /dev/null @@ -1,12 +0,0 @@ -<html> -<head> -</head> - -<body> - -Contains simple demo tests. -<br/> -They do not belong to the regresssion test suite. - -</body> -</html> \ No newline at end of file diff --git a/src/test/java/org/olat/test/demo/selenium.olat.uzh.context.xml b/src/test/java/org/olat/test/demo/selenium.olat.uzh.context.xml deleted file mode 100644 index c5baedb415e..00000000000 --- a/src/test/java/org/olat/test/demo/selenium.olat.uzh.context.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> - -<!-- rename in customcontext.xml and add to the same location as defaultcontext.xml --> -<!-- context for testing against a running olat instance e.g. http://demo.olat.org/demo/dmz/, with selenium server running locally --> -<beans> - <bean class="org.olat.test.util.setup.context.SeleniumLocallyContext" id="seleniumcontext"> - <property name="config"> - <map> - <entry key="seleniumHost" value="localhost"/> - <entry key="instanceId" value="olat"/> - <entry key="jmsBrokerUrl" value="tcp://localhost:61616"/> - <entry key="adminUsername" value="administrator"/> - <entry key="adminPassword" value="olat"/> - <entry key="authorUsername" value="author"/> - <entry key="authorPassword" value="test"/> - <entry key="studentUsername" value="test"/> - <entry key="studentPassword" value="test"/> - <entry key="guestUsername" value="guest"/> - <entry key="guestPassword" value="guest"/> - <entry key="singleVmOlatUrl" value="http://demo.olat.org/demo/dmz/"/> - <entry key="multiVmOlatUrl1" value="http://demo.olat.org/demo/dmz/"/> - <entry key="multiVmOlatUrl2" value="http://demo.olat.org/demo/dmz/"/> -<!-- <entry key="browserId" value="*firefox /usr/lib/mozilla-firefox/firefox"/> --> - </map> - </property> - </bean> -</beans> diff --git a/src/test/java/org/olat/test/functional/administration/ASetupFNTestCase.java b/src/test/java/org/olat/test/functional/administration/ASetupFNTestCase.java deleted file mode 100644 index f6cdfbd291e..00000000000 --- a/src/test/java/org/olat/test/functional/administration/ASetupFNTestCase.java +++ /dev/null @@ -1,94 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.administration; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * This is the very first test that should run in the selenium test suite. - * It imports the necessary assets, and executes some cleanup tasks. - * - * @author lavinia - * - */ -public class ASetupFNTestCase extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "DemoCourse.zip"; - - - - @Override - public void setUp() throws Exception { - Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - } - - /** - * Import demo course. - * @throws Exception - */ - public void testImportDemoCourses() throws Exception { - - //check if "Demo Course" already available, if so return - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - if(workflow.getLearningResources().searchResource(Context.DEMO_COURSE_NAME_1, "")!=null) { - return; - } - - //import test course - File file = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - assertNotNull("Could not locate the course zip!", file); - assertTrue("file "+file.getAbsolutePath()+" not found!", file.exists()); - - WorkflowHelper.importCourse(file, Context.DEMO_COURSE_NAME_1, "demo course description"); - WorkflowHelper.addOwnerToLearningResource("author", Context.DEMO_COURSE_NAME_1); - - workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - LRDetailedView lRDetailedView = workflow.getLearningResources().searchMyResource(Context.DEMO_COURSE_NAME_1); - lRDetailedView.removeOwner(Context.getContext().getStandardAdminOlatLoginInfos(1).getUsername()); - } - - /** - * Deletes archives from personal folder, if any. - */ - public void testCleanupArchiveFolder() { - testCleanupArchiveFolder(Context.getContext().getStandardAdminOlatLoginInfos(1)); - testCleanupArchiveFolder(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - } - - /** - * deletes Personal folder/private/archive. - * @param olatLoginInfos - */ - private void testCleanupArchiveFolder(OlatLoginInfos olatLoginInfos) { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(olatLoginInfos); - Folder folder = workflow.getHome().getPersonalFolder(); - folder.selectFileOrFolder("private"); - folder.deleteItem("archive"); - } -} diff --git a/src/test/java/org/olat/test/functional/administration/InfoMessageClusterTest.java b/src/test/java/org/olat/test/functional/administration/InfoMessageClusterTest.java deleted file mode 100644 index 8242d8217b6..00000000000 --- a/src/test/java/org/olat/test/functional/administration/InfoMessageClusterTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.administration; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.admin.Administration; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.Selenium; - -/** - * test info message occurences when changed on other node - * - * @author Guido - * - */ -public class InfoMessageClusterTest extends BaseSeleneseTestCase { - - private final String MESSAGE_1 = "may the force be with you!"; - - public void testInfoMessage() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - OLATWorkflowHelper workflow1 = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - OLATWorkflowHelper workflow2 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(2)); - - Administration admin1 = workflow1.getAdministration(); - admin1.editInfoMessage(MESSAGE_1); - assertTrue("Assert that the info message was set.", admin1.hasInfoMessage(MESSAGE_1)); - - workflow2.logout(); - assertTrue(workflow2.getSelenium().isTextPresent(MESSAGE_1)); - - workflow1.logout(); - assertTrue(workflow1.getSelenium().isTextPresent(MESSAGE_1)); - - //TODO: change message - - //TODO: reset message - - } - - @Override - protected void cleanUpAfterRun() { - OLATWorkflowHelper workflow1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - workflow1.getAdministration().editInfoMessage(""); - } - - - -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/AssessmentWithCodepointsTest.java b/src/test/java/org/olat/test/functional/codepoints/cluster/AssessmentWithCodepointsTest.java deleted file mode 100644 index 1d9ab9af6c5..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/AssessmentWithCodepointsTest.java +++ /dev/null @@ -1,346 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ - -package org.olat.test.functional.codepoints.cluster; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; -import org.olat.testutils.codepoints.client.TemporaryPausedThread; - -import com.thoughtworks.selenium.Selenium; - - /** - * Tests the Assessment (AssessmentTool, TestRun, EfficiencyStatement) - in cluster mode. - * <br/> - * - * Test setup: <br/> - * Expects a special "AssessmentTool" course. - * It is also supposed that there is a learning group associated with this course which contains at least - * one student and one tutor. - * <br/> - * Test case: <br/> - * - Student runs a test (Test 1) in a special "AssessmentTool" course. <br/> - * - Tutor opens the assessment tool of the same course for the specified student and checks - * whether he see the correct score. Tutor changes the score. <br/> - * - Student should see the correct score in course run as in "Evidence of achievement". <br/> - * Details: <br/> - * Test the doInSync update of the EfficiencyStatement for the STUDENT for the "AssessmentTool" course. - * <br/> - * Setup: STUDENT runs a test "Test 1", score (2) is stored. - * <br/> - * If useCodepoints is false: STUDENT stores score (1) and tutor score (7), in this order; - * else if useCodepoints is true: TUTOR stores score (7) and STUDENT stores score (1), in this order. - * - * - * @author Lavinia Dumitrescu - * - */ -public class AssessmentWithCodepointsTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "CourseImportCourse.zip"; - - protected Selenium selenium_A; //student on node 1 - protected Selenium selenium_B; //tutor on node 2 - protected Selenium selenium_D; //student on node 1 - - private CodepointClient codepointClient_A; - private CodepointClient codepointClient_B; - - private final String COURSE_NAME = "AssessmentTool_codepoints"+System.currentTimeMillis(); - private final String GROUP_NAME = "Gruppe 1"; - - //test actors - private String STUDENT; //student username - private String TUTOR; // tutor username - - public void setUp() throws Exception { - System.out.println("AssessmentWithCodepointsTest - setUp - STARTED"); - - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - TUTOR = context.getStandardAuthorOlatLoginInfos(2).getUsername(); - STUDENT = context.getStandardStudentOlatLoginInfos(1).getUsername(); - - //deleteEvidencesOfAchievement for this student - WorkflowHelper.deleteEvidencesOfAchievement("AssessmentTool_codepoints", context.getStandardStudentOlatLoginInfos(1)); - - //import course - make sure that this is the course you need! - File f = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - assertNotNull("Could not locate the course zip!", f); - assertTrue("file "+f.getAbsolutePath()+" not found!", f.exists()); - WorkflowHelper.importCourse(f, COURSE_NAME, "assessment test course description"); - - //"administrator" adds tutor as owner of the "AssessmentTool" - WorkflowHelper.addOwnerToLearningResource(TUTOR, COURSE_NAME); - - //"administrator" adds tutor to GROUP_NAME - WorkflowHelper.addTutorToGroup(TUTOR, COURSE_NAME, GROUP_NAME); - - // STUDENT enrolls - login and enroll if not already member in GROUP_NAME - selenium_D = context.createSeleniumAndLogin(context.getStandardStudentOlatLoginInfos(1)); - WorkflowHelper.openCourseAfterLogin(selenium_D, COURSE_NAME); - enrollInGroupAfterLogin(selenium_D, COURSE_NAME, GROUP_NAME); - - System.out.println("AssessmentWithCodepointsTest - setUp - ENDED"); - } - - /** - * STUDENT enrolls - login and enroll if not already member in groupName - * @param selenium_ - * @param courseName - * @param groupName - */ - private void enrollInGroupAfterLogin(Selenium selenium_, String courseName, String groupName) { - WorkflowHelper.openCourseAfterLogin(selenium_, courseName); - selenium_.click("ui=course::menu_courseNode(titleOfNode=Enrolment)"); - selenium_.waitForPageToLoad("30000"); - boolean alreadyEnrolled = seleniumEquals("enrolled", selenium_.getText("ui=course::content_enrollment_enrolledOrNot(nameOfGroup=" + groupName + ")")); - if(!alreadyEnrolled) { - selenium_.click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=" + groupName + ")"); - selenium_.waitForPageToLoad("30000"); - assertTrue(selenium_.isTextPresent("You have already enroled for the learning group mentioned below")); - } - selenium_.click("ui=tabs::logOut()"); - selenium_.waitForPageToLoad("30000"); - } - - - /** - * Tests assessment tool. - * Student runs a test (Test 1) in a special "AssessmentTool" course. - * Tutor opens the assessment tool of the same course for the specified student and checks - * whether he see the correct score. Tutor changes the score. - * Student should see the correct score in course run as in "Evidence of achievement" - * - * @throws Exception - */ - public void testEfficiencyStatementUpdate() throws Exception { - System.out.println("AssessmentWithCodepointsTest - testEfficiencyStatementUpdate - STARTED"); - - //uses codepoints to test the efficiencyStatement update - boolean useCodepoints = true; - doTestEfficiencyStatementUpdateWithCodepoints(useCodepoints); - - System.out.println("AssessmentWithCodepointsTest - testEfficiencyStatementUpdate - ENDED"); - } - - - /** - * Test the doInSync update of the EfficiencyStatement for the STUDENT for the "AssessmentTool" course. - * Uses Codepoints. - * <p> - * Setup: STUDENT runs a test "Test 1", score (2) is stored. - * <p> - * If useCodepoints is false: STUDENT stores score (1) and tutor score (7), in this order. - * else if useCodepoints is true: TUTOR stores score (7) and STUDENT stores score (1), in this order - * - * @param useCodepoints - * @throws Exception - */ - private void doTestEfficiencyStatementUpdateWithCodepoints(boolean useCodepoints) throws Exception { - System.out.println("AssessmentWithCodepointsTest - doTestEfficiencyStatementUpdateWithCodepoints - STARTED - useCodepoints: " + useCodepoints); - Context context = Context.getContext(); - selenium_A = context.createSeleniumAndLogin(context.getStandardStudentOlatLoginInfos(1)); - - WorkflowHelper.openCourseAfterLogin(selenium_A, COURSE_NAME); - //setup: student runs the test first time ("Test 1" and gets a score equals with 2) - selenium_A.click("ui=course::menu_courseNode(titleOfNode=Struktur 1)"); - selenium_A.waitForPageToLoad("30000"); - selenium_A.click("ui=course::menu_courseNode(titleOfNode=Test 1)"); - selenium_A.waitForPageToLoad("30000"); - selenium_A.click("ui=commons::start()"); - selenium_A.waitForPageToLoad("30000"); - //select item, choose answer and submit answer - selenium_A.click("ui=qti::menuItem(titleOfItem=Single Choice)"); - selenium_A.waitForPageToLoad("30000"); - selenium_A.click("ui=qti::testItemFormElement(text=Antwort 3)"); - selenium_A.click("ui=qti::saveAnswer()"); - selenium_A.waitForPageToLoad("30000"); - //select item, choose answer and submit answer - selenium_A.click("ui=qti::menuItem(titleOfItem=Multiple Choice)"); - selenium_A.waitForPageToLoad("30000"); - selenium_A.click("ui=qti::testItemFormElement(text=Antwort 2)"); - selenium_A.click("ui=qti::testItemFormElement(text=Antwort 3)"); - selenium_A.click("ui=qti::saveAnswer()"); - selenium_A.waitForPageToLoad("30000"); - //submit test - selenium_A.click("ui=qti::finishTest()"); - selenium_A.waitForPageToLoad("30000"); - boolean confirmedSubmit = selenium_A.getConfirmation().matches("^Do you really want to submit[\\s\\S]$"); - - assertTrue(confirmedSubmit); - - - assertEquals("2", selenium_A.getText("ui=qti::achievedScore()")); - selenium_A.click("ui=qti::closeTest()"); //updateEfficiencyStatement(3) - selenium_A.waitForPageToLoad("30000"); - assertEquals("2.000", selenium_A.getText("ui=qti::yourScore()")); - //end setup - student achieved a score of 2.000 - - codepointClient_A = Context.getContext().createCodepointClient(1); - CodepointRef beforeSyncCp_A = codepointClient_A.getCodepoint("org.olat.course.assessment.NewCachePersistingAssessmentManager.beforeSyncUpdateUserEfficiencyStatement"); - beforeSyncCp_A.setHitCount(0); - if(useCodepoints) - beforeSyncCp_A.enableBreakpoint(); - - CodepointRef doInSyncCp_A = codepointClient_A.getCodepoint("org.olat.course.assessment.NewCachePersistingAssessmentManager.doInSyncUpdateUserEfficiencyStatement"); - doInSyncCp_A.setHitCount(0); - if(useCodepoints) - doInSyncCp_A.enableBreakpoint(); - - codepointClient_B = Context.getContext().createCodepointClient(2); - CodepointRef doInSyncCp_B = codepointClient_B.getCodepoint("org.olat.course.assessment.NewCachePersistingAssessmentManager.doInSyncUpdateUserEfficiencyStatement"); - doInSyncCp_B.setHitCount(0); - if(useCodepoints) - doInSyncCp_B.enableBreakpoint(); - - CodepointRef afterSyncCp_B = codepointClient_B.getCodepoint("org.olat.course.assessment.NewCachePersistingAssessmentManager.afterSyncUpdateUserEfficiencyStatement"); - afterSyncCp_B.setHitCount(0); - if(useCodepoints) - afterSyncCp_B.enableBreakpoint(); - - selenium_B = context.createSeleniumAndLogin(context.getStandardAuthorOlatLoginInfos(2)); - WorkflowHelper.openCourseAfterLogin(selenium_B, COURSE_NAME); - - //STUDENT runs the "Test 1" and gets a score equals with 1. - selenium_A.click("ui=commons::start()"); - selenium_A.waitForPageToLoad("30000"); - selenium_A.click("ui=qti::menuItem(titleOfItem=Single Choice)"); - selenium_A.waitForPageToLoad("30000"); - selenium_A.click("ui=qti::testItemFormElement(text=Antwort 3)"); - selenium_A.click("ui=qti::saveAnswer()"); - selenium_A.waitForPageToLoad("30000"); - selenium_A.click("ui=qti::finishTest()"); - assertTrue(selenium_A.getConfirmation().matches("^Do you really want to submit[\\s\\S]$")); - - //A: check if codepoint reached: beforeSyncCp_A - if(useCodepoints) { - beforeSyncCp_A.assertBreakpointReached(1, 20000); - System.out.println("beforeSyncCp_A.assertBreakpointReached"); - } - - //tutor opens the assessment tool of the same course and overwrites the score of "Test 1" with the value 7 - selenium_B.click("ui=course::toolbox_courseTools_assessmentTool()"); - selenium_B.waitForPageToLoad("30000"); - selenium_B.click("ui=course::assessment_selectType(text=As per user)"); - selenium_B.waitForPageToLoad("30000"); - selenium_B.click("ui=course::assessment_selectUser(username=" + STUDENT + ")"); - selenium_B.waitForPageToLoad("10000"); - if(useCodepoints) { - //student last score was not stored yet - assertEquals("2.000", selenium_B.getText("ui=course::assessment_scoreInTable(title=Test 1)")); - } else { - assertEquals("1.000", selenium_B.getText("ui=course::assessment_scoreInTable(title=Test 1)")); - } - //tutor selects "Test 1" and change its score and passed info - selenium_B.click("ui=course::assessment_selectAssessmentCourseNode(title=Test 1)"); - selenium_B.waitForPageToLoad("30000"); - selenium_B.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Score)", "7"); - selenium_B.click("ui=course::assessment_setPassedYes()"); - selenium_B.click("ui=commons::save()"); //updateEfficiencyStatement(2) - // B: check if codepoint reached: doInSyncCp_B, and continue A thread - //this means that tutor's score is first stored and will be overwritten by the students's score - if(useCodepoints) { - doInSyncCp_B.assertBreakpointReached(1, 20000); - System.out.println("doInSyncCp_B.assertBreakpointReached"); - TemporaryPausedThread[] threadsA = beforeSyncCp_A.getPausedThreads(); - threadsA[0].continueThread(); - System.out.println("beforeSyncCp_A continue threads"); - - //B: continue thread - doInSyncCp_A.assertBreakpointNotReached(20000); - System.out.println("doInSyncCp_A.assertBreakpointNotReached"); - TemporaryPausedThread[] threadsB = doInSyncCp_B.getPausedThreads(); - threadsB[0].continueThread(); - System.out.println("doInSyncCp_B continue threads"); - - //B: leave the doInSync block - afterSyncCp_B.assertBreakpointReached(1, 40000); - doInSyncCp_A.assertBreakpointReached(1, 40000); - threadsA = doInSyncCp_A.getPausedThreads(); - threadsA[0].continueThread(); - System.out.println("doInSyncCp_A continue threads"); - threadsB = afterSyncCp_B.getPausedThreads(); - threadsB[0].continueThread(); - System.out.println("afterSyncCp_B continue threads"); - } - selenium_B.waitForPageToLoad("30000"); - //what tutor sees - /*if(useCodepoints) { - //assert score on "Struktur 1" to be the sum of the "Test 1" and "Bewertung 1" scores - assertEquals("1.000", selenium_B.getText("ui=course::assessment_scoreInTable(title=Struktur 1)")); - //assert score on "Struktur 2" to be the half of sum of the "Test 1" and "Bewertung 1" scores - assertEquals("0.500", selenium_B.getText("ui=course::assessment_scoreInTable(title=Struktur 2)")); - } else {*/ - //assert score on "Struktur 1" to be the sum of the "Test 1" and "Bewertung 1" scores - assertEquals("7.000", selenium_B.getText("ui=course::assessment_scoreInTable(title=Struktur 1)")); - //assert score on "Struktur 2" to be the half of sum of the "Test 1" and "Bewertung 1" scores - assertEquals("3.500", selenium_B.getText("ui=course::assessment_scoreInTable(title=Struktur 2)")); - //} - - //what student sees - selenium_A.waitForPageToLoad("30000"); - assertEquals("1", selenium_A.getText("ui=qti::achievedScore()")); - - selenium_A.click("ui=qti::closeTest()"); //updateEfficiencyStatement(1) - selenium_A.waitForPageToLoad("30000"); - if(useCodepoints) { - assertEquals("1.000", selenium_A.getText("ui=qti::yourScore()")); - } else { - assertEquals("7.000", selenium_A.getText("ui=qti::yourScore()")); - } - - // student checks "Evidence of achievement" in HOME - show details - selenium_A.click("ui=tabs::home()"); - selenium_A.waitForPageToLoad("30000"); - selenium_A.click("ui=home::menu_evidencesOfAchievement()"); - selenium_A.waitForPageToLoad("30000"); - selenium_A.click("ui=home::content_evidencesOfAchievement_selectDetails(title=" + COURSE_NAME + ")"); - Thread.sleep(10000); - selenium_A.selectWindow(selenium_A.getAllWindowTitles()[2]); - assertTrue(selenium_A.isTextPresent("Evidence of achievement")); - //check score in table - assertEquals("1.000", selenium_A.getText("ui=course::assessment_scoreInTable(title=Test 1)")); - - System.out.println("AssessmentWithCodepointsTest - doTestEfficiencyStatementUpdateWithCodepoints - ENDED"); - } - - - @Override - public void cleanUpAfterRun() { - System.out.println("AssessmentWithCodepointsTest - cleanUpAfterRun - STARTED"); - //resetScoreCalculationRule(); - WorkflowHelper.deleteAllCoursesNamed(COURSE_NAME); - System.out.println("AssessmentWithCodepointsTest - cleanUpAfterRun - ENDED"); - } - -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/ClusteredCourseExportTest.java b/src/test/java/org/olat/test/functional/codepoints/cluster/ClusteredCourseExportTest.java deleted file mode 100644 index 8de7a497304..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/ClusteredCourseExportTest.java +++ /dev/null @@ -1,188 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.codepoints.cluster; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.SeleniumHelper; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; -import org.olat.testutils.codepoints.client.TemporaryPausedThread; - -import com.thoughtworks.selenium.Selenium; - - /** - * Tests that no course export, copy and edit could occur concurrently - clusterwide - - * but protected by a GUI lock. - * <br/> - * Test setup: <br/> - * - admin clones DEMO_COURSE_NAME and adds author as owner to this. <br/> - * - admin and author login on separate nodes - * (Theoretically, since this depends of the multiVmOlatUrl1 and multiVmOlatUrl2 in customcontext.xml) - * <br/> - * Test case: <br/> - * - author opens "Demo Course" and start editing course <br/> - * - administrator wants to export course - but it is locked <br/> - * - author closes course editor <br/> - * - administrator exports course - threadA stops at codepoint - <br/> - * - author want to open course editor but course locked for export - threadA stopped at codepoint - <br/> - * - continue threadA - exports finishes - lock released <br/> - * - author opens successfully course editor <br/> - * - logout - * - * @author Lavinia Dumitrescu - * - */ -public class ClusteredCourseExportTest extends BaseSeleneseTestCase { - - private OLATWorkflowHelper workflow_A; //administrator on node 1 - private OLATWorkflowHelper workflow_B; //author on node 2 - private CodepointClient codepointClient_A; - - private final String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_1; - private final String COURSE_NAME = "ClusteredCourseExportTest" + System.currentTimeMillis(); - - /** - * "administrator" adds author as owner of the "Demo Course" - */ - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //clone DEMO_COURSE_NAME and work with the clone - assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, COURSE_NAME)); - - //"administrator" adds author as owner of the "Demo Course" - String authorUsername = Context.getContext().getStandardAuthorOlatLoginInfos(1).getUsername(); - WorkflowHelper.addOwnerToLearningResource(authorUsername, COURSE_NAME); - - workflow_A = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - workflow_B = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(2)); - } - - /** - * Tests that no course export, copy and edit could occur concurently - clusterwide - - * but protected by a GUI lock. - * Steps: - * - author opens "Demo Course" and start editing course - * - administrator wants to export course - but it is locked - * - author closes course editor - * - administrator exports course - threadA stops at codepoint - - * - author want to open course editor but course locked for export - threadA stopped at codepoint - - * - continue threadA - exports finishes - lock released - * - author opens successfully course editor - * - logout - * - * @throws Exception - */ - public void testExportCourse() throws Exception { - - Context context = Context.getContext(); - codepointClient_A = context.createCodepointClient(1); - CodepointRef longExportStartedCp_A = codepointClient_A.getCodepoint("org.olat.course.CourseFactory.longExportCourseToZIP"); - longExportStartedCp_A.setHitCount(0); - longExportStartedCp_A.enableBreakpoint(); - - //author opens "Demo Course" - CourseEditor courseEditor_B = workflow_B.getLearningResources().searchAndShowCourseContent(COURSE_NAME).getCourseEditor(); - - //administrator wants to export course - but it is locked - LRDetailedView lRDetailedView_A = workflow_A.getLearningResources().searchResource(COURSE_NAME, null); - Selenium selenium_A = lRDetailedView_A.getSelenium(); - selenium_A.click("ui=learningResources::toolbox_learningResource_exportContent()"); - //no need for waitForPageToLoad since the message shows up immediately for a very short time - - SeleniumHelper.waitUntilTextPresent(selenium_A, "This course is currently locked", 20); - - //author closes course editor and releases lock - CourseRun courseRun_B = courseEditor_B.closeToCourseRun(); - - //administrator exports course - selenium_A.click("ui=learningResources::toolbox_learningResource_exportContent()"); - //pause at breakpoint - longExportStartedCp_A.assertBreakpointReached(1, 20000); - - //author tries to reopen course editor and gets "already locked" warning - Selenium selenium_B = courseRun_B.getSelenium(); - selenium_B.click("ui=course::toolbox_courseTools_courseEditor()"); - //no need for waitForPageToLoad since the message shows up immediately for a very short time - for (int second = 0;; second++) { - if (second >= 120) fail("timeout"); //WARNING: HERE POTENTIAL FAILURE EACH TIME THE TRANSLATION CHANGES! - try { - //Make sure that the string really exists in the _en property file - if (selenium_B.isTextPresent("This course is being locked by") || - selenium_B.isTextPresent("This course is being edited by")) break; - } catch (Exception e) {} - Thread.sleep(1000); - } - - //continue threads - TemporaryPausedThread[] threadsA = longExportStartedCp_A.getPausedThreads(); - threadsA[0].continueThread(); - //Thread.sleep(1000); - Thread.sleep(3000); - - //author opens successfully the course editor - selenium_B.click("ui=course::toolbox_courseTools_courseEditor()"); - boolean isLockedByEncountered = false; - boolean isEditedByEncountered = false; - for (int second = 0;; second++) { - if (selenium_B.isTextPresent("This course was last published on")) break; - if (second >= 120) { - if (isLockedByEncountered) { - fail("Timeout. But encountered String 'This course is currently locked by'. Maybe that's the actual problem?"); - } - if (isEditedByEncountered) { - fail("Timeout. But encountered String 'This course is currently edited by'. Maybe that's the actual problem?"); - } - fail("Timeout"); - } - try { - //Make sure that the string really exists in the _en property file - if (selenium_B.isTextPresent("This course was last published on")) break; - if (selenium_B.isTextPresent("This course is currently locked by")) { - System.out.println("Encountered String 'This course is currently locked by'!!!!!"); - isLockedByEncountered = true; - } - if (selenium_B.isTextPresent("This course is currently edited by")) { - System.out.println("Encountered String 'This course is currently edited by'!!!!!"); - isEditedByEncountered = true; - } - } catch (Exception e) {} - Thread.sleep(1000); - } - - selenium_A.click("ui=tabs::logOut()"); - selenium_B.click("ui=tabs::logOut()"); - } - - -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/ConcurrentEnrolmentWithCheckpointsTest.java b/src/test/java/org/olat/test/functional/codepoints/cluster/ConcurrentEnrolmentWithCheckpointsTest.java deleted file mode 100644 index 3164e659868..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/ConcurrentEnrolmentWithCheckpointsTest.java +++ /dev/null @@ -1,225 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.codepoints.cluster; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.EnrolmentEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; -import org.olat.testutils.codepoints.client.TemporaryPausedThread; - -import com.thoughtworks.selenium.Selenium; - -/** - * Tests concurrent Enrollment with codepoints. - * - * Test case: <br/> - * 5 users try to subscribe to group with just one place, only one should get into group. - * <br/> - * Make sure that the rest get appropriate error messages. - * - * - * - */ -public class ConcurrentEnrolmentWithCheckpointsTest extends BaseSeleneseTestCase { - - - private CodepointClient codepointClient_1; - private CodepointClient codepointClient_2; - - protected Selenium seleniums[] = new Selenium[5]; - - private final static String COURSE_NAME = "Course_for_Enrolment_Concurrency" + System.currentTimeMillis(); - - - public void testConcurrentEnrolmentWithCodepointsTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos student02= context.createuserIfNotExists(2, "enrolstudi02", standardPassword, true, false, false, false, false); - OlatLoginInfos student03= context.createuserIfNotExists(1, "enrolstudi03", standardPassword, true, false, false, false, false); - OlatLoginInfos student04= context.createuserIfNotExists(2, "enrolstudi04", standardPassword, true, false, false, false, false); - OlatLoginInfos student05= context.createuserIfNotExists(1, "enrolstudi05", standardPassword, true, false, false, false, false); - - { - // Author01 creates course with learning group (max 1 participant) and enrolment course element - OLATWorkflowHelper olatWorkflow_0 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - System.out.println("logging in browser 1..."); - LearningResources learningResources = olatWorkflow_0.getLearningResources(); - learningResources.createResource(COURSE_NAME, "Enrolment Test", LearningResources.LR_Types.COURSE); - CourseRun courseRun = learningResources.searchAndShowMyCourseContent(COURSE_NAME); - GroupManagement groupManagement = courseRun.getGroupManagement(); - groupManagement.createLearningGroup("learning group selenium 5", "fifth lg", 1, false, false); - courseRun = groupManagement.close(); - CourseEditor courseEditor = courseRun.getCourseEditor(); - EnrolmentEditor enrolmentEditor = (EnrolmentEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.ENROLMENT, true, null); - enrolmentEditor.selectLearningGroups("learning group selenium 5"); - courseEditor.publishCourse(); - courseEditor.closeToCourseRun(); - olatWorkflow_0.logout(); - } - - //node 1 - codepointClient_1 = Context.getContext().createCodepointClient(1); - CodepointRef doInSync1Cp_1 = codepointClient_1.getCodepoint("org.olat.course.nodes.en.EnrollmentManager.doInSync1"); - doInSync1Cp_1.setHitCount(0); - doInSync1Cp_1.enableBreakpoint(); - - CodepointRef doInSync2Cp_1 = codepointClient_1.getCodepoint("org.olat.course.nodes.en.EnrollmentManager.doInSync2"); - doInSync2Cp_1.setHitCount(0); - doInSync2Cp_1.enableBreakpoint(); - - CodepointRef afterDoInSyncCp_1 = codepointClient_1.getCodepoint("org.olat.course.nodes.en.EnrollmentManager.afterDoInSync"); - afterDoInSyncCp_1.setHitCount(0); - afterDoInSyncCp_1.enableBreakpoint(); - - //node 2 - codepointClient_2 = Context.getContext().createCodepointClient(2); - CodepointRef doInSyncCp_2 = codepointClient_2.getCodepoint("org.olat.course.nodes.en.EnrollmentManager.doInSync1"); - doInSyncCp_2.setHitCount(0); - doInSyncCp_2.enableBreakpoint(); - - { - // student01 opens course and navigates to enrolment course element - OLATWorkflowHelper olatWorkflow_0 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - CourseRun courseRun = olatWorkflow_0.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EnrolmentRun enrolmentRun = courseRun.selectEnrolment(CourseEditor.ENROLMENT_TITLE); - seleniums[0] = enrolmentRun.getSelenium(); - } - - { - // student02 opens course and navigates to enrolment course element - System.out.println("logging in browser 2..."); - OLATWorkflowHelper olatWorkflow_1 = context.getOLATWorkflowHelper(student02); - CourseRun courseRun = olatWorkflow_1.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EnrolmentRun enrolmentRun = courseRun.selectEnrolment(CourseEditor.ENROLMENT_TITLE); - seleniums[1] = enrolmentRun.getSelenium(); - } - - { - // student03 opens course and navigates to enrolment course element - System.out.println("logging in browser 3..."); - OLATWorkflowHelper olatWorkflow_2 = context.getOLATWorkflowHelper(student03); - CourseRun courseRun = olatWorkflow_2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EnrolmentRun enrolmentRun = courseRun.selectEnrolment(CourseEditor.ENROLMENT_TITLE); - seleniums[2] = enrolmentRun.getSelenium(); - } - - { - // student04 opens course and navigates to enrolment course element - System.out.println("logging in browser 4..."); - OLATWorkflowHelper olatWorkflow_3 = context.getOLATWorkflowHelper(student04); - CourseRun courseRun = olatWorkflow_3.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EnrolmentRun enrolmentRun = courseRun.selectEnrolment(CourseEditor.ENROLMENT_TITLE); - seleniums[3] = enrolmentRun.getSelenium(); - } - - { - // student05 opens course and navigates to enrolment course element - System.out.println("logging in browser 5..."); - OLATWorkflowHelper olatWorkflow_4 = context.getOLATWorkflowHelper(student05); - CourseRun courseRun = olatWorkflow_4.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EnrolmentRun enrolmentRun = courseRun.selectEnrolment(CourseEditor.ENROLMENT_TITLE); - seleniums[4] = enrolmentRun.getSelenium(); - } - - // All students enrol, only student01 should get into group - { - seleniums[0].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - seleniums[1].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - - doInSync1Cp_1.assertBreakpointReached(1, 20000); - System.out.println("doInSync1Cp_1.assertBreakpointReached"); - - doInSyncCp_2.assertBreakpointNotReached(20000); - System.out.println("doInSyncCp_2.assertBreakpointNotReached"); - - TemporaryPausedThread[] threads1 = doInSync1Cp_1.getPausedThreads(); - threads1[0].continueThread(); - System.out.println("doInSync1Cp_1 continue threads"); - doInSync1Cp_1.disableBreakpoint(true); - - doInSync2Cp_1.assertBreakpointReached(1, 20000); - System.out.println("doInSync2Cp_1.assertBreakpointReached"); - - doInSyncCp_2.assertBreakpointNotReached(20000); - System.out.println("doInSyncCp_2.assertBreakpointNotReached"); - - threads1 = doInSync2Cp_1.getPausedThreads(); - threads1[0].continueThread(); - System.out.println("doInSync2Cp_1 continue threads"); - doInSync2Cp_1.disableBreakpoint(true); - - - afterDoInSyncCp_1.assertBreakpointReached(1, 20000); - System.out.println("afterDoInSyncCp_1.assertBreakpointReached"); - - doInSyncCp_2.assertBreakpointReached(1, 20000); - System.out.println("doInSyncCp_2.assertBreakpointReached"); - TemporaryPausedThread[] threads2 = doInSyncCp_2.getPausedThreads(); - threads2[0].continueThread(); - System.out.println("doInSyncCp_2 continue threads"); - doInSyncCp_2.disableBreakpoint(true); - - threads1 = afterDoInSyncCp_1.getPausedThreads(); - threads1[0].continueThread(); - System.out.println("afterDoInSyncCp_1 continue threads"); - afterDoInSyncCp_1.disableBreakpoint(true); - - seleniums[2].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - seleniums[3].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - seleniums[4].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - - - int numWinners = 0; - int numLoosers = 0; - for(int i=0; i<5; i++) { - seleniums[i].waitForPageToLoad("30000"); - if (seleniums[i].isTextPresent("enrolled")) { - numWinners++; - } else if (seleniums[i].isTextPresent("In the meantime this group is complete. Please select another one.")) { - numLoosers++; - } else { - fail("oups..."); - } - } - assertEquals("expected only 1 winner", 1, numWinners); - assertEquals("expected only 4 loosers", 4, numLoosers); - //assertEquals("expected only 1 loosers", 1, numLoosers); - - } - { - //author01 deletes course - /*OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - LRDetailedView lRDetailedView = workflow.getLearningResources().searchMyResource(COURSE_NAME); - lRDetailedView.deleteLR();*/ - } - } -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/CopyCourseTest.java b/src/test/java/org/olat/test/functional/codepoints/cluster/CopyCourseTest.java deleted file mode 100644 index 78722f29d0f..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/CopyCourseTest.java +++ /dev/null @@ -1,179 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.codepoints.cluster; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; -import org.olat.testutils.codepoints.client.TemporaryPausedThread; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; - -import com.thoughtworks.selenium.Selenium; - -/** - * Tests CourseFactory.copyCourse() in cluster mode - with codepoints. <br/> - * - * Test setup: <br/> - * administrator adds author as owner of the "Demo Course". <br/> - * - * Test case: <br/> - * Creates 2 copies ("COPY A - DEMO COURSE" and "COPY B - DEMO COURSE") of the same "Demo Course". <br/> - * Administrator and author create 2 copy of the same course simultaneously, so if the administrator starts - * to copy and the thread_A pauses at codepoint, the author finds the course locked when tries to copy. - * Author succeds to copy after the thread_A is continued. - * <br/> - * - * 13.09.2010: - * fixed to conform with the new code behaviour (a course copy is already created after click copyLR, - * before insert new title/description and OK). - * - * @author Lavinia Dumitrescu - * - */ -public class CopyCourseTest extends BaseSeleneseTestCase { - - protected Selenium selenium_B; - - private final String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_1; - private final String COURSE_NAME = "CopyCourse" + System.currentTimeMillis(); - - private CodepointClient codepointClient_A; - - - public void setUp() throws Exception { - System.out.println("CopyCourseTest - setUp - START"); - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //clone "Demo Course" and work with the clone - assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, COURSE_NAME)); - - //author - OlatLoginInfos authorOlatLoginInfos = context.getStandardAuthorOlatLoginInfos(1); - //"administrator" adds author as owner of the "Demo Course" - WorkflowHelper.addOwnerToLearningResource(authorOlatLoginInfos.getUsername(), COURSE_NAME); - System.out.println("CopyCourseTest - setUp - END"); - } - - - public void testCopyCourse() throws Exception { - Context context = Context.getContext(); - - //administrator - OLATWorkflowHelper workflow1 = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - LRDetailedView lRDetailedView1 = workflow1.getLearningResources().searchResource(COURSE_NAME, null); - - //author - owner of the "Demo Course" - OLATWorkflowHelper workflow2 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - LRDetailedView lRDetailedView2 = workflow2.getLearningResources().searchResource(COURSE_NAME,null); - - codepointClient_A = context.createCodepointClient(1); - CodepointRef longCopyStartedCp_A = codepointClient_A.getCodepoint("org.olat.course.CourseFactory.copyCourseAfterSaveTreeModel"); - longCopyStartedCp_A.setHitCount(0); - longCopyStartedCp_A.enableBreakpoint(); - - //lRDetailedView1.copyLR("COPY A - DEMO COURSE", "bla"); - this.startCopyLR(lRDetailedView1.getSelenium()); - - //A: check if codepoint reached: longCopyStartedCp_A - longCopyStartedCp_A.assertBreakpointReached(1, 20000); - System.out.println("longCopyStartedCp_A.assertBreakpointReached"); - - selenium_B = lRDetailedView2.getSelenium(); - selenium_B.click("ui=learningResources::toolbox_learningResource_copy()"); - selenium_B.waitForPageToLoad("30000"); - //course still locked - for (int second = 0;; second++) { - if (second >= 120) fail("timeout"); - try { - //Make sure that the string really exists in the _en property file - if (selenium_B.isTextPresent("This course is currently locked by") || - selenium_B.isTextPresent("This course is currently edited by")) break; - } catch (Exception e) {} - Thread.sleep(1000); - } - //A: continue threads hold by longCopyStartedCp_A - TemporaryPausedThread[] threadsA = longCopyStartedCp_A.getPausedThreads(); - threadsA[0].continueThread(); - longCopyStartedCp_A.disableBreakpoint(true); - Thread.sleep(3000); - this.finishCopyLR(lRDetailedView1.getSelenium(), "COPY A - DEMO COURSE", "bla"); - - Thread.sleep(5000); - lRDetailedView2.copyLR("COPY B - DEMO COURSE", null); - - workflow1.logout(); - workflow2.logout(); - } - - /** - * - * @param selenium - */ - private void startCopyLR(Selenium selenium) { - if(selenium.isElementPresent("ui=learningResources::toolbox_learningResource_copy()")) { - selenium.click("ui=learningResources::toolbox_learningResource_copy()"); - - } else { - throw new IllegalStateException("Cannot copy learning resource!"); - } - } - - /** - * - * @param selenium - * @param newTitle - * @param newDescription - */ - private void finishCopyLR(Selenium selenium, String newTitle, String newDescription) { - selenium.type("ui=learningResources::dialog_title()", newTitle); - if(newDescription!=null) { - selenium.type("ui=learningResources::dialog_description()", newDescription); - } - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - } - - - /** - * Deletes the created copies. - */ - @Override - public void cleanUpAfterRun() { - System.out.println("CopyCourseTest - cleanUpAfterRun - START"); - Context context = Context.getContext(); - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - workflow.getLearningResources().searchResource("COPY A - DEMO COURSE", null).deleteLR(); - workflow.getLearningResources().searchResource("COPY B - DEMO COURSE", null).deleteLR(); - System.out.println("CopyCourseTest - cleanUpAfterRun - END"); - } -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/CourseEditingTest.java b/src/test/java/org/olat/test/functional/codepoints/cluster/CourseEditingTest.java deleted file mode 100644 index 239380374f9..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/CourseEditingTest.java +++ /dev/null @@ -1,176 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.codepoints.cluster; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; -import org.olat.testutils.codepoints.client.TemporaryPausedThread; - -import com.thoughtworks.selenium.Selenium; - - /** - * Tests course editing in clustered mode, and that the GUI locking works, - * that is a course could be edited by only a single user at a time. - * <br/> - * Test setup: <br/> - * Needs a clean "Demo Course".</br> - * - * Test case: <br/> - * The cluster_B node should be able the see the latest inserted node by cluster_A node after the course lock release. </br> - * - cluster_A: inserts a Structure course element, assertBreakpointReached </br> - * - cluster_B: try to open the course editor of the same course but gets a "course locked" warning </br> - * - cluster_A: continues the thread </br> - * - cluster_A: closes course editor </br> - * - cluster_B: opens editor, selects the first Structure node, changes the title, closes the editor </br> - * - * @author Lavinia Dumitrescu - * - */ -public class CourseEditingTest extends BaseSeleneseTestCase { - - protected Selenium selenium_A; - protected Selenium selenium_B; - private CodepointClient codepointClient_A; - - private final String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_1; - private final String COURSE_NAME = "CourseEditing" + System.currentTimeMillis(); - - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //clone DEMO_COURSE_NAME and work with the clone - assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, COURSE_NAME)); - - //author - OlatLoginInfos authorOlatLoginInfos = context.getStandardAuthorOlatLoginInfos(2); - //"administrator" adds author as owner of the "Demo Course" - WorkflowHelper.addOwnerToLearningResource(authorOlatLoginInfos.getUsername(), COURSE_NAME); - selenium_B = context.createSeleniumAndLogin(context.getStandardAuthorOlatLoginInfos(2)); - - //administrator - selenium_A = context.createSeleniumAndLogin(context.getStandardAdminOlatLoginInfos(1)); - } - - /** - * Needs a clean "Demo Course".</br> - * Tests course editing in clustered mode. - * The cluster_B node should be able the see the latest inserted node by cluster_A node after the course lock release. </br> - * - cluster_A: inserts a Structure course element, assertBreakpointReached </br> - * - cluster_B: try to open the course editor of the same course but gets a "course locked" warning </br> - * - cluster_A: continues the thread </br> - * - cluster_A: closes course editor </br> - * - cluster_B: opens editor, selects the first Structure node, changes the title, closes the editor </br> - * @throws Exception - */ - public void testCourseEditing() throws Exception { - - WorkflowHelper.openCourseAfterLogin(selenium_A, COURSE_NAME); - WorkflowHelper.openCourseAfterLogin(selenium_B, COURSE_NAME); - - Context context = Context.getContext(); - //codepoints node A - codepointClient_A = context.createCodepointClient(1); - CodepointRef startInsertCp_A = codepointClient_A.getCodepoint("org.olat.course.editor.EditorMainController.startInsertNode"); - startInsertCp_A.setHitCount(0); - startInsertCp_A.enableBreakpoint(); - - selenium_A.click("ui=course::toolbox_courseTools_courseEditor()"); - selenium_A.waitForPageToLoad("30000"); - - //A: inserts Structure course node - selenium_A.click("ui=courseEditor::toolbox_insertCourseElements_insertStructure()"); - - //A: check if codepoint reached: startInsertCp_A - startInsertCp_A.assertBreakpointReached(1, 20000); - System.out.println("startInsertCp_A.assertBreakpointReached"); - - - //B: start course editor in cluster_B - this should lead to a courseLocked warning - selenium_B.click("ui=course::toolbox_courseTools_courseEditor()"); - selenium_B.waitForPageToLoad("30000"); - - //B: check if "course locked" warning shows up - - //selenium_B.click("ui=dialog::OK()"); //we don't really have the chance to click OK on the warning dialog - //selenium_B.waitForPageToLoad("30000"); - /*for (int second = 0;; second++) { //TODO: ld: for some reason this check doesn't work - if (second >= 120) fail("timeout"); - try { - if (selenium_B.isTextPresent("This course is currently edited by")) break; - } catch (Exception e) {} - Thread.sleep(1000); - }*/ - //WORKAROUND for the "course locked" check: try again to open course editor - selenium_B.click("ui=course::toolbox_courseTools_courseEditor()"); - selenium_B.waitForPageToLoad("30000"); - - //A: continue threads hold by startInsertCp_A - TemporaryPausedThread[] threadsA = startInsertCp_A.getPausedThreads(); - threadsA[0].continueThread(); - - selenium_A.waitForPageToLoad("10000"); - //no need for clickAndWait here - selenium_A.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()"); - - selenium_A.click("ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()"); - selenium_A.waitForPageToLoad("30000"); - - selenium_A.click("ui=courseEditor::toolbox_editorTools_closeEditor()"); - selenium_A.waitForPageToLoad("30000"); - - //A: add CodepointRef here in cluster_A: endCourseEditCp_A - - //B: start course editor in cluster_B - selenium_B.click("ui=course::toolbox_courseTools_courseEditor()"); - selenium_B.waitForPageToLoad("30000"); - - //B: select the (Structure) node inserted by A - selenium_B.click("ui=course::menu_structureNode()"); - selenium_B.waitForPageToLoad("30000"); - //B: change node title - selenium_B.type("ui=courseEditor::content_TitleDescription_shortTitle()", "Structure B"); - selenium_B.click("ui=commons::save()"); - selenium_B.waitForPageToLoad("30000"); - - - //B: close course editor (releases lock) - selenium_B.click("ui=courseEditor::toolbox_editorTools_closeEditor()"); - selenium_B.waitForPageToLoad("30000"); - - //A: continue threads hold by endCourseEditCp_A - - selenium_A.click("ui=tabs::logOut()"); - selenium_B.click("ui=tabs::logOut()"); - - } - - -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/CourseGroupChatClusterTest.java b/src/test/java/org/olat/test/functional/codepoints/cluster/CourseGroupChatClusterTest.java deleted file mode 100644 index 8b9ee2c8aaf..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/CourseGroupChatClusterTest.java +++ /dev/null @@ -1,170 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.codepoints.cluster; - -import org.junit.Ignore; -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; -import org.olat.testutils.codepoints.client.TemporaryPausedThread; - -import com.thoughtworks.selenium.Selenium; - -/** - * test groupChat stuff and polling (changing interval) - * - * @author Guido - * - */ -@Ignore -public class CourseGroupChatClusterTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = Context.DEMO_COURSE_NAME_1; - - protected Selenium selenium_1; - protected Selenium selenium_2; - private CodepointClient codepointClient_A, codepointClient_B; - - - public void testCourseChat() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - OLATWorkflowHelper workflow_1 = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - OLATWorkflowHelper workflow_2 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(2)); - - CourseRun curseRun1 = workflow_1.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - selenium_1 = curseRun1.getSelenium(); - - CourseRun curseRun2 = workflow_2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - selenium_2 = curseRun2.getSelenium(); - - codepointClient_A = context.createCodepointClient(1); - CodepointRef beforeSyncA = codepointClient_A.getCodepoint("org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-before-sync.org.olat.instantMessaging.groupchat.GroupChatJoinTask.run"); - beforeSyncA.setHitCount(0); - beforeSyncA.enableBreakpoint(); - - codepointClient_B = context.createCodepointClient(2); - CodepointRef beforeSyncB = codepointClient_B.getCodepoint("org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-before-sync.org.olat.instantMessaging.groupchat.GroupChatJoinTask.run"); - beforeSyncB.setHitCount(0); - beforeSyncB.enableBreakpoint(); - - CodepointRef inSyncA = codepointClient_A.getCodepoint("org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-in-sync.org.olat.instantMessaging.groupchat.GroupChatJoinTask.run"); - inSyncA.setHitCount(0); - - CodepointRef inSyncB = codepointClient_B.getCodepoint("org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-in-sync.org.olat.instantMessaging.groupchat.GroupChatJoinTask.run"); - inSyncB.setHitCount(0); - - selenium_1.mouseMoveAt("ui=courseChat::openCourseChat()", "300,300"); - selenium_1.click("ui=courseChat::openCourseChat()"); - - selenium_2.mouseMoveAt("ui=courseChat::openCourseChat()", "300,300"); - selenium_2.click("ui=courseChat::openCourseChat()"); - - //both node are waiting to entry sync block - Thread.sleep(2000); - inSyncB.assertHitCount(0); - inSyncA.assertHitCount(0); - - beforeSyncA.assertHitCount(1); - beforeSyncB.assertHitCount(1); - - TemporaryPausedThread[] threadsA = beforeSyncB.getPausedThreads(); - assertNotNull(threadsA); - assertEquals(1, threadsA.length); - - TemporaryPausedThread[] threadsB = beforeSyncA.getPausedThreads(); - assertNotNull(threadsB); - assertEquals(1, threadsB.length); - - // continue the first - threadsA[0].continueThread(); - Thread.sleep(1500); - - // continue the second - threadsB[0].continueThread(); - Thread.sleep(500); - - - Thread.sleep(16000);//wait until course chat link is save (no reload warning) - - - //open course chat - /*selenium_1.mouseMoveAt("ui=courseChat::openCourseChat()", "300,300"); - selenium_1.click("ui=courseChat::openCourseChat()");*/ - selenium_1.waitForPageToLoad("30000"); - Thread.sleep(1000); - - if(!selenium_1.isElementPresent("ui=courseChat::withinCourseChat()")) { - Thread.sleep(5000); - } - selenium_1.click("ui=courseChat::withinCourseChat()"); - selenium_1.waitForPageToLoad("30000"); - - selenium_1.click("ui=courseChat::toggleAnonymous()"); - selenium_1.waitForPageToLoad("30000"); - - Thread.sleep(16000); - - //open course chat - /*selenium_2.mouseMoveAt("ui=courseChat::openCourseChat()", "300,300"); - selenium_2.click("ui=courseChat::openCourseChat()");*/ - selenium_2.waitForPageToLoad("30000"); - Thread.sleep(3000); - - if(!selenium_2.isElementPresent("ui=courseChat::withinCourseChat()")) { - Thread.sleep(5000); - } - selenium_2.click("ui=courseChat::withinCourseChat()"); - selenium_2.waitForPageToLoad("30000"); - selenium_2.click("ui=courseChat::toggleAnonymous()"); - selenium_2.waitForPageToLoad("30000"); - - //if both name changed polling works and chat window is working - Thread.sleep(3000); - if (!selenium_1.isTextPresent("("+context.getStandardAdminOlatLoginInfos(1).getUsername()+")")) { - Thread.sleep(6000); //wait for another 6s - } - assertTrue(selenium_1.isTextPresent("("+context.getStandardAdminOlatLoginInfos(1).getUsername()+")")); - - if (!selenium_2.isTextPresent("("+context.getStandardAuthorOlatLoginInfos(2).getUsername()+")")) { - Thread.sleep(6000); //wait for another 6s - } - assertTrue(selenium_2.isTextPresent("("+context.getStandardAuthorOlatLoginInfos(2).getUsername()+")")); - - - //send msg and check on second node if it arrived - String msg = Long.valueOf(System.currentTimeMillis()).toString(); - selenium_1.type("ui=courseChat::sendMsgInputField()", msg); - selenium_1.click("ui=courseChat::sendMsgButton()"); - selenium_1.waitForPageToLoad("30000"); - Thread.sleep(3000); //after 3s it should be there - assertTrue(selenium_2.isTextPresent(msg)); - - - - - - } - -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/MultiBrowserClusterDeleteProjectGroupTstDISABLED3654.java b/src/test/java/org/olat/test/functional/codepoints/cluster/MultiBrowserClusterDeleteProjectGroupTstDISABLED3654.java deleted file mode 100644 index 8ff1d0726e1..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/MultiBrowserClusterDeleteProjectGroupTstDISABLED3654.java +++ /dev/null @@ -1,138 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.codepoints.cluster; - -import org.junit.Ignore; -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointClientFactory; -import org.olat.testutils.codepoints.client.CodepointRef; - -@Ignore -public class MultiBrowserClusterDeleteProjectGroupTstDISABLED3654 extends BaseSeleneseTestCase { - - protected com.thoughtworks.selenium.Selenium selenium1; - protected com.thoughtworks.selenium.Selenium selenium2; - - public void testMultiBrowserClusterNewLearningArea() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.RESTARTED_TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos user1 = context.createuserIfNotExists(1, "mbcnla1", standardPassword, true, true, true, true, true); - OlatLoginInfos user2 = context.createuserIfNotExists(2, "mbcnla2", standardPassword, true, true, true, true, true); - - { - System.out.println("logging in browser 1..."); - selenium1 = context.createSeleniumAndLogin(user1); - selenium1.click("ui=tabs::groups()"); - selenium1.waitForPageToLoad("30000"); - assertEquals("OLAT - Groups", selenium1.getTitle()); - - // delete the group if it already exists - if (selenium1.isElementPresent("ui=groups::content_deleteGroup(nameOfGroup=deleteprojectgrouptest)")) { - selenium1.click("ui=groups::content_deleteGroup(nameOfGroup=deleteprojectgrouptest)"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=groups::content_deleteYes()"); - selenium1.waitForPageToLoad("30000"); - } - - // create the group - selenium1.click("ui=groups::toolbox_create_projectGroup()"); - selenium1.waitForPageToLoad("30000"); - assertEquals("OLAT - Groups", selenium1.getTitle()); - selenium1.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Group name)", "deleteprojectgrouptest"); - selenium1.click("ui=commons::flexiForm_finishButton()"); - selenium1.waitForPageToLoad("30000"); - assertEquals("OLAT - deleteprojectgrouptest", selenium1.getTitle()); - selenium1.click("ui=tabs::closeGroup(nameOfGroup=deleteprojectgrouptest)"); - selenium1.waitForPageToLoad("30000"); - - // add 'mbcnla2' as owner to the group - selenium1.click("ui=groups::content_clickGroupEntry(nameOfGroup=deleteprojectgrouptest)"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=group::menu_administration()"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=group::content_members_tabMembers()"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=commons::usertable_owners_addUsers()"); - selenium1.waitForPageToLoad("30000"); - selenium1.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", "mbcnla2"); - selenium1.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium1.waitForPageToLoad("30000"); - selenium1.check("ui=commons::usertable_adduser_checkUsername(nameOfUser=mbcnla2)"); - selenium1.click("ui=commons::usertable_adduser_choose()"); - selenium1.waitForPageToLoad("30000"); - //selenium1.select("ui=commons::usertable_adduser_sendEmailSwitch()", "label=No"); - selenium1.click("ui=commons::usertable_adduser_finish()"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=tabs::closeGroup(nameOfGroup=deleteprojectgrouptest)"); - selenium1.waitForPageToLoad("30000"); - - // click on 'delete group' now - selenium1.click("ui=groups::content_deleteGroup(nameOfGroup=deleteprojectgrouptest)"); - selenium1.waitForPageToLoad("30000"); - } - - - { - System.out.println("logging in browser 2..."); - selenium2 = context.createSeleniumAndLogin(user2); - - selenium2.click("ui=tabs::groups()"); - selenium2.waitForPageToLoad("30000"); - assertEquals("OLAT - Groups", selenium2.getTitle()); - - // click on 'delete group' now - selenium2.click("ui=groups::content_deleteGroup(nameOfGroup=deleteprojectgrouptest)"); - selenium2.waitForPageToLoad("30000"); - } - - CodepointClient codepointClientA = context.createCodepointClient(1); - CodepointRef createAreaCpA = codepointClientA.getCodepoint("org.olat.group.BusinessGroupManagerImpl.deleteBusinessGroupWithMail"); - createAreaCpA.setHitCount(0); - createAreaCpA.enableBreakpoint(); - - CodepointClient codepointClientB = context.createCodepointClient(2); - CodepointRef createAreaCpB = codepointClientB.getCodepoint("org.olat.group.BusinessGroupManagerImpl.deleteBusinessGroupWithMail"); - createAreaCpB.setHitCount(0); - createAreaCpB.enableBreakpoint(); - - selenium1.click("ui=groups::content_deleteYes()"); - selenium2.click("ui=groups::content_deleteYes()"); - - createAreaCpA.assertBreakpointReached(1, 10000); - createAreaCpB.assertBreakpointReached(1, 10000); - - createAreaCpA.disableBreakpoint(true); - createAreaCpB.disableBreakpoint(true); - - selenium1.waitForPageToLoad("30000"); - selenium2.waitForPageToLoad("30000"); - - // check that the group is gone - // note[se]: since the test currently fails with an exception, it is hard to tell what the exact assertion here should be for the OK case... - // one of the two should probably get a warning saying that the group was deleted by someone else at the same time - or nothing, since it was successfully deleted - just not by the person him/herself... - assertFalse(selenium1.isElementPresent("ui=groups::content_clickGroupEntry(nameOfGroup=deleteprojectgrouptest)")); - assertFalse(selenium2.isElementPresent("ui=groups::content_clickGroupEntry(nameOfGroup=deleteprojectgrouptest)")); - } -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/MultiBrowserClusterNewLearningAreaTstDisabled3440.java b/src/test/java/org/olat/test/functional/codepoints/cluster/MultiBrowserClusterNewLearningAreaTstDisabled3440.java deleted file mode 100644 index aedfd8317b2..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/MultiBrowserClusterNewLearningAreaTstDisabled3440.java +++ /dev/null @@ -1,130 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.codepoints.cluster; - -import org.junit.Ignore; -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; - -@Ignore -public class MultiBrowserClusterNewLearningAreaTstDisabled3440 extends BaseSeleneseTestCase { - - protected com.thoughtworks.selenium.Selenium selenium1; - protected com.thoughtworks.selenium.Selenium selenium2; - - public void testMultiBrowserClusterNewLearningArea() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - OlatLoginInfos user1 = context.createuserIfNotExists(1, "mbcnla1", "passwd08", true, true, true, true, true); - OlatLoginInfos user2 = context.createuserIfNotExists(2, "mbcnla2", "passwd08", true, true, true, true, true); - - { - System.out.println("logging in browser 1..."); - selenium1 = context.createSeleniumAndLogin(user1); - selenium1.click("ui=tabs::learningResources()"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=learningResources::menu_searchForm()"); - selenium1.waitForPageToLoad("30000"); - selenium1.type("ui=learningResources::content_searchForm_titleField()", "Demo course wiki"); - selenium1.click("ui=learningResources::content_searchForm_search()"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=learningResources::content_clickCourseEntry(nameOfCourse=Demo course wiki)"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=learningResources::content_showContent()"); - selenium1.waitForPageToLoad("30000"); - - selenium1.click("ui=course::toolbox_courseTools_groupManagement()"); - selenium1.waitForPageToLoad("30000"); - - // make sure the learning area does not exist yet - delete otherwise - selenium1.click("ui=groupManagement::menu_allLearningAreas()"); - selenium1.waitForPageToLoad("30000"); - if (selenium1.isElementPresent("ui=groupManagement::content_learningAreaTable_deleteLearningArea(nameOfLearningArea=multibrowserclusterlearningarea)")) { - selenium1.click("ui=groupManagement::content_learningAreaTable_deleteLearningArea(nameOfLearningArea=multibrowserclusterlearningarea)"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=dialog::Yes()"); - selenium1.waitForPageToLoad("30000"); - } - - selenium1.click("ui=groupManagement::toolbox_groupManagement_newLearningArea()"); - selenium1.waitForPageToLoad("30000"); - - assertTrue(selenium1.isTextPresent("Create a new learning area")); - - selenium1.type("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_name()", "multibrowserclusterlearningarea"); - selenium1.type("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_description()", "egal oder?"); - } - - { - System.out.println("logging in browser 2..."); - selenium2 = context.createSeleniumAndLogin(user2); - selenium2.click("ui=tabs::learningResources()"); - selenium2.waitForPageToLoad("30000"); - selenium2.click("ui=learningResources::menu_searchForm()"); - selenium2.waitForPageToLoad("30000"); - selenium2.type("ui=learningResources::content_searchForm_titleField()", "Demo course wiki"); - selenium2.click("ui=learningResources::content_searchForm_search()"); - selenium2.waitForPageToLoad("30000"); - selenium2.click("ui=learningResources::content_clickCourseEntry(nameOfCourse=Demo course wiki)"); - selenium2.waitForPageToLoad("30000"); - selenium2.click("ui=learningResources::content_showContent()"); - selenium2.waitForPageToLoad("30000"); - - selenium2.click("ui=course::toolbox_courseTools_groupManagement()"); - selenium2.waitForPageToLoad("30000"); - - selenium2.click("ui=groupManagement::toolbox_groupManagement_newLearningArea()"); - selenium2.waitForPageToLoad("30000"); - - assertTrue(selenium2.isTextPresent("Create a new learning area")); - selenium2.type("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_name()", "multibrowserclusterlearningarea"); - selenium2.type("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_description()", "egal oder?"); - } - - CodepointClient codepointClientA = context.createCodepointClient(1); - CodepointRef createAreaCpA = codepointClientA.getCodepoint("org.olat.group.ui.NewAreaController.createArea"); - createAreaCpA.setHitCount(0); - createAreaCpA.enableBreakpoint(); - - CodepointClient codepointClientB = context.createCodepointClient(2); - CodepointRef createAreaCpB = codepointClientB.getCodepoint("org.olat.group.ui.NewAreaController.createArea"); - createAreaCpB.setHitCount(0); - createAreaCpB.enableBreakpoint(); - - selenium1.click("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_save()"); - selenium2.click("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_save()"); - - createAreaCpA.assertBreakpointReached(1, 10000); - createAreaCpB.assertBreakpointReached(1, 10000); - - createAreaCpA.disableBreakpoint(true); - createAreaCpB.disableBreakpoint(true); - - selenium1.waitForPageToLoad("30000"); - selenium2.waitForPageToLoad("30000"); - - assertTrue("Not found in selenium 1: Edit learning area multibrowserclusterlearningarea", selenium1.isTextPresent("Edit learning area multibrowserclusterlearningarea")); - assertTrue("Not found in selenium 2: The name of this learning area is already used in this group management, please select another.", selenium2.isTextPresent("The name of this learning area is already used in this group management, please select another.")); - } -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/NewLearningGroupTest.java b/src/test/java/org/olat/test/functional/codepoints/cluster/NewLearningGroupTest.java deleted file mode 100644 index 410d2f241a7..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/NewLearningGroupTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.codepoints.cluster; - -import com.thoughtworks.selenium.Selenium; -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; - -/** - * - * Tests that one cannot use the same name for creating two groups. - * This test uses codepoints. - * - * @author eglis - * - */ -public class NewLearningGroupTest extends BaseSeleneseTestCase { - - protected Selenium selenium1; - protected Selenium selenium2; - - private String COURSE_NAME = Context.DEMO_COURSE_NAME_2; - private final String GROUP_NAME = "multibrowserclusterlearninggroup"; - - /** - * admin1 and admin2 open COURSE_NAME/Group management/Create group by use same group name. - * Only one user should succeed to create a group with the given title, the other one should get a warning: "This group name is already being used in this context..." - * - * @throws Exception - */ - public void testMultiBrowserClusterNewLearningArea() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos user1 = context.createuserIfNotExists(1, "mbcnla1", standardPassword, true, true, true, true, true); - OlatLoginInfos user2 = context.createuserIfNotExists(2, "mbcnla2", standardPassword, true, true, true, true, true); - - { - System.out.println("logging in browser 1..."); - OLATWorkflowHelper workflow1 = context.getOLATWorkflowHelper(user1); - CourseRun courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - GroupManagement groupManagement1 = courseRun1.getGroupManagement(); - - // make sure the learning group does not exist yet - delete otherwise - groupManagement1.deleteGroup(GROUP_NAME); - - selenium1 = groupManagement1.getSelenium(); - selenium1.click("ui=groupManagement::menu_allLearningGroups()"); - selenium1.waitForPageToLoad("30000"); - - selenium1.click("ui=groupManagement::toolbox_groupManagement_newLearningGroup()"); - selenium1.waitForPageToLoad("30000"); - - assertTrue(selenium1.isTextPresent("Create a new learning group")); - - selenium1.type("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_name()", GROUP_NAME); - selenium1.type("ui=commons::tinyMce_styledTextArea()", "egal oder?"); - } - - { - System.out.println("logging in browser 2..."); - OLATWorkflowHelper workflow2 = context.getOLATWorkflowHelper(user2); - CourseRun courseRun2 = workflow2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - selenium2 = courseRun2.getGroupManagement().getSelenium(); - - selenium2.click("ui=groupManagement::toolbox_groupManagement_newLearningGroup()"); - selenium2.waitForPageToLoad("30000"); - assertTrue(selenium2.isTextPresent("Create a new learning group")); - selenium2.type("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_name()", GROUP_NAME); - selenium2.type("ui=commons::tinyMce_styledTextArea()", "egal oder?"); - } - - CodepointClient codepointClientA = context.createCodepointClient(1); - CodepointRef createAreaCpA = codepointClientA.getCodepoint("org.olat.group.BusinessGroupFactory.createAndPersistLearningGroup"); - createAreaCpA.setHitCount(0); - createAreaCpA.enableBreakpoint(); - - CodepointClient codepointClientB = context.createCodepointClient(2); - CodepointRef createAreaCpB = codepointClientB.getCodepoint("org.olat.group.BusinessGroupFactory.createAndPersistLearningGroup"); - createAreaCpB.setHitCount(0); - createAreaCpB.enableBreakpoint(); - - selenium1.click("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()"); - Thread.sleep(500); - selenium2.click("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()"); - - createAreaCpA.waitForBreakpointReached(10000); - createAreaCpB.waitForBreakpointReached(10000); - - int pausedA = createAreaCpA.getPausedThreads()==null ? 0 : createAreaCpA.getPausedThreads().length; - int pausedB = createAreaCpB.getPausedThreads()==null ? 0 : createAreaCpB.getPausedThreads().length; - assertEquals("Asserts that there is only one thread that reached the codepoint.", 1, pausedA + pausedB); - - createAreaCpA.disableBreakpoint(true); - createAreaCpB.disableBreakpoint(true); - - selenium1.waitForPageToLoad("30000"); - selenium2.waitForPageToLoad("30000"); - - assertTrue(selenium1.isTextPresent("Edit group multibrowserclusterlearninggroup")); - assertTrue(selenium2.isTextPresent("This group name is already being used in this context, please select another one.")); - } -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/Open2NewFoTopicsTest.java b/src/test/java/org/olat/test/functional/codepoints/cluster/Open2NewFoTopicsTest.java deleted file mode 100644 index de3da6d2d17..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/Open2NewFoTopicsTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.codepoints.cluster; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.PageLoadWait; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; -import org.olat.testutils.codepoints.client.TemporaryPausedThread; - -import com.thoughtworks.selenium.Selenium; - -/** - * Tests that the org.olat.course.nodes.FOCourseNode.doInSync codepoint works correctly: that is no 2 threads could get - * into the doInSync block at any time. - * <br/> - * - * Test setup: - * Needs a clean "Demo Course" with a "Forum" node. - * Creates 2 message topics suppose that a "Forum" node doesn't have any topics yet, - * and even more the node was not selected yet. - * <br/> - * - * Test case: <br/> - * 2 users try to open a new forum topic simultaneously. <br/> - * Asserts that only one thread reaches the FOCourseNode.doInSync codepoint at any time. - * - * @author Lavinia Dumitrescu - * - */ -public class Open2NewFoTopicsTest extends BaseSeleneseTestCase { - - protected Selenium selenium_A; - protected Selenium selenium_B; - private CodepointClient codepointClient_A; - private CodepointClient codepointClient_B; - - private String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_1; - private final String COURSE_NAME = "Demo Course 2NCp" + System.currentTimeMillis(); - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - //clone "Demo Course" and work with the clone - assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, COURSE_NAME)); - } - - - public void testOpen2NewFoTopics() throws Exception { - Context context = Context.getContext(); - - OLATWorkflowHelper workflow_A = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - CourseRun courseRun_A = workflow_A.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - selenium_A = courseRun_A.getSelenium(); - - OLATWorkflowHelper workflow_s = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - CourseRun courseRun_B = workflow_s.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - selenium_B = courseRun_B.getSelenium(); - - //codepoints node A - codepointClient_A = context.createCodepointClient(1); - CodepointRef beforeSyncCp_A = codepointClient_A.getCodepoint("org.olat.course.nodes.FOCourseNode.beforeDoInSync"); - beforeSyncCp_A.setHitCount(0); - beforeSyncCp_A.enableBreakpoint(); - - CodepointRef doInSyncCp_A = codepointClient_A.getCodepoint("org.olat.course.nodes.FOCourseNode.doInSync"); - doInSyncCp_A.setHitCount(0); - doInSyncCp_A.enableBreakpoint(); - - //codepoints node B - codepointClient_B = context.createCodepointClient(2); - CodepointRef beforeSyncCp_B = codepointClient_B.getCodepoint("org.olat.course.nodes.FOCourseNode.beforeDoInSync"); - beforeSyncCp_B.setHitCount(0); - beforeSyncCp_B.enableBreakpoint(); - - CodepointRef doInSyncCp_B = codepointClient_B.getCodepoint("org.olat.course.nodes.FOCourseNode.doInSync"); - doInSyncCp_B.setHitCount(0); - doInSyncCp_B.enableBreakpoint(); - - //select forum in node A - - courseRun_A.selectAnyButGetToRoot("Activation Interaction", PageLoadWait.NO_WAIT); - //check if codepoint reached, if yes continue - beforeSyncCp_A.assertBreakpointReached(1, 20000); - System.out.println("beforeSyncCp_A.assertBreakpointReached"); - TemporaryPausedThread[] threadsA = beforeSyncCp_A.getPausedThreads(); - threadsA[0].continueThread(); - - doInSyncCp_A.assertBreakpointReached(1, 10000); - System.out.println("doInSyncCp_A.assertBreakpointReached"); - - //B stops at beforeSyncCp_B - courseRun_B.selectAnyButGetToRoot("Activation Interaction", PageLoadWait.NO_WAIT); - beforeSyncCp_B.assertBreakpointReached(1, 10000); - System.out.println("beforeSyncCp_B reached"); - - //continue B and check that the doInSyncCp_B was not reached - TemporaryPausedThread[] threadsB = beforeSyncCp_B.getPausedThreads(); - threadsB[0].continueThread(); - doInSyncCp_B.assertBreakpointNotReached(20000); - System.out.println("beforeSyncCp_B continues ... but doInSyncCp_B still not reached"); - - //continue A - threadsA = doInSyncCp_A.getPausedThreads(); - threadsA[0].continueThread(); - System.out.println("doInSyncCp_A continues..."); - - //if doInSyncCp_B is reached, continue - doInSyncCp_B.assertBreakpointReached(1, 20000); - System.out.println("doInSyncCp_B reached"); - threadsB = doInSyncCp_B.getPausedThreads(); - threadsB[0].continueThread(); - System.out.println("doInSyncCp_B continues"); - - selenium_A.waitForPageToLoad("10000"); - courseRun_A.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - selenium_A.click("ui=course::content_forum_newTopic()"); - selenium_A.waitForPageToLoad("30000"); - System.out.println("A opens new topic"); - - selenium_B.waitForPageToLoad("10000"); - courseRun_B.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - selenium_B.click("ui=course::content_forum_newTopic()"); - selenium_B.waitForPageToLoad("30000"); - System.out.println("B opens new topic"); - - selenium_A.type("ui=course::content_forum_typeMsgTitle()", "CLUSTER <A> TOPIC"); - System.out.println("A types in a title"); - - selenium_B.type("ui=course::content_forum_typeMsgTitle()", "CLUSTER <B> TOPIC"); - System.out.println("B types in a title"); - - selenium_A.type("ui=course::content_forum_clickMsgBody()", "message body: CLUSTER A TOPIC"); - selenium_A.click("ui=course::content_forum_save()"); - selenium_A.waitForPageToLoad("30000"); - - selenium_B.type("ui=course::content_forum_clickMsgBody()", "message body: BBB BBBBBB BBBB"); - selenium_B.click("ui=course::content_forum_save()"); - selenium_B.waitForPageToLoad("30000"); - - selenium_A.click("ui=tabs::logOut()"); - selenium_B.click("ui=tabs::logOut()"); - - } - - @Override - public void cleanUpAfterRun() { - System.out.println("cleanUpAfterRun - START"); - WorkflowHelper.deleteAllCoursesNamed(COURSE_NAME); - System.out.println("cleanUpAfterRun - END"); - } - -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/OpenNewFoTopicTest.java b/src/test/java/org/olat/test/functional/codepoints/cluster/OpenNewFoTopicTest.java deleted file mode 100644 index 0e871a22b48..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/OpenNewFoTopicTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.codepoints.cluster; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.PageLoadWait; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.Forum; -import org.olat.test.util.selenium.olatapi.course.run.StructureElement; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; -import org.olat.testutils.codepoints.client.TemporaryPausedThread; - -/** - * Tests that the org.olat.course.nodes.FOCourseNode.doInSync codepoint is reached. - * <br/> - * - * Test case: <br/> - * Opens a new Forum topic in a clean "Demo Course" with no forum threads into the "Forum" node. - * Asserts codepoint reached. - * - * @author Lavinia Dumitrescu - * - */ -public class OpenNewFoTopicTest extends BaseSeleneseTestCase { - - private CodepointClient codepointClient_A; - - private String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_1; - private final String COURSE_NAME = "OpenNewFoTopic" + System.currentTimeMillis(); - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - //clone "Demo Course" and work with the clone - assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, COURSE_NAME)); - } - - /** - * Opens a new Forum topic in a clean "Demo Course" with no forum threads into the "Forum" node. - * @throws Exception - */ - public void testOpenNewFoTopic() throws Exception { - Context context = Context.getContext(); - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - - //open demo course copy - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - - //initialize codepoints - codepointClient_A = context.createCodepointClient(1); - CodepointRef beforeSyncCp_A = codepointClient_A.getCodepoint("org.olat.course.nodes.FOCourseNode.beforeDoInSync"); - beforeSyncCp_A.setHitCount(0); - beforeSyncCp_A.enableBreakpoint(); - - CodepointRef doInSyncCp_A = codepointClient_A.getCodepoint("org.olat.course.nodes.FOCourseNode.doInSync"); - doInSyncCp_A.setHitCount(0); - doInSyncCp_A.enableBreakpoint(); - - //trigger "Activation Content" which in turn loads each of its children for displaying the Previews -> Changed behavior of test! - StructureElement selectActivation = courseRun.selectAnyButGetToRoot("Activation Interaction", PageLoadWait.NO_WAIT); - selenium = selectActivation.getSelenium(); - - // ASSERTION check if codepoint reached, if yes continue - beforeSyncCp_A.assertBreakpointReached(1, 10000); - System.out.println("beforeSyncCp_A.assertBreakpointReached"); - TemporaryPausedThread[] threadsA = beforeSyncCp_A.getPausedThreads(); - threadsA[0].continueThread(); - - doInSyncCp_A.assertBreakpointReached(1, 10000); - System.out.println("doInSyncCp_A.assertBreakpointReached"); - threadsA = doInSyncCp_A.getPausedThreads(); //overwrite threadsA - threadsA[0].continueThread(); - - // activate actual "Forum" content for proceeding - selenium.waitForPageToLoad("30000");//wait for previous NO_WAITED Action - courseRun.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - - if(selenium.isElementPresent("ui=course::content_forum_displayForum()")) { - selenium.click("ui=course::content_forum_displayForum()"); - selenium.waitForPageToLoad("30000"); - } - - selenium.click("ui=course::content_forum_newTopic()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=course::content_forum_typeMsgTitle()", "TODAY'S TOPIC"); - selenium.type("ui=course::content_forum_clickMsgBody()", "message body"); - selenium.click("ui=course::content_forum_save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=tabs::logOut()"); - } - - @Override - public void cleanUpAfterRun() { - System.out.println("cleanUpAfterRun - START"); - LearningResources learningResources = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)).getLearningResources(); - learningResources.searchResource(COURSE_NAME, null).deleteLR(); - System.out.println("cleanUpAfterRun - END"); - } - - - -} diff --git a/src/test/java/org/olat/test/functional/codepoints/cluster/package.html b/src/test/java/org/olat/test/functional/codepoints/cluster/package.html deleted file mode 100644 index 06ba4af2f7c..00000000000 --- a/src/test/java/org/olat/test/functional/codepoints/cluster/package.html +++ /dev/null @@ -1,34 +0,0 @@ -<html> -<head> -</head> - -<body> - -Codepoints tests for cluster setup. They run only against an OLAT instance configured as codepoint server. (selenium-cluster or selenium-single, not OLATNG) -<br/> -Run a codepoint test in eclipse using your local OLAT instance: - -<ul> - <li>start ActiveMQ</li> - <li> Configure your local olat with a codepoint server (enable/disable codepoint/breakpoint framework) - <ul><li>codepoint_server.enabled=true</li> - <li>codepoint.jms.broker.url=failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration=0)</li> - <li>(instance.id=myolat) remember this since must be used in customcontext.xml </li> - - </ul> - </li> - <li>start olat and check that it really starts as a codepoint server</li> - <li>configure customcontext.xml, namely: - <ul><li>key="jmsBrokerUrl", value="tcp://localhost:61616"</li> - <li>key="instanceId" value="myolat"</li> - </ul> - </li> - - <li>start codepoint tests. - - </li> -</ul> - - -</body> -</html> \ No newline at end of file diff --git a/src/test/java/org/olat/test/functional/course/CopyCourseTest2.java b/src/test/java/org/olat/test/functional/course/CopyCourseTest2.java deleted file mode 100644 index 7cedaa3c992..00000000000 --- a/src/test/java/org/olat/test/functional/course/CopyCourseTest2.java +++ /dev/null @@ -1,121 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.course; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests CourseFactory.copyCourse() in single VM mode - no codepoints. - * - * Test case: <br/> - * Creates 2 copies ("COPY A - DEMO COURSE" and "COPY B - DEMO COURSE") of the same "Demo Course", serial not parallel. <p> - * - * @author Lavinia Dumitrescu - * - */ -public class CopyCourseTest2 extends BaseSeleneseTestCase { - - - private final String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_1; - private final String COURSE_NAME = "CopyCourse" + System.currentTimeMillis(); - private final String CLONE_A = "COPY A - DEMO COURSE"; - private final String CLONE_B = "COPY B - DEMO COURSE"; - - - - /** - * administrator adds author as owner of the "Demo Course" - */ - public void setUp() throws Exception { - System.out.println("CopyCourseTest - setUp - START"); - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - //cleanup first - WorkflowHelper.deleteAllCoursesNamed(CLONE_A); - WorkflowHelper.deleteAllCoursesNamed(CLONE_B); - - //clone "Demo Course" and work with the clone - assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, COURSE_NAME)); - - //author - OlatLoginInfos authorOlatLoginInfos = context.getStandardAuthorOlatLoginInfos(1); - //"administrator" adds author as owner of the "Demo Course" - WorkflowHelper.addOwnerToLearningResource(authorOlatLoginInfos.getUsername(), COURSE_NAME); - System.out.println("CopyCourseTest - setUp - END"); - } - - /** - * Tests course copy in singleVM mode. - * Creates 2 copies ("COPY A - DEMO COURSE" and "COPY B - DEMO COURSE") of the same "Demo Course". <p> - * - * - * @throws Exception - */ - public void testCopyCourse2() throws Exception { - Context context = Context.getContext(); - - //administrator - OLATWorkflowHelper workflow_A = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos()); - LRDetailedView lRDetailedView_A = workflow_A.getLearningResources().searchResource(COURSE_NAME, null); - - //author - owner of the "Demo Course" - OLATWorkflowHelper workflow_B = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - LRDetailedView lRDetailedView_B = workflow_B.getLearningResources().searchResource(COURSE_NAME, null); - - lRDetailedView_A.copyLR(CLONE_A, null); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - } - lRDetailedView_B.copyLR(CLONE_B, null); - - workflow_A.logout(); - workflow_B.logout(); - } - - - - /** - * Deletes the created copies. - */ - @Override - public void cleanUpAfterRun() { - System.out.println("CopyCourseTest - cleanUpAfterRun - START"); - - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - LearningResources learningResources = workflow.getLearningResources().searchResource(CLONE_A, null).deleteLR(); - learningResources.searchResource(CLONE_B, null).deleteLR(); - - System.out.println("CopyCourseTest - cleanUpAfterRun - END"); - } -} diff --git a/src/test/java/org/olat/test/functional/course/CourseCloseTest.java b/src/test/java/org/olat/test/functional/course/CourseCloseTest.java deleted file mode 100644 index 00fd14f5a15..00000000000 --- a/src/test/java/org/olat/test/functional/course/CourseCloseTest.java +++ /dev/null @@ -1,156 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.selenium.olatapi.group.Groups; -import org.olat.test.util.selenium.olatapi.group.RightsAdmin; -import org.olat.test.util.selenium.olatapi.group.RightsManagement; -import org.olat.test.util.selenium.olatapi.lr.Catalog; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - - -/** - * Tests the close course functionality - * <br /> - * Test setup: - * <br /> - * 1. login with role "author" - * 2. create an empty course - * 3. publish empty course - * 4. create learning group and rights group for that course - * 5. add course to catalog - * 6. close course - * 7. check that course is no longer in catalog and groups are empty - * - * - * @author Thomas Linowsky, BPS GmbH - * - */ - -public class CourseCloseTest extends BaseSeleneseTestCase{ - - private static String author; - - private static final String COURSE_NAME_PREFIX = "CloseCourse"; - - private final String COURSE_NAME = COURSE_NAME_PREFIX + System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription" + System.currentTimeMillis(); - - private final String ASSIGNMENT_NAME= "Enrollment"+System.currentTimeMillis(); - - private final String LEARNING_GROUP_NAME = COURSE_NAME_PREFIX+"LearningGroup"+System.currentTimeMillis(); - private final String LEARNING_GROUP_DESC = "LearningGroupDesc"+System.currentTimeMillis(); - - private final String RIGHTS_GROUP_NAME= COURSE_NAME_PREFIX+"RightsGroupName"+System.currentTimeMillis(); - private final String RIGHTS_GROUP_DESC= "RightsGroupDesc"+System.currentTimeMillis(); - - @Override - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - author = context.getStandardAuthorOlatLoginInfos().getUsername(); - - WorkflowHelper.deleteLearningResources(author, COURSE_NAME_PREFIX); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - CourseEditor editor = olatWorkflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - // make sure course is not empty - editor.insertCourseElement(CourseElemTypes.ASSESSMENT, true, ASSIGNMENT_NAME); - editor.publishCourse(); - - CourseRun run = editor.closeToLRDetailedView().showCourseContent(); - - // create a learning group and add author to it - GroupManagement learn = run.getGroupManagement(); - GroupAdmin lg = learn.createLearningGroup(LEARNING_GROUP_NAME, LEARNING_GROUP_DESC, 25, true, false); - String[] names = new String[]{author}; - lg.addMembers(names, new String[0]); - run = learn.close(); - - // create a rights group and add author to it - RightsManagement rights = run.getRightsManagement(); - RightsAdmin rga = rights.createRightsGroup(RIGHTS_GROUP_NAME, RIGHTS_GROUP_DESC); - rga.addMembers(names); - LRDetailedView detail = rights.closeRightsManagement().getDetailedView(); - // add the course to the catalog - detail.addToCatalog(); - olatWorkflow.logout(); - } - - public void testCloseCourse() throws Exception{ - - Context context = Context.getContext(); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - LRDetailedView detail = olatWorkflow.getLearningResources().searchMyResource(COURSE_NAME); - - // make sure the groups are there - Groups g = olatWorkflow.getGroups(); - assertTrue("Group "+LEARNING_GROUP_NAME+" is not present but should be", g.hasGroup(LEARNING_GROUP_NAME)); - assertTrue("Group "+RIGHTS_GROUP_NAME+" is not present but should be", g.hasGroup(RIGHTS_GROUP_NAME)); - - // make sure the course is in the catalog - Catalog catalog = olatWorkflow.getLearningResources().showCatalog(); - assertTrue(catalog.isEntryAvailable(COURSE_NAME)); - - detail = olatWorkflow.getLearningResources().searchMyResource(COURSE_NAME); - - // close course - detail.closeCourse(true, true); - - assertTrue("could not find \"[Closed]\" in Detail Page", detail.isTextPresent("[closed]")); - - CourseRun run = detail.showCourseContent(); - assertTrue("could not find \"is closed\"-message", run.isTextPresent("This course is closed and can therefore no longer be edited or updated")); - - g = olatWorkflow.getGroups(); - // refresh group view, otherwise groups will still be displayed although not available anymore - g = olatWorkflow.getGroups(); - - // check that the groups are empty now - assertFalse("Group "+LEARNING_GROUP_NAME+" is still present but should not be", g.hasGroup(LEARNING_GROUP_NAME)); - assertFalse("Group "+RIGHTS_GROUP_NAME+" is still present but should not be", g.hasGroup(RIGHTS_GROUP_NAME)); - - // make sure the course is no longer in the catalog - catalog = olatWorkflow.getLearningResources().showCatalog(); - assertFalse("Course "+COURSE_NAME+" is still present in Catalog but should not be!", catalog.isEntryAvailable(COURSE_NAME)); - - // delete the course in the end - detail = olatWorkflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME).getDetailedView(); - detail.deleteLR(); - } - - @Override - protected void cleanUpAfterRun() { - super.cleanUpAfterRun(); - WorkflowHelper.deleteAllCoursesNamed(COURSE_NAME); - } - -} diff --git a/src/test/java/org/olat/test/functional/course/CourseWizardVisibiltyTest.java b/src/test/java/org/olat/test/functional/course/CourseWizardVisibiltyTest.java deleted file mode 100644 index 4a46e4ad3b7..00000000000 --- a/src/test/java/org/olat/test/functional/course/CourseWizardVisibiltyTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.selenium.olatapi.lr.Catalog; -import org.olat.test.util.selenium.olatapi.lr.CourseWizard; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - - -/** - * Tests the course wizard - * 1. author creates course using the course wizard - * 2. select all items (singlepage, enrollment, downloadfolder, forum and contact form) to create - * 3. edit the enrollment configuration - * 4. select all available CBBs (singlepage, downloadfolder, forum and contact form) for access restriction - * 5. publish course and run it - * 6. enrol in created group and show forum - * 7. log out - * @author Thomas Linowsky - * - */ - -public class CourseWizardVisibiltyTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "CourseWizard" + System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription" + System.currentTimeMillis(); - private final String ASSESSMENT_NAME = "Assessment"+System.currentTimeMillis(); - private final String ENROLMENT_NAME = "Enrollment"; - private final String GROUP_NAME = COURSE_NAME + " Group 1"; - private final String SINGLE_PAGE_NAME ="Information page"; - - public void testVisibility() { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - // get the wizard object - CourseWizard wizard = olatWorkflow.getLearningResources().createCourseWizard(COURSE_NAME, COURSE_DESCRIPTION); - - // select all elements that are possible - wizard.selectCourseElements(true, true, true, true, true); - // define that all possible CBBs are only visible when enrolled - wizard.editEnrollment(true, true, true, true, true); - - // finish course wizard and define visibility status - CourseRun run = wizard.createCourseAndRun(LRDetailedView.ACCESS_ALL_REGISTERED); - - // enrol author - EnrolmentRun enrol = run.selectEnrolment(ENROLMENT_NAME); - enrol.enrol(GROUP_NAME); - - // check the access rule - LRDetailedView detail = run.getDetailedView(); - assertTrue("Acess rule does not match "+LRDetailedView.ACCESS_ALL_REGISTERED+", it is "+detail.getAccessString(), detail.getAccessString().equals(LRDetailedView.ACCESS_ALL_REGISTERED)); - - Catalog catalog = olatWorkflow.getLearningResources().showCatalog(); - assertTrue("could not find "+COURSE_NAME+" in the catalog", catalog.isEntryAvailable(COURSE_NAME)); - - // the the editor again - run = olatWorkflow.getLearningResources().searchMyResource(COURSE_NAME).showCourseContent(); - CourseEditor editor = run.getCourseEditor(); - - // make sure the storage folder is available - Folder storage = editor.storageFolder(); - editor = storage.closeStorageFolder(); - - // delete the information page and add an assessment to make sure the course is correct - editor.selectCourseElement(SINGLE_PAGE_NAME); - editor.deleteCourseElement(); - editor.insertCourseElement(CourseElemTypes.ASSESSMENT, true, ASSESSMENT_NAME); - editor.publishCourse(); - run = editor.closeToCourseRun(); - - - - // make sure the information page is deleted and the assessment is available - assertFalse("Information page is still present but should not be!", run.isElementPresent("ui=course::menu_courseNode(titleOfNode=Information page)")); - assertTrue("assessment "+ASSESSMENT_NAME+" is not present but should be!", run.isElementPresent("ui=course::menu_courseNode(titleOfNode="+ASSESSMENT_NAME+")")); - - // delete the course - detail = run.getDetailedView(); - detail.deleteLR(); - olatWorkflow.logout(); - } - -} diff --git a/src/test/java/org/olat/test/functional/course/assessment/AssessmentElementTest.java b/src/test/java/org/olat/test/functional/course/assessment/AssessmentElementTest.java deleted file mode 100644 index 32a43c8a85a..00000000000 --- a/src/test/java/org/olat/test/functional/course/assessment/AssessmentElementTest.java +++ /dev/null @@ -1,158 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.course.assessment; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.AssessmentEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentForm; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentTool; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.home.EvidencesOfAchievement; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests the assessment course element, assessment tool and the evidence of achievement. - * <br/> - * Test setup:<br/> - * 1. clean-up: deleteEvidencesOfAchievement for this student, starting with COURSE_NAME_PREFIX. Delete courses starting with COURSE_NAME_PREFIX.<br/> - * 2. administrator imports test course <br/> - * 3. adds author as owner of the COURSE_NAME <br/> - * 4. adds author as tutor of the group GROUP_NAME <br/> - * 5. student enrolls into group <br/> - * <p> - * Test case: <br/> - * 1. author adds new Assessment course element in course and configures it. (min, max score, passed cut value, etc.) <br/> - * 2. publish course <br/> - * 3. author checks in the assessment tool the stored values for the assessment form: min/max score, passed cut value <br/> - * 4. author grants score to student, and checks if the passed is correctly computed <br/> - * 5. Student checks the score/passed info in the "Evidence of achievement". <br/> - * - * - * @author Lavinia Dumitrescu - * - */ -public class AssessmentElementTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "CourseImportCourse.zip"; - - private final String COURSE_NAME_PREFIX = "AssessmentTool_selenium"; - private final String COURSE_NAME = COURSE_NAME_PREFIX + System.currentTimeMillis(); - private final String GROUP_NAME = "Gruppe 1"; - private final String ASSESSMENT_ELEMENT_TITLE = "Assessment_NEW"; - - private String STUDENT1 = "test"; - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //author adds participants to group or student enrolls in group - // STUDENT enrolls - login and enroll if not already member in GROUP_NAME - OlatLoginInfos olatLoginInfos1 = context.getStandardStudentOlatLoginInfos(1); - STUDENT1 = olatLoginInfos1.getUsername(); - - //cleanup first - for the selenium load - WorkflowHelper.deleteEvidencesOfAchievement(COURSE_NAME_PREFIX, olatLoginInfos1); - WorkflowHelper.deleteLearningResources(context.getStandardAdminOlatLoginInfos(1).getUsername(), COURSE_NAME_PREFIX); - - //import course - make sure that this is the course you need! - File f = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - assertNotNull("Could not locate the course zip!", f); - assertTrue("file "+f.getAbsolutePath()+" not found!", f.exists()); - WorkflowHelper.importCourse(f, COURSE_NAME, "assessment test course description"); - - //"administrator" adds author as owner of the COURSE_NAME - WorkflowHelper.addOwnerToLearningResource(context.getStandardAuthorOlatLoginInfos(1).getUsername(),COURSE_NAME); - - //add author as tutor of the group - WorkflowHelper.addTutorToGroup(context.getStandardAuthorOlatLoginInfos(1).getUsername(), COURSE_NAME, GROUP_NAME); - - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(olatLoginInfos1); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EnrolmentRun enrolmentElement = courseRun.selectEnrolment(CourseEditor.ENROLMENT_TITLE); - if(!enrolmentElement.alreadyEnrolled(GROUP_NAME)) { - enrolmentElement.enrol(GROUP_NAME); - assertTrue(enrolmentElement.isTextPresent("You have already enroled for the learning group mentioned below")); - } - } - - - - public void testAssessmentElement() throws Exception { - Context context = Context.getContext(); - - //author - owner of the COURSE_NAME - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - CourseEditor courseEditor = workflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME).getCourseEditor(); - AssessmentEditor assessmentEditor = (AssessmentEditor)courseEditor.insertCourseElement(CourseElemTypes.ASSESSMENT, true, ASSESSMENT_ELEMENT_TITLE); - // author fills in the assessment configuration form - assessmentEditor.configure(true, 1, 10, true, 5); - Thread.sleep(1000); - courseEditor.publishCourse(); - CourseRun courseRun = courseEditor.closeToCourseRun(); - // author opens the AssessmentTool and checks the configured values for the newly introduced Assessment course element - AssessmentTool assessmentTool = courseRun.getAssessmentTool(); - AssessmentForm assessmentForm = assessmentTool.getAssessmentFormAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE); - // check values for min/max score, passed cut value - assertEquals("1.0", assessmentForm.getMinScore()); - assertEquals("10.0", assessmentForm.getMaxScore()); - assertEquals("5.0", assessmentForm.getPassedCutScore()); - // fills the form - assessmentForm.setScore(7); - assessmentTool = assessmentForm.save(); - // check values in the assessment table (score, passed) - assertEquals("7.000", assessmentTool.getScoreInTableAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE, false)); - assertEquals("Passed", assessmentTool.getPassedStatusInTableAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE, false)); - - //tutor changes score to 4 - assessmentForm = assessmentTool.getAssessmentFormAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE); - assessmentForm.setScore(4); - assessmentForm.save(); - // check values in the assessment table (score, passed) - assertEquals("4.000", assessmentTool.getScoreInTableAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE, false)); - assertEquals("Failed", assessmentTool.getPassedStatusInTableAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE, false)); - - //student check the "Evidence of achievement" - OLATWorkflowHelper workflow_S = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - CourseRun courseRun_S = workflow_S.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EvidencesOfAchievement evidences = workflow_S.getHome().getEvidencesOfAchievement(); - evidences.selectDetails(COURSE_NAME); - //check score in table - assertEquals("4.000", evidences.getCourseElementScore(ASSESSMENT_ELEMENT_TITLE)); - assertEquals("Failed", evidences.getCourseElementPassedStatus(ASSESSMENT_ELEMENT_TITLE)); - } - - -} diff --git a/src/test/java/org/olat/test/functional/course/assessment/AssessmentFormTest.java b/src/test/java/org/olat/test/functional/course/assessment/AssessmentFormTest.java deleted file mode 100644 index 65dd08245ff..00000000000 --- a/src/test/java/org/olat/test/functional/course/assessment/AssessmentFormTest.java +++ /dev/null @@ -1,206 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.course.assessment; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentForm; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentTool; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.course.run.TestElement; -import org.olat.test.util.selenium.olatapi.course.run.TestRun; -import org.olat.test.util.selenium.olatapi.home.EvidencesOfAchievement; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests that all inputs in AssessmentForm (AssessmentTool) are correctly stored and seen by the student - * in different cluster nodes.<br/> - * - * Test setup: <br/> - * 1. import course <br/> - * 2. add standard author as owner to imported course <br/> - * 3. add standard author as tutor to group <br/> - * 4. standard student enrolls in group <br/> - * - * Test case: <br/> - * Tests whether all inputs in AssessmentForm are correctly stored and correctly seen by the tutor in AssessmentTool and - * the student in course run and in the "Evidence of achievement". - * The AssessmentForm is used for assessing: Test, Task and Assessment course elements. - * - * @author Lavinia Dumitrescu - * - */ -public class AssessmentFormTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "CourseImportCourse.zip"; - - private final String COURSE_NAME = "AssessmentTool_selenium" +System.currentTimeMillis(); - private final String GROUP_NAME = "Gruppe 1"; - - private String STUDENT1 = "test"; - private final String COMMENT_TXT = "comment_for_user"; - - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //author adds participants to group or student enrolls in group - // STUDENT enrolls - login and enroll if not already member in GROUP_NAME - OlatLoginInfos olatLoginInfos1 = context.getStandardStudentOlatLoginInfos(1); - STUDENT1 = olatLoginInfos1.getUsername(); - - //cleanup first - only if the course name is reused - /*OlatServerSetupHelper.deleteEvidenceOfAchievement(COURSE_NAME, olatLoginInfos1); - OlatServerSetupHelper.deleteAllCoursesNamed(COURSE_NAME);*/ - - //import course - make sure that this is the course you need! - File f = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - assertNotNull("Could not locate the course zip!", f); - assertTrue("file "+f.getAbsolutePath()+" not found!", f.exists()); - WorkflowHelper.importCourse(f, COURSE_NAME, "assessment test course description"); - - //"administrator" adds author as owner of the COURSE_NAME - WorkflowHelper.addOwnerToLearningResource(context.getStandardAuthorOlatLoginInfos(1).getUsername(),COURSE_NAME); - - //add author as tutor of the group - WorkflowHelper.addTutorToGroup(context.getStandardAuthorOlatLoginInfos(1).getUsername(), COURSE_NAME, GROUP_NAME); - - enrollInGroupAfterLogin(olatLoginInfos1, COURSE_NAME, GROUP_NAME); - } - - private void enrollInGroupAfterLogin(OlatLoginInfos olatLoginInfos, String courseName, String groupName) { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(olatLoginInfos); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(courseName); - EnrolmentRun enrolmentElement = courseRun.selectEnrolment(CourseEditor.ENROLMENT_TITLE); - if(!enrolmentElement.alreadyEnrolled(groupName)) { - enrolmentElement.enrol(groupName); - assertTrue(enrolmentElement.isTextPresent("You have already enroled for the learning group mentioned below")); - } - workflow.logout(); - } - - - public void testFormAssessmentTest() throws Exception { - Context context = Context.getContext(); - OLATWorkflowHelper workflow_S = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - CourseRun courseRun_S = workflow_S.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - // setup: student runs the test first time ("Test 1" and gets a score equals with 2) - courseRun_S.selectCourseElement("Struktur 1"); - TestRun testRun = courseRun_S.selectTest("Test 1").startTest(); - testRun.selectMenuItem("Single Choice"); - testRun.setSingleChoiceSolution("Antwort 3"); - testRun.selectMenuItem("Multiple Choice"); - String[] answers = {"Antwort 2", "Antwort 3"}; - testRun.setMultipleChoiceSolution(answers); - // student achieved score: 2 - TestElement testElement_S = testRun.finishTest(true, 2); - assertEquals("2.000", testElement_S.getAchievedScore()); - // end setup - student achieved a score of 2.000 - - //author - tutor of the default group - opens the AssessmentTool and assess student - OLATWorkflowHelper workflow_A = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - AssessmentTool assessmentTool = workflow_A.getLearningResources().searchAndShowCourseContent(COURSE_NAME).getAssessmentTool(); - String score = assessmentTool.getScoreInTableAsPerUser(STUDENT1, "Test 1", false); - String passed = assessmentTool.getPassedStatusInTableAsPerUser(STUDENT1, "Test 1", false); - assertEquals("2.000", score); - assertEquals("Passed", passed); - - // author selects "Test 1" and fills in the form - attempts:7, score: 7, passed: true - AssessmentForm assessmentForm = assessmentTool.getAssessmentFormAsPerUser(STUDENT1, "Test 1"); - assertEquals("2.000", assessmentForm.getScore()); - assessmentForm.setAttempts(7); - assessmentForm.setScore(7); - assessmentForm.setPassed(true); - assessmentForm.setUserComments(COMMENT_TXT); - assessmentTool = assessmentForm.save(); - // check in table the update of the values - assertEquals("7.000", assessmentTool.getScoreInTableAsPerUser(STUDENT1, "Test 1", false)); - assertEquals("7", assessmentTool.getAttemptsInTableAsPerUser(STUDENT1, "Test 1", false)); - assertEquals("Passed", assessmentTool.getPassedStatusInTableAsPerUser(STUDENT1, "Test 1", false)); - - // author selects "Test 1" and fills in the form - assessmentForm = assessmentTool.getAssessmentFormAsPerUser(STUDENT1, "Test 1"); - - //author checks the previous stored values in AssessmentForm - assertEquals("7.000", assessmentForm.getScore()); - assertEquals("7", assessmentForm.getAttempts()); - assertEquals(AssessmentForm.PASSED_YES, assessmentForm.getPassed()); - assertEquals(COMMENT_TXT, assessmentForm.getUserComment()); - - //author changes inputs - attempts:6, score: 6, passed: false - assessmentForm.setAttempts(6); - assessmentForm.setScore(6); - assessmentForm.setPassed(false); - assessmentTool = assessmentForm.save(); - // check in table the update of the values - assertEquals("6.000", assessmentTool.getScoreInTableAsPerUser(STUDENT1, "Test 1", false)); - assertEquals("6", assessmentTool.getAttemptsInTableAsPerUser(STUDENT1, "Test 1", false)); - assertEquals("Failed", assessmentTool.getPassedStatusInTableAsPerUser(STUDENT1, "Test 1", false)); - - //author changes the score evaluation for the "Bewertung 1" element, that reset it to the original values - //tests that the PASSED info could be reset - assessmentForm = assessmentTool.getAssessmentFormAsPerUser(STUDENT1, "Bewertung 1"); - assessmentForm.setScore(3); - assessmentForm.setPassed(true); - assessmentTool = assessmentForm.save(); - assertEquals("3.000", assessmentTool.getScoreInTableAsPerUser(STUDENT1, "Bewertung 1", false)); - assertEquals("Passed", assessmentTool.getPassedStatusInTableAsPerUser(STUDENT1, "Bewertung 1", false)); - - //reset form - assessmentForm = assessmentTool.getAssessmentFormAsPerUser(STUDENT1, "Bewertung 1"); - assessmentForm.setScore(0); - assessmentForm.setPassed(null); - assessmentTool = assessmentForm.save(); - assertEquals("0.000", assessmentTool.getScoreInTableAsPerUser(STUDENT1, "Bewertung 1", false)); - assessmentForm = assessmentTool.getAssessmentFormAsPerUser(STUDENT1, "Bewertung 1"); - assertEquals(AssessmentForm.PASSED_NO_INFO, assessmentForm.getPassed()); - - //student checks the results in course run - TestElement testElement = courseRun_S.selectTest("Test 1"); - assertEquals("6.000", testElement.getAchievedScore()); - assertEquals("Failed", testElement.getStatus()); - assertEquals(COMMENT_TXT, testElement.getCommentFromTutor()); - - //student checks "Evidence of achievement" in HOME - show details - EvidencesOfAchievement evidencesOfAchievement = workflow_S.getHome().getEvidencesOfAchievement(); - evidencesOfAchievement.selectDetails(COURSE_NAME); - // check score in table - assertEquals("6.000", evidencesOfAchievement.getCourseElementScore("Test 1")); - assertEquals("6", evidencesOfAchievement.getCourseElementAttempts("Test 1")); - assertEquals("Failed", evidencesOfAchievement.getCoursePassedStatus("Test 1")); - assertEquals("0.000", evidencesOfAchievement.getCourseElementScore("Bewertung 1")); - - workflow_A.logout(); - } - -} diff --git a/src/test/java/org/olat/test/functional/course/assessment/AssessmentTest.java b/src/test/java/org/olat/test/functional/course/assessment/AssessmentTest.java deleted file mode 100644 index abde69c6ed2..00000000000 --- a/src/test/java/org/olat/test/functional/course/assessment/AssessmentTest.java +++ /dev/null @@ -1,229 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ - -package org.olat.test.functional.course.assessment; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.StructureEditor; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentForm; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentTool; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.course.run.StructureElement; -import org.olat.test.util.selenium.olatapi.course.run.TestElement; -import org.olat.test.util.selenium.olatapi.course.run.TestRun; -import org.olat.test.util.selenium.olatapi.home.EvidencesOfAchievement; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests the Assessment (AssessmentTool, TestRun, EfficiencyStatement) - cluster mode. - * - * Test setup: <br/> - * Expects a special "AssessmentTool" course. This must be imported. <br/> - * It is also supposed that there is a learning group associated with this course which contains at least - * one student and one tutor. <br/> - * - * Test case: <br/> - * - Student runs a test (Test 1) in a special "AssessmentTool" course. <br/> - * - Tutor opens the assessment tool of the same course for the specified student and checks whether he see the correct score. <br/> - * - Tutor changes the score (3) and passed value (Yes) of the Assessment course element: "Bewertung 1". <br/> - * - Tutor checks the parent Structure node score (Struktur 1). <br/> - * - Student runs the test (Test 1) second time and achieves 2 points. - * - Tutor increases the score to 4. The student should see the latest score. - * - * @author Lavinia Dumitrescu - * - */ -public class AssessmentTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "CourseImportCourse.zip"; - - private OLATWorkflowHelper workflow_A; //student on node 1 - private OLATWorkflowHelper workflow_B; //tutor on node 2 - - private final String COURSE_NAME = "AssessmentTool_selenium" +System.currentTimeMillis(); - private final String GROUP_NAME = "Gruppe 1"; - - //test actors - private String STUDENT; //student username - private String TUTOR; // tutor username - - public void setUp() throws Exception { - System.out.println("AssessmentTest - setUp - STARTED"); - - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //cleanup first - only if the course name is reused - /*OlatServerSetupHelper.deleteEvidenceOfAchievement(COURSE_NAME, context.getStandardStudentOlatLoginInfos(1)); - OlatServerSetupHelper.deleteAllCoursesNamed(COURSE_NAME);*/ - - TUTOR = context.getStandardAuthorOlatLoginInfos(2).getUsername(); - STUDENT = context.getStandardStudentOlatLoginInfos(1).getUsername(); - - //import course - make sure that this is the course you need! - File f = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - assertNotNull("Could not locate the course zip!", f); - assertTrue("file "+f.getAbsolutePath()+" not found!", f.exists()); - WorkflowHelper.importCourse(f, COURSE_NAME, "assessment test course description"); - - //"administrator" adds tutor as owner of the "AssessmentTool" - WorkflowHelper.addOwnerToLearningResource(TUTOR, COURSE_NAME); - - //"administrator" adds tutor to GROUP_NAME - WorkflowHelper.addTutorToGroup(TUTOR, COURSE_NAME, GROUP_NAME); - - // STUDENT enrolls - login and enroll if not already member in GROUP_NAME - OLATWorkflowHelper workflow_D = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - CourseRun courseRun = workflow_D.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EnrolmentRun enrolmentRun = courseRun.selectEnrolment(CourseEditor.ENROLMENT_TITLE); - enrolmentRun.enrol(GROUP_NAME); - assertTrue(enrolmentRun.isTextPresent("You have already enroled for the learning group mentioned below")); - - OLATWorkflowHelper authorWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(2)); - resetScoreCalculationRule(authorWorkflow, 10); - - System.out.println("AssessmentTest - setUp - ENDED"); - } - - - public void testRunTest() throws Exception { - System.out.println("AssessmentTest - testRunTest - STARTED"); - Context context = Context.getContext(); - - workflow_A = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - workflow_B = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(2)); - CourseRun courseRun_A = workflow_A.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - CourseRun courseRun_B = workflow_B.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - - // STUDENT runs the "Test 1" and gets a score equals with 1. - courseRun_A.selectCourseElement("Struktur 1"); - TestRun testRun_A = courseRun_A.selectTest("Test 1").startTest(); - testRun_A.selectMenuItem("Single Choice"); - testRun_A.setSingleChoiceSolution("Antwort 3"); - TestElement testElement_A = testRun_A.finishTest(true, 1); //updateEfficiencyStatement(1) - assertEquals("1.000", testElement_A.getSelenium().getText("ui=qti::yourScore()")); - - // tutor opens the assessment tool of the same course - AssessmentTool assessmetTool = courseRun_B.getAssessmentTool(); - assertEquals("1.000",assessmetTool.getScoreInTableAsPerUser(STUDENT,"Test 1", false)); - AssessmentForm assessmentForm = assessmetTool.getAssessmentFormAsPerUser(STUDENT, "Bewertung 1"); - assessmentForm.setScore(3); - assessmentForm.setPassed(Boolean.TRUE); - assessmetTool = assessmentForm.save(); //updateEfficiencyStatement(2) - // assert score on "Struktur 1" to be the sum of the "Test 1" and "Bewertung 1" scores - assertEquals("4.000", assessmetTool.getSelenium().getText("ui=course::assessment_scoreInTable(title=Struktur 1)")); - //assert score on "Struktur 2" to be the half of sum of the "Test 1" and "Bewertung 1" scores - assertEquals("2.000", assessmetTool.getSelenium().getText("ui=course::assessment_scoreInTable(title=Struktur 2)")); - - //student runs the test second time ("Test 1" and gets a score equals with 2) - testRun_A = testElement_A.startTest(); - testRun_A.selectMenuItem("Single Choice"); - testRun_A.setSingleChoiceSolution("Antwort 3"); - testRun_A.selectMenuItem("Multiple Choice"); - String[] answers = {"Antwort 2", "Antwort 3"}; - testRun_A.setMultipleChoiceSolution(answers); - testElement_A = testRun_A.finishTest(true, 2); //updateEfficiencyStatement(3) - assertEquals("2.000", testElement_A.getSelenium().getText("ui=qti::yourScore()")); - - //tutor opens the Assessment form for STUDENT, "Test 1" and verify the score - assertEquals("2.000", assessmetTool.getScoreInTableAsPerUser(STUDENT,"Test 1", true)); - // verify score in AssessmentForm - select "Test 1" - assessmentForm = assessmetTool.getAssessmentFormAsPerUser(STUDENT, "Test 1"); - assessmentForm.setScore(4); - assessmentForm.setPassed(Boolean.TRUE); - assessmetTool = assessmentForm.save(); - //assert score on "Struktur 1" to be the sum of the "Test 1" and "Bewertung 1" scores - assertEquals("7.000", assessmetTool.getScoreInTableAsPerUser(STUDENT,"Struktur 1", false)); - //assert score on "Struktur 2" to be the half of sum of the "Test 1" and "Bewertung 1" scores - assertEquals("3.500", assessmetTool.getScoreInTableAsPerUser(STUDENT,"Struktur 2", false)); - - //A: close course - courseRun_A.close(COURSE_NAME); - - //B: close course - assessmetTool.close().close(COURSE_NAME); - - doTestRuleChange(); - - System.out.println("AssessmentTest - testRunTest - ENDED"); - } - - /** - * Tests the update of the scoreEvaluation (score/passed) in course for a student, - * and for a tutor in AssessmentTool after a change in the score calculation rule (CourseEditor/Score). - * This assumes that the passed cut value for this course is 10. - * The value will be next increased to 15 so the student should see the correct passed/failed information - * in her "Evidence of achievement". - */ - private void doTestRuleChange() throws Exception { - System.out.println("AssessmentTest - doTestRuleChange - STARTED"); - //student enters the "Evidence of achievement" - (score 10.5 and passed) - EvidencesOfAchievement evidencesOfAchievement = workflow_A.getHome().getEvidencesOfAchievement(); - String passedStatus = evidencesOfAchievement.getCoursePassedStatus(COURSE_NAME); - assertEquals("Passed",passedStatus); - // student enters course and checks her passed status - CourseRun courseRun_A = evidencesOfAchievement.startCourse(COURSE_NAME); - StructureElement root = courseRun_A.selectRoot(COURSE_NAME); - assertEquals("Passed", root.getPassedStatus()); - courseRun_A.close(COURSE_NAME); - - // tutor changes the score calculation rule and publishes the course - resetScoreCalculationRule(workflow_B, 15); - - // the student should get the updated (passed/failed) info - evidencesOfAchievement = workflow_A.getHome().getEvidencesOfAchievement(); - assertEquals("Failed", evidencesOfAchievement.getCoursePassedStatus(COURSE_NAME)); - passedStatus = evidencesOfAchievement.startCourse(COURSE_NAME).selectRoot(COURSE_NAME).getPassedStatus(); - assertEquals("Failed", passedStatus); - - workflow_A.logout(); - workflow_B.logout(); - - System.out.println("AssessmentTest - doTestRuleChange - ENDED"); - } - - - - /** - * tutor resets the score calculation rule and publishes the course - * - */ - private void resetScoreCalculationRule(OLATWorkflowHelper authorWorkflow , int score) { - CourseEditor courseEditor = authorWorkflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME).getCourseEditor(); - StructureEditor structureEditor = (StructureEditor)courseEditor.selectCourseElement(COURSE_NAME); - structureEditor.setMinimumScore(score); - courseEditor.publishCourse(); - courseEditor.closeToCourseRun().close(COURSE_NAME); - } - - -} diff --git a/src/test/java/org/olat/test/functional/course/assessment/BulkAssessmentTest.java b/src/test/java/org/olat/test/functional/course/assessment/BulkAssessmentTest.java deleted file mode 100644 index 14f19292d60..00000000000 --- a/src/test/java/org/olat/test/functional/course/assessment/BulkAssessmentTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.course.assessment; - -import java.io.File; -import java.util.HashMap; -import java.util.Map; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentElement; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentTool; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.home.EvidencesOfAchievement; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests the bulk assessment in cluster mode. <br/> - * Test setup: <br/> - * 1. creates students (STUDENT1, STUDENT2, STUDENT3) <br/> - * 2. import course (AssessmentTool) and name it COURSE_NAME <br/> - * 3. adds author as owner of the course <br/> - * 4. adds author as tutor of the group GROUP_NAME <br/> - * 5. students enroll in group <br/> - * <p> - * Test case: <br/> - * Tutor (node 1) opens the AssessmentTool of the COURSE_NAME, starts the bulk assessment wizard and - * adds score values for a ASSESSMENT_ELEM_NAME course element for 3 users enrolled into the group. - * The scores are: 2, 3, and 4 for STUDENT1, STUDENT2, STUDENT3. - * <br/> - * STUDENT2 asserts his score in course run (COURSE_NAME) for the ASSESSMENT_ELEM_NAME element, - * and in the efficiency statement (Home/Evidences of achievement) after he logins on the cluster node 2 - * - * @author Lavinia Dumitrescu - * - */ -public class BulkAssessmentTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "CourseImportCourse.zip"; - - private final String COURSE_NAME_PREFIX = "AssessmentTool_selenium"; - private final String COURSE_NAME = COURSE_NAME_PREFIX + System.currentTimeMillis(); - private final String GROUP_NAME = "Gruppe 1"; - private final String ASSESSMENT_ELEM_NAME = "Bewertung 1"; - - private String STUDENT1 = "test"; - - //TODO:LD: temporary changed usernames - workaround for OLAT-5249 - //private final String STUDENT2 = "selenium_student2"; - //private final String STUDENT3 = "selenium_student3"; - private final String STUDENT2 = "seleniumstudent2"; - private final String STUDENT3 = "seleniumstudent3"; - - - /** - * Steps: <br/> - * 1. import course (AssessmentTool) and much more see <code>OlatServerSetupHelper.importCourse</code> <br/> - * 2. adds author as owner of the course <br/> - * 3. adds author as tutor of the group <br/> - * 4. creates students and let the enroll in group <br/> - * - */ - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //author adds participants to group or student enrolls in group - // STUDENT enrolls - login and enroll if not already member in GROUP_NAME - OlatLoginInfos olatLoginInfos1 = context.getStandardStudentOlatLoginInfos(1); - STUDENT1 = olatLoginInfos1.getUsername(); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos olatLoginInfos2 = context.createuserIfNotExists(1, STUDENT2, standardPassword, true, false, false, false, false); - - OlatLoginInfos olatLoginInfos3 = context.createuserIfNotExists(1, STUDENT3, standardPassword, true, false, false, false, false); - - //cleanup first - for the selenium load - /*OlatServerSetupHelper.deleteEvidencesOfAchievement(COURSE_NAME_PREFIX, olatLoginInfos1); - OlatServerSetupHelper.deleteEvidencesOfAchievement(COURSE_NAME_PREFIX, olatLoginInfos2); - OlatServerSetupHelper.deleteEvidencesOfAchievement(COURSE_NAME_PREFIX, olatLoginInfos3); - OlatServerSetupHelper.deleteLearningResources(context.getStandardAdminOlatLoginInfos(1).getUsername(), COURSE_NAME_PREFIX);*/ - - //import course - make sure that this is the course you need! - File f = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - assertNotNull("Could not locate the course zip!", f); - assertTrue("file "+f.getAbsolutePath()+" not found!", f.exists()); - WorkflowHelper.importCourse(f, COURSE_NAME, "assessment test course description"); - - //"administrator" adds author as owner of the COURSE_NAME - WorkflowHelper.addOwnerToLearningResource(context.getStandardAuthorOlatLoginInfos(1).getUsername(),COURSE_NAME); - - //add author as tutor of the group - WorkflowHelper.addTutorToGroup(context.getStandardAuthorOlatLoginInfos(1).getUsername(), COURSE_NAME, GROUP_NAME); - - enrollInGroupAfterLogin(olatLoginInfos1, COURSE_NAME, GROUP_NAME); - - enrollInGroupAfterLogin(olatLoginInfos2, COURSE_NAME, GROUP_NAME); - - enrollInGroupAfterLogin(olatLoginInfos3, COURSE_NAME, GROUP_NAME); - } - - private void enrollInGroupAfterLogin(OlatLoginInfos olatLoginInfos, String courseName, String groupName) { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(olatLoginInfos); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(courseName); - EnrolmentRun enrolmentElement = courseRun.selectEnrolment(CourseEditor.ENROLMENT_TITLE); - if(!enrolmentElement.alreadyEnrolled(groupName)) { - enrolmentElement.enrol(groupName); - assertTrue(enrolmentElement.isTextPresent("You have already enroled for the learning group mentioned below")); - } - workflow.logout(); - } - - - public void testScoreBulkAssessment() throws Exception { - Context context = Context.getContext(); - //author - owner of the COURSE_NAME - OLATWorkflowHelper workflow_A = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - CourseRun courseRun_A = workflow_A.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - AssessmentTool assessmentTool = courseRun_A.getAssessmentTool(); - Map<String,Integer> userScoreMap = new HashMap<String,Integer>(); - userScoreMap.put(STUDENT1, 2); - userScoreMap.put(STUDENT2, 3); - userScoreMap.put(STUDENT3, 4); - assessmentTool.bulkAssessment(ASSESSMENT_ELEM_NAME, userScoreMap); - workflow_A.logout(); - - //STUDENT2 check his score and efficiency statement after he logins on the cluster node 2 - String standardPassword = context.getStandardStudentOlatLoginInfos(2).getPassword(); - OlatLoginInfos olatLoginInfos2 = context.createuserIfNotExists(2, STUDENT2, standardPassword, true, false, false, false, false); - OLATWorkflowHelper workflow_2 = context.getOLATWorkflowHelper(olatLoginInfos2); - CourseRun courseRun_2 = workflow_2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - courseRun_2.selectCourseElement("Struktur 1"); - AssessmentElement assessmentElement = courseRun_2.selectAssessmentElement(ASSESSMENT_ELEM_NAME); ; - // check your score - it should be 3.000 after select element in course - assertEquals("3.000", assessmentElement.getScore()); - EvidencesOfAchievement evidencesOfAchievement = workflow_2.getHome().getEvidencesOfAchievement(); - evidencesOfAchievement.selectDetails(COURSE_NAME); - String score = evidencesOfAchievement.getCourseElementScore(ASSESSMENT_ELEM_NAME); - // check score in table - assertEquals("3.000", score); - - } - - - protected void cleanUpAfterRun() { - System.out.println("***************** cleanUpAfterRun STARTED *********************"); - WorkflowHelper.deleteAllCoursesNamed(COURSE_NAME); - System.out.println("***************** cleanUpAfterRun ENDED *********************"); - } -} diff --git a/src/test/java/org/olat/test/functional/course/assessment/GroupDependentAssessmentTest.java b/src/test/java/org/olat/test/functional/course/assessment/GroupDependentAssessmentTest.java deleted file mode 100644 index 1cfe7f1e613..00000000000 --- a/src/test/java/org/olat/test/functional/course/assessment/GroupDependentAssessmentTest.java +++ /dev/null @@ -1,186 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.course.assessment; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.AssessmentEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentForm; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentTool; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.home.EvidencesOfAchievement; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.Selenium; - -/** - * - * Assessment course element test. - * <br/> - * - * Test case: - * The test proves that the tutor of group1 has access to grading the newly inserted element, which is only accessible for group2. - * <br/> - * Administrator adds new Assessment course element in course and configures it. (min, max score, passed cut value, etc.) - * and allows visibility/access only to the GROUP_NAME_2. - * Course gets published. - * <br/> - * Tutor of group1 assesses student - participant of group 1 - for the latest introduced course element. - * <br/> - * Student checks the score/passed info in "Evidence of achievement" even if he does't have access to that element - * in course run. - * - * @author Lavinia Dumitrescu - * - */ -public class GroupDependentAssessmentTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "CourseImportCourse.zip"; - - private final String COURSE_NAME = "AssessmentTool_selenium" +System.currentTimeMillis(); - private final String GROUP_NAME_1 = "Gruppe 1"; - private final String GROUP_NAME_2 = "Gruppe 2"; - private final String ASSESSMENT_ELEMENT_TITLE = "Assessment_NEW"; - - private String STUDENT1 = "test"; - - //TODO:LD: temporary changed usernames - workaround for OLAT-5249 - /*private final String STUDENT2 = "selenium_student2"; - private final String TUTOR = "selenium_tutor";*/ - private final String STUDENT2 = "seleniumstudent2"; - private final String TUTOR = "seleniumtutor"; - - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //author adds participants to group or student enrolls in group - // STUDENT enrolls - login and enroll if not already member in GROUP_NAME - OlatLoginInfos olatLoginInfos1 = context.getStandardStudentOlatLoginInfos(1); - STUDENT1 = olatLoginInfos1.getUsername(); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos olatLoginInfos2 = context.createuserIfNotExists(1, STUDENT2, standardPassword, true, false, false, false, false); - - //cleanup first - only if the course name is reused - /*OlatServerSetupHelper.deleteEvidenceOfAchievement(COURSE_NAME, olatLoginInfos1); - OlatServerSetupHelper.deleteEvidenceOfAchievement(COURSE_NAME, olatLoginInfos2); - OlatServerSetupHelper.deleteAllCoursesNamed(COURSE_NAME);*/ - - //import course - make sure that this is the course you need! - File f = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - assertNotNull("Could not locate the course zip!", f); - assertTrue("file "+f.getAbsolutePath()+" not found!", f.exists()); - WorkflowHelper.importCourse(f, COURSE_NAME, "assessment test course description"); - - //add tutor to the group: GROUP_NAME_1 - WorkflowHelper.addTutorToGroup(context.getStandardAuthorOlatLoginInfos(1).getUsername(), COURSE_NAME, GROUP_NAME_1); - //add tutor to the group: GROUP_NAME_2 - OlatLoginInfos olatLoginInfos0 = context.createuserIfNotExists(1, TUTOR, standardPassword, true, false, false, true, false); - WorkflowHelper.addTutorToGroup(olatLoginInfos0.getUsername(), COURSE_NAME, GROUP_NAME_2); - - enrollInGroupAfterLogin(olatLoginInfos1, COURSE_NAME, GROUP_NAME_1); - - enrollInGroupAfterLogin(olatLoginInfos2, COURSE_NAME, GROUP_NAME_2); - } - - private void enrollInGroupAfterLogin(OlatLoginInfos olatLoginInfos, String courseName, String groupName) { - Selenium selenium_ = Context.getContext().createSeleniumAndLogin(olatLoginInfos); - WorkflowHelper.openCourseAfterLogin(selenium_, courseName); - selenium_.click("ui=course::menu_courseNode(titleOfNode=Enrolment)"); - selenium_.waitForPageToLoad("30000"); - boolean alreadyEnrolled = seleniumEquals("enrolled", selenium_.getText("ui=course::content_enrollment_enrolledOrNot(nameOfGroup=" + groupName + ")")); - if(!alreadyEnrolled) { - selenium_.click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=" + groupName + ")"); - selenium_.waitForPageToLoad("30000"); - assertTrue(selenium_.isTextPresent("You have already enroled for the learning group mentioned below")); - } - selenium_.click("ui=tabs::logOut()"); - selenium_.waitForPageToLoad("30000"); - } - - - public void testGroupDependentAssessment() throws Exception { - Context context = Context.getContext(); - - //administrator - owner of the COURSE_NAME - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - CourseEditor courseEditor = workflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME).getCourseEditor(); - //administrator configures the assessment element - AssessmentEditor assessmentEditor = (AssessmentEditor)courseEditor.insertCourseElement(CourseElemTypes.ASSESSMENT, true, ASSESSMENT_ELEMENT_TITLE); - assessmentEditor.configure(Boolean.TRUE, 1, 10, Boolean.TRUE, 5); - //change visibility - only visible for GROUP_NAME_2 - assessmentEditor.changeVisibilityDependingOnGroup(GROUP_NAME_2); - assessmentEditor.changeAccessyDependingOnGroup(GROUP_NAME_2); - courseEditor.publishCourse(); - courseEditor.closeToCourseRun(); - - - //author - tutor of GROUP_NAME_1 - OLATWorkflowHelper workflow2 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - AssessmentTool assessmentTool = workflow2.getLearningResources().searchAndShowCourseContent(COURSE_NAME).getAssessmentTool(); - AssessmentForm assessmentForm = assessmentTool.getAssessmentFormAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE); - //check values for min/max score, passed cut value - assertEquals("1.0", assessmentForm.getMinScore()); - assertEquals("10.0", assessmentForm.getMaxScore()); - assertEquals("5.0", assessmentForm.getPassedCutScore()); - assessmentForm.setScore(7); - assessmentTool = assessmentForm.save(); - //check values in the assessment table (score, passed) - assertEquals("7.000", assessmentTool.getScoreInTableAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE, false)); - assertEquals("Passed", assessmentTool.getPassedStatusInTableAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE, false)); - //tutor changes score to 4 - assessmentForm = assessmentTool.getAssessmentFormAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE); - assessmentForm.setScore(4); - assessmentForm.save(); - //check values in the assessment table (score, passed) - assertEquals("4.000", assessmentTool.getScoreInTableAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE, false)); - assertEquals("Failed", assessmentTool.getPassedStatusInTableAsPerUser(STUDENT1, ASSESSMENT_ELEMENT_TITLE, false)); - - - //student check the "Evidence of achievement" - OLATWorkflowHelper workflow3 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - CourseRun courseRun = workflow3.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - //ASSESSMENT_ELEMENT_TITLE not visible/accessible - assertFalse(courseRun.isTextPresent(ASSESSMENT_ELEMENT_TITLE)); - //but ASSESSMENT_ELEMENT_TITLE present in "Evidence of achievement" - EvidencesOfAchievement evidencesOfAchievement = workflow3.getHome().getEvidencesOfAchievement(); - evidencesOfAchievement.selectDetails(COURSE_NAME); - //check score in table - assertEquals("4.000", evidencesOfAchievement.getCourseElementScore(ASSESSMENT_ELEMENT_TITLE)); - assertEquals("Failed", evidencesOfAchievement.getCoursePassedStatus(ASSESSMENT_ELEMENT_TITLE)); - - } - - -} diff --git a/src/test/java/org/olat/test/functional/course/assessment/package.html b/src/test/java/org/olat/test/functional/course/assessment/package.html deleted file mode 100644 index 97ab2f808b0..00000000000 --- a/src/test/java/org/olat/test/functional/course/assessment/package.html +++ /dev/null @@ -1,36 +0,0 @@ -<html> -<head> -</head> - -<body> - -Assessment functionality tests. <br/> -Functional tests, no codepoints, 2-node cluster setup.<br/> -All tests need a special course imported in the tests setup. - -<table border="1"> -<tbody> -<tr valign="top"> -<td>AssessmentElementTest</td><td>Tests the assessment course element, assessment tool and the evidence of achievement. - <br/> - Test case: <br/> - 1. author adds new Assessment course element in course and configures it. (min, max score, passed cut value, etc.) <br/> - 2. publish course <br/> - 3. author checks in the assessment tool the stored values for the assessment form: min/max score, passed cut value <br/> - 4. author grants score to student, and checks if the passed is correctly computed <br/> - 5. Student checks the score/passed info in the "Evidence of achievement". <br/></td> -</tr> -<tr valign="top"> -<td>BulkAssessmentTest</td><td>Test case: <br/> - Tutor (node 1) opens the AssessmentTool of the COURSE_NAME, starts the bulk assessment wizard and - adds score values for a ASSESSMENT_ELEM_NAME course element for 3 users enrolled into the group. - The scores are: 2, 3, and 4 for STUDENT1, STUDENT2, STUDENT3. - <br/> - STUDENT2 asserts his score in course run (COURSE_NAME) for the ASSESSMENT_ELEM_NAME element, - and in the efficiency statement (Home/Evidences of achievement) after he logins on the cluster node 2</td> -</tr> -</tbody> -</table> - -</body> -</html> \ No newline at end of file diff --git a/src/test/java/org/olat/test/functional/course/chat/ChatTest.java b/src/test/java/org/olat/test/functional/course/chat/ChatTest.java deleted file mode 100644 index 79749568c65..00000000000 --- a/src/test/java/org/olat/test/functional/course/chat/ChatTest.java +++ /dev/null @@ -1,230 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.chat; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.components.ChatComponent; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.TestElement; -import org.olat.test.util.selenium.olatapi.course.run.TestRun; -import org.olat.test.util.selenium.olatapi.group.Group; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.selenium.olatapi.group.Groups; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Chattest.<br/> - * <br/> - * <p> - * Test setup:<br/> - * 1. Import a course with a test (Course_with_all_bb.zip should have a test)<br/> - * 2. Add participants seleniumauthor and seleniumstudent to the learning_group in course <br/> - * 3. Create a project group with the same members, and select chat as group tool<br/> - * 4. Login with seleniumauthor in browser 1 <br/> - * 5. Login with seleniumstudent in browser 2 <br/> - * 6. cleanup: delete course and project group<br/> - * <br/> - * Test case: <br/> - * 1. Login with seleniumstudent in browser 2 <br/> - * 2. Login with seleniumauthor in browser 1 <br/> - * 3. Seleniumauthor clicks link "(xy People are online)" <br/> - * 4. Seleniumauthor searches for user seleniumstudent <br/> - * 5. Seleniumauthor clicks username: seleniumstudent to open chat <br/> - * 6. Seleniumauthor writes "hello" and clicks send <br/> - * 7. Check whether "[TIME] seleniumauthor: hello" is displayed in browser 1 <br/> - * 8. Check whether "[TIME] seleniumauthor: hello" is displayed in browser 2 <br/> - * 9. Seleniumstudent writes "hello back" <br/> - * 10. Check whether "[TIME] seleniumstudent: hello back" is displayed in browser 2 <br/> - * 11. Check whether "[TIME] seleniumstudent: hello back" is displayed in browser 1 <br/> - * 12. Seleniumauthor logs out <br/> - * (13. Check whether "[TIME] seleniumstudent: [hat sich ausgeloggt]" is displayed in browser 1) -> removed - * 14. Seleniumauthor logs back in. - * 15. Seleniumstudent goes to course and opens course chat <br/> - * 16. Seleniumauthor goes to the same course and opens cours chat <br/> - * 17. Both go to tab group, click on group "Chatgroup", click on "Chat" in the menu, and on "enter group chat"<br/> - * 18. Both write a message "hello". - * 19. Assert that memberlist is updated so that both seleniumauthor and seleniumstudent are listed<br/> - * 20. Close group tab in browser 1 by seleniumauthor, assert that groupchat window is closed<br/> - * 21. Assert that seleniumauthor is removed in the list of the groupchatwindow in browser 2<br/> - * 22. Seleniumstudent closes all Chatwindows <br/> - * 23. Seleniumstudent enters a test <br/> - * 24. Assert that chatstatus is set to "do not disturb" during test<br/> - * 25. Assert that chat cannot be opened during test<br/> - * 26. finish test and reopen all chatwindows. Assert that conversationhistory with buddy remains.<br/> - * 27. quit course <br/> - * 28. seleniumauthor deletes course<br/> - * 29. logout seleniumauthor<br/> - * 30. logout seleniumstudent <br/> - * </p> - * - * @author Kristina - * - */ - -public class ChatTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "Course_with_all_bb.zip"; - private final String COURSE_NAME_PREFIX = "ChatTest-"; - private final String COURSE_NAME = COURSE_NAME_PREFIX+System.currentTimeMillis(); - private final String CHAT_GROUP = "Chatgroup"; - private final String SELENIUM_STUDENT_FULLNAME = "Selenium Test-Student";//"selenium student"; - private final String SELENIUM_AUTHOR_FULLNAME = "Selenium Test-Author";//"selenium author"; - private final String MESSAGE1 = "hello"; - private final String MESSAGE2 = "hi there"; - private final String MESSAGE3 = "how are you"; - private final String MESSAGE4 = "terrific"; - //private final String LOGOUT_MESSAGE = "[hat sich ausgeloggt]"; //SHOULD BE ENGLISH - - private String studentUsername; - private String authorUsername; - - @Override - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - studentUsername = context.getStandardStudentOlatLoginInfos(1).getUsername(); - authorUsername = context.getStandardAuthorOlatLoginInfos(1).getUsername(); - - //cleanup first - WorkflowHelper.deleteLearningResources(context.getStandardAdminOlatLoginInfos(1).getUsername(), COURSE_NAME_PREFIX); - - //import course - File file = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - WorkflowHelper.importCourse(file, COURSE_NAME, COURSE_NAME_PREFIX); - - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - CourseRun courseRun = workflow.getLearningResources().searchAndShowMyCourseContent(COURSE_NAME); - - //admin adds author and student as participants to a leaning group in the imported course - GroupManagement groupManagement = courseRun.getGroupManagement(); - GroupAdmin groupAdmin = groupManagement.createLearningGroup("blabla_gr", "bla", -1, false, false); - - String[] participants = {studentUsername, authorUsername}; - groupAdmin.addMembers(participants, new String[0]); - - // admin creates a project group, configures chat as tool, add same members - Groups groups = workflow.getGroups(); - if(groups.hasGroup(CHAT_GROUP)) { - groups.deleteGroup(CHAT_GROUP); - } - GroupAdmin groupAdmin2 = groups.createProjectGroup(CHAT_GROUP, "group for chat testing"); - groupAdmin2.setTools(false, false, false, false, false, false, true); - groupAdmin2.addMembers(participants, new String[0]); - - workflow.logout(); - } - - - public void testChatTest() throws Exception { - Context context = Context.getContext(); - - OLATWorkflowHelper author = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - OLATWorkflowHelper student = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - - ChatComponent authorChatComponent = author.getChatComponent(); - authorChatComponent.openBuddyChat(SELENIUM_STUDENT_FULLNAME); - - ChatComponent studentChatComponent = student.getChatComponent(); - studentChatComponent.openBuddyChat(SELENIUM_AUTHOR_FULLNAME); - - authorChatComponent.sendBuddyMessage(MESSAGE1); - - Thread.sleep(3000); - assertTrue(studentChatComponent.isTextPresent(authorUsername+": "+MESSAGE1)); - assertTrue(authorChatComponent.isTextPresent(authorUsername+": "+MESSAGE1)); - - studentChatComponent.sendBuddyMessage(MESSAGE2); - Thread.sleep(3000); - assertTrue(studentChatComponent.isTextPresent(studentUsername+": "+MESSAGE2)); - assertTrue(authorChatComponent.isTextPresent(studentUsername+": "+MESSAGE2)); - - student.logout(); - //Thread.sleep(3000); - //assertTrue(authorChatComponent.isTextPresent(studentUsername+": "+LOGOUT_MESSAGE)); - - //student logins back - student = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - CourseRun courseRunStudent = student.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - ChatComponent courseChatWindowStudent = courseRunStudent.getChatComponent(); - courseChatWindowStudent.openChat(false); - - CourseRun courseRunAuthor = author.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - Thread.sleep(9000); - courseRunAuthor.getChatComponent().openChat(false); - - - //project group chat - Groups groups = student.getGroups(); - Group chatGroupStudent = groups.selectGroup(CHAT_GROUP); - ChatComponent groupChatWindowStudent = chatGroupStudent.selectChat(); - Thread.sleep(9000); - groupChatWindowStudent.openProjectGoupChat(); - groupChatWindowStudent.sendMessage(MESSAGE3,"Chatroom: "+CHAT_GROUP); - - Group chatGroupAuthor = author.getGroups().selectGroup(CHAT_GROUP); - ChatComponent groupChatWindowAuthor = chatGroupAuthor.selectChat(); - Thread.sleep(9000); - groupChatWindowAuthor.openProjectGoupChat(); - groupChatWindowAuthor.sendMessage(MESSAGE4,"Chatroom: "+CHAT_GROUP); - Thread.sleep(5000); - - assertTrue(groupChatWindowStudent.isTextPresent(studentUsername+": "+MESSAGE3)); - assertTrue(groupChatWindowStudent.isTextPresent(authorUsername+": "+MESSAGE4)); - - //close project group tab - chatGroupAuthor.close(CHAT_GROUP); //20. - assertFalse(groupChatWindowAuthor.isOpen("Chatroom: "+CHAT_GROUP)); - - courseChatWindowStudent.closeExtWindow(); - - //Assert that seleniumauthor is removed in the list of the groupchatwindow in browser 2<br/> - assertFalse(groupChatWindowStudent.hasParticipant(authorUsername, "Chatroom: "+CHAT_GROUP)); - - //student closes all chat windows - groupChatWindowStudent.closeExtWindow(); - - chatGroupStudent.close(CHAT_GROUP); - - courseRunStudent.selectCourseTab(COURSE_NAME); - TestElement testElement = courseRunStudent.selectTest(CourseEditor.TEST_TITLE); - TestRun testrun = testElement.startTest(); - - ChatComponent studentChatComponent3 = courseRunStudent.getChatComponent(); - assertFalse(studentChatComponent3.isOpenStatusChangerAvailable()); - assertFalse(studentChatComponent3.isCourseChatAvailable()); - - testrun.finishTest(false, 0); - - ChatComponent finalChatComponent = student.getChatComponent(); - finalChatComponent.openBuddyChat(SELENIUM_AUTHOR_FULLNAME); - finalChatComponent.isTextPresent(MESSAGE1); - - author.logout(); - student.logout(); - } -} \ No newline at end of file diff --git a/src/test/java/org/olat/test/functional/course/chat/CourseGroupChatAndPollingTest.java b/src/test/java/org/olat/test/functional/course/chat/CourseGroupChatAndPollingTest.java deleted file mode 100644 index 696aafb5044..00000000000 --- a/src/test/java/org/olat/test/functional/course/chat/CourseGroupChatAndPollingTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.chat; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.components.ChatComponent; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * test groupChat stuff and polling (changing interval) - * - * @author Guido - * - */ -public class CourseGroupChatAndPollingTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = Context.DEMO_COURSE_NAME_1; - - - public void testCourseChat() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - // login first - OLATWorkflowHelper workflowAdmin = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - LearningResources learningResources = workflowAdmin.getLearningResources(); - - for (int i = 0; i < 10; i++) { - System.out.println("run: "+i); - sendMessagesInCourseChat(learningResources, i); - } - - workflowAdmin.logout(); - } - - /** - * Open course, open chat, send messages, close chat, close course. - * @param learningResources - * @param run - * @throws InterruptedException - */ - private void sendMessagesInCourseChat(LearningResources learningResources, int run) throws InterruptedException { - CourseRun courseRun = learningResources.searchAndShowCourseContent(COURSE_NAME); - Thread.sleep(16000);//wait until course chat link is save (no reload warning) - - ChatComponent chatComponent = courseRun.getChatComponent(); - chatComponent.openStatusChanger(); - chatComponent.closeExtWindow(); - Thread.sleep(2000); - - chatComponent.openChat(true); - Thread.sleep(3000); - - String username = Context.getContext().getStandardAdminOlatLoginInfos(1).getUsername(); - if (!chatComponent.isTextPresent("("+ username +")")) { - Thread.sleep(6000); //wait for another 6s - } - assertTrue("Run number: "+run, chatComponent.isTextPresent("("+username+")")); - String msg = Long.valueOf(System.currentTimeMillis()).toString(); - - chatComponent.sendMessage(msg); - Thread.sleep(3000); //after 3s it should be here - - assertTrue("Run number: "+run+"Didn't find message as expected: "+msg, chatComponent.isTextPresent(msg)); - chatComponent.toggleAnonymous(); - Thread.sleep(3000); //after 3s it should be here - - msg = Long.valueOf(System.currentTimeMillis()).toString(); - chatComponent.sendMessage(msg); - Thread.sleep(3000); //after 3s it should be here - assertTrue("Run number: "+run+"Didn't find message: "+msg, chatComponent.isTextPresent(msg)); - - chatComponent.closeExtWindow(); - courseRun.close(COURSE_NAME); - Thread.sleep(3000); - - } - -} diff --git a/src/test/java/org/olat/test/functional/course/run/AccessVisibilityTest.java b/src/test/java/org/olat/test/functional/course/run/AccessVisibilityTest.java deleted file mode 100644 index 28957018417..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/AccessVisibilityTest.java +++ /dev/null @@ -1,170 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.run; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentForm; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests course elements with access and visibility restrictions. - * <br/> - * Test setup: <br/> - * 1. Delete all learning resources of author. <br/> - * 2. Create student acvistudi03. - * <p> - * Test case: <br/> - * 1. Author creates wiki WIKI_NAME. <br/> - * 2. Authors creates course COURSE_NAME and adds building blocks folder, forum, wiki and assessment. <br/> - * 3. Author adds WIKI_NAME to building block wiki. <br/> - * 4. Author opens group management, creates group lg av 1 and adds standard student to group. <br/> - * 5. Author goes back to course editor and restricts visibility of forum to above created group. <br/> - * 6. Author restricts access of assessment to above created group. <br/> - * 7. Author configures visibility of wiki depending on the above assessment. <br/> - * 8. Author publishes course and switches to course run. <br/> - * 9. Student opens course, sets bookmark, checks if 3 out of 4 course elements are visible. <br/> - * 10. Student acvistudi03 opens course, only sees assessment, but cannot access it (check message). <br/> - * 11. Author opens assessment tool and sets student's assessment to "passed" . <br/> - * 12. Student can now see wiki. <br/> - * 13. Author deletes course and wiki. <br/> - * - * @author sandra - * - */ - - -public class AccessVisibilityTest extends BaseSeleneseTestCase { - - - private final String COURSE_NAME = "Access_Visibility-"+System.currentTimeMillis(); - private final String WIKI_NAME = "av_wiki"; - private boolean resourceCreated; - - - public void testAccessVisibility() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos student02= context.createuserIfNotExists(1, "acvistudi03", standardPassword, true, false, false, false, false); - - // author01 creates wiki and course - OLATWorkflowHelper olatWorkflow1 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - LearningResources learningResources1 = olatWorkflow1.getLearningResources(); - LRDetailedView lRDetailedView1 = learningResources1.createResource(WIKI_NAME, "course run test", LR_Types.WIKI); - //select again the learningResources1 - learningResources1 = olatWorkflow1.getLearningResources(); - CourseEditor courseEditor1 = learningResources1.createCourseAndStartEditing(COURSE_NAME, "course run test"); - resourceCreated = true; - courseEditor1.insertCourseElement(CourseElemTypes.FOLDER, true, null); - courseEditor1.insertCourseElement(CourseElemTypes.FORUM, true, null); - courseEditor1.insertCourseElement(CourseElemTypes.WIKI, true, null); - courseEditor1.insertCourseElement(CourseElemTypes.ASSESSMENT, true, null); - courseEditor1.selectCourseElement("Wiki"); - courseEditor1.chooseMyWikiForElement("Wiki",WIKI_NAME); - lRDetailedView1 = courseEditor1.closeToLRDetailedView(); - CourseRun courseRun1 = lRDetailedView1.showCourseContent(); - courseRun1.getGroupManagement().createGroupAndAddMembers("lg av 1", null, context.getStandardStudentOlatLoginInfos(1).getUsername()); - CourseEditor courseEditor = courseRun1.getCourseEditor(); - CourseElementEditor courseElementEditor = courseEditor.selectCourseElement("Forum"); - courseElementEditor.changeVisibilityDependingOnGroup("lg av 1"); - - courseElementEditor = courseEditor.selectCourseElement("Folder"); - courseElementEditor.changeVisibilityDependingOnGroup("lg av 1"); - - courseElementEditor = courseEditor.selectCourseElement("Assessment"); - courseElementEditor.changeAccessyDependingOnGroup("lg av 1"); - courseElementEditor.editVisibilityInfo("this assessment is only accessible to learning group members"); - - courseElementEditor = courseEditor.selectCourseElement("Wiki"); - courseElementEditor.changeVisibilityDependingOnAssessment("Assessment*"); - courseEditor.publishCourse(); - courseRun1 = courseEditor.closeToCourseRun(); - - - // student01 opens course, sets bookmark, checks if 3 out of 4 elements are visible - OLATWorkflowHelper olatWorkflow2 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - LearningResources learningResources2 = olatWorkflow2.getLearningResources(); - CourseRun courseRun2 = learningResources2.searchAndShowCourseContent(COURSE_NAME); - courseRun2.setBookmark(); - - assertTrue(courseRun2.isTextPresent("Folder")); - assertTrue(courseRun2.isTextPresent("Forum")); - assertTrue(courseRun2.isTextPresent("Assessment")); - assertFalse(courseRun2.isTextPresent("Wiki")); - - // student02 opens course and only sees assessment, but cannot access it (check message) - OLATWorkflowHelper olatWorkflow3 = context.getOLATWorkflowHelper(student02); - LearningResources learningResources3 = olatWorkflow3.getLearningResources(); - CourseRun courseRun3 = learningResources3.searchAndShowCourseContent(COURSE_NAME); - - assertFalse(courseRun3.isTextPresent("Folder")); - assertFalse(courseRun3.isTextPresent("Forum")); - assertFalse(courseRun3.isTextPresent("Wiki")); - courseRun3.selectCourseElement("Assessment"); - assertTrue(courseRun3.isTextPresent("this assessment is only accessible to learning group members")); - - - // author01 opens assessment tool and sets student01's assessment to "passed" - AssessmentForm assessmentForm = courseRun1.getAssessmentTool().getAssessmentFormAsPerUser(context.getStandardStudentOlatLoginInfos(1).getUsername(), "Assessment"); - assessmentForm.setPassed(true); - assessmentForm.save(); - olatWorkflow1.logout(); - - //student01 can now see wiki - courseRun2.selectRoot(COURSE_NAME); - assertTrue(courseRun2.isTextPresent("Wiki")); - } - - - - @Override - protected void cleanUpAfterRun() { - System.out.println("***************** cleanUpAfterRun STARTED *********************"); - if(resourceCreated) { - //author01 deletes course and wiki - OLATWorkflowHelper olatWorkflow1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - LearningResources learningResources = olatWorkflow1.getLearningResources(); - LRDetailedView lRDetailedView = learningResources.searchMyResource(COURSE_NAME); - try { - learningResources = lRDetailedView.deleteLR(); - } catch (Exception e) {} - try { - learningResources.searchMyResource(WIKI_NAME).deleteLR(); - } catch (Exception e) {} - } - System.out.println("***************** cleanUpAfterRun ENDED *********************"); - } - - -} - - - diff --git a/src/test/java/org/olat/test/functional/course/run/AssessmentToolRemoveTutorTest.java b/src/test/java/org/olat/test/functional/course/run/AssessmentToolRemoveTutorTest.java deleted file mode 100644 index 34b0dd5ce4f..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/AssessmentToolRemoveTutorTest.java +++ /dev/null @@ -1,179 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ - -package org.olat.test.functional.course.run; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentForm; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentTool; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests granting and revoking tutoring rights for one or more groups and assessing students in such groups. - * <br/> - * <p> - * Test setup: <br/> - * Expects a special "AssessmentTool" course must be imported. - Same tutor is tutoring two groups, each group has one student. <br/> - * <p> - * import course - make sure that this is the course you need! <br/> - * "administrator" adds tutor to Gruppe 1 and 2 <br/> - * STUDENT1 enrolls - login and enroll if not already member in GROUP_NAME_1 <br/> - * STUDENT2 enrolls - login and enroll if not already member in GROUP_NAME_2 <br/> - * <p> - * Test case: <br/> - * Tutor opens assessment tool, assesses first student (member of Gruppe 1) with 3 <br/> - * second student (member of Gruppe 2) with 4 points. <br/> - * Course owner removes tutor of Gruppe 2. <br/> - * Tutor opens assessment tool, assesses first student (member of Gruppe 1) with 5 <br/> - * tutor cannot asses second student (member of Gruppe 2). <br/> - * - * - * @author Marion Weber - * - */ -public class AssessmentToolRemoveTutorTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "CourseImportCourse.zip"; - - private final String COURSE_NAME = "AssessmentToolRemoveTutor-"+System.currentTimeMillis(); - private final String GROUP_NAME_1 = "Gruppe 1"; - private final String GROUP_NAME_2 = "Gruppe 2"; - - //test actors - private final String STUDENT1 = "amtststudent01"; - private final String STUDENT2 = "amtststudent02"; - private String TUTOR; - - public void setUp() throws Exception { - - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - TUTOR = context.getStandardAuthorOlatLoginInfos(1).getUsername(); - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos olatLoginInfos1 = context.createuserIfNotExists(1, STUDENT1, standardPassword, true, false, false, false, false); - OlatLoginInfos olatLoginInfos2 = context.createuserIfNotExists(1, STUDENT2, standardPassword, true, false, false, false, false); - - //import course - make sure that this is the course you need! - File f = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - assertNotNull("Could not locate the course zip!", f); - assertTrue("file "+f.getAbsolutePath()+" not found!", f.exists()); - WorkflowHelper.importCourse(f, COURSE_NAME, "assessment test course description"); - - //"administrator" adds tutor to Gruppe 1 and 2 - WorkflowHelper.addTutorToGroup(TUTOR, COURSE_NAME, GROUP_NAME_1); - WorkflowHelper.addTutorToGroup(TUTOR, COURSE_NAME, GROUP_NAME_2); - - // STUDENT1 enrolls - login and enroll if not already member in GROUP_NAME_1 - enrollInGroupAfterLogin(olatLoginInfos1, COURSE_NAME, GROUP_NAME_1); - - // STUDENT2 enrolls - login and enroll if not already member in GROUP_NAME_2 - enrollInGroupAfterLogin(olatLoginInfos2, COURSE_NAME, GROUP_NAME_2); - } - - /** - * STUDENT enrolls - login and enroll if not already member in groupName - * @param selenium_ - * @param courseName - * @param groupName - */ - private void enrollInGroupAfterLogin(OlatLoginInfos olatLoginInfos, String courseName, String groupName) { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(olatLoginInfos); - EnrolmentRun enrolmentRun = workflow.getLearningResources().searchAndShowCourseContent(courseName).selectEnrolment("Enrolment"); - boolean alreadyEnrolled = enrolmentRun.alreadyEnrolled(groupName); - if(!alreadyEnrolled) { - enrolmentRun.enrol(groupName); - assertTrue(enrolmentRun.isTextPresent("You have already enroled for the learning group mentioned below")); - assertTrue(enrolmentRun.alreadyEnrolled(groupName)); - } - workflow.logout(); - } - - - /** - * - * - * @throws Exception - */ - public void testRunTest() throws Exception { - step1(); - - step2(); - - step3(); - } - - - private void step1() { - //Tutor opens assessment tool, assesses first student (member of Gruppe 1) with 3 - //second student (member of Gruppe 2) with 4 points. - OLATWorkflowHelper workflow1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - CourseRun courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - AssessmentForm assessmentForm1 = courseRun1.getAssessmentTool().getAssessmentFormAsPerUser(STUDENT1, "Test 0"); - assessmentForm1.setScore(3); - AssessmentTool assessmentTool = assessmentForm1.save(); - - AssessmentForm assessmentForm2 = assessmentTool.getAssessmentFormAsPerUser(STUDENT2, "Test 1"); - assessmentForm2.setScore(4); - courseRun1 = assessmentForm2.save().close(); - courseRun1.close(COURSE_NAME); - } - - private void step2() { - //Course owner removes tutor of Gruppe 2. - OLATWorkflowHelper workflow2 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - CourseRun courseRun2 = workflow2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - GroupManagement groupManagement = courseRun2.getGroupManagement(); - groupManagement.removeMemberFromGroup(TUTOR, "Gruppe 2"); - courseRun2 = groupManagement.close(); - courseRun2.close(COURSE_NAME); - } - - private void step3() { - ////Tutor opens assessment tool, assesses first student (member of Gruppe 1) with 5 - // tutor cannot asses second student (member of Gruppe 2). - OLATWorkflowHelper workflow3 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - CourseRun courseRun = workflow3.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - AssessmentForm assessmentForm = courseRun.getAssessmentTool().getAssessmentFormAsPerUser(STUDENT1, "Test 0"); - assessmentForm.setScore(5); - AssessmentTool assessmentTool = assessmentForm.save(); - assessmentTool.getSelenium().click("ui=course::assessment_selectType(text=As per user)"); - assessmentTool.getSelenium().waitForPageToLoad("30000"); - assertFalse(assessmentTool.getSelenium().isTextPresent("student2")); - assessmentTool.close().close(COURSE_NAME); - } - -} diff --git a/src/test/java/org/olat/test/functional/course/run/ConcurrentEditCourseNodeTest.java b/src/test/java/org/olat/test/functional/course/run/ConcurrentEditCourseNodeTest.java deleted file mode 100644 index ab14c8528c7..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/ConcurrentEditCourseNodeTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.run; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.Forum; -import org.olat.test.util.selenium.olatapi.course.run.WikiRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; - -import com.thoughtworks.selenium.SeleniumException; - -/** - * - * Wiki and forum are edited concurrently. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. Author creates wiki WIKI_NAME. <br/> - * 2. Authors creates course COURSE_NAME and adds building blocks forum and wiki. <br/> - * 3. Author adds WIKI_NAME to building block wiki. <br/> - * 4. Author publishes course. <br/> - * 5. Author goes to course run, selects wiki and edits index page. <br/> - * 6. Student opens course, opens wiki, creates new page. <br/> - * 7. Author and students edit same wiki page simultaneously, check if only one of them can edit. <br/> - * 8. Student goes to version tab of wiki page. <br/> - * 9. Author edits wiki page and deletes it. <br/> - * 10. Student gets message that page was deleted. <br/> - * 11. Student navigates to forum and opens new topic. <br/> - * 12. Author opens forum and deletes topic. <br/> - * 13. Student tries to edit topic but cannot. <br/> - * 14. Author removes forum and publishes course. <br/> - * 15. Student gets message to restart course. <br/> - * - * @author sandra - * - */ - -public class ConcurrentEditCourseNodeTest extends BaseSeleneseTestCase { - - protected com.thoughtworks.selenium.Selenium selenium[] = new com.thoughtworks.selenium.Selenium[2]; - - //dynamic course name, just in case it won't be deleted at the end of the test - private final String COURSE_NAME = "concurrent edit course-" + System.currentTimeMillis(); - private final String WIKI_NAME = "concurrent edit-" + System.currentTimeMillis(); - - private CourseRun courseRun_0; - private CourseRun courseRun_1; - - - public void testConcurrentEditCourseNode() throws Exception { - Context context = Context.setupContext(getFullName(), - SetupType.TWO_NODE_CLUSTER); - - { - // author creates wiki and course with wiki and forum - OLATWorkflowHelper olatWorkflow_0 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - LearningResources learningResources_0 = olatWorkflow_0.getLearningResources(); - LRDetailedView lRDetailedView = learningResources_0.createResource(WIKI_NAME, "selenium", LR_Types.WIKI); - learningResources_0 = olatWorkflow_0.getLearningResources(); - CourseEditor courseEditor_0 = learningResources_0.createCourseAndStartEditing(COURSE_NAME, "selenium"); - courseEditor_0.insertCourseElement(CourseElemTypes.FORUM, true, null); - courseEditor_0.insertCourseElement(CourseElemTypes.WIKI, true, null); - courseEditor_0.chooseWikiForElement(WIKI_NAME, context.getStandardAuthorOlatLoginInfos(1).getUsername()); - courseEditor_0.publishCourse(); - LRDetailedView lRDetailedView_0 = courseEditor_0.closeToLRDetailedView(); - courseRun_0 = lRDetailedView_0.showCourseContent(); - WikiRun wikiRun_0 = (WikiRun)courseRun_0.selectWiki("Wiki"); - wikiRun_0.editPage("Welcome"); - selenium[0] = wikiRun_0.getSelenium(); - } - - { - // student creates wiki page - OLATWorkflowHelper olatWorkflow_1 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - courseRun_1 = olatWorkflow_1.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - WikiRun wikiRun_1 = courseRun_1.selectWiki("Wiki"); - wikiRun_1.createOrSearchArticle("Deleteconcurrency", "Deleteconcurrency test entry"); - wikiRun_1.selectIndex(); - selenium[1] = wikiRun_1.getSelenium(); - } - - { - //both try to edit same wiki page - selenium[0].click("ui=wiki::topNavigation_editPage()"); - selenium[1].click("ui=wiki::topNavigation_editPage()"); - //selenium[0].waitForPageToLoad("30000"); - //selenium[1].waitForPageToLoad("30000"); - - int numWinners = 0; - int numLoosers = 0; - for(int i=0; i<2; i++) { - if (selenium[i].isTextPresent("Edit:Index")) { - numWinners++; - } else if (selenium[i].isTextPresent("The page (Index) is being modified by:")) { - numLoosers++; - } else { - fail("oups..."); - } - } - assertEquals("expected only 1 editor", 1, numWinners); - assertEquals("expected only 1 who cannot edit", 1, numLoosers); - } - - { - // student goes to page deleteconcurrency version tab - selenium[1].click("ui=wiki::sideNavigation_from-a-z()"); - selenium[1].waitForPageToLoad("30000"); - selenium[1].click("ui=wiki::sideNavigation_clickAWikiPage(nameOfWikiPage=Deleteconcurrency)"); - selenium[1].waitForPageToLoad("30000"); - selenium[1].click("ui=wiki::topNavigation_versions()"); - selenium[1].waitForPageToLoad("30000"); - } - - { - // author deletes this page - selenium[0].click("ui=wiki::sideNavigation_from-a-z()"); - selenium[0].waitForPageToLoad("30000"); - selenium[0].click("ui=wiki::sideNavigation_clickAWikiPage(nameOfWikiPage=Deleteconcurrency)"); - selenium[0].waitForPageToLoad("30000"); - selenium[0].click("ui=wiki::topNavigation_editPage()"); - //selenium[0].waitForPageToLoad("30000"); - selenium[0].click("ui=wiki::edit_deletePage()"); - //selenium[0].waitForPageToLoad("30000"); - selenium[0].click("ui=dialog::Okay()"); - selenium[0].waitForPageToLoad("30000"); - } - - { - // student gets message that article has been deleted, opens forum message - selenium[1].click("ui=wiki::topNavigation_article()"); - selenium[1].waitForPageToLoad("30000"); - assertTrue(selenium[1].isTextPresent("This article has been deleted and cannot be displayed anymore.")); - - //we are still in CourseRun context so the object courseRun_1 is still valid - Forum forum1 = courseRun_1.selectForum("Forum"); - forum1.openNewTopic("test entry concurrent edit", "forum message editing"); - } - - { - // author opens forum and deletes message - Forum forum_0 = courseRun_0.selectForum("Forum"); - forum_0.deleteForumTopic("test entry concurrent edit"); - } - - { - // student tries to edit forum message - selenium[1].click("ui=course::content_forum_edit()"); - selenium[1].waitForPageToLoad("30000"); - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - //translation key: header.cannoteditmessage - try { if (selenium[1].isTextPresent("Post cannot be edited")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - - selenium[1].click("ui=course::menu_link(link=Forum)"); - selenium[1].waitForPageToLoad("30000"); - - } - { - // author removes forum - CourseEditor courseEditor_0 = courseRun_0.getCourseEditor(); - courseEditor_0.selectCourseElement("Forum"); - courseEditor_0.deleteCourseElement(); - courseEditor_0.publishCourse(); - courseRun_0 = courseEditor_0.closeToCourseRun(); - //courseRun_0.getDetailedView(); - } - - { - // student should get message to restart course - - // code here is required because Ajax can come at any time and do a poll resulting - // in this 'Please close this course and restart' text to show up without the user clicking anywhere - if (!selenium[1].isTextPresent("Please close this course and restart.")) { - try{ - selenium[1].click("ui=course::menu_link(link=Forum)"); - selenium[1].waitForPageToLoad("30000"); - } catch(SeleniumException se) { - if (!selenium[1].isTextPresent("Please close this course and restart.")) { - fail("Could not click link=Forum but also didn't see text saying 'Please close this course and restart.'"); - } - } - } - assertTrue(selenium[1].isTextPresent("Please close this course and restart.")); - selenium[1].click("ui=tabs::closeCourse(nameOfCourse=" + COURSE_NAME + ")"); - selenium[1].waitForPageToLoad("30000"); - } - } - - - @Override - protected void cleanUpAfterRun() { - System.out.println("***************** cleanUpAfterRun STARTED *********************"); - // author deletes course and wiki - LRDetailedView lRDetailedView1 = courseRun_0.getDetailedView(); - try { - LearningResources learningResources = lRDetailedView1.deleteLR(); - LRDetailedView lRDetailedView2 = learningResources.searchMyResource(WIKI_NAME); - lRDetailedView2.deleteLR(); - } catch (Exception e) {} - System.out.println("***************** cleanUpAfterRun ENDED *********************"); - } - -} diff --git a/src/test/java/org/olat/test/functional/course/run/ConcurrentForumRepliesTest.java b/src/test/java/org/olat/test/functional/course/run/ConcurrentForumRepliesTest.java deleted file mode 100644 index d41f5d05bfd..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/ConcurrentForumRepliesTest.java +++ /dev/null @@ -1,184 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.run; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.Forum; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Five students post replies and new topics in a forum shortly one after the other. - * <br/> - * Test setup: <br/> - * 1. Create five student users STUDENT_USER_NAME_1 - STUDENT_USER_NAME_5. - * <p> - * Test case: <br/> - * 1. Author creates course COURSE_NAME and adds building block forum. <br/> - * 2. Authors opens first forum topic. <br/> - * 3. Students log in and navigate to forum. <br/> - * 4. All students reply to the same forum message. <br/> - * 5. Author checks if all replies are displayed. <br/> - * 6. All students write new topic.<br/> - * 7. Author checks if all topics are displayed. <br/> - * 8. Author deletes course. <br/> - * - * @author sandra - * - */ - -public class ConcurrentForumRepliesTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "Concurrent_Forum_Replies_" + System.currentTimeMillis(); - - //TODO:LD: temporary changed usernames - workaround for OLAT-5249 - /*private final String STUDENT_USER_NAME_1 = "forumstudi_01"; - private final String STUDENT_USER_NAME_2 = "forumstudi_02"; - private final String STUDENT_USER_NAME_3 = "forumstudi_03"; - private final String STUDENT_USER_NAME_4 = "forumstudi_04"; - private final String STUDENT_USER_NAME_5 = "forumstudi_05";*/ - private final String STUDENT_USER_NAME_1 = "forumstudi01"; - private final String STUDENT_USER_NAME_2 = "forumstudi02"; - private final String STUDENT_USER_NAME_3 = "forumstudi03"; - private final String STUDENT_USER_NAME_4 = "forumstudi04"; - private final String STUDENT_USER_NAME_5 = "forumstudi05"; - - - public void testConcurrentForumReplies() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos student01= context.createuserIfNotExists(1, STUDENT_USER_NAME_1, standardPassword, true, false, false, false, false); - OlatLoginInfos student02= context.createuserIfNotExists(1, STUDENT_USER_NAME_2, standardPassword, true, false, false, false, false); - OlatLoginInfos student03= context.createuserIfNotExists(1, STUDENT_USER_NAME_3, standardPassword, true, false, false, false, false); - OlatLoginInfos student04= context.createuserIfNotExists(1, STUDENT_USER_NAME_4, standardPassword, true, false, false, false, false); - OlatLoginInfos student05= context.createuserIfNotExists(1, STUDENT_USER_NAME_5, standardPassword, true, false, false, false, false); - - - // author creates course with forum, opens welcome message topic - OLATWorkflowHelper olatWorkflow_1 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - CourseEditor courseEditor1 = olatWorkflow_1.getLearningResources().createCourseAndStartEditing(COURSE_NAME, "selenium"); - courseEditor1.insertCourseElement(CourseElemTypes.FORUM, true, null); - courseEditor1.publishCourse(); - LRDetailedView lRDetailedView1 = courseEditor1.closeToLRDetailedView(); - CourseRun courseRun1 = lRDetailedView1.showCourseContent(); - Forum forum1 = courseRun1.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum1.openNewTopic("welcome", "werdet euren senf los"); - - - // students log in and navigate to forum - CourseRun courseRun2 = openCourse(student01); - Forum forum2 = courseRun2.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum2.viewTopic("welcome"); - - CourseRun courseRun3 = openCourse(student02); - Forum forum3 = courseRun3.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum3.viewTopic("welcome"); - - CourseRun courseRun4 = openCourse(student03); - Forum forum4 = courseRun4.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum4.viewTopic("welcome"); - - CourseRun courseRun5 = openCourse(student04); - Forum forum5 = courseRun5.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum5.viewTopic("welcome"); - - CourseRun courseRun6 = openCourse(student05); - Forum forum6 = courseRun6.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum6.viewTopic("welcome"); - - - // students write forum message simultaneously - forum2.replyToCurrentMessage("moutarde\n> test concurrent message reply", true); - forum3.replyToCurrentMessage("mustard\n> test concurrent message reply", true); - forum4.replyToCurrentMessage("senape\n> test concurrent message reply", true); - forum5.replyToCurrentMessage("mostaza\n> test concurrent message reply", true); - forum6.replyToCurrentMessage("sinappi\n> test concurrent message reply", true); - - - // author checks if messages are present - forum1 = courseRun1.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum1.viewTopic("welcome"); - assertTrue(forum1.isTextPresent(STUDENT_USER_NAME_1)); - assertTrue(forum1.isTextPresent("moutarde")); - assertTrue(forum1.isTextPresent(STUDENT_USER_NAME_2)); - assertTrue(forum1.isTextPresent("mustard")); - assertTrue(forum1.isTextPresent(STUDENT_USER_NAME_3)); - assertTrue(forum1.isTextPresent("senape")); - assertTrue(forum1.isTextPresent(STUDENT_USER_NAME_4)); - assertTrue(forum1.isTextPresent("mostaza")); - assertTrue(forum1.isTextPresent(STUDENT_USER_NAME_5)); - assertTrue(forum1.isTextPresent("sinappi")); - - - // all students write new forum message - forum2 = courseRun2.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum3 = courseRun3.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum4 = courseRun4.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum5 = courseRun5.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum6 = courseRun6.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum2.clickNewTopic(); - forum3.clickNewTopic(); - forum4.clickNewTopic(); - forum5.clickNewTopic(); - forum6.clickNewTopic(); - forum2.typeInNewMessage("moutarde topic", "some more senf"); - forum3.typeInNewMessage("mustard topic", "some more senf"); - forum4.typeInNewMessage("senape topic", "some more senf"); - forum5.typeInNewMessage("mostaza topic", "some more senf"); - forum6.typeInNewMessage("sinappi topic", "some more senf"); - - - //author checks if all messages are there - forum1 = courseRun1.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - assertTrue(forum1.isTextPresent("moutarde")); - assertTrue(forum1.isTextPresent("mustard")); - assertTrue(forum1.isTextPresent("senape")); - assertTrue(forum1.isTextPresent("mostaza")); - assertTrue(forum1.isTextPresent("sinappi")); - - - //author deletes course - olatWorkflow_1.getLearningResources().searchMyResource(COURSE_NAME).deleteLR(); - - } - - /** - * Login, search course and open, select forum. - * @param student - * @return the selected forum.s - */ - private CourseRun openCourse(OlatLoginInfos student) { - OLATWorkflowHelper olatWorkflow = Context.getContext().getOLATWorkflowHelper(student); - CourseRun courseRun = olatWorkflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - return courseRun; - } - -} - - - diff --git a/src/test/java/org/olat/test/functional/course/run/CourseImportWithAllBBTest.java b/src/test/java/org/olat/test/functional/course/run/CourseImportWithAllBBTest.java deleted file mode 100644 index 9ee5b1bee4e..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/CourseImportWithAllBBTest.java +++ /dev/null @@ -1,236 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.run; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.CannotExecuteException; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.Forum; -import org.olat.test.util.selenium.olatapi.course.run.SCORM; -import org.olat.test.util.selenium.olatapi.course.run.WikiRun; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - - -/** - * - * Tests course import with all building blocks, and asserts that all bb are visible. - * <br/> - * <p> - * Test case: <br/> - * Import course with all references <br/> - * Open course <br/> - * Check all course elements: - podcast extern, - podcast intern, - blog extern, - blog intern, - topic assignment, - email, - calender, - show preview <br/> - * Delete course and all attached resources <br/> - * - * - * @author Hans-Jšrg - */ - -public class CourseImportWithAllBBTest extends BaseSeleneseTestCase { - - private final String courseTitle = "CourseImportTestCourse-"+System.currentTimeMillis(); - - - public void testCourseImport() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - -//Import course with all references - File f = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + "Course_with_all_bb.zip"); - assertNotNull("Could not locate the course zip!", f); - assertTrue("file "+f.getAbsolutePath()+" not found!", f.exists()); - - WorkflowHelper.importCourse(f, courseTitle, "Whatever right?"); -//Open course - - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(courseTitle); -//Check all course elements - //no more inline single page since 25.05.2010 - /*courseRun.selectCourseElement("Single page - inline"); - Thread.sleep(5000); - courseRun.getSelenium().selectFrame("//iframe[contains(@src,'first.html')]"); - assertTrue(courseRun.isTextPresent("This is the first page")); - courseRun.getSelenium().selectFrame("relative=top"); - */ - - courseRun.selectCourseElement("Single page - iframe"); - Thread.sleep(1000); - courseRun.getSelenium().selectFrame("//iframe[contains(@src,'second.html')]"); - assertTrue(courseRun.getSelenium().isTextPresent("This is the second page")); - courseRun.getSelenium().selectFrame("relative=top"); - - //courseRun = new CourseRun(courseRun.getSelenium()); - courseRun.selectCourseElement("External page"); - Thread.sleep(1000); - courseRun.getSelenium().selectFrame("//iframe[contains(@src,'http://www.google.com/')]"); - assertTrue(courseRun.getSelenium().isTextPresent("iGoogle")); - courseRun.getSelenium().selectFrame("relative=top"); - - courseRun.selectCourseElement("CP learning content"); - Thread.sleep(1000); - courseRun.getSelenium().selectFrame("//iframe[contains(@src,'/MESOSWORLD/EXDE/EINF/EINF.html')]"); - assertTrue(courseRun.getSelenium().isTextPresent("empirischen")); - courseRun.getSelenium().selectFrame("relative=top"); - - SCORM scorm = courseRun.selectSCORM("SCORM learning content"); - scorm.showSCORMLearningContent(); - Thread.sleep(1000); - scorm.getSelenium().selectFrame("//iframe[@id='scormContentFrame']"); - assertTrue(scorm.getSelenium().isTextPresent("Inland Rules")); - scorm.getSelenium().selectFrame("relative=top"); - courseRun = scorm.back(); - // Thread.sleep(3000); - Forum forum = courseRun.selectForum("Forum"); - forum.openNewTopic("Test Thread", "Yes, this is really a test"); - WikiRun wiki = courseRun.selectWiki("Wiki"); - wiki.editPage("Here is a wiki test page"); - Thread.sleep(1000); - assertTrue(wiki.getSelenium().isTextPresent("Here is a wiki test page")); - courseRun.selectCourseElement("File dialog"); - Thread.sleep(1000); - assertTrue(courseRun.getSelenium().isTextPresent("Upload file")); - courseRun.selectCourseElement("Folder"); - Thread.sleep(1000); - assertTrue(courseRun.getSelenium().isTextPresent("No files or folders")); - courseRun.selectCourseElement("Assessment"); - Thread.sleep(1000); - assertTrue(courseRun.getSelenium().isTextPresent("Result")); - courseRun.selectEnrolment("Enrolment").enrol("1stgroup"); - courseRun.selectCourseElement("Task"); - Thread.sleep(1000); - assertTrue(courseRun.getSelenium().isTextPresent("Sample solution")); - courseRun.selectCourseElement("Test"); - Thread.sleep(1000); - //translation key: qti.form.attempts - assertTrue(courseRun.getSelenium().isTextPresent("Maximum number of attempts")); - courseRun.selectCourseElement("Self-test"); - Thread.sleep(1000); - assertTrue(courseRun.getSelenium().isTextPresent("Press the start button to begin with your self-test.")); - courseRun.selectCourseElement("Questionnaire"); - Thread.sleep(1000); - assertTrue(courseRun.getSelenium().isTextPresent("Press the start button to begin with your questionnaire.")); - - //podcast extern - courseRun.selectCourseElement("Podcast extern"); - Thread.sleep(1000); - //podcast intern - courseRun.selectCourseElement("Podcast intern"); - Thread.sleep(1000); - assertTrue(courseRun.getSelenium().isTextPresent("Swedish Music")); - //blog extern - courseRun.selectCourseElement("Blog extern"); - Thread.sleep(1000); - //blog intern - courseRun.selectCourseElement("Blog intern"); - Thread.sleep(1000); - assertTrue(courseRun.getSelenium().isTextPresent("Lorem Ipsum")); - //topic assignment - courseRun.selectCourseElement("Topic assignment"); - Thread.sleep(1000); - //email - courseRun.selectCourseElement("E-mail"); - Thread.sleep(1000); - //calender - courseRun.selectCourseElement("Calendar"); - Thread.sleep(1000); - - //show preview - CourseEditor courseEditor = courseRun.getCourseEditor(); - courseEditor.preview(); - - Folder storageFolder = courseEditor.storageFolder(); - storageFolder.selectLink("_sharedfolder", true); - storageFolder.selectLink("second.html", false); - courseEditor = storageFolder.closeStorageFolder(); - //release locks - workflow.logout(); - - } - - - - @Override - protected void cleanUpAfterRun() { - //Delete course and all attached resources - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - LearningResources learningResources = workflow.getLearningResources(); - learningResources.searchMyResource(courseTitle).deleteLR(); - - String author = Context.getContext().getStandardAdminOlatLoginInfos(1).getUsername(); - - try { - deleteAllResources(learningResources, "fois_CSCW_de_scorm", author); - deleteAllResources(learningResources, "MESOS_EXDE_EINF", author); - deleteAllResources(learningResources, "repo_1", author); - deleteAllResources(learningResources, "repo_2", author); - deleteAllResources(learningResources, "repo_3", author); - deleteAllResources(learningResources, "test Wiki", author); - deleteAllResources(learningResources, "Glossary", author); - deleteAllResources(learningResources, "Resource folder", author); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - - - /** - * Deletes all resource with input resourceTitle and author. <p> - * Fill in the search form with resourceTitle and author, search, - * select entry with resourceTitle title if any found, and delete resource - * and go back to the seach form. - * - * @param learningResources - * @param resourceTitle - * @param author - */ - private void deleteAllResources(LearningResources learningResources, String resourceTitle, String author) throws Exception { - LRDetailedView lRDetailedView = learningResources.searchResource(resourceTitle, author); - while(lRDetailedView!=null) { - try { - learningResources = lRDetailedView.deleteLR(); - } catch (CannotExecuteException e) { - break; - } - lRDetailedView = learningResources.searchResource(resourceTitle, author); - } - Thread.sleep(1000); - } - -} \ No newline at end of file diff --git a/src/test/java/org/olat/test/functional/course/run/EditAndConfigureBlogTest.java b/src/test/java/org/olat/test/functional/course/run/EditAndConfigureBlogTest.java deleted file mode 100644 index ba196120cf1..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/EditAndConfigureBlogTest.java +++ /dev/null @@ -1,183 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.run; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.BlogEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.run.BlogRun; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests the Blog BB and Blog Editor. - * <br/> - * <p> - * Test setup:<br/> - * 1. import Course "Course_with_all_bb.zip" <br/> - * 2. enter title "EditBlogCourse" <br/> - * 3. enter description "Edit And Configure Blog Test Course" <br/> - * <p> - * Test case: <br/> - * 1. login as author and go to tab learning resources <br/> - * 2. start course editor <br/> - * 3. click on publish course <br/> - * 4. select "Blog intern" <br/> - * 5. click "Next" <br/> - * 6. set permission "All registered OLAT users" <br/> - * 7. click "Finish" <br/> - * 8. close editor <br/> - * 9. run course <br/> - * 10. select BB "Blog intern" <br/> - * 11. click on "Create new entry" <br/> - * 12. enter title "ABlogEntryTitle" <br/> - * 13. enter description "A Blog Entry Description" <br/> - * 14. enter content "This is my short blog posting draft" <br/> - * 15. click on save draft <br/> - * 16. assure is visible "This is only a draft." <br/> - * 17. click on "Edit entry" <br/> - * 18. enter "This is my short blog posting and i like to share it with you." <br/> - * 19. click on "Publish" <br/> - * 20. assure is not visible "This is only a draft." <br/> - * 21. click on "Comments (0)" for comment <br/> - * 22. enter comment "I really enjoyed writing this." <br/> - * 23. click save <br/> - * 24. assure visible "Comments (1)" <br/> - * 25. start course editor <br/> - * 26. select BB "Blog intern" <br/> - * 27. uncheck "Blocked for learners" from section "Present" <br/> - * 28. click save <br/> - * 29. uncheck "Blocked for learners" from section "Read and Write" <br/> - * 30. click save <br/> - * 31. click publish <br/> - * 32. select "Blog intern" <br/> - * 33. click "Next" <br/> - * 34. click "Finish" <br/> - * 35. logout as author <br/> - * - * 36. login as student and go to tab learning resources <br/> - * 38. click "Search form" <br/> - * 39. enter "EditBlogCourse" <br/> - * 40. run course <br/> - * 41. select BB "Blog intern" <br/> - * 42. click Create new entry <br/> - * 43. click on "Create new entry" <br/> - * 44. enter title "StudiBlogTitle" <br/> - * 45. enter description "A Student Blog Entry Description" <br/> - * 46. enter content "This is a student's short blog posting" <br/> - * 47. click on "Publish" <br/> - * 48. assure is visible "A Student Blog Entry Description" <br/> - * 49. close course <br/> - * 50. logout as student <br/> - * - * 51. login as author and go to tab learning resources <br/> - * 52. go to tab learning resources <br/> - * 53. click "Search form" <br/> - * 54. enter "EditBlogCourse" <br/> - * 55. click on "Detailed view" for "EditBlogCourse" <br/> - * 56. click on "Delete" <br/> - * 57. logout <br/> - * - * - * </p> - * - * @author Alberto Sanz - * - */ - -public class EditAndConfigureBlogTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "Course_with_all_bb.zip"; - private final String COURSE_NAME_PREFIX = "EditAndConfigureBlog-"; - private final String COURSE_NAME = COURSE_NAME_PREFIX+System.currentTimeMillis(); - - private final String BLOG_INTERN = "Blog intern"; - private final String BLOG_ENTRY_TITLE = "ABlogEntryTitle"; - private final String BLOG_ENTRY_DESCRIPTION = "A Blog Entry Description"; - private final String BLOG_ENTRY_CONTENT1 = "This is my short blog posting draft"; - private final String BLOG_ENTRY_CONTENT2 = "This is my short blog posting and i like to share it with you."; - private final String BLOG_ENTRY_COMMENT = "I really enjoyed writing this."; - - private final String BLOG_ENTRY_STUDENT = "StudiBlogTitle"; - private final String BLOG_ENTRY_STUDENT_DESCRIPTION = "A Student Blog Entry Description"; - private final String BLOG_ENTRY_STUDENT_CONTENT = "This is a student's short blog posting"; - - - - @Override - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //cleanup first - WorkflowHelper.deleteLearningResources(context.getStandardAdminOlatLoginInfos(1).getUsername(), COURSE_NAME_PREFIX); - - //import course - File file = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - WorkflowHelper.importCourse(file, COURSE_NAME, COURSE_NAME_PREFIX); - - //assign owner - OLATWorkflowHelper workflowAdmin = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - workflowAdmin.getLearningResources().searchMyResource(COURSE_NAME).assignOwner(context.getStandardAuthorOlatLoginInfos(1).getUsername()); - } - - - - public void testEditAndConfigureBlog() throws Exception { - Context context = Context.getContext(); - - OLATWorkflowHelper workflowAuthor = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - CourseEditor courseEditor = workflowAuthor.getLearningResources().showCourseContent(COURSE_NAME).getCourseEditor(); - courseEditor.publishCourse(); - CourseRun courseRun = courseEditor.closeToCourseRun(); - BlogRun blogRun = courseRun.selectBlog(BLOG_INTERN); - assertNotNull(blogRun); - blogRun.createEntry(BLOG_ENTRY_TITLE, BLOG_ENTRY_DESCRIPTION, BLOG_ENTRY_CONTENT1, false); - assertTrue(blogRun.hasDraft(BLOG_ENTRY_TITLE)); - blogRun.editEntry(BLOG_ENTRY_TITLE, null, BLOG_ENTRY_CONTENT2, true); - assertFalse(blogRun.hasDraft(BLOG_ENTRY_TITLE)); - assertTrue(blogRun.hasComments(BLOG_ENTRY_TITLE,0)); - blogRun.commentEntry(BLOG_ENTRY_TITLE, BLOG_ENTRY_COMMENT); - assertTrue(blogRun.hasComments(BLOG_ENTRY_TITLE,1)); - CourseEditor courseEditor2 = courseRun.getCourseEditor(); - BlogEditor blogEditor = (BlogEditor)courseEditor2.selectCourseElement(BLOG_INTERN); - blogEditor.changeAccessBlockedForLearners(CourseElementEditor.ACCESS_TYPE.PRESENT); - blogEditor.changeAccessBlockedForLearners(CourseElementEditor.ACCESS_TYPE.READ_AND_WRITE); - courseEditor2.publishCourse(); - workflowAuthor.logout(); - - //student - OLATWorkflowHelper workflowStudent = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - CourseRun courseRun2 = workflowStudent.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - BlogRun blogRun2 = courseRun2.selectBlog(BLOG_INTERN); - blogRun2.createEntry(BLOG_ENTRY_STUDENT, BLOG_ENTRY_STUDENT_DESCRIPTION, BLOG_ENTRY_STUDENT_CONTENT, true); - assertTrue(blogRun2.isTextPresent(BLOG_ENTRY_STUDENT_DESCRIPTION)); - workflowStudent.logout(); - - //cleanup: none, it is done in setup. We might want to have a look at this course if the test failed!!! - - } -} diff --git a/src/test/java/org/olat/test/functional/course/run/EditAndConfigurePodcastTest.java b/src/test/java/org/olat/test/functional/course/run/EditAndConfigurePodcastTest.java deleted file mode 100644 index 587bd8499fd..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/EditAndConfigurePodcastTest.java +++ /dev/null @@ -1,205 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.run; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.editor.PodcastEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.PodcastRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests the Podcast BB and Podcast Editor. Also tests issue OLAT-5767 - * <br/> - * <p> - * Test setup: <br/> - * 1. import Course "Course_with_all_bb.zip" <br/> - * 2. enter title "EditPodcastCourse" <br/> - * 3. enter description "Edit And Configure Podcast Test Course" <br/> - * <p> - * Test case: <br/> - * *--- AS AUTHOR: ---* - * login as author and go to tab learning resources <br/> - * start course editor <br/> - * click on publish course <br/> - * select "Podcast intern" <br/> - * click "Next" <br/> - * set permission "All registered OLAT users" <br/> - * click "Finish" <br/> - * close editor <br/> - * run course <br/> - * select BB "Podcast intern" <br/> - * click on "Add episode" <br/> - * enter title "First Podcast" <br/> - * enter description "A Podcast Entry Description" <br/> - * click on "Select file" <br/> - * select mp3 audio file <br/> - * assure is visible "audio" and "A Podcast Entry Description" <br/> - * click on "Edit episode" <br/> - * enter description "A modified Podcast Entry Description" <br/> - * click on "Publish" <br/> - * assure is visible "A modified Podcast Entry Description" <br/> - * click on "Comments (0)" for comment <br/> - * enter comment "I really enjoyed recording this." <br/> - * click save <br/> - * assure visible "Comments (1)" <br/> - * start course editor <br/> - * select BB "Podcast intern" <br/> - * click on access tab and uncheck "Blocked for learners" from section "Present" <br/> - * click save <br/> - * uncheck "Blocked for learners" from section "Read and Write" <br/> - * click save <br/> - * click publish <br/> - * select "Podcast intern" <br/> - * click "Next" <br/> - * click "Finish" <br/> - * close editor <br/> - * *--- AS STUDENT: ---* - * login as student and go to tab learning resources <br/> - * click "Search form" <br/> - * enter "EditPodcastCourse" <br/> - * run course <br/> - * select BB "Podcast intern" <br/> - * assure is visible "A modified Podcast Entry Description" <br/> - * click on "Add episode" - * enter title "A Studi Podcast" <br/> - * enter description "A Student Podcast Entry Description" <br/> - * select mp3 audio file <br/> - * click on "Publish" <br/> - * assure is visible "audio" and "A Student Podcast Entry Description" <br/> - * *--- CONTINUE AS AUTHOR: ---* - * select BB "Podcast intern" <br/> - * assure is visible "audio" and "A Student Podcast Entry Description" <br/> - * click on "Add episode" - * enter title "My Second Podcast" - * enter desription "Can students still read this Podcast" <br/> - * select mp3 audio file <br/> - * click on "Publish" <br/> - * assure is visible "Can students still read this Podcast" <br/> - * *--- CONTINUE AS STUDENT: ---* - * select BB "Podcast intern" <br/> - * assure is visible "Can students still read this Podcast" <br/> - * *--- CONTINUE AS AUTHOR: ---* - * go to tab learning resources <br/> - * click "Search form" <br/> - * enter "EditBlogCourse" <br/> - * click on "Detailed view" for "EditBlogCourse" <br/> - * click on "Delete" <br/> - * logout <br/> - * - * </p> - * - * @author Alberto Sanz - * - */ - -public class EditAndConfigurePodcastTest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "Course_with_all_bb.zip"; - private final String COURSE_NAME_PREFIX = "EditPodcastCourse-"; - private final String COURSE_NAME = COURSE_NAME_PREFIX+System.currentTimeMillis(); - - private final String PODCAST_INTERN = "Podcast intern"; - private final String PODCAST_EPISODE_TITLE = "First Podcast"; - private final String PODCAST_EPISODE_DESCRIPTION = "A Podcast Entry Description"; - private final String PODCAST_EPISODE_DESCRIPTION_MODIFIED = "A MODIFIED Podcast Entry Description"; - private final String AUDIO_FILE_NAME = "Mp3.mp3"; - private final String EPISODE_COMMENT = "I really enjoyed recording this this."; - - private final String PODCAST_EPISODE_2_TITLE = "A Studi Podcast"; - private final String PODCAST_EPISODE_2_DESCRIPTION = "A Student Podcast Entry Description"; - - private final String PODCAST_EPISODE_3_TITLE = "My Second Podcast"; - private final String PODCAST_EPISODE_3_DESCRIPTION = "Can students still read this Podcast"; - - - - @Override - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //cleanup first - WorkflowHelper.deleteLearningResources(context.getStandardAdminOlatLoginInfos(1).getUsername(), COURSE_NAME_PREFIX); - - //import course - File file = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - WorkflowHelper.importCourse(file, COURSE_NAME, COURSE_NAME_PREFIX); - - //assign owner - OLATWorkflowHelper workflowAdmin = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - workflowAdmin.getLearningResources().searchMyResource(COURSE_NAME).assignOwner(context.getStandardAuthorOlatLoginInfos(1).getUsername()); - } - - public void testEditAndConfigurePodcast() throws Exception { - Context context = Context.getContext(); - - //author - OLATWorkflowHelper workflowAuthor = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - CourseEditor courseEditor = workflowAuthor.getLearningResources().showCourseContent(COURSE_NAME).getCourseEditor(); - courseEditor.publishCourse(); - CourseRun courseRun = courseEditor.closeToCourseRun(); - PodcastRun podcastRun = courseRun.selectPodcast(PODCAST_INTERN); - - File mp3File = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + AUDIO_FILE_NAME); - String remoteFilePath = Context.getContext().provideFileRemotely(mp3File); - podcastRun.createEpisode(PODCAST_EPISODE_TITLE, PODCAST_EPISODE_DESCRIPTION, remoteFilePath); - assertTrue(podcastRun.isTextPresent("audio")); - assertTrue(podcastRun.isTextPresent(PODCAST_EPISODE_DESCRIPTION)); - podcastRun.editEpisode(PODCAST_EPISODE_TITLE, PODCAST_EPISODE_DESCRIPTION_MODIFIED, null); - assertTrue(podcastRun.isTextPresent(PODCAST_EPISODE_DESCRIPTION_MODIFIED)); - podcastRun.commentEpisode(PODCAST_EPISODE_TITLE, EPISODE_COMMENT); - assertTrue(podcastRun.hasComments(PODCAST_EPISODE_TITLE, 1)); - - CourseEditor courseEditor1 = courseRun.getCourseEditor(); - PodcastEditor podcastEditor = (PodcastEditor)courseEditor1.selectCourseElement(PODCAST_INTERN); - podcastEditor.changeAccessBlockedForLearners(CourseElementEditor.ACCESS_TYPE.PRESENT); - podcastEditor.changeAccessBlockedForLearners(CourseElementEditor.ACCESS_TYPE.READ_AND_WRITE); - courseEditor1.publishCourse(); - CourseRun courseRun1 = courseEditor1.closeToCourseRun(); - - //student - OLATWorkflowHelper workflowStudent = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - CourseRun courseRun2 = workflowStudent.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - PodcastRun podcastRun2 = courseRun2.selectPodcast(PODCAST_INTERN); - assertTrue(podcastRun2.isTextPresent(PODCAST_EPISODE_DESCRIPTION_MODIFIED)); - podcastRun2.createEpisode(PODCAST_EPISODE_2_TITLE, PODCAST_EPISODE_2_DESCRIPTION, remoteFilePath); - assertTrue(podcastRun2.isTextPresent("audio")); - assertTrue(podcastRun2.isTextPresent(PODCAST_EPISODE_2_DESCRIPTION)); - - //author - PodcastRun podcastRun1 = courseRun1.selectPodcast(PODCAST_INTERN); - assertTrue(podcastRun1.isTextPresent("audio")); - assertTrue(podcastRun1.isTextPresent(PODCAST_EPISODE_2_DESCRIPTION)); - podcastRun1.createEpisode(PODCAST_EPISODE_3_TITLE, PODCAST_EPISODE_3_DESCRIPTION, remoteFilePath); - assertTrue(podcastRun1.isTextPresent(PODCAST_EPISODE_3_DESCRIPTION)); - - //student - podcastRun2 = courseRun2.selectPodcast(PODCAST_INTERN); - assertTrue(podcastRun2.isTextPresent(PODCAST_EPISODE_3_DESCRIPTION)); - } -} diff --git a/src/test/java/org/olat/test/functional/course/run/EditInfoMessageTest.java b/src/test/java/org/olat/test/functional/course/run/EditInfoMessageTest.java deleted file mode 100644 index 212c961c6e1..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/EditInfoMessageTest.java +++ /dev/null @@ -1,241 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ - -package org.olat.test.functional.course.run; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.InfoMessageRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Description:<br> - * - * - * <P> - * Initial Date: 4. jan 2011 <br> - * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com - */ -public class EditInfoMessageTest extends BaseSeleneseTestCase { - - - private static final String COURSE_NAME = "Messages Course"; - private static final String INFO_MESSAGE_NAME = "Special messages"; - - public void setUp() throws Exception { - //each test has to setup a context - Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - } - - /** - * Login, create an empty, logout, login, go to Learning resources, select Courses, select "Messages Course", - * Show content, open Course Editor, insert a Info message course element, publish course, add messages, - * count if the messages are there, show older messages, count the messages, show current messages, count - * the messages. - * - * @throws Exception - */ - @Test - public void testNewInfoMessages() throws Exception { - //delete old courses - WorkflowHelper.deleteAllCoursesNamed(COURSE_NAME); - - //Get a workflow object for the default administrator user. - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - - //create to learning resources and the course named COURSE_NAME, get a CourseRun object - workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_NAME).publishCourse(); - workflow.logout(); - - //add standard author as owner - workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - workflow.getLearningResources().searchMyResource(COURSE_NAME).assignOwner(Context.getContext().getStandardAuthorOlatLoginInfos(1).getUsername()); - workflow.logout(); - - workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - - //go to the course editor - CourseEditor courseEditor = courseRun.getCourseEditor(); - - //insert a course element of type info message, with a specified title - CourseElementEditor courseElementEditor = courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.INFO_MESSAGE, true, INFO_MESSAGE_NAME); - assertTrue(courseElementEditor.isTextPresent(INFO_MESSAGE_NAME)); - - //publish course - courseEditor.publishCourse(); - - //create a message - courseRun = courseEditor.closeToCourseRun(); - InfoMessageRun infoRun = courseRun.selectInfoMessage(INFO_MESSAGE_NAME); - infoRun.createMessage("Hello 0", "Hello world 0"); - - //create 11 messages more - for(int i=1; i<12; i++) { - infoRun.createMessage("Hello " + i, "Hello world " + i); - } - - int found1 = countMessages(infoRun); - assertEquals(10, found1); - - //show and count all messages - infoRun.showOlderMessage(); - int found2 = countMessages(infoRun); - assertEquals(12, found2); - - //show and count current messages - infoRun.showCurrentMessage(); - int found3 = countMessages(infoRun); - assertEquals(10, found3); - - //edit first message - infoRun.editFirstMessage(); - assertTrue(infoRun.isMessageEdited()); - infoRun.save(); - - //delete first message - infoRun.deleteFirstMessage(); - infoRun.yes(); - infoRun.showOlderMessage(); - int found4 = countMessages(infoRun); - assertEquals(11, found4); - - //logout - workflow.logout(); - } - - /** - * Login with the standard admin and the standard author, open "Messages Course", - * open course building block "Messages", standard admin edit a message, author try to edit the same message, - * and try to delete it. The main goal of this test is to check if the lock are correctly set and released. - * @throws Exception - */ - @Test(dependsOnMethods={"testNewInfoMessages"}) - public void testConcurrentEditMessage() throws Exception { - //Get a workflow object for the default administrator. - OLATWorkflowHelper workflow1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - CourseRun courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - InfoMessageRun infoRun1 = courseRun1.selectInfoMessage(INFO_MESSAGE_NAME); - - int found1 = countMessages(infoRun1); - assertEquals(10, found1); - - //Get a workflow object for the default author. - OLATWorkflowHelper workflow2 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - CourseRun courseRun2 = workflow2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - InfoMessageRun infoRun2 = courseRun2.selectInfoMessage(INFO_MESSAGE_NAME); - - int found2 = countMessages(infoRun2); - assertEquals(10, found2); - - //check the locks on the messages - - //admin edit a message - infoRun1.editFirstMessage(); - assertTrue(infoRun1.isMessageEdited()); - //author try to edit the same message - infoRun2.editFirstMessage(); - assertTrue(infoRun2.isMessageAlreadyEdited()); - infoRun2.dialogOk(); - //author try to delete the same message - infoRun2.deleteFirstMessage(); - assertTrue(infoRun2.isMessageAlreadyEdited()); - infoRun2.dialogOk(); - //admin save the edit box - infoRun1.save(); - - - //author edit a message - infoRun2.editFirstMessage(); - assertTrue(infoRun2.isMessageEdited()); - //admin try to edit - infoRun1.editFirstMessage(); - assertTrue(infoRun1.isMessageAlreadyEdited()); - infoRun1.dialogOk(); - //author close the overlay - infoRun2.close(); - - - //admin edit a message - infoRun1.editFirstMessage(); - assertTrue(infoRun1.isMessageEdited()); - //author try to edit - infoRun2.editFirstMessage(); - assertTrue(infoRun2.isMessageAlreadyEdited()); - infoRun2.dialogOk(); - //admin close the overlay - infoRun1.cancel(); - - - //author edit a message - infoRun2.editFirstMessage(); - assertTrue(infoRun2.isMessageEdited()); - infoRun2.cancel(); - - //logout - workflow1.logout(); - workflow2.logout(); - } - - /** - * Test the possibility to create, edit and delete a message with a standard student (cannot) - * and the author (can). - */ - @Test(dependsOnMethods={"testConcurrentEditMessage"}) - public void testSecurityBasics() { - //Get a workflow object for the default student. - OLATWorkflowHelper workflow1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardStudentOlatLoginInfos(1)); - CourseRun courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - InfoMessageRun infoRun1 = courseRun1.selectInfoMessage(INFO_MESSAGE_NAME); - - //it cannot edit or delete a message - assertFalse(infoRun1.canCreateMessage()); - assertFalse(infoRun1.canEditMessage()); - assertFalse(infoRun1.canDeleteMessage()); - - - //Get a workflow object for the default author. - OLATWorkflowHelper workflow2 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - CourseRun courseRun2 = workflow2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - InfoMessageRun infoRun2 = courseRun2.selectInfoMessage(INFO_MESSAGE_NAME); - - //it cannot edit or delete a message - assertTrue(infoRun2.canCreateMessage()); - assertTrue(infoRun2.canEditMessage()); - assertTrue(infoRun2.canDeleteMessage()); - } - - private int countMessages(InfoMessageRun infoRun) { - int found = 0; - for(int i=0; i<12; i++) { - if(infoRun.hasMessage("Hello " + i)) { - found++; - } - } - return found; - } -} diff --git a/src/test/java/org/olat/test/functional/course/run/UploadFilesInCourseTest.java b/src/test/java/org/olat/test/functional/course/run/UploadFilesInCourseTest.java deleted file mode 100644 index b583a686212..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/UploadFilesInCourseTest.java +++ /dev/null @@ -1,161 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.run; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.SinglePageEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.FileDialog; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.course.run.Forum; -import org.olat.test.util.selenium.olatapi.course.run.WikiRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests file upload for Folder, SinglePage, Forum, Wiki and FileDialog. - * <br/> - * <p> - * Test setup:<br/> - * clean up before start <br/> - * Import files <br/> - * <p> - * Test case:<br/> - * Import files <br/> - * Open course <br/> - * Open editor, storage folder and delete existing html-file <br/> - * Attach deleted single page again and check in preview <br/> - * Go to forum and create a new message with two file attachments - - check if uploaded properly and delete again <br/> - * Go to wiki and upload a pdf file to be linked in the wiki - - check if there <br/> - * Delete course and all attached resources <br/> - * - * - * - * - * - * @author hjzuber - * - */ -public class UploadFilesInCourseTest extends BaseSeleneseTestCase { - - public void testUploadFiles() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - -//Import files - File course = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + "Course_with_all_bb.zip"); - assertNotNull("Could not locate the course zip!", course); - assertTrue("file "+course.getAbsolutePath()+" not found!", course.exists()); - String courseTitle = "CourseImportTestCourse-"+System.currentTimeMillis(); - WorkflowHelper.importCourse(course, courseTitle, "Whatever right?"); - - File html = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + "first.html"); - File doc = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + "Word.doc"); - File docx = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + "Word_new.docx"); - File pdf = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + "Pdf.pdf"); - String remoteHtml = Context.getContext().provideFileRemotely(html); - String remoteDoc = Context.getContext().provideFileRemotely(doc); - String remoteDocx = Context.getContext().provideFileRemotely(docx); - String remotePdf = Context.getContext().provideFileRemotely(pdf); - - -//Open course - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(courseTitle); - Thread.sleep(3000); - //Open editor, storage folder and delete existing html-file - CourseEditor courseEditor = courseRun.getCourseEditor(); - Folder storageFolder = courseEditor.storageFolder(); - storageFolder.deleteItem("first.html"); - courseEditor = storageFolder.closeStorageFolder(); - //Attach deleted single page again and check in preview - //single page is always inframe since 25.05.2010 - SinglePageEditor singlePageEditor = (SinglePageEditor)courseEditor.selectCourseElement("Single page - inline"); - singlePageEditor.replacePage(SinglePageEditor.SELECT_TYPE.UPLOAD_TO_STORAGE_FOLDER, remoteHtml); - singlePageEditor.preview(); - Thread.sleep(5000); - courseRun.getSelenium().selectFrame("//iframe[contains(@src,'first.html')]"); - assertTrue(singlePageEditor.isTextPresent("This is the first page")); - courseRun.getSelenium().selectFrame("relative=top"); - singlePageEditor.closePreview(); - - //Go to forum and create a new message with two file attachments - check if uploaded properly and delete again - courseRun = courseEditor.closeToCourseRun(); - Forum forum = courseRun.selectForum("Forum"); - forum.openNewTopic("Yes we want to upload", "two Word files"); - forum.attachFileToMsg(remoteDoc); - Thread.sleep(1000); - assertTrue(forum.isTextPresent("Word.doc")); - forum.attachFileToMsg(remoteDocx); - Thread.sleep(1000); - assertTrue(forum.isTextPresent("Word_new.docx")); - forum.deleteAttachedFile("Word_new.docx"); - //Go to wiki and upload a pdf file to be linked in the wiki - check if there - WikiRun wikiRun = courseRun.selectWiki("Wiki"); - wikiRun.insertMedia(remotePdf, "Pdf.pdf"); - Thread.sleep(1000); - assertTrue(wikiRun.isTextPresent("Media:Pdf.pdf")); - - FileDialog fileDialog = courseRun.selectFileDialog("File dialog"); - fileDialog.uploadFile(remotePdf); - Thread.sleep(1000); - assertTrue(courseRun.isTextPresent("Pdf.pdf")); - fileDialog.deleteSingleFile(); - - Folder folder = courseRun.selectFolder("Folder"); - folder.uploadFile(null, remoteDoc); - assertTrue(folder.isTextPresent("Word.doc")); - - //Delete course and all attached resources - courseRun.getDetailedView().deleteLR(); - - deleteResource(workflow, "fois_CSCW_de_scorm"); - deleteResource(workflow, "MESOS_EXDE_EINF"); - - deleteResource(workflow, "repo_1"); - deleteResource(workflow, "repo_2"); - deleteResource(workflow, "repo_3"); - deleteResource(workflow, "test Wiki"); - deleteResource(workflow, "Glossary"); - deleteResource(workflow, "Resource folder"); - - } - - /** - * Deletes resource with the given name, having the administrator as author. - * Filter for the author as well, else won't work for selenium load. - * @param workflow - * @param title - */ - private void deleteResource(OLATWorkflowHelper workflow, String title) { - LRDetailedView lRDetailedView = workflow.getLearningResources().searchResource(title, Context.getContext().getStandardAdminOlatLoginInfos(1).getUsername()); - if(lRDetailedView!=null) { - lRDetailedView.deleteLR(); - } - } -} diff --git a/src/test/java/org/olat/test/functional/course/run/UseLTITest.java b/src/test/java/org/olat/test/functional/course/run/UseLTITest.java deleted file mode 100644 index 71bbdd7503e..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/UseLTITest.java +++ /dev/null @@ -1,172 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.run; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.LTIPageEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.user.UserSettings; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests the LTI BB: insert, configure, launch. - * <br/> - * <p> - * Test setup:<br/> - * import Course "Course_with_all_bb.zip" - * enter title "LTIUseTestCourse" - * enter description "Edit And Configure LTI Test Course" - * <p> - * Test case: <br/> - * - * ------------- as author ------------------- <br/> - * login as author and go to tab learning resources <br/> - * start course editor <br/> - * go to BB "LTI Example" <br/> - * click on tab "Page content" <br/> - * enter "URL": http://www.imsglobal.org/developers/BLTI/tool.php <br/> - * enter "Key": lmsng.school.edu <br/> - * enter "Password": secret <br/> - * uncheck "Send name to supplier" <br/> - * uncheck "Send e-mail address to supplier" <br/> - * check "Show information sent" <br/> - * click "Save" <br/> - * click "Show Preview" <br/> - * assure authors name and lastname are NOT visible <br/> - * assure authors email is NOT visible <br/> - * click on "Close Preview" <br/> - * check "Send name to supplier" <br/> - * check "Send e-mail address to supplier" <br/> - * click "Save" <br/> - * click "Show Preview" <br/> - * assure authors name and lastname are visible <br/> - * assure authors email is visible <br/> - * click on "Close Preview" <br/> - * click on "LTI page" from "Insert course elements" navigation <br/> - * insert the new LTI BB to the course tree structure <br/> - * go to new BB "LTI Page" <br/> - * click on tab "Page content" <br/> - * enter "URL": URL": http://www.imsglobal.org/developers/BLTI/tool.php <br/> - * enter "Key": lmsng.school.edu <br/> - * enter "Password": secret <br/> - * check "Show information sent" <br/> - * click "Save" <br/> - * click "Publish" from "Editor tools" <br/> - * select "LTI Example" <br/> - * select "LTI Page" <br/> - * click "Next" <br/> - * set permission "All registered OLAT users" <br/> - * click "Finish" <br/> - * close course editor <br/> - * - * --------- as student ------------- <br/> - * login as student and go to tab learning resources <br/> - * search for course with title "LTIUseTestCourse" <br/> - * run course <br/> - * click on "LTI Example" from the Course Navigation <br/> - * click "Launch Endpoint with BasicLTI Data" <br/> - * assure "Launch Endpoint with BasicLTI Data" is visible <br/> - * click on "LTI Page" from the Course Navigation <br/> - * assure "Launch Endpoint with BasicLTI Data" is visible <br/> - * close course <br/> - * </p> - * - * @author Alberto Sanz - * - */ - -public class UseLTITest extends BaseSeleneseTestCase { - - private final String IMPORTABLE_COURSE_PATH = Context.FILE_RESOURCES_PATH + "Course_with_all_bb.zip"; - private final String COURSE_NAME_PREFIX = "LTIUseTestCourse"; - private final String COURSE_NAME = COURSE_NAME_PREFIX+System.currentTimeMillis(); - //private final static String COURSE_DESCRIPTION = "Edit And Configure LTI Test Course"; - - private final static String LTI_ELEM_NAME = "LTI Example"; - private final static String URL = "http://www.imsglobal.org/developers/BLTI/tool.php"; - private final static String KEY = "lmsng.school.edu"; - private final static String PASSWORD = "secret"; - - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //cleanup first - WorkflowHelper.deleteLearningResources(context.getStandardAdminOlatLoginInfos(1).getUsername(), COURSE_NAME_PREFIX); - - //import course - File file = WorkflowHelper.locateFile(IMPORTABLE_COURSE_PATH); - WorkflowHelper.importCourse(file, COURSE_NAME, COURSE_NAME_PREFIX); - - //assign owner - OLATWorkflowHelper workflowAdmin = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - workflowAdmin.getLearningResources().searchMyResource(COURSE_NAME).assignOwner(context.getStandardAuthorOlatLoginInfos(1).getUsername()); - } - - public void testEditAndConfigureLTI() throws Exception { - Context context = Context.getContext(); - - OlatLoginInfos authorOlatLoginInfos = context.getStandardAuthorOlatLoginInfos(1); - - OLATWorkflowHelper workflowAdmin = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - UserSettings userSettings = workflowAdmin.getUserManagement().selectUser(authorOlatLoginInfos.getUsername()); - String authorEmail = userSettings.getEmail(); - //author - - OLATWorkflowHelper workflowAuthor = context.getOLATWorkflowHelper(authorOlatLoginInfos); - //CourseEditor courseEditor = workflowAuthor.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - //LTIPageEditor lTIPageEditor = (LTIPageEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.LTI_PAGE, true, LTI_ELEM_NAME); - CourseEditor courseEditor = workflowAuthor.getLearningResources().searchAndShowCourseContent(COURSE_NAME).getCourseEditor(); - LTIPageEditor lTIPageEditor = (LTIPageEditor)courseEditor.selectCourseElement(LTI_ELEM_NAME); - lTIPageEditor.configurePage(URL, KEY, PASSWORD, false, false, true); - LTIPageEditor.LTIPreview preview = lTIPageEditor.showPreview(); - - assertFalse(preview.hasInfo(authorEmail)); - lTIPageEditor = preview.closePreview(); - lTIPageEditor.configurePage(null, null, null, true, true, false); - - LTIPageEditor.LTIPreview preview2 = lTIPageEditor.showPreview(); - assertTrue(preview2.hasInfo(authorEmail)); - preview2.closePreview(); - - LTIPageEditor lTIPageEditor2 = (LTIPageEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.LTI_PAGE, true, null); - lTIPageEditor2.configurePage(URL, KEY, PASSWORD, false, false, true); - - courseEditor.publishCourse(); - courseEditor.closeToCourseRun(); - - //student - OLATWorkflowHelper olatWorkflowStudent = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - CourseRun courseRun = olatWorkflowStudent.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - courseRun.selectLTI(LTI_ELEM_NAME).launch(); - - courseRun.selectLTI(CourseEditor.LTI_TITLE).launch(); - olatWorkflowStudent.logout(); - - } -} diff --git a/src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step1.html b/src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step1.html deleted file mode 100644 index 8797b35848e..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step1.html +++ /dev/null @@ -1,152 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="http://demo.olat.org/olat/dmz//olat/dmz//" /> -<title>TestAssessmentTest_01</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">TestAssessmentTest_01</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz//olat/dmz///olat/dmz/</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author03</td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::password()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_clickCourseEntry(nameOfCourse=AssessmentTool)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_assessmentTool()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectType(text=As per user)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectUser(username=student03)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectAssessmentCourseNode(title=Test 0)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=course::assessment_setScore()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::assessment_setScore()</td> - <td>3</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_back()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectType(text=As per user)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectUser(username=student2)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectAssessmentCourseNode(title=Test 1)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=course::assessment_setScore()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::assessment_setScore()</td> - <td>4</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_closeAssessmentTool()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::closeCourse(nameOfCourse=AssessmentTool)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step2.html b/src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step2.html deleted file mode 100644 index c525dd9e75f..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step2.html +++ /dev/null @@ -1,102 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="http://demo.olat.org/olat/dmz//olat/dmz//" /> -<title>TestAssessmentTest_02</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">TestAssessmentTest_02</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz//olat/dmz///olat/dmz/</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>admin03</td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::password()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_clickCourseEntry(nameOfCourse=AssessmentTool)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_groupManagement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::menu_allMembers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_userlist_clickUserName(nameOfUser=author03)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::content_userDetails_removeFromGroup(nameOfGroup=Gruppe 2)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_close()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::closeCourse(nameOfCourse=AssessmentTool)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step3.html b/src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step3.html deleted file mode 100644 index f642896cffc..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/assessmentTool_RemoveTutor_step3.html +++ /dev/null @@ -1,132 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="http://demo.olat.org/olat/dmz//olat/dmz//" /> -<title>TestAssessmentTest_03</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">TestAssessmentTest_03</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz//olat/dmz///olat/dmz/</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author03</td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::password()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_clickCourseEntry(nameOfCourse=AssessmentTool)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_assessmentTool()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectType(text=As per user)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectUser(username=student03)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectAssessmentCourseNode(title=Test 0)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=course::assessment_setScore()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::assessment_setScore()</td> - <td>3</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_back()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectType(text=As per user)</td> - <td></td> -</tr> -<tr> - <td>assertTextNotPresent</td> - <td>student2</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=course::assessment_closeAssessmentTool()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::closeCourse(nameOfCourse=AssessmentTool)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/course/run/course_run_access_visibility.html b/src/test/java/org/olat/test/functional/course/run/course_run_access_visibility.html deleted file mode 100644 index 5dc95a4619c..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/course_run_access_visibility.html +++ /dev/null @@ -1,616 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>course_run_access_visibility</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">course_run_access_visibility</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz/?o_winrndo=1</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_create_wiki()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_title()</td> - <td>av_wiki</td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_description()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_description()</td> - <td>course run test</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_create_course()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_title()</td> - <td>Access_Visibility</td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_description()</td> - <td>course run test</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_startYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertFolder()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertForum()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertWiki()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAssessment()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::menu_link(link=Wiki)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbWiki_tabWikiLearningContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbWiki_chooseWiki()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbWiki_chooseWikiSearch_myEntries()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbWiki_chooseWikiSearch_chooseWiki(nameOfWiki=av_wiki)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_closeEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_learningResource_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_groupManagement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_newLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_name()</td> - <td>lg av 1</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_members_tabMembers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_participants_addUsers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>student01</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=student01)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_close()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_courseEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::menu_link(link=Forum)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_tabVisibility()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_dependingGroup()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_selectLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=lg av 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::menu_link(link=Folder)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_tabVisibility()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_dependingGroup()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_selectLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=lg av 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Assessment)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_access_tabAccess()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_access_dependingGroup()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_access_selectLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=lg av 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_access_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_tabVisibility()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_editInformation()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_visibility_infoField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=courseEditor::content_visibility_infoField()</td> - <td>this forum is only accessible to learning group members</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_saveInfo()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Wiki)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_tabVisibility()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_dependingAssessment()</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=courseEditor::content_visibility_selectElement()</td> - <td>label=Assessment*</td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_visibility_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_publish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_selectall()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td>label=All registered OLAT users</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_finish()</td> - <td></td> -</tr> -<!--now student01--> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz/?o_winrndo=1</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_searchForm()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>search mask learning resources title</td> - <td>Access_Visibility</td> -</tr> -<tr> - <td>click</td> - <td>search button</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=Access_Visibility)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_generalTools_setBookmark()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>assertElementPresent</td> - <td>Folder</td> - <td></td> -</tr> -<tr> - <td>assertElementPresent</td> - <td>Forum</td> - <td></td> -</tr> -<tr> - <td>assertElementPresent</td> - <td>Assessment</td> - <td></td> -</tr> -<tr> - <td>assertElementNotPresent</td> - <td>Wiki</td> - <td></td> -</tr> -<!--now student02--> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Assessment)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>this assessment is only accessible to learning group members</td> - <td></td> -</tr> -<!--author01 in assessment tool--> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_assessmentTool()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectType(text=As per user)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectUser(username=student01)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::assessment_selectAssessmentCourseNode(title=Assessment)</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=course::assessment_setPassed()</td> - <td>label=Yes</td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<!--student01 can now see wiki--> -<tr> - <td>click</td> - <td>ui=course::menu_root(nameOfCourse=Access_Visibility)</td> - <td></td> -</tr> -<tr> - <td>assertElementPresent</td> - <td>Wiki</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/course/run/course_run_concurrent_edit_course_nodes.html b/src/test/java/org/olat/test/functional/course/run/course_run_concurrent_edit_course_nodes.html deleted file mode 100644 index 26699f8b01f..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/course_run_concurrent_edit_course_nodes.html +++ /dev/null @@ -1,487 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>course_run_concurrent_edit_course_nodes</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">course_run_concurrent_edit_course_nodes</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz/</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_create_wiki()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_title()</td> - <td>concurrent edit</td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_description()</td> - <td>selenium</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_create_course()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_title()</td> - <td>concurrent edit course</td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_description()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_description()</td> - <td>selenium</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_startYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertForum()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertWiki()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbWiki_tabWikiLearningContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbWiki_chooseWiki()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbWiki_chooseWikiSearch_myEntries()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbWiki_chooseWikiSearch_chooseWiki(nameOfWiki=concurrent edit)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_publish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_selectall()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td>label=All registered OLAT users</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_closeEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Wiki)</td> - <td></td> -</tr> -<!--now student opens course and wiki--> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=concurrent edit course)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Wiki)</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=wiki::sideNavigation_searchInput()</td> - <td>Deleteconcurrency</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=wiki::sideNavigation_createOrSearch()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=wiki::sideNavigation_clickAWikiPage(nameOfWikiPage=Deleteconcurrency)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=wiki::topNavigation_editPage()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=wiki::edit_editFormTextarea()</td> - <td>Deleteconcurrency test entry</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=wiki::sideNavigation_index()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=wiki::topNavigation_editPage()</td> - <td></td> -</tr> -<!--both try to edit index wiki page--> -<!--student goes to page version tab--> -<tr> - <td>click</td> - <td>ui=wiki::sideNavigation_from a-z()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=wiki::sideNavigation_clickAWikiPage(nameOfWikiPage=Deleteconcurrency)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=wiki::topNavigation_versions()</td> - <td></td> -</tr> -<!--author goes to page edit tab, deletes--> -<tr> - <td>click</td> - <td>ui=wiki::topNavigation_editPage()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=wiki::edit_deletePage()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dialog::OK()</td> - <td></td> -</tr> -<!--student goes to tab article--> -<tr> - <td>clickAndWait</td> - <td>ui=wiki::topNavigation_article()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>This article has been deleted and cannot be displayed anymore.</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Forum)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_newTopic()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::content_forum_typeMsgTitle()</td> - <td>test entry concurrent edit</td> -</tr> -<tr> - <td>click</td> - <td>ui=course::content_forum_clickMsgBody()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::content_forum_clickMsgBody()</td> - <td>forum message editing</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_save()</td> - <td></td> -</tr> -<!--author opens forum and deletes message--> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Forum)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_viewTopic(nameOfTopic=test entry concurrent edit)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_delete()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_deleteYes()</td> - <td></td> -</tr> -<!--student tries to edit forum message--> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_edit()</td> - <td></td> -</tr> -<tr> - <td>waitForTextPresent</td> - <td>You must not edit this message.</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Forum)</td> - <td></td> -</tr> -<!--author removes forum--> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_courseEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::menu_link(link=Forum)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_modifyTools_delete()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dialog::Yes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_publish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_selectall()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_closeEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_generalTools_detailedView()</td> - <td></td> -</tr> -<!--student should get message to restart course--> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Forum)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Please close this course and restart.</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::closeCourse(nameOfCourse=concurrent edit course)</td> - <td></td> -</tr> -<!--author deletes course--> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/course/run/course_run_concurrent_forum_replies.html b/src/test/java/org/olat/test/functional/course/run/course_run_concurrent_forum_replies.html deleted file mode 100644 index 55c08ae8494..00000000000 --- a/src/test/java/org/olat/test/functional/course/run/course_run_concurrent_forum_replies.html +++ /dev/null @@ -1,284 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>course_run_concurrent_forum_replies</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">course_run_concurrent_forum_replies</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz/</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_create_course()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_title()</td> - <td>Concurrent Forum Replies</td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_description()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_description()</td> - <td>selenium</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_startYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertForum()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_publish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_selectall()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td>label=All registered OLAT users</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_closeEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Forum)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_newTopic()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::content_forum_typeMsgTitle()</td> - <td>welcome</td> -</tr> -<tr> - <td>click</td> - <td>ui=course::content_forum_clickMsgBody()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::content_forum_clickMsgBody()</td> - <td>werdet euren senf los</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_save()</td> - <td></td> -</tr> -<!--now students log in and reply to message--> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_searchForm()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::content_searchForm_titleField()</td> - <td>Concurrent Forum Replies</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_searchForm_search()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=Concurrent Forum Replies)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Forum)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_viewTopic(nameOfTopic=welcome)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_replyWithQuotation()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=course::content_forum_clickMsgBody()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::content_forum_clickMsgBody()</td> - <td>moutarde<br />> test concurrent message reply</td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<!--author checks if all messages are present--> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Forum)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_viewTopic(nameOfTopic=welcome)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>student01 - student05</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>moutarde etc.</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/course/topic/CreateAndConfigureTopicAssignmentTest.java b/src/test/java/org/olat/test/functional/course/topic/CreateAndConfigureTopicAssignmentTest.java deleted file mode 100644 index d8c2bd5db58..00000000000 --- a/src/test/java/org/olat/test/functional/course/topic/CreateAndConfigureTopicAssignmentTest.java +++ /dev/null @@ -1,114 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.topic; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.test.util.selenium.olatapi.course.editor.TopicAssignmentEditor; -import org.testng.annotations.Test; - -/** - * - * Tests the new bb topic assignment. Step 1: Configuration. - * <br/> - * <p> - * Test setup:<br/> - * 1. import demo course or any other course. Copy course and rename to TOPIC_ASSIGNMENT_COURSE. <br/> - * 2. prepare following test users: 1 author (AUTHOR), 3 users without authoring rights TUTOR1, TUTOR2, TUTOR3 - * - * Testcase:<br/> - * 1. log in as AUTHOR - * 2. go to learning resources - * 3. search for TOPIC_ASSIGNMENT_COURSE from test setup - * 4. edit content of TOPIC_ASSIGNMENT_COURSE - * 5. add bb topic assignment, name it TOPIC_ASSIGNMENT_1 - * 6. go to tab configuration - * 7. limit number or project per student to 2 - * 8. check the two other dependent checkboxes, save - * 9. go to tab persons in charge - * 10. add TUTOR1, TUTOR2, TUTOR3 as topic authors - * (leave all other config options as default) - * 11. publish TOPIC_ASSIGNMENT_COURSE, set access to all registered users - * 12. log out - * </p> - * - * @author sandra - * - */ -public class CreateAndConfigureTopicAssignmentTest extends BaseSeleneseTestCase { - - private final String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_1; - - - - @Override - public void setUp() throws Exception { - System.out.println("********* CreateAndConfigureTopicAssignmentTest **************"); - - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //clone DEMO_COURSE_NAME and work with the clone - //assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, TopicAssignmentSuite.COURSE_NAME)); - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - - //workaround: could not copy course at the moment - workflow.getLearningResources().createCourseAndStartEditing(TopicAssignmentSuite.COURSE_NAME, TopicAssignmentSuite.COURSE_NAME).publishCourse(); - workflow.logout(); - - workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - workflow.getLearningResources().searchMyResource(TopicAssignmentSuite.COURSE_NAME).assignOwner(context.getStandardAuthorOlatLoginInfos(1).getUsername()); - - //create test users - OlatLoginInfos tutor1= context.createuserIfNotExists(2, TopicAssignmentSuite.TUTOR1, true, false, false, false, false); - OlatLoginInfos tutor2= context.createuserIfNotExists(1, TopicAssignmentSuite.TUTOR2, true, false, false, false, false); - OlatLoginInfos tutor3= context.createuserIfNotExists(2, TopicAssignmentSuite.TUTOR3, true, false, false, false, false); - - } - - @Test(groups={TopicAssignmentSuite.FIRST}) - public void testCreateAndConfigureTopicAssignment() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - CourseEditor courseEditor = workflow.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME).getCourseEditor(); - TopicAssignmentEditor topicAssignmentEditor = (TopicAssignmentEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.TOPIC_ASSIGNMENT, true, TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - topicAssignmentEditor.configure(true, 2, true, true); - topicAssignmentEditor.addUser(TopicAssignmentSuite.TUTOR1); - topicAssignmentEditor.addUser(TopicAssignmentSuite.TUTOR2); - topicAssignmentEditor.addUser(TopicAssignmentSuite.TUTOR3); - - //TODO: LD: workaround for selectall problem in publishCourse, doesn't always work with only one course element, so we insert a second one. - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FORUM, true, null); - courseEditor.publishCourse(); - workflow.logout(); - - } - - @Override - protected void cleanUpAfterRun() { - //nothing to cleanup - there is a follow-up test using the created resource - - } - - -} diff --git a/src/test/java/org/olat/test/functional/course/topic/CreateTopicInTopicAssignmentTest.java b/src/test/java/org/olat/test/functional/course/topic/CreateTopicInTopicAssignmentTest.java deleted file mode 100644 index cba51d10d9b..00000000000 --- a/src/test/java/org/olat/test/functional/course/topic/CreateTopicInTopicAssignmentTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.topic; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.TopicAssignmentRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Tests the new bb topic assignment. Step 2: Create topics - * <br/> - * <p> - * Test setup:<br/> - * 1. test created in CreateAndConfigureTopicAssignmentTest (TOPIC_ASSIGNMENT_COURSE) is available. <br/> - * 2. TUTOR1, TUTOR2, TUTOR3 from CreateAndConfigureTopicAssignmentTest are available - * - * Testcase:<br/> - * 1. log in as TUTOR1 - * 2. go to learning resources, search form - * 3. search for TOPIC_ASSIGNMENT_COURSE and open course run - * 4. go to bb TOPIC_ASSIGNMENT_1 - * 5. check if the button "create topic" is available - * 6. check if text "No Topics for this Topic assignment available." is present - * 7. click "create topic" - * 8. title: "Topic_Tutor1", description "Description Topic of Tutor 1" - * 9. check "do you want to limit the vacancies" and edit 1. - * 10. Save - * 11. Log out TUTOR1 - * 12. log in as TUTOR2 - * 13. go to learning resources, search form - * 14. search for TOPIC_ASSIGNMENT_COURSE and open course run - * 15. go to bb TOPIC_ASSIGNMENT_1 - * 16. check if the button "create topic" is available - * 17. check if "Topic_Tutor1" is available - * 18. click "create topic" - * 19. title: "Topic_Tutor2", description "Description Topic of Tutor 2" - * 20. check "do you want to limit the vacancies" and edit 2. - * 21. Save - * 22. Log out TUTOR2 - * 23. log in as TUTOR3 - * 24. go to learning resources, search form - * 25. search for TOPIC_ASSIGNMENT_COURSE and open course run - * 26. go to bb TOPIC_ASSIGNMENT_1 - * 27. check if the button "create topic" is available - * 28. check if "Topic_Tutor1" and "Topic_Tutor2" are available - * 29. click "create topic" - * 30. title: "Topic_Tutor3", description "Description Topic of Tutor 3" - * 31. check "do you want to limit the vacancies" and edit 3. - * 32. Save - * 33. go again to TOPIC_ASSIGNMENT_1 - * 34. check if all topics are available "Topic_Tutor1", "Topic_Tutor2", "Topic_Tutor3" - * 35. check if in column "in charge" TUTOR1, 2 and 3, respectively, are listed - * 36. check if in the colum "topic status" the first two topics have value "vacancies", the - * third "no participants to check" - * 37. check if in column "number of filled vacancies" is 0 out of 1, 2 and 3 respectively - * 38. check if "select" link is available for all 3 topics - * 39. Log out - * - * </p> - * - * @author sandra - * - */ -public class CreateTopicInTopicAssignmentTest extends BaseSeleneseTestCase { - - private final String NO_TOPIC_AVAILABLE = "No Topics for this Topic assignment available"; - private final String TOPIC_DESCRIPTION_1 = "Description Topic of Tutor 1"; - private final String TOPIC_DESCRIPTION_2 = "Description Topic of Tutor 2"; - private final String TOPIC_DESCRIPTION_3 = "Description Topic of Tutor 3"; - private final String FILLED_VACANCIES_1 = "0 of 1"; - private final String FILLED_VACANCIES_2 = "0 of 2"; - private final String FILLED_VACANCIES_3 = "0 of 3"; - - @Test(dependsOnGroups={TopicAssignmentSuite.FIRST}, groups={TopicAssignmentSuite.SECOND}) - public void testCreateTopicInTopicAssignment() throws Exception { - System.out.println("********* CreateTopicInTopicAssignmentTest **************"); - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //TUTOR1 - OLATWorkflowHelper tutor1Workflow = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, TopicAssignmentSuite.TUTOR1)); - CourseRun courseRun1 = tutor1Workflow.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun projectBrokerRun = courseRun1.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(projectBrokerRun.isTextPresent(NO_TOPIC_AVAILABLE)); - projectBrokerRun.createTopic(TopicAssignmentSuite.TOPIC_TITLE_1, TOPIC_DESCRIPTION_1, true, 1); - tutor1Workflow.logout(); - - //TUTOR2 - OLATWorkflowHelper tutor2Workflow = context.getOLATWorkflowHelper(context.getOlatLoginInfo(2, TopicAssignmentSuite.TUTOR2)); - CourseRun courseRun2 = tutor2Workflow.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRun = courseRun2.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRun.isTextPresent(TopicAssignmentSuite.TOPIC_TITLE_1)); - topicAssignmentRun.createTopic(TopicAssignmentSuite.TOPIC_TITLE_2, TOPIC_DESCRIPTION_2, true, 2); - tutor2Workflow.logout(); - - //TUTOR3 - OLATWorkflowHelper tutor3Workflow = context.getOLATWorkflowHelper(context.getOlatLoginInfo(2, TopicAssignmentSuite.TUTOR3)); - CourseRun courseRun3 = tutor3Workflow.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRun3 = courseRun3.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRun3.isTextPresent(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun3.isTextPresent(TopicAssignmentSuite.TOPIC_TITLE_2)); - topicAssignmentRun3.createTopic(TopicAssignmentSuite.TOPIC_TITLE_3, TOPIC_DESCRIPTION_3, true, 3); - - topicAssignmentRun3 = courseRun3.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRun3.hasTopic(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun3.hasTopic(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun3.hasTopic(TopicAssignmentSuite.TOPIC_TITLE_3)); - assertTrue(topicAssignmentRun3.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun3.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun3.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_3)); - - assertTrue(topicAssignmentRun3.isTextPresent(TopicAssignmentSuite.TUTOR1)); - assertTrue(topicAssignmentRun3.isTextPresent(TopicAssignmentSuite.TUTOR2)); - assertTrue(topicAssignmentRun3.isTextPresent(TopicAssignmentSuite.TUTOR3)); - assertTrue(topicAssignmentRun3.isTextPresent(FILLED_VACANCIES_1)); - assertTrue(topicAssignmentRun3.isTextPresent(FILLED_VACANCIES_2)); - assertTrue(topicAssignmentRun3.isTextPresent(FILLED_VACANCIES_3)); - - } -} diff --git a/src/test/java/org/olat/test/functional/course/topic/SelectTopicsAndAcceptCandidatesTest.java b/src/test/java/org/olat/test/functional/course/topic/SelectTopicsAndAcceptCandidatesTest.java deleted file mode 100644 index 1ff4a9587c5..00000000000 --- a/src/test/java/org/olat/test/functional/course/topic/SelectTopicsAndAcceptCandidatesTest.java +++ /dev/null @@ -1,265 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.topic; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.TopicAssignmentRun; -import org.olat.test.util.selenium.olatapi.course.run.TopicEditor; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Tests the new bb topic assignment. Step 3: Students choose topics and tutors accept students. - * <br/> - * <p> - * Test setup: <br/> - * 1. course created and modified in CreateAndConfigureTopicAssignmentTest and CreateTopicInTopicAssignmentTest (TOPIC_ASSIGNMENT_COURSE) is available. <br/> - * 2. TUTOR1, TUTOR2, TUTOR3 from CreateAndConfigureTopicAssignmentTest are available <br/> - * 3. prepare following users: STUDENT1, STUDENT2, STUDENT3 <br/> - * - * Testcase:<br/> - * 1. login as STUDENT1 <br/> - * 2. go to learning resources, search form <br/> - * 3. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 4. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 5. check if the button "create topic" is NOT available <br/> - * 6. check if in column "topic status" all three topics have vacancies <br/> - * 7. check if all three select links are available <br/> - * 8. select "Topic_Tutor1" <br/> - * 9. check if in column "topic status" value is "Temporary registration". <br/> - * 10. check if "deselect" link is available <br/> - * 11. select "Topic_Tutor2", do same two checks as above <br/> - * 12. check that student cannot select third topic any more (no select link available). <br/> - * 13. click on title "Topic_Tutor1" <br/> - * 14. click on tab "Folder" <br/> - * 15. check if drop box and return box paragraphes are not available (as only temporarily registered) <br/> - * 16. log out STUDENT1 <br/> - * 17. login as STUDENT2 <br/> - * 18. go to learning resources, search form <br/> - * 19. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 20. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 21. check if in column "topic status" that first topic is filled, other two have vacancies <br/> - * 22. check if two out of three select links are available <br/> - * 23. select "Topic_Tutor2" <br/> - * 24. check if in column "topic status" value is "temporary registration". <br/> - * 25. check if "deselect" link is available <br/> - * 26. select "Topic_Tutor3", do same two checks as above <br/> - * 27. log out STUDENT2 <br/> - * 28. login as STUDENT3 <br/> - * 29. go to learning resources, search form <br/> - * 30. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 31. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 32. check if in column "topic status" that first two topics are filled, only third has vacancies <br/> - * 33. check if one out of three select links are available <br/> - * 34. select "Topic_Tutor3" <br/> - * 35. check if in column "topic status" value is "temporary registration". <br/> - * 36. check if "deselect" link is available <br/> - * 37. log out STUDENT 3 <br/> - * * ----- now tutor view again ------ <br/> - * 38. log in TUTOR1 <br/> - * 39. go to learning resources, search form <br/> - * 40. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 41. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 42. check if following two toolboxes are present "* tutored groups" with link "Topic Topic_Tutor1" and "My learning groups" with link "Administrator Topic assignment" <br/> - * 43. check if in column "topic status" first line is "check participants". second: "filled", third: "vacancies" <br/> - * 44. click on Topic Name "Topic_Tutor2": check if tab "Administration of participants" is not available, back <br/> - * 45. click on Topic Name "Topic_Tutor1" <br/> - * 46. go to tab "Administration of participants" <br/> - * 47. check if in paragraph "Candidates" STUDENT1 is listed <br/> - * 48. check user checkbox, click on "Transfer as participant", no e-mail notification, next <br/> - * 49. check if in paragraph "participants accepted" user STUDENT1 is listed. <br/> - * 50. check if in paragraph "Candidates" STUDENT1 isn't listed anymore <br/> - * 51. click on TOPIC_ASSIGNMENT_1 <br/> - * 52. check if in column "topic status" value is "participants accepted" <br/> - * 53. as STUDENT1 is automatically unsubscribed from "Topic_Tutor2", the second row should have listed "vacancies" "1 of 2" and link "select" is available again. <br/> - * 54. log out TUTOR1 <br/> - * 55. log in TUTOR 3 <br/> - * 56. go to learning resources, search form <br/> - * 57. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 58. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 59. check if in column "topic status" first line is "filled". second: "vacancies", third: "check participants" <br/> - * 60. click on Topic Name "Topic_Tutor3" <br/> - * 61. go to tab "Administration of participants" <br/> - * 62. check if in paragraph "candidates" both STUDENT2 and STUDENT3 are listed. <br/> - * 63. check user "STUDENT3" and click "transfer as participant", no e-mail notification, next <br/> - * 64. click on TOPIC_ASSIGNMENT_1 <br/> - * 65. check if in column "topic status" value is still "check participants" as there are more candidates <br/> - * 66. log out TUTOR3 <br/> - * 67. log in TUTOR2 <br/> - * 68. go to learning resources, search form <br/> - * 69. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 70. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 71. check if in column "topic status" first line is "filled" second: "check participants", third: "vacancies" <br/> - * 72. click on Topic Name "Topic_Tutor2" <br/> - * 73. go to tab "Administration of participants" <br/> - * 74. check STUDENT2 checkbox, click "transfer as participant", no e-mail notification, next <br/> - * 75. log out TUTOR2 <br/> - * - * </p> - * - * @author sandra - * - */ -public class SelectTopicsAndAcceptCandidatesTest extends BaseSeleneseTestCase { - - private final String FILLED_VACANCIES_1_of_2 = "1 of 2"; - - @Override - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //create test users - OlatLoginInfos student1= context.createuserIfNotExists(2, TopicAssignmentSuite.STUDENT1, true, false, false, false, false); - OlatLoginInfos student2= context.createuserIfNotExists(1, TopicAssignmentSuite.STUDENT2, true, false, false, false, false); - OlatLoginInfos student3= context.createuserIfNotExists(2, TopicAssignmentSuite.STUDENT3, true, false, false, false, false); - } - - @Test(dependsOnGroups={TopicAssignmentSuite.SECOND}, groups={TopicAssignmentSuite.THIRD}) - public void testSelectTopicsAndAcceptCandidates() throws Exception { - System.out.println("********* SelectTopicsAndAcceptCandidatesTest **************"); - //STUDENT1 - OLATWorkflowHelper workflow1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, TopicAssignmentSuite.STUDENT1)); - CourseRun courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRun = courseRun1.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - - assertFalse(topicAssignmentRun.canCreateTopic()); - assertTrue(topicAssignmentRun.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_3)); - assertTrue(topicAssignmentRun.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_3)); - - topicAssignmentRun.selectTopic(TopicAssignmentSuite.TOPIC_TITLE_1); - assertTrue(topicAssignmentRun.isTemporaryRegisterd(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun.canDeselect(TopicAssignmentSuite.TOPIC_TITLE_1)); - - topicAssignmentRun.selectTopic(TopicAssignmentSuite.TOPIC_TITLE_2); - assertTrue(topicAssignmentRun.isTemporaryRegisterd(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun.canDeselect(TopicAssignmentSuite.TOPIC_TITLE_2)); - - assertFalse(topicAssignmentRun.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_3)); - - TopicEditor topicEditor = topicAssignmentRun.openTopic(TopicAssignmentSuite.TOPIC_TITLE_1); - assertFalse(topicEditor.hasDropbox()); - assertFalse(topicEditor.hasReturnbox()); - workflow1.logout(); - workflow1 = null; - - //STUDENT2 - OLATWorkflowHelper workflow2 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(2, TopicAssignmentSuite.STUDENT2)); - CourseRun courseRun2 = workflow2.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRun2 = courseRun2.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - - assertTrue(topicAssignmentRun2.isFilled(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun2.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun2.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_3)); - - assertFalse(topicAssignmentRun2.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun2.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun2.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_3)); - - topicAssignmentRun2.selectTopic(TopicAssignmentSuite.TOPIC_TITLE_2); - assertTrue(topicAssignmentRun2.isTemporaryRegisterd(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun2.canDeselect(TopicAssignmentSuite.TOPIC_TITLE_2)); - - topicAssignmentRun2.selectTopic(TopicAssignmentSuite.TOPIC_TITLE_3); - assertTrue(topicAssignmentRun2.isTemporaryRegisterd(TopicAssignmentSuite.TOPIC_TITLE_3)); - assertTrue(topicAssignmentRun2.canDeselect(TopicAssignmentSuite.TOPIC_TITLE_3)); - workflow2.logout(); - workflow2 = null; - - //STUDENT3 - OLATWorkflowHelper workflow3 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, TopicAssignmentSuite.STUDENT3)); - CourseRun courseRun3 = workflow3.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRun3 = courseRun3.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRun3.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_3)); - assertTrue(topicAssignmentRun3.isFilled(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun3.isFilled(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertFalse(topicAssignmentRun3.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertFalse(topicAssignmentRun3.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun3.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_3)); - topicAssignmentRun3.selectTopic(TopicAssignmentSuite.TOPIC_TITLE_3); - assertTrue(topicAssignmentRun3.isTemporaryRegisterd(TopicAssignmentSuite.TOPIC_TITLE_3)); - assertTrue(topicAssignmentRun3.canDeselect(TopicAssignmentSuite.TOPIC_TITLE_3)); - workflow3.logout(); - workflow3 = null; - - //TUTOR1 - OLATWorkflowHelper tutor1Workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, TopicAssignmentSuite.TUTOR1)); - CourseRun courseRun1Tutor = tutor1Workflow.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRunTutor1 = courseRun1Tutor.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - topicAssignmentRunTutor1.hasTutoredGroup(TopicAssignmentSuite.TOPIC_TITLE_1);//"Topic Topic_Tutor1" - - //ask sandra: ??? "My learning groups" with link "Administrator Topic assignment" - assertTrue(topicAssignmentRunTutor1.getCourseRun().hasMyGroup(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1)); - assertTrue(topicAssignmentRunTutor1.hasCheckParticipants(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRunTutor1.isFilled(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRunTutor1.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_3)); - TopicEditor topicEditor1 = topicAssignmentRunTutor1.openTopic(TopicAssignmentSuite.TOPIC_TITLE_2); - assertFalse(topicEditor1.hasAdminTab()); - topicAssignmentRunTutor1 = topicEditor1.back(); - - topicEditor1 = topicAssignmentRunTutor1.openTopic(TopicAssignmentSuite.TOPIC_TITLE_1); - assertTrue(topicEditor1.hasCandidate(TopicAssignmentSuite.STUDENT1)); - topicEditor1.moveAsParticipant(TopicAssignmentSuite.STUDENT1); - assertTrue(topicEditor1.hasParticipant(TopicAssignmentSuite.STUDENT1)); - assertFalse(topicEditor1.hasCandidate(TopicAssignmentSuite.STUDENT1)); - - topicAssignmentRunTutor1 = courseRun1Tutor.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRunTutor1.hasParticipantsAccepted(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRunTutor1.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRunTutor1.isTextPresent(FILLED_VACANCIES_1_of_2)); - assertTrue(topicAssignmentRunTutor1.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_2)); - tutor1Workflow.logout(); - - //TUTOR3 - OLATWorkflowHelper tutor3Workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(2, TopicAssignmentSuite.TUTOR3)); - CourseRun courseRun3Tutor = tutor3Workflow.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRunTutor3 = courseRun3Tutor.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRunTutor3.isFilled(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRunTutor3.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRunTutor3.hasCheckParticipants(TopicAssignmentSuite.TOPIC_TITLE_3)); - TopicEditor topicEditor3 = topicAssignmentRunTutor3.openTopic(TopicAssignmentSuite.TOPIC_TITLE_3); - assertTrue(topicEditor3.hasCandidate(TopicAssignmentSuite.STUDENT2)); - assertTrue(topicEditor3.hasCandidate(TopicAssignmentSuite.STUDENT3)); - topicEditor3.moveAsParticipant(TopicAssignmentSuite.STUDENT3); - - topicAssignmentRunTutor3 = courseRun3Tutor.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRunTutor3.hasCheckParticipants(TopicAssignmentSuite.TOPIC_TITLE_3)); - tutor3Workflow.logout(); - - //TUTOR2 - OLATWorkflowHelper tutor2Workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, TopicAssignmentSuite.TUTOR2)); - CourseRun courseRun2Tutor = tutor2Workflow.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRunTutor2 = courseRun2Tutor.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRunTutor2.isFilled(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRunTutor2.hasCheckParticipants(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRunTutor2.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_3)); - TopicEditor topicEditor2 = topicAssignmentRunTutor2.openTopic(TopicAssignmentSuite.TOPIC_TITLE_2); - topicEditor2.moveAsParticipant(TopicAssignmentSuite.STUDENT2); - tutor2Workflow.logout(); - } -} diff --git a/src/test/java/org/olat/test/functional/course/topic/TopicAssignmentSuite.java b/src/test/java/org/olat/test/functional/course/topic/TopicAssignmentSuite.java deleted file mode 100644 index 33d38d836a1..00000000000 --- a/src/test/java/org/olat/test/functional/course/topic/TopicAssignmentSuite.java +++ /dev/null @@ -1,82 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.topic; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - - - -/** - * - * @author lavinia - * - */ -public class TopicAssignmentSuite extends TestSuite { - - protected final static String COURSE_NAME = "TOPIC_ASSIGNMENT_COURSE"; //+System.currentTimeMillis(); - protected final static String TUTOR1 = "selenium_tutor1"; - protected final static String TUTOR2 = "selenium_tutor2"; - protected final static String TUTOR3 = "selenium_tutor3"; - protected final static String TOPIC_ASSIGNMENT_1 = "TOPIC_ASSIGNMENT_1"; - protected final static String TOPIC_TITLE_1 = "Topic_Tutor1"; - protected final static String TOPIC_TITLE_2 = "Topic_Tutor2"; - protected final static String TOPIC_TITLE_3 = "Topic_Tutor3"; - - protected final static String STUDENT1 = "selenium_topic_student1"; - protected final static String STUDENT2 = "selenium_topic_student2"; - protected final static String STUDENT3 = "selenium_topic_student3"; - - protected final static String HAND_IN_TOPIC1 = "handInTopic1.pdf"; - protected final static String HAND_IN_TOPIC2 = "handInTopic2.pdf"; - protected final static String HAND_IN_TOPIC3 = "handInTopic3.pdf"; - protected final static String HAND_IN_TOPIC4 = "handInTopic4.pdf"; - - protected final static String HAND_BACK_TOPIC1 = "handBackTopic1.pdf"; - protected final static String HAND_BACK_TOPIC3 = "handBackTopic3.pdf"; - - - final static String FIRST = "TopicAssignmentSuite.FIRST"; - final static String SECOND = "TopicAssignmentSuite.SECOND"; - final static String THIRD = "TopicAssignmentSuite.THIRD"; - - - public static Test suite() { - Context context = Context.setupContext("TopicAssignmentSuite", SetupType.TWO_NODE_CLUSTER); - WorkflowHelper.deleteAllCoursesNamed(COURSE_NAME); - Context.tearDown(); - - TestSuite suite = new TestSuite("TopicAssignmentSuite"); - - suite.addTestSuite(CreateAndConfigureTopicAssignmentTest.class); - suite.addTestSuite(CreateTopicInTopicAssignmentTest.class); - suite.addTestSuite(SelectTopicsAndAcceptCandidatesTest.class); - suite.addTestSuite(UploadInTopicsTest.class); - - return suite; - } - - - -} diff --git a/src/test/java/org/olat/test/functional/course/topic/UploadInTopicsTest.java b/src/test/java/org/olat/test/functional/course/topic/UploadInTopicsTest.java deleted file mode 100644 index c801546eefa..00000000000 --- a/src/test/java/org/olat/test/functional/course/topic/UploadInTopicsTest.java +++ /dev/null @@ -1,264 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.course.topic; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.TopicAssignmentRun; -import org.olat.test.util.selenium.olatapi.course.run.TopicEditor; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Tests the new bb topic assignment. Step 4: Students hand in documents, tutors hands back documents - * <br/> - * <p> - * Test setup:<br/> - * 1. course created and modified in CreateAndConfigureTopicAssignmentTest, CreateTopicInTopicAssignmentTest and SelectTopicsAndAcceptCandidates (TOPIC_ASSIGNMENT_COURSE) is available. <br/> - * 2. TUTOR1, TUTOR2, TUTOR3 from CreateAndConfigureTopicAssignmentTest and STUDENT1, STUDENT2, STUDENT3 from SelectTopicsAndAcceptCandidatesTest are available <br/> - * 3. prepare files HAND_IN_TOPIC1,HAND_IN_TOPIC2, HAND_IN_TOPIC3 and HAND_IN_TOPIC4 (e.g. pdf file) for upload in drop box <br/> - * 4. prepare files HAND_BACK_TOPIC1,HAND_BACK_TOPIC3 (e.g. pdf file) for upload in return box <br/> - * - * Testcase:<br/> - * 1. log in as STUDENT1 <br/> - * 2. go to learning resources, search form <br/> - * 3. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 4. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 5. check if toolbox "my learning groups" shows "Topic Topic_Tutor1" <br/> - * 6. check if column "topic status" shows "positive registration", "vacancies", "vacancies" <br/> - * 7. check if neither select nor deselect links are available any more <br/> - * 8. click on "Topic_Tutor1", go to tab "Folder" <br/> - * 9. check if Drop box and Return box paragraphs are there. <br/> - * 10. check if in paragraph Drop box String "you have not uploaded any files yet" is present <br/> - * 10. upload file HAND_IN_TOPIC1 (sorry there are two no 10.) <br/> - * 11. log out STUDENT1 <br/> - * 12. log in as STUDENT2 <br/> - * 13. go to learning resources, search form <br/> - * 14. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 15. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 16. check if toolbox "my learning groups" shows "Topic Topic_Tutor2" <br/> - * 17. check if column "topic status" shows "filled", "positive registration", "vacancies" <br/> - * 18. check if neither select nor deselect links are available any more <br/> - * 19. click on "Topic_Tutor1", go to tab "Folder" <br/> - * 20. check if Drop box and Return box paragraphs are not available because STUDENT2 is registered for Topic_Tutor2 <br/> - * 21. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 22. click on "Topic_Tutor2", go to tab "Folder" <br/> - * 23 check if Drop box and Return box paragraphs are there <br/> - * 24. upload file HAND_IN_TOPIC2 <br/> - * 25. log out STUDENT2 <br/> - * 26. log in as STUDENT3 <br/> - * 27. go to learning resources, search form <br/> - * 28. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 29. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 30. check if toolbox "my learning groups" shows "Topic Topic_Tutor3" <br/> - * 31. check if column "topic status" shows "vacancies", "vacancies", "positive registration" <br/> - * 32. check if neither select nor deselect links are available any more <br/> - * 33. click on "Topic_Tutor3", go to tab "Folder" <br/> - * 34. check if Drop box and Return box paragraphs are there. <br/> - * 35. upload files HAND_IN_TOPIC3 and HAND_IN_TOPIC4 <br/> - * 36. log out STUDENT3 <br/> - * -- tutor view now--- <br/> - * 37. log in as TUTOR1 <br/> - * 38. go to learning resources, search form <br/> - * 28. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 29. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 30. click on "Topic_Tutor2", go to tab "Folder" <br/> - * 31. check if drop box and return box are not available because TUTOR1 doesn't tutor this topic <br/> - * 32. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 33. click on "Topic_Tutor1", go to tab "Folder" <br/> - * 34. check if in both drop box and return box folder "STUDENT1" appears <br/> - * 35. open drop box folder "STUDENT1" and check if HAND_IN_TOPIC1 is there <br/> - * 36. open return box folder "STUDENT1" and upload HAND_BACK_TOPIC1 <br/> - * 37. log out TUTOR1 <br/> - * 38. log in as TUTOR3 <br/> - * 39. go to learning resources, search form <br/> - * 40. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 41. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 42. click on "Topic_Tutor3", go to tab "Folder" <br/> - * 43. check if in both drop box and return box folder "STUDENT3" appears <br/> - * 44. open drop box folder "STUDENT3" and check if HAND_IN_TOPIC3 and HAND_IN_TOPIC4 are there <br/> - * 45. open return box folder "STUDENT3" and upload HAND_BACK_TOPIC3 <br/> - * 46. log out TUTOR3 <br/> - * --- student view now--- <br/> - * 47. log in as STUDENT1 <br/> - * 48. go to learning resources, search form <br/> - * 49. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 50. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 51. click on "Topic_Tutor1", go to tab "Folder" <br/> - * 52. check if in return box HAND_BACK_TOPIC1 is there <br/> - * 53. log out STUDENT1 <br/> - * 54. log in as STUDENT3 <br/> - * 55. go to learning resources, search form <br/> - * 56. search for TOPIC_ASSIGNMENT_COURSE and open course run <br/> - * 57. go to bb TOPIC_ASSIGNMENT_1 <br/> - * 58. click on "Topic_Tutor3", go to tab "Folder" <br/> - * 59. check if in return box HAND_BACK_TOPIC3 is there <br/> - * 60. log out STUDENT3 <br/> - * - * </p> - * - * @author sandra - * - */ -public class UploadInTopicsTest extends BaseSeleneseTestCase { - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - } - - @Test(dependsOnGroups={TopicAssignmentSuite.THIRD}) - public void testCreateAndConfigureTopicAssignment() throws Exception { - System.out.println("********* UploadInTopicsTest **************"); - - //STUDENT1 - OLATWorkflowHelper workflow1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, TopicAssignmentSuite.STUDENT1)); - CourseRun courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRun = courseRun1.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRun.getCourseRun().hasMyGroup(TopicAssignmentSuite.TOPIC_TITLE_1)); //"my learning groups" shows "Topic Topic_Tutor1" - - assertTrue(topicAssignmentRun.isRegistered(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_3)); - assertFalse(topicAssignmentRun.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertFalse(topicAssignmentRun.canDeselect(TopicAssignmentSuite.TOPIC_TITLE_1)); - - TopicEditor topicEditor = topicAssignmentRun.openTopic(TopicAssignmentSuite.TOPIC_TITLE_1); - assertTrue(topicEditor.hasDropbox()); - assertTrue(topicEditor.hasReturnbox()); - assertTrue(topicEditor.isTextPresent("You have not uploaded any files yet")); - - File pdf1 = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + TopicAssignmentSuite.HAND_IN_TOPIC1); - String remotePdf1 = Context.getContext().provideFileRemotely(pdf1); - topicEditor.uploadFileInDropBox(remotePdf1); - workflow1.logout(); - - //STUDENT2 - OLATWorkflowHelper workflow2 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(2, TopicAssignmentSuite.STUDENT2)); - CourseRun courseRun2 = workflow2.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRun1 = courseRun2.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRun1.getCourseRun().hasMyGroup(TopicAssignmentSuite.TOPIC_TITLE_2)); - - assertTrue(topicAssignmentRun1.isFilled(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun1.isRegistered(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun1.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_3)); - - assertFalse(topicAssignmentRun1.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertFalse(topicAssignmentRun1.canDeselect(TopicAssignmentSuite.TOPIC_TITLE_2)); - - TopicEditor topicEditor21 = topicAssignmentRun1.openTopic(TopicAssignmentSuite.TOPIC_TITLE_1); - assertFalse(topicEditor21.hasDropbox()); - assertFalse(topicEditor21.hasReturnbox()); - - TopicAssignmentRun topicAssignmentRun2 = courseRun2.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - TopicEditor topicEditor22 = topicAssignmentRun2.openTopic(TopicAssignmentSuite.TOPIC_TITLE_2); - - assertTrue(topicEditor22.hasDropbox()); - assertTrue(topicEditor22.hasReturnbox()); - - File pdf2 = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + TopicAssignmentSuite.HAND_IN_TOPIC2); - String remotePdf2 = Context.getContext().provideFileRemotely(pdf2); - topicEditor22.uploadFileInDropBox(remotePdf2); - workflow2.logout(); - - //STUDENT3 - OLATWorkflowHelper workflow3 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, TopicAssignmentSuite.STUDENT3)); - CourseRun courseRun3 = workflow3.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentRun3 = courseRun3.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - assertTrue(topicAssignmentRun3.getCourseRun().hasMyGroup(TopicAssignmentSuite.TOPIC_TITLE_3)); //"my learning groups" shows "Topic Topic_Tutor3" - - assertTrue(topicAssignmentRun3.isFilled(TopicAssignmentSuite.TOPIC_TITLE_1)); - assertTrue(topicAssignmentRun3.hasVacancies(TopicAssignmentSuite.TOPIC_TITLE_2)); - assertTrue(topicAssignmentRun3.isRegistered(TopicAssignmentSuite.TOPIC_TITLE_3)); - assertFalse(topicAssignmentRun3.canSelectTopic(TopicAssignmentSuite.TOPIC_TITLE_3)); - assertFalse(topicAssignmentRun3.canDeselect(TopicAssignmentSuite.TOPIC_TITLE_3)); - - TopicEditor topicEditor3 = topicAssignmentRun3.openTopic(TopicAssignmentSuite.TOPIC_TITLE_3); - assertTrue(topicEditor3.hasDropbox()); - assertTrue(topicEditor3.hasReturnbox()); - - File pdf3 = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + TopicAssignmentSuite.HAND_IN_TOPIC3); - String remotePdf3 = Context.getContext().provideFileRemotely(pdf3); - topicEditor3.uploadFileInDropBox(remotePdf3); - File pdf4 = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + TopicAssignmentSuite.HAND_IN_TOPIC4); - String remotePdf4 = Context.getContext().provideFileRemotely(pdf4); - topicEditor3.uploadFileInDropBox(remotePdf4); - workflow3.logout(); - - //tutor view now - //TUTOR1 - OLATWorkflowHelper workflowTutor1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(2, TopicAssignmentSuite.TUTOR1)); - CourseRun courseRunTutor1 = workflowTutor1.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentTutor11 = courseRunTutor1.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - - TopicEditor topicEditorTutor12 = topicAssignmentTutor11.openTopic(TopicAssignmentSuite.TOPIC_TITLE_2); - assertFalse(topicEditorTutor12.hasDropbox()); - assertFalse(topicEditorTutor12.hasReturnbox()); - - topicAssignmentTutor11 = courseRunTutor1.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - TopicEditor topicEditorTutor11 = topicAssignmentTutor11.openTopic(TopicAssignmentSuite.TOPIC_TITLE_1); - assertTrue(topicEditorTutor11.hasDropbox()); - assertTrue(topicEditorTutor11.hasReturnboxFolder(TopicAssignmentSuite.STUDENT1)); - assertTrue(topicEditorTutor11.hasFileInDropBoxFolder(TopicAssignmentSuite.STUDENT1, TopicAssignmentSuite.HAND_IN_TOPIC1)); - - File file1 = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + TopicAssignmentSuite.HAND_BACK_TOPIC1); - String remoteFilePath1 = Context.getContext().provideFileRemotely(file1); - topicEditorTutor11.uploadFileInReturnBoxFolder(TopicAssignmentSuite.STUDENT1, remoteFilePath1); - workflowTutor1.logout(); - - //TUTOR3 - OLATWorkflowHelper workflowTutor3 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, TopicAssignmentSuite.TUTOR3)); - CourseRun courseRunTutor3 = workflowTutor3.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - TopicAssignmentRun topicAssignmentTutor31 = courseRunTutor3.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - TopicEditor topiceEditorTutor33 = topicAssignmentTutor31.openTopic(TopicAssignmentSuite.TOPIC_TITLE_3); - assertTrue(topiceEditorTutor33.hasReturnbox()); - assertTrue(topiceEditorTutor33.hasDropbox()); - assertTrue(topiceEditorTutor33.hasFileInDropBoxFolder(TopicAssignmentSuite.STUDENT3, TopicAssignmentSuite.HAND_IN_TOPIC3)); - assertTrue(topiceEditorTutor33.hasFileInDropBoxFolder(TopicAssignmentSuite.STUDENT3, TopicAssignmentSuite.HAND_IN_TOPIC4)); - - File file2 = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + TopicAssignmentSuite.HAND_BACK_TOPIC3); - String remoteFilePath2 = Context.getContext().provideFileRemotely(file2); - topiceEditorTutor33.uploadFileInReturnBoxFolder(TopicAssignmentSuite.STUDENT3, remoteFilePath2); - workflowTutor3.logout(); - - //student view now - - //STUDENT1 - workflow1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(2, TopicAssignmentSuite.STUDENT1)); - courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - topicAssignmentRun = courseRun1.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - TopicEditor topicEditor1 = topicAssignmentRun.openTopic(TopicAssignmentSuite.TOPIC_TITLE_1); - assertTrue(topicEditor1.hasFileInReturnBoxFolder(TopicAssignmentSuite.HAND_BACK_TOPIC1)); - workflow1.logout(); - - //STUDENT3 - workflow3 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, TopicAssignmentSuite.STUDENT3)); - courseRun3 = workflow3.getLearningResources().searchAndShowCourseContent(TopicAssignmentSuite.COURSE_NAME); - topicAssignmentRun3 = courseRun3.selectTopicAssignment(TopicAssignmentSuite.TOPIC_ASSIGNMENT_1); - topicEditor3 = topicAssignmentRun3.openTopic(TopicAssignmentSuite.TOPIC_TITLE_3); - assertTrue(topicEditor3.hasFileInReturnBoxFolder(TopicAssignmentSuite.HAND_BACK_TOPIC3)); - } -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/CourseEditor_EditCoursePreviewRunTest.java b/src/test/java/org/olat/test/functional/courseeditor/CourseEditor_EditCoursePreviewRunTest.java deleted file mode 100644 index a2edacfe238..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/CourseEditor_EditCoursePreviewRunTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.editor.SinglePageEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.InsertPosition; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -/** - * - * Tests changes in previews of course and single page - * <br/> - * <p> - * Test setup:<br/> - * 1. Standardauthor greates course COURSE_NAME<br/> - * 2. cleanup in the end: delete learning resource<br/> - * <br/> - * Test case: <br/> - * 1. Test case: <br/> - * login as author <br/> - * create course <br/> - * insert elements <br/> - * insert information at structure and single pages, edit html pages of single pages, publish <br/> - * edit, move nodes, delete nodes, preview, publish <br/> - * delete course <br/> - * </p> - * - * @author alberto - * - */ - - -public class CourseEditor_EditCoursePreviewRunTest extends BaseSeleneseTestCase { - private final String COURSE_NAME = "CourseName"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - - public void testEditCoursePreviewRunTest() throws Exception { - - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - SinglePageEditor singlePageEditor = (SinglePageEditor)courseEditor.insertCourseElement(CourseElemTypes.SINGLE_PAGE, true, null); - singlePageEditor.setDescription("This is the course TS090533 Description"); - singlePageEditor.createHTMLPage("Firstnode_HTML_Descr", "This is the"); - singlePageEditor.preview(); - singlePageEditor.closePreview(); - - CourseElementEditor courseElementEditor = courseEditor.insertCourseElement(CourseElemTypes.STRUCTURE, false, null); - courseElementEditor.setDescription("This is the description of first structure node"); - courseEditor.publishCourse(); - LRDetailedView lRDetailedView = courseEditor.closeToLRDetailedView(); - courseEditor = lRDetailedView.editCourseContent(); - courseEditor.selectCourseElement(CourseEditor.STRUCTURE_TITLE); - courseEditor.moveCourseElement(InsertPosition.FIRST_CHILD_OF_ROOT, null); - - courseEditor.selectCourseElement(CourseEditor.SINGLE_PAGE_TITLE); - courseEditor.deleteCourseElement(); - courseEditor.selectCourseElement(CourseEditor.STRUCTURE_TITLE); - courseEditor.deleteCourseElement(); - //TODO: LD: selective publishing - courseEditor.publishCourse(); - courseEditor.preview(); - courseEditor.closeToLRDetailedView().deleteLR(); - olatWorkflow.logout(); - - } -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/CourseEditor_concurrencyEditAndExportTest.java b/src/test/java/org/olat/test/functional/courseeditor/CourseEditor_concurrencyEditAndExportTest.java deleted file mode 100644 index bb5094c0d12..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/CourseEditor_concurrencyEditAndExportTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.SeleniumHelper; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * admin starts course editor of a course, author tries to export/download the same course at the same time - * <br/> - * <p> - * Test setup:<br/> - * 1. admin user creates course<br/> - * 2. author user is also owner of the course<br/> - * 3. cleanup in the end: admin deletes course<br/> - * - * Test case: <br/> - * 1. admin creates course<br/> - * 2. admin assigns author as owner<br/> - * 3. admin opens courseeditor<br/> - * 4. author views the detail view of the same course<br/> - * 5. author tries to download the same course at the same time as admin is in the courseeditor<br/> - * 6. assert that the correct message is displayed "This course is currently edited by admin and therefore locked."<br/> - * 7. admin exits courseeditor<br/> - * 8. admin deletes course <br/> - * </p> - * - * @author kristina - * - */ - - -public class CourseEditor_concurrencyEditAndExportTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "CourseName"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - - - - private CourseEditor courseEditor1; - - - public void testCourseEditor_concurrencyEditAndExportTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OlatLoginInfos user1 = context.getStandardAdminOlatLoginInfos(); - OlatLoginInfos user2 = context.getStandardAuthorOlatLoginInfos(); - - { - //user1 creates course COURSE_NAME with the element "forum" and adds user 2 as owner - System.out.println("logging in browser 1..."); - OLATWorkflowHelper olatWorkflow1 = context.getOLATWorkflowHelper(user1); - courseEditor1 = olatWorkflow1.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - LRDetailedView lRDetailedView = courseEditor1.closeToLRDetailedView(); - lRDetailedView.assignOwner(user2.getUsername()); - courseEditor1 = lRDetailedView.editCourseContent(); - } - - { - // open detailed view of 'CourseName' with browser 2 - System.out.println("logging in browser 2..."); - OLATWorkflowHelper workflow2 = context.getOLATWorkflowHelper(user2); - LRDetailedView lRDetailedView2 = workflow2.getLearningResources().searchMyResource(COURSE_NAME); - lRDetailedView2.exportLR(); - - // and wait until 'This course is currently edited by user1 and therefore locked.' appears - SeleniumHelper.waitUntilTextPresent(lRDetailedView2.getSelenium(), "This course is currently locked by "+user1.getUsername()+" due to editing purposes.", 20); - } - - { - // now click 'Close editor' in browser 1 - LRDetailedView lRDetailedView1 = courseEditor1.closeToLRDetailedView(); - - // delete course - lRDetailedView1.deleteLR(); - } - } -} - diff --git a/src/test/java/org/olat/test/functional/courseeditor/CoursePublishInvalidateClusterTest.java b/src/test/java/org/olat/test/functional/courseeditor/CoursePublishInvalidateClusterTest.java deleted file mode 100644 index 0c2443b01f2..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/CoursePublishInvalidateClusterTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.SeleniumHelper; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.StructureEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.i18n.LocalStringProvider; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests that after course publish, any other user that has the course open gets a - * "This course has been modified" message, and must close the course tab. - * - * @author eglis - * - */ -public class CoursePublishInvalidateClusterTest extends BaseSeleneseTestCase { - - private final String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_2; - private final String COURSE_NAME = "CoursePublishInvalidate" + System.currentTimeMillis(); - - private OlatLoginInfos user1; - - - public void testMultiBrowserClusterCourseViewPublish() throws Exception { - - com.thoughtworks.selenium.Selenium selenium1; - - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - user1 = context.createuserIfNotExists(1, "mbcnla1", standardPassword, true, true, true, true, true); - OlatLoginInfos user2 = context.createuserIfNotExists(2, "mbcnla2", standardPassword, true, true, true, true, true); - - //clone DEMO_COURSE_NAME and work with the clone - assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, COURSE_NAME)); - - { - // open the course 'Demo course wiki', modify it and get ready to hit the publish button - System.out.println("logging in browser 1..."); - OLATWorkflowHelper workflow1 = context.getOLATWorkflowHelper(user1); - CourseEditor courseEditor = workflow1.getLearningResources().searchAndShowCourseContent(COURSE_NAME).getCourseEditor(); - StructureEditor structureEditor = courseEditor.getRoot(COURSE_NAME); - structureEditor.setTitle("mod"); - //start publishing - selenium1 = courseEditor.getSelenium(); - selenium1.click("ui=courseEditor::toolbox_editorTools_publish()"); - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (selenium1.isTextPresent("Publishing")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - - selenium1.click("ui=courseEditor::publishDialog_howToPublish_firstTreeCheckbox()"); - selenium1.click("ui=courseEditor::publishDialog_next()"); - Thread.sleep(1000); - selenium1.click("ui=courseEditor::publishDialog_next()"); - Thread.sleep(1000); - assertTrue(selenium1.isTextPresent("No problems found")); - selenium1.click("ui=courseEditor::publishDialog_next()"); - Thread.sleep(1000); - //assertTrue(selenium1.isTextPresent("Do you really want to publish this course?")); - assertTrue(selenium1.isTextPresent(LocalStringProvider.COURSE_PUBLISH_CONFIRM)); - } - - CourseRun courseRun2; - { - // open 'Demo course wiki' with browser 2 - System.out.println("logging in browser 2..."); - OLATWorkflowHelper workflow2 = context.getOLATWorkflowHelper(user2); - courseRun2 = workflow2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - } - - { - // now trigger the publish in browser 1 - selenium1.click("ui=courseEditor::publishDialog_finish()"); - for (int second = 0;; second++) { - if (second >= 20) fail("timeout"); - try { if (selenium1.isTextPresent("Selected modifications published successfully")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - } - - { - // after that, any click course run 2 (browser 2) - //the root node gets modified, but the old browser session still shows - // "OLAT: Demo course" as root entry. click on it will trigger the "this course has been modified - if (courseRun2.getSelenium().isTextPresent("OLAT: Demo course")) { - courseRun2.selectRoot("OLAT: Demo course"); - } - // and waits until 'This course has been modified.' appears - SeleniumHelper.waitUntilTextPresent(courseRun2.getSelenium(),"This course has been modified.", 20); - // excellent, close course in browser 2 - courseRun2.close(COURSE_NAME); - } - - } - - - @Override - protected void cleanUpAfterRun() { - System.out.println("***************** cleanUpAfterRun STARTED *********************"); - - try { - //make sure you use the same user for cleanup, since the course could be locked - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(user1); - workflow.getLearningResources().searchResource(COURSE_NAME, null).deleteLR(); - workflow.logout(); - } catch (Exception e) { - System.out.println("Exception while tried to delete the test course!!!"); - } - - System.out.println("***************** cleanUpAfterRun ENDED *********************"); - } -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/CoursePublishInvalidateSingleVMTest.java b/src/test/java/org/olat/test/functional/courseeditor/CoursePublishInvalidateSingleVMTest.java deleted file mode 100644 index 802c30b2cc6..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/CoursePublishInvalidateSingleVMTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.SeleniumHelper; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests that after course publish, any other user that has the course open gets a - * "This course has been modified" message, and must close the course tab. - * - * @author eglis - * - */ -public class CoursePublishInvalidateSingleVMTest extends BaseSeleneseTestCase { - - //TODO: LD: import test course instead of cloning the DEMO_COURSE_NAME - private final String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_2; - private final String COURSE_NAME = "CoursePublishInvalidate" + System.currentTimeMillis(); - - public void testMultiBrowserCourseViewPublish() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.CLEAN_AND_RESTARTED_SINGLE_VM); - - //clone DEMO_COURSE_NAME and work with the clone - assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, COURSE_NAME)); - - OLATWorkflowHelper workflow_1 = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - OLATWorkflowHelper workflow_2 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - - // open the course 'Demo course wiki', modify it and get ready to hit the publish button - System.out.println("logging in browser 1..."); - CourseRun courseRun_1 = workflow_1.getLearningResources().searchAndShowMyCourseContent(COURSE_NAME); - Thread.sleep(9000); - CourseEditor courseEditor_1 = courseRun_1.getCourseEditor(); - CourseElementEditor courseElementEditor = courseEditor_1.selectCourseElement(COURSE_NAME); - courseElementEditor.setTitle("mod"); - - // open 'Demo course wiki' with browser 2 - System.out.println("logging in browser 2..."); - CourseRun courseRun_2 = workflow_2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - - // now trigger the publish in browser 1 - courseEditor_1.publishCourse(); - - // after that, click 'Wiki sandbox' in browser 2 - if(courseRun_2.isTextPresent("Wiki sandbox")) { - courseRun_2.selectCourseElement("Wiki sandbox"); - } - //and wait until 'This course has been deleted.' appears - SeleniumHelper.waitUntilTextPresent(courseRun_2.getSelenium(), "This course has been modified.", 60); //increased timeout - - // excellent, close course in browser 2 - courseRun_2.close(COURSE_NAME); - } - - @Override - protected void cleanUpAfterRun() { - try { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - workflow.getLearningResources().searchMyResource(COURSE_NAME).deleteLR(); - } catch (Exception e) { - System.out.println("Exception while tried to delete test course!!!"); - e.printStackTrace(); - } - } -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/CourseRenameTest.java b/src/test/java/org/olat/test/functional/courseeditor/CourseRenameTest.java deleted file mode 100644 index 967018843d8..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/CourseRenameTest.java +++ /dev/null @@ -1,82 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.StructureElement; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests the course title change and publish. - * Test setup & test case: - * Admin creates a clone of "Demo course wiki" course, publishes it, changes the title, - * publishes again, asserts if the course title was changed. Cleanup. - * - * - * @author lavinia - * - */ -public class CourseRenameTest extends BaseSeleneseTestCase { - - private final String DEMO_COURSE_NAME = Context.DEMO_COURSE_NAME_2; - private final String COURSE_NAME = "CourseRename" + System.currentTimeMillis(); - - public void testCoursePublish() throws Exception { - System.out.println("CoursePublishTest - before setupContext"); - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - System.out.println("CoursePublishTest - after setupContext"); - - //clone DEMO_COURSE_NAME and work with the clone - assertTrue(WorkflowHelper.cloneCourse(context, DEMO_COURSE_NAME, COURSE_NAME)); - - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos()); - System.out.println("CoursePublishTest - logged in"); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - Thread.sleep(9000); - CourseEditor courseEditor = courseRun.getCourseEditor(); - CourseElementEditor courseElementEditor = courseEditor.selectCourseElement(COURSE_NAME); - courseElementEditor.setTitle("mod"); - courseEditor.publishCourseAfterCourseTitleChanged(); - courseRun = courseEditor.closeToCourseRun(); - //asserts that root changed the title - StructureElement root = courseRun.selectRoot("mod"); - courseRun.close(COURSE_NAME); - } - - - @Override - public void cleanUpAfterRun() { - try { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - workflow.getLearningResources().searchMyResource(COURSE_NAME).deleteLR(); - } catch (Exception e) { - System.out.println("Exception while tried to delete test course!!!"); - e.printStackTrace(); - } - } - - -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/CreateBlogTest.java b/src/test/java/org/olat/test/functional/courseeditor/CreateBlogTest.java deleted file mode 100644 index d23e31b33f0..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/CreateBlogTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.BlogEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.BlogResource; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests the Blog BB and Blog Editor with both configurations internal and external - * <br/> - * <p> - * Test case: <br/> - * create course and add blog elements for internal and external blog <br/> - * edit internal blog <br/> - * edit blog in new tab <br/> - * close blog tab <br/> - * edit external blog <br/> - * close blog tab <br/> - * go back to course editor <br/> - * publish and check course view <br/> - * check content - assert <br/> - * delete course <br/> - * delete blog resource <br/> - * - * - * @author sandra, alberto - */ -public class CreateBlogTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "BlogCourse"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - private final String EXT_BLOG = "An External Blog"; - private final String INT_BLOG = "My Internal Blog"; - private final String INT_BLOG_MOD = "Mod Internal"; - private final String BLOG_DESC = "My First Blog"; - private final String BLOG_TITEL_OF_CONTENT = "Dubai"; - private final String BLOG_DESC_OF_CONTENT = "My Dubai trip"; - private final String BLOG_CONTENT = "trip to Dubai entry description"; - - - - - public void testCreateBlog() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - // create course and add blog elements for internal and external blog - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.BLOG, true, INT_BLOG); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.BLOG, true, EXT_BLOG); - - // edit internal blog - courseEditor.selectCourseElement(INT_BLOG); - BlogEditor blogEditorInt = (BlogEditor)courseEditor.selectCourseElement(INT_BLOG); - blogEditorInt.create(INT_BLOG, BLOG_DESC); - - // edit blog in new tab - BlogResource blogResource_1 = blogEditorInt.edit(); - blogResource_1.editBlog(INT_BLOG_MOD, "Trips around the world", null); - blogResource_1.createEntry(BLOG_TITEL_OF_CONTENT, BLOG_DESC_OF_CONTENT, BLOG_CONTENT, true); - - //close blog tab - LRDetailedView lRDetailedView = blogResource_1.close(); - courseEditor = lRDetailedView.editCourseContent(); - - // edit external blog - BlogEditor blogEditorExt = (BlogEditor)courseEditor.selectCourseElement(EXT_BLOG); - blogEditorExt.select(INT_BLOG_MOD); - BlogResource blogResource_2 = blogEditorExt.edit(); - - // close blog tab - LRDetailedView lRDetailedView2 = blogResource_2.close(); - // go back to course editor - courseEditor = lRDetailedView2.editCourseContent(); - - // publish and check course view - courseEditor.publishCourse(); - CourseRun courseRun = courseEditor.closeToLRDetailedView().showCourseContent(); - - //check content - courseRun.selectCourseElement(EXT_BLOG); - assertTrue(courseRun.isTextPresent(BLOG_TITEL_OF_CONTENT)); - assertTrue(courseRun.isTextPresent(BLOG_DESC_OF_CONTENT)); - - } - - - @Override - protected void cleanUpAfterRun() { - OLATWorkflowHelper olatWorkflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos()); - //delete course - LRDetailedView lRDetailedView3 = olatWorkflow.getLearningResources().searchMyResource(COURSE_NAME); - LearningResources lrs = lRDetailedView3.deleteLR(); - //delete blog ressource - LRDetailedView lRDetailedView4 = lrs.searchMyResource(INT_BLOG_MOD); - lRDetailedView4.deleteLR(); - } - - -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/CreatePodcastTest.java b/src/test/java/org/olat/test/functional/courseeditor/CreatePodcastTest.java deleted file mode 100644 index 024c5aacebd..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/CreatePodcastTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CoursePreview; -import org.olat.test.util.selenium.olatapi.course.editor.PodcastEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.PodcastResource; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests the Podcast BB and Podcast Editor with both configurations internal and external - * <br/> - * <p> - * Test case: <br/> - * create course with podcast element <br/> - * create 1 podcast whose entries are created within olat <br/> - * create 1 external podcast <br/> - * publish <br/> - * preview course <br/> - * check content of external podcast <br/> - * check content of internal podcast <br/> - * check content as student <br/> - * delete course and delete podcast resources <br/> - * - * - * @author alberto - */ -public class CreatePodcastTest extends BaseSeleneseTestCase { - private final String COURSE_NAME = "CreatePodcast"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - private final String INT_PODCAST = "Internal"; - private final String EXT_PODCAST = "External"; - private final String EXT_PODCAST_DESC = "First external Podcast"; - private final String INT_PODCAST_DESC = "First OLAT Podcast"; - - - public void testCreatePodcast() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - // create course and add podcast elements for internal and external podcast - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.PODCAST, true, INT_PODCAST); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.PODCAST, true, EXT_PODCAST); - - //create 1 podcast whose entries are created within olat - courseEditor.selectCourseElement(INT_PODCAST); - PodcastEditor podcastEditorInt = (PodcastEditor)courseEditor.selectCourseElement(INT_PODCAST); - podcastEditorInt.create(INT_PODCAST, INT_PODCAST_DESC); - - //create 1 external podcast - courseEditor.selectCourseElement(EXT_PODCAST); - PodcastEditor podcastEditorExt = (PodcastEditor)courseEditor.selectCourseElement(EXT_PODCAST); - podcastEditorExt.create(EXT_PODCAST, EXT_PODCAST_DESC); - PodcastResource podcastResource = podcastEditorExt.edit(); - podcastResource.includeExternal(EXT_PODCAST, EXT_PODCAST_DESC, "feed://pod.drs.ch/focus_-_die_talkshow_mpx.xml"); - LRDetailedView lrDetailedView = podcastResource.close(); - - //create Episode - courseEditor = lrDetailedView.editCourseContent(); - podcastEditorInt = (PodcastEditor)courseEditor.selectCourseElement(INT_PODCAST); - podcastResource = podcastEditorInt.edit(); - File mediaFile = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + "firstmedia.flv"); - String remoteFile = Context.getContext().provideFileRemotely(mediaFile); - podcastResource.createEpisode("Episode_title", "Episode_description", remoteFile); - LRDetailedView lRDetailedView = podcastResource.close(); - - // publish - courseEditor = lrDetailedView.editCourseContent(); - courseEditor.publishCourse(); - - //preview course - CourseRun courseRun = courseEditor.closeToLRDetailedView().showCourseContent(); - courseRun.selectCourseElement(EXT_PODCAST); - - //check content of external podcast - assertTrue(courseRun.isTextPresent(EXT_PODCAST_DESC)); - - //check content of internal podcast - courseRun.selectCourseElement(INT_PODCAST); - assertTrue(courseRun.isTextPresent(INT_PODCAST_DESC)); - - //preview as student - courseEditor = courseRun.getCourseEditor(); - CoursePreview coursePreview = courseEditor.openPreview(); - coursePreview.showPreview(); - - //check content as student - assertTrue(courseRun.isTextPresent("Course element of the type Podcast")); - coursePreview.selectCourseElement(EXT_PODCAST); - //TODO: When Podcast element has a preview, replace next line with accordingly - assertTrue(courseRun.isTextPresent("No preview available for this course element")); - coursePreview.selectCourseElement(EXT_PODCAST); - - //delete course and delete resource - courseEditor = coursePreview.closePreview(); - courseRun = courseEditor.closeToCourseRun(); - lrDetailedView = courseRun.getDetailedView(); - courseRun.close(COURSE_NAME); - LearningResources lrs = lrDetailedView.deleteLR(); - lrDetailedView = lrs.searchMyResource(EXT_PODCAST); - lrs = lrDetailedView.deleteLR(); - lrDetailedView = lrs.searchMyResource(INT_PODCAST); - lrs = lrDetailedView.deleteLR(); - - - } -} \ No newline at end of file diff --git a/src/test/java/org/olat/test/functional/courseeditor/DeletePublishIncompleteElementsTest.java b/src/test/java/org/olat/test/functional/courseeditor/DeletePublishIncompleteElementsTest.java deleted file mode 100644 index c03ed3d267d..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/DeletePublishIncompleteElementsTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CoursePreview; -import org.olat.test.util.selenium.olatapi.course.editor.SinglePageEditor; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.InsertPosition; -import org.olat.test.util.selenium.olatapi.course.editor.CoursePreview.Role; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -/** - * Tests incomplete publish workflows - * <br/> - * <p> - * Test case: <br/> - * create course <br/> - * create and insert single page, preview within single page <br/> - * insert structure element <br/> - * leave editor, enter editor <br/> - * copy single page, delete copy <br/> - * preview <br/> - * publish <br/> - * insert single page, create html page and assign to single page <br/> - * delete html-page in the storage folder <br/> - * publish, delete single page, publish <br/> - * delete course and logout <br/> - * - * @author alberto - */ -public class DeletePublishIncompleteElementsTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "CourseName"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - - - public void testDeletePublishIncompleteElementsTest() throws Exception { - - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - //create course - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - - //create and insert single page, preview within single page - SinglePageEditor singlePageEditor = (SinglePageEditor)courseEditor.insertCourseElement(CourseElemTypes.SINGLE_PAGE, true, "single page1"); - singlePageEditor.setDescription("This is the course TS090533 Description"); - singlePageEditor.createHTMLPage("first_html_descr", "a not very long content that serves as an example"); - singlePageEditor.preview(); - singlePageEditor.closePreview(); - - //insert structure element - CourseElementEditor courseElementEditor = courseEditor.insertCourseElement(CourseElemTypes.STRUCTURE, false, "structure1"); - courseElementEditor.setDescription("This is the description of first structure node"); - - //leave editor, enter editor - LRDetailedView lRDetailedView = courseEditor.closeToLRDetailedView(); - courseEditor = lRDetailedView.editCourseContent(); - - //copy single page, delete copy - courseEditor.selectCourseElement("single page1"); - courseEditor.copyCourseElement(InsertPosition.FIRST_CHILD_OF_ROOT, "single page2"); - courseEditor.deleteCourseElement(); - - //preview - CoursePreview coursePreview = courseEditor.openPreview(); - coursePreview.changeRole(Role.AUTHOR); - coursePreview.showPreview(); - courseEditor = coursePreview.closePreview(); - - //publish - courseEditor.publishCourse(); - - //insert single page, create html page and assign to single page - singlePageEditor = (SinglePageEditor)courseEditor.insertCourseElement(CourseElemTypes.SINGLE_PAGE, true, "single page2"); - singlePageEditor.setDescription("This is the second course TS090533 Description"); - singlePageEditor.createHTMLPage("second_html_descr", "a not very long content that serves as an example too"); - - //delete html-page in the storage folder - Folder storageFolder = courseEditor.storageFolder(); - storageFolder.deleteItem("second_html_descr.html"); - - //publish, delete single page, publish - courseEditor.publishCourse(); - courseEditor.selectCourseElement("single page2"); - courseEditor.deleteCourseElement(); - courseEditor.publishCourse(); - - //delete course and logout - courseEditor.closeToLRDetailedView().deleteLR(); - olatWorkflow.logout(); - } -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/EnrolmentCreateGroupsWithCSVTest.java b/src/test/java/org/olat/test/functional/courseeditor/EnrolmentCreateGroupsWithCSVTest.java deleted file mode 100644 index 4ada08a5b55..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/EnrolmentCreateGroupsWithCSVTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.EnrolmentEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests Jira Issue OLAT-4515 - * <br/> - * <p> - * Test setup: <br/> - * create course and open course editor <br/> - * insert enrolment element <br/> - * select configuration tab for creating new groups <br/> - * create group gr1 and group gr2 with CSV input <br/> - * assure that group gets added to the group enumeration in the learning group text element <br/> - * Delete groups <br/> - * create groups again, but one more. example: - gr1comma, gr2comma, gr3comma <br/> - * close course <br/> - * </p> - * - * @author alberto - */ -public class EnrolmentCreateGroupsWithCSVTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "EnrollWithCSV"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - private final String GR1 = "gr1comma"; - private final String GR2 = "gr2comma"; - private final String GR3 = "gr3comma"; - - public void testEnrolmentCreateGroupsWithCSV() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - //create course and open course editor - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - - //insert enrolment element - EnrolmentEditor enrolmentEditor = (EnrolmentEditor)courseEditor.insertCourseElement(CourseElemTypes.ENROLMENT, true, null); - - //select configuration tab for creating new groups - //create group gr1 and group gr2 with CSV input - String groupEnumerationString = GR1+","+GR2; - enrolmentEditor.createAndSelectGroups(groupEnumerationString); - assertTrue(enrolmentEditor.isGroupSelected(GR1)); - assertTrue(enrolmentEditor.isGroupSelected(GR2)); - - //delete groups - CourseRun courseRun = courseEditor.closeToLRDetailedView().showCourseContent(); - GroupManagement groupManagement = courseRun.getGroupManagement(); - groupManagement.deleteGroup(GR1); - groupManagement.deleteGroup(GR2); - courseRun = groupManagement.close(); - - //create groups again, but one more. in example: gr1comma, gr2comma, gr3comma - courseEditor = courseRun.getCourseEditor(); - enrolmentEditor = (EnrolmentEditor)courseEditor.selectCourseElement(CourseEditor.ENROLMENT_TITLE); - groupEnumerationString += ","+GR3; - enrolmentEditor.createAndSelectGroups(groupEnumerationString); - assertTrue(enrolmentEditor.isGroupSelected(GR1)); - assertTrue(enrolmentEditor.isGroupSelected(GR2)); - assertTrue(enrolmentEditor.isGroupSelected(GR3)); - - //close course - courseEditor.closeToCourseRun().closeAny(); - } -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/MoveDeleteElementsTest.java b/src/test/java/org/olat/test/functional/courseeditor/MoveDeleteElementsTest.java deleted file mode 100644 index 48ecf100f2d..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/MoveDeleteElementsTest.java +++ /dev/null @@ -1,150 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CoursePreview; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.InsertPosition; -import org.olat.test.util.selenium.olatapi.course.editor.CoursePreview.Role; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -/** - * - * Tests changes in course tree structure by moving and deleting nodes - * <br/> - * <p> - * Test case: <br/> - * login as author <br/> - * create course <br/> - * insert elements with subelements, publish <br/> - * insert more elements with subelements, publish <br/> - * navigate in coursemenu, delete only a subelement, publish <br/> - * delete element with subelements, move first element to last position, publish <br/> - * leave editor, enter editor <br/> - * delete first and last elements, restore first, delete first <br/> - * preview, another preview with modified roles, publish <br/> - * delete course <br/> - * - * @author alberto - */ - -public class MoveDeleteElementsTest extends BaseSeleneseTestCase { - private final String COURSE_NAME = "CourseMoveDelete"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - private OLATWorkflowHelper workflow; - - public void testCourseEditor_moveDeleteElementsTest() throws Exception { - - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - workflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - - CourseEditor courseEditor = workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - courseEditor.insertCourseElement(CourseElemTypes.STRUCTURE, true, null); - courseEditor.insertCourseElement(CourseElemTypes.FORUM, false, null); - courseEditor.insertCourseElement(CourseElemTypes.FOLDER, false, "Folder1"); - courseEditor.insertCourseElement(CourseElemTypes.FOLDER, false, "Folder2"); - courseEditor.publishCourse(); - //close course, start run, start editor - LRDetailedView lRDetailedView = courseEditor.closeToLRDetailedView(); - courseEditor = lRDetailedView.showCourseContent().getCourseEditor(); - - courseEditor.insertCourseElement(CourseElemTypes.STRUCTURE, InsertPosition.FOLLOWING_SIBLING_OF_ELEMENT, CourseEditor.STRUCTURE_TITLE, "Structure1"); - courseEditor.insertCourseElement(CourseElemTypes.FOLDER, InsertPosition.FIRST_CHILD_OF_ELEMENT, "Structure1", "Folder3"); - courseEditor.insertCourseElement(CourseElemTypes.FOLDER, InsertPosition.FIRST_CHILD_OF_ELEMENT, "Structure1", "Folder4"); - courseEditor.insertCourseElement(CourseElemTypes.STRUCTURE, false, "Structure2"); - courseEditor.insertCourseElement(CourseElemTypes.STRUCTURE, false, "Structure3"); - - courseEditor.publishFirstChangedElement(); - courseEditor.publishFirstChangedElement(); - - courseEditor.insertCourseElement(CourseElemTypes.STRUCTURE, false, "Structure4"); - courseEditor.insertCourseElement(CourseElemTypes.FOLDER, InsertPosition.FIRST_CHILD_OF_ELEMENT, "Structure4", "Folder5"); - courseEditor.insertCourseElement(CourseElemTypes.FOLDER, InsertPosition.FIRST_CHILD_OF_ELEMENT, "Structure4", "Folder6"); - courseEditor.insertCourseElement(CourseElemTypes.STRUCTURE, false, "Structure5"); - courseEditor.insertCourseElement(CourseElemTypes.STRUCTURE, false, "Structure6"); - /*while(courseEditor.publishFirstChangedElement()) { - System.out.println("one more node to be published found"); - }*/ - courseEditor.publishCourse(); - - courseEditor.selectCourseElement("Structure4"); - courseEditor.selectCourseElement("Folder6"); - courseEditor.selectCourseElement("Folder5"); - courseEditor.deleteCourseElement(); - courseEditor.publishFirstChangedElement(); - //close course, start run, start editor - CourseRun courseRun = courseEditor.closeToCourseRun(); - assertTrue(courseRun.isTextPresent("Structure6")); - assertFalse(courseRun.isTextPresent("Folder5")); - courseEditor = courseRun.getCourseEditor(); - - courseEditor.selectCourseElement("Structure5"); - courseEditor.selectCourseElement("Structure4"); - courseEditor.deleteCourseElement(); - courseEditor.publishFirstChangedElement(); - courseEditor.selectCourseElement("Structure1"); - courseEditor.moveCourseElement(InsertPosition.LAST_CHILD_OF_ROOT, null); - courseEditor.publishCourse(); - - courseEditor.closeToCourseRun(); - assertFalse(courseRun.isTextPresent("Structure4")); - assertTrue(courseRun.isTextPresent("Structure1")); - - courseEditor = workflow.getLearningResources().searchMyResource(COURSE_NAME).editCourseContent(); - courseEditor.selectCourseElement("Folder2"); - courseEditor.deleteCourseElement(); - courseEditor.selectCourseElement("Structure3"); - courseEditor.deleteCourseElement(); - courseEditor.selectCourseElement("Folder2"); - courseEditor.undeleteCourseElement(); - - - CoursePreview coursePreview = courseEditor.openPreview(); - coursePreview.changeRole(Role.AUTHOR); - coursePreview.changeRole(Role.REGISTERED_USER); - coursePreview.showPreview(); - - //assertFalse(coursePreview.isTextPresent("Structure3")); - assertTrue(coursePreview.isTextPresent("Folder2")); - - //check this out - coursePreview.selectCourseElement("Structure1"); - - courseEditor = coursePreview.closePreview(); - courseEditor.publishCourse(); - courseEditor.closeToCourseRun().close(COURSE_NAME); - - workflow.getLearningResources().searchMyResource(COURSE_NAME).deleteLR(); - } - - - @Override - protected void cleanUpAfterRun() { - System.out.println("***************** cleanUpAfterRun STARTED *********************"); - workflow.logout(); - System.out.println("***************** cleanUpAfterRun ENDED *********************"); - } - -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/OpenEditSessionTest.java b/src/test/java/org/olat/test/functional/courseeditor/OpenEditSessionTest.java deleted file mode 100644 index 42de02ae998..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/OpenEditSessionTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Test the open/close course edit session. - * See OLAT-4546. - * - * Test case: <br/> - * Author: <br/> - * - creates course, insert node, publish, close course to detail view <br/> - * - open course run from detail view <br/> - * - go to detail view again (select detail view from course run), and modify property (e.g. access) <br/> - * - click edit course (from detail view) and land to the disposed course <br/> - * - click "Close and restart course" -> reopens course run <br/> - * - edit course again (e.g. insert node) and publish. Close course. <br/> - * - delete course. - * - * @author Lavinia Dumitrescu - * - */ -public class OpenEditSessionTest extends BaseSeleneseTestCase { - - private String COURSE_NAME = "AAA"+ System.currentTimeMillis(); - private boolean cleanedUp = false; - - - public void testOpenEditSession() { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - CourseEditor courseEditor = workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, "bla"); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FORUM, true, null); - CourseElementEditor courseElementEditor = courseEditor.selectCourseElement("Forum"); - courseElementEditor.setDescription("NEW DESCRIPTION"); - - courseEditor.publishCourse(); - CourseRun courseRun = courseEditor.closeToLRDetailedView().showCourseContent(); - - LRDetailedView lRDetailedView = courseRun.getDetailedView(); - lRDetailedView.modifyProperties(LRDetailedView.ACCESS_REGISTERED_AND_GUESTS); - - //the course run was disposed due to property change - courseRun = lRDetailedView.selectDisposedCourse().closeCourseAndRestart(); - courseEditor = courseRun.getCourseEditor(); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.STRUCTURE, true, null); - courseEditor.publishCourse(); - //cleanup - courseEditor.closeToCourseRun().getDetailedView().deleteLR(); - cleanedUp = true; - } - - - @Override - protected void cleanUpAfterRun() { - System.out.println("***************** cleanUpAfterRun STARTED *********************"); - //cleanup - if(!cleanedUp) { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos()); - workflow.getLearningResources().searchMyResource(COURSE_NAME).deleteLR(); - } - System.out.println("***************** cleanUpAfterRun ENDED *********************"); - } -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/courseEditor_concurrenciesEditTest.java b/src/test/java/org/olat/test/functional/courseeditor/courseEditor_concurrenciesEditTest.java deleted file mode 100644 index fc442f04ca2..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/courseEditor_concurrenciesEditTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.SeleniumHelper; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -/** - * - * Assure that owner A and B cannot start editing the same course at the same time. - * <br/> - * <p> - * Test setup:<br/> - * 1. user1 (standardauthor) creates course Coursename<br/> - * 2. user2 (standardstudent) is also owner of course Coursename<br/> - * 3. cleanup in the end: course is deleted<br/> - * - * Test case: <br/> - * 1. user1 creates course "CourseName" with the element "forum" and adds user2 as owner <br/> - * 2. user2 opens detailed view of course "CourseName" in browser 2<br/> - * 3. user1 clicks edit "CourseName" in browser 1<br/> - * 4. user2 clicks "Edit content" in browser 2 <br/> - * 5. Check if the message "This course is currently edited by 'user1' and therefore locked." appears<br/> - * 6. user1 closes editor in browser 1<br/> - * 7. user2 clicks "Edit content" in browser 2<br/> - * 8. Check if "This course has never been published." appears<br/> - * </p> - * - * @author kristina - * - */ -public class courseEditor_concurrenciesEditTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "CourseName"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - - - protected com.thoughtworks.selenium.Selenium selenium1; - protected com.thoughtworks.selenium.Selenium selenium2; - - public void testcourseEditor_concurrenciesEditTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - OlatLoginInfos user1 = context.getStandardAuthorOlatLoginInfos(1); - OlatLoginInfos user2 = context.getStandardStudentOlatLoginInfos(2); - - //user1 creates course COURSE_NAME with the element "forum" and adds user 2 as owner - System.out.println("logging in browser 1..."); - OLATWorkflowHelper olatWorkflow1 = context.getOLATWorkflowHelper(user1); - CourseEditor courseEditor = olatWorkflow1.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FORUM, true, null); - LRDetailedView lRDetailedView = courseEditor.closeToLRDetailedView(); - lRDetailedView.assignOwner(user2.getUsername()); - - //user 2 opens detailed view of course COURSE_NAME in browser 2 - System.out.println("logging in browser 2..."); - OLATWorkflowHelper olatWorkflow2 = context.getOLATWorkflowHelper(user2); - LearningResources learningResources2 = olatWorkflow2.getLearningResources(); - LRDetailedView lRDetailedView2 = learningResources2.searchMyResource(COURSE_NAME); - - //user 1 clicks edit COURSE_NAME in browser 1 - CourseEditor courseEditor3 = lRDetailedView.editCourseContent(); - - //user2 clicks "Edit content" in browser 2 - boolean isCourseLocked = lRDetailedView2.checkCourseLocked(user1.getUsername()); - assertTrue(isCourseLocked); - - //user1 closes editor in browser 1 - courseEditor3.closeToLRDetailedView(); //course run was open via the LRDetailedView - - //user2 clicks "Edit content" in browser 2 - CourseEditor courseEditor4 = lRDetailedView2.editCourseContent(); - - //Check if "This course has never been published." appears - SeleniumHelper.waitUntilTextPresent(lRDetailedView2.getSelenium(), "This course has never been published.", 20); - - //delete course - LRDetailedView lRDetailedView3 = courseEditor4.closeToLRDetailedView(); - try { - lRDetailedView3.deleteLR(); - } catch (Exception e) {} - } -} - - diff --git a/src/test/java/org/olat/test/functional/courseeditor/courseEditor_consistencyPublishTest.java b/src/test/java/org/olat/test/functional/courseeditor/courseEditor_consistencyPublishTest.java deleted file mode 100644 index 8bcbce45781..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/courseEditor_consistencyPublishTest.java +++ /dev/null @@ -1,124 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Cancel publish workflow in different moments of the workflow - * <br/> - * <p> - * Test setup:<br/> - * 1. standardauthor creates course CoursName <br/> - * 2. Cleanup in the end: delete learning resource<br/> - * <br/> - * Test case: <br/> - * 1. create course "CourseName" <br/> - * 2. insert forum, click publish, change access to all registered OLAT users<br/> - * 3. insert structure, click publish, cancel<br/> - * 4. click publish, select all, cancel<br/> - * 5. click publish, click next, cancel<br/> - * 6. click publish, click select all, click next, choose Only owners of this learning resource, cancel<br/> - * 7. click publish, select firstTreeCheckbox, click next, click finish<br/> - * 8. close editor<br/> - * 9. click show content<br/> - * 10. click forum<br/> - * 11. click detail view<br/> - * 12. delete course CourseName <br/> - * </p> - * - * @author kristina - * - */ - -public class courseEditor_consistencyPublishTest extends BaseSeleneseTestCase { - - - public void testcourseEditor_consistencyPublishTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - //selenium = context.createSeleniumAndLogin(context.getStandardAuthorOlatLoginInfos()); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing("CourseName", "CourseDescription"); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FORUM, true, null); - courseEditor.publishCourse(); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.STRUCTURE, true, null); - selenium = courseEditor.getSelenium(); - - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_cancel()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_howToPublish_firstTreeCheckbox()"); - // cancel publish - selenium.click("ui=courseEditor::publishDialog_cancel()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_selectall()"); - selenium.waitForPageToLoad("30000"); - //cancel publish - selenium.click("ui=courseEditor::publishDialog_cancel()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - //cancel publish - selenium.click("ui=courseEditor::publishDialog_cancel()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_selectall()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - selenium.select("ui=courseEditor::publishDialog_courseAccessDropDown()", "label=Only owners of this learning resource"); - //cancel publish - selenium.click("ui=courseEditor::publishDialog_cancel()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_howToPublish_firstTreeCheckbox()"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_finish()"); - selenium.waitForPageToLoad("30000"); - - //we are still in the courseEditor - LRDetailedView lRDetailedView = courseEditor.closeToLRDetailedView(); - CourseRun courseRun = lRDetailedView.showCourseContent(); - courseRun.selectCourseElement(CourseEditor.STRUCTURE_TITLE); - courseRun.selectCourseElement(CourseEditor.FORUM_COURSE_ELEM_TITLE); - lRDetailedView = courseRun.getDetailedView(); - try { - lRDetailedView.deleteLR(); - } catch (Exception e) {} - - } -} diff --git a/src/test/java/org/olat/test/functional/courseeditor/courseEditor_insertElementsAMTest.java b/src/test/java/org/olat/test/functional/courseeditor/courseEditor_insertElementsAMTest.java deleted file mode 100644 index 5c546fc5b30..00000000000 --- a/src/test/java/org/olat/test/functional/courseeditor/courseEditor_insertElementsAMTest.java +++ /dev/null @@ -1,124 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.courseeditor; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.editor.FolderEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.InsertPosition; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * create course with all elements and configure - * <br/> - * <p> - * Test setup:<br/> - * 1. Standardauthor creates course COURSE_NAME<br/> - * 2. cleanup in the end: delete learning resource<br/> - * <br/> - * Test case: <br/> - * 1. create course "CourseName" and start course editor <br/> - * 2. insert structure<br/> - * 3. insert single page<br/> - * 4. insert external page<br/> - * 5. insert cp<br/> - * 6. insert scorm<br/> - * 7. insert forum<br/> - * 8. insert wiki<br/> - * 9. insert file dialog<br/> - * 10. insert folder<br/> - * 11. insert assessment<br/> - * 12. insert task<br/> - * 13. insert test<br/> - * 14. insert selftest<br/> - * 15. insert questionnaire<br/> - * 16. insert enrolment<br/> - * 17. insert contact form<br/> - * 18. move contact form<br/> - * 19. delete contact form<br/> - * 20. click on folder, goto tab visibility<br/> - * 21. choose blocked for learners, save<br/> - * 22. goto tab access, deselect blocked for learner (Read and Write), choose blocked for learners (read only)<br/> - * 23. click course preview<br/> - * 24. close course editor<br/> - * 25. delete course <br/> - * </p> - * - * @author kristina - * - */ - -public class courseEditor_insertElementsAMTest extends BaseSeleneseTestCase { - private final String COURSE_NAME = "CourseName"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - private final String FOLDER_NAME = "Folder"; - - - public void testcourseEditor_insertElementsAMTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - // create course "CourseName" and start course editor - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - // insert structure, single page, external page etc. - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.STRUCTURE, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.SINGLE_PAGE, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.EXTERNAL_PAGE, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.CP_LEARNING_CONTENT, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.SCORM_LEARNING_CONTENT, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FORUM, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.WIKI, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FILE_DIALOG, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FOLDER, true, FOLDER_NAME); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.ASSESSMENT, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.TASK, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.TEST, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.SELF_TEST, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.QUESTIONNAIRE, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.ENROLMENT, true, null); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.CONTACT_FORM, true, null); - courseEditor.selectCourseElement(CourseEditor.CONTACT_FORM_TITLE); - courseEditor.moveCourseElement(InsertPosition.FIRST_CHILD_OF_ROOT, null); - courseEditor.selectCourseElement(CourseEditor.CONTACT_FORM_TITLE); - courseEditor.deleteCourseElement(); - - // click on folder, goto tab visibility - FolderEditor folderEditor = (FolderEditor)courseEditor.selectCourseElement(FOLDER_NAME); - // choose blocked for learners, save - folderEditor.changeVisibilityBlockForLearners(); - //goto tab access, deselect blocked for learner (Read and Write), choose blocked for learners (read only) - folderEditor.changeAccessBlockForLearnersReadAndWrite(); - folderEditor.changeAccessBlockForLearnersReadOnly(); - - // click course preview, close preview - courseEditor.preview(); - // close course editor - LRDetailedView lRDetailedView = courseEditor.closeToLRDetailedView(); - try { - // delete course - lRDetailedView.deleteLR(); - } catch (Exception e) {} - } -} diff --git a/src/test/java/org/olat/test/functional/group/management/CollaborationToolsTest.java b/src/test/java/org/olat/test/functional/group/management/CollaborationToolsTest.java deleted file mode 100644 index 23c19ba1e4c..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/CollaborationToolsTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import org.junit.Ignore; -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * test groupChat stuff and polling (changing interval) - * - * @author Guido - * - */ -@Ignore -public class CollaborationToolsTest extends BaseSeleneseTestCase { - - - private OLATWorkflowHelper workflow1; - private OLATWorkflowHelper workflow2; - - public void testCourseChat() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - workflow1 = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - workflow2 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(2)); - - String nameOfGroup ="junittest-"+System.currentTimeMillis(); - //browser 1 - GroupAdmin groupAdmin1 = workflow1.getGroups().createProjectGroup(nameOfGroup, "junittest"); - groupAdmin1.setTools(true, true, true, true, true, false, true); - String[] owners = {context.getStandardAuthorOlatLoginInfos(2).getUsername()}; - groupAdmin1.addMembers(new String[0], owners); - groupAdmin1.close(nameOfGroup); - - //browser 2 - GroupAdmin groupAdmin2 = workflow2.getGroups().selectGroup(nameOfGroup).selectAdministration(); - assertTrue(groupAdmin2.isChatSelected()); - groupAdmin2.setTools(false, false, false, false, false, true, false); - groupAdmin2.close(nameOfGroup); - - //browser 1 - groupAdmin1 = workflow1.getGroups().selectGroup(nameOfGroup).selectAdministration(); - assertTrue(groupAdmin1.isWikiSelected()); - - } - -} diff --git a/src/test/java/org/olat/test/functional/group/management/ConcurrentEnrolmentTest.java b/src/test/java/org/olat/test/functional/group/management/ConcurrentEnrolmentTest.java deleted file mode 100644 index defcd972bd2..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/ConcurrentEnrolmentTest.java +++ /dev/null @@ -1,161 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.EnrolmentEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; - -/** - * - * Tests if subscription to a learning group with just one place is locked if many students enrol simultaneously. - * <br/> - * Test setup: <br/> - * 1. Delete all learning groups from authors and students. <br/> - * 2. Create five student test users. <br/> - * <p> - * Test case: <br/> - * 1. Author goes to learning resources and creates course COURSE_NAME. <br/> - * 2. Author goes to group management and creates learning group "learning group selenium 5". <br/> - * 3. Author configures group to allow just one member and no waiting list. <br/> - * 4. Author opens course editor, adds course element enrolment and selects the above created group. <br/> - * 5. Author publishes course. <br/> - * 6. All five students log in and start course COURSE_NAME, navigate to enrolment course element. <br/> - * 7. Check that only one student gets into group, all other four get appropriate error message that - * group is already full. <br/> - * 8. Author deletes course. <br/> - * - * @author sandra - * - */ - -public class ConcurrentEnrolmentTest extends BaseSeleneseTestCase { - - - protected com.thoughtworks.selenium.Selenium seleniums[] = new com.thoughtworks.selenium.Selenium[5]; - private final static String COURSE_NAME = "Course_for_Enrolment_Concurrency" + System.currentTimeMillis(); - - public void testConcurrentEnrolmentTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos student02= context.createuserIfNotExists(2, "enrolstudi02", standardPassword, true, false, false, false, false); - OlatLoginInfos student03= context.createuserIfNotExists(1, "enrolstudi03", standardPassword, true, false, false, false, false); - OlatLoginInfos student04= context.createuserIfNotExists(2, "enrolstudi04", standardPassword, true, false, false, false, false); - OlatLoginInfos student05= context.createuserIfNotExists(1, "enrolstudi05", standardPassword, true, false, false, false, false); - - - // Author01 creates course with learning group (max 1 participant) and enrolment course element - System.out.println("logging in browser 1..."); - OLATWorkflowHelper olatWorkflow_0 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - LearningResources learningResources_0 = olatWorkflow_0.getLearningResources(); - LRDetailedView lRDetailedView_0 = learningResources_0.createResource(COURSE_NAME, "Enrolment Test", LR_Types.COURSE); - CourseRun courseRun_0 = learningResources_0.searchAndShowMyCourseContent(COURSE_NAME); - GroupManagement groupManagement_0 = courseRun_0.getGroupManagement(); - groupManagement_0.createLearningGroup("learning group selenium 5", "fifth lg", 1, false, false); - courseRun_0 = groupManagement_0.close(); - CourseEditor courseEditor_0 = courseRun_0.getCourseEditor(); - EnrolmentEditor enrollmentElement_0 = (EnrolmentEditor)courseEditor_0.insertCourseElement(CourseEditor.CourseElemTypes.ENROLMENT, true, null); - enrollmentElement_0.selectLearningGroups("learning group selenium 5"); - courseEditor_0.publishCourse(); - courseEditor_0.closeToCourseRun(); - olatWorkflow_0.logout(); - - // student01 opens course and navigates to enrolment course element - courseRun_0 = this.selectEnrolment(context.getStandardStudentOlatLoginInfos(1), COURSE_NAME); - - // student02 opens course and navigates to enrolment course element - System.out.println("logging in browser 2..."); - CourseRun courseRun_1 = this.selectEnrolment(student02, COURSE_NAME); - - // student03 opens course and navigates to enrolment course element - System.out.println("logging in browser 3..."); - CourseRun courseRun_2 = this.selectEnrolment(student03, COURSE_NAME); - - // student04 opens course and navigates to enrolment course element - System.out.println("logging in browser 4..."); - CourseRun courseRun_3 = this.selectEnrolment(student04, COURSE_NAME); - - // student05 opens course and navigates to enrolment course element - System.out.println("logging in browser 5..."); - CourseRun courseRun_4 = this.selectEnrolment(student05, COURSE_NAME); - - // All students enrol, only student01 should get into group - seleniums[0] = courseRun_0.getSelenium(); - seleniums[1] = courseRun_1.getSelenium(); - seleniums[2] = courseRun_2.getSelenium(); - seleniums[3] = courseRun_3.getSelenium(); - seleniums[4] = courseRun_4.getSelenium(); - - seleniums[0].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - seleniums[1].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - seleniums[2].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - seleniums[3].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - seleniums[4].click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 5)"); - - int numWinners = 0; - int numLoosers = 0; - for(int i=0; i<5; i++) { - seleniums[i].waitForPageToLoad("30000"); - if (seleniums[i].isTextPresent("enrolled")) { - numWinners++; - } else if (seleniums[i].isTextPresent("In the meantime this group is complete. Please select another one.")) { - numLoosers++; - } else { - fail("oups..."); - } - } - assertEquals("expected only 1 winner", 1, numWinners); - assertEquals("expected only 4 loosers", 4, numLoosers); - } - - private CourseRun selectEnrolment(OlatLoginInfos student, String courseName) { - Context context = Context.getContext(); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(student); - CourseRun courseRun = olatWorkflow.getLearningResources().searchAndShowCourseContent(courseName); - courseRun.selectCourseElement(CourseEditor.ENROLMENT_TITLE); - return courseRun; - } - - - @Override - protected void cleanUpAfterRun() { - System.out.println("***************** cleanUpAfterRun STARTED *********************"); - //author01 deletes course - Context context = Context.getContext(); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - LRDetailedView lRDetailedView = olatWorkflow.getLearningResources().searchMyResource(COURSE_NAME); - try { - lRDetailedView.deleteLR(); - } catch (Exception e) {} - System.out.println("***************** cleanUpAfterRun ENDED *********************"); - } - -} diff --git a/src/test/java/org/olat/test/functional/group/management/ConcurrentVisibilityTest.java b/src/test/java/org/olat/test/functional/group/management/ConcurrentVisibilityTest.java deleted file mode 100644 index 074b20e0695..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/ConcurrentVisibilityTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.StructureElement; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; - -/** - * - * Tests if group dependent visibility restrictions on course elements work depending on group membership. - * <br/> - * Test setup: <br/> - * 1. Delete all learning resources from author. <br/> - * <p> - * Test case: <br/> - * 1. Author goes to learning resources and creates course COURSE_TITLE. <br/> - * 2. Author goes to group management and creates learning group GROUP_NAME. <br/> - * 3. Author adds student 1 as participant and student 2 as tutor to group. <br/> - * 4. Author opens course editor, adds folder course element and restricts visibility to above created group. <br/> - * 5. Author publishes course. <br/> - * 6. Student 1 opens course COURSE_TITLE and navigates to folder. <br/> - * 7. Student 2 opens course COURSE_TITLE, opens group management and removes student 1 from group. <br/> - * 8. Student 1 tries to access folder but as access rights have altered gets back to course root element. <br/> - * 9. Author deletes course COURSE_TITLE. <br/> - * - * @author sandra - * - */ - -public class ConcurrentVisibilityTest extends BaseSeleneseTestCase { - - private final String COURSE_TITLE = "Course_for_Enrolment_Concurrency2-"+System.currentTimeMillis(); - private final String GROUP_NAME = "learning group selenium 6"; - private final String STUDENT_USER_NAME = "srenrolstudi03"; - - - public void testConcurrentVisibility() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(2).getPassword(); - OlatLoginInfos student02= context.createuserIfNotExists(1, STUDENT_USER_NAME, standardPassword, true, false, false, false, false); - - { - // Author01 add learning group to course COURSE_TITLE, adds student01 - // as tutor and enrolmentstudent02 as participant and adds folder with visibility restriction to this group - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - System.out.println("logging in browser 1..."); - LearningResources learningResources = olatWorkflow.getLearningResources(); - learningResources.createResource(COURSE_TITLE, "Enrolment Test", LR_Types.COURSE); - LRDetailedView lRDetailedView = learningResources.searchMyResource(COURSE_TITLE); - CourseRun courseRun = lRDetailedView.showCourseContent(); - courseRun.getGroupManagement().createGroupAndAddMembers(GROUP_NAME, context.getStandardStudentOlatLoginInfos(2).getUsername(), STUDENT_USER_NAME); - CourseEditor courseEditor = courseRun.getCourseEditor(); - CourseElementEditor courseElementEditor = courseEditor.insertCourseElement(CourseElemTypes.FOLDER, true, null); - courseElementEditor.changeVisibilityDependingOnGroup(GROUP_NAME); - courseEditor.publishCourse(); - courseEditor.closeToCourseRun(); - olatWorkflow.logout(); - } - - //enrolmentstudent02 opens course and navigates to folder - OLATWorkflowHelper olatWorkflow1 = context.getOLATWorkflowHelper(student02); - CourseRun courseRun1 = olatWorkflow1.getLearningResources().searchAndShowCourseContent(COURSE_TITLE); - courseRun1.selectCourseElement("Folder"); - - // student01 opens course, then group administration and removes - // enrolmentstudent02 from group - OLATWorkflowHelper olatWorkflow2 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - CourseRun courseRun2 = olatWorkflow2.getLearningResources().searchAndShowCourseContent(COURSE_TITLE); - Thread.sleep(3000); - courseRun2.removeFromTutoredGroup(GROUP_NAME, STUDENT_USER_NAME); - - - // enrolmentstudent02 should not be able to select the folder node anymore: - //when the user attempts to select the node the root gets selected and the user gets a accessRightAltered message - /*courseRun1.selectCourseElement("Folder"); - selenium1 = courseRun1.getSelenium();*/ - StructureElement root = courseRun1.selectAnyButGetToRoot("Folder"); - - boolean accessRightAltered = false; - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { - if (root.getSelenium().isTextPresent("Your access rights have been altered in the meantime. Therefore you cannot select the course element required anymore.")) { - accessRightAltered = true; - break; } - } catch (Exception e) {} - Thread.sleep(1000); - - } - assertTrue("Asserts that the access rights message shows up",accessRightAltered); - - } - - @Override - protected void cleanUpAfterRun() { - //author01 deletes course - OLATWorkflowHelper olatWorkflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - LearningResources learningResources = olatWorkflow.getLearningResources(); - learningResources.searchMyResource(COURSE_TITLE).deleteLR(); - } - - -} diff --git a/src/test/java/org/olat/test/functional/group/management/ConfigureToolsLearningGroup.java b/src/test/java/org/olat/test/functional/group/management/ConfigureToolsLearningGroup.java deleted file mode 100644 index 36380293715..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/ConfigureToolsLearningGroup.java +++ /dev/null @@ -1,108 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.Forum; -import org.olat.test.util.selenium.olatapi.group.Group; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.selenium.olatapi.home.Home; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Adds all collaborative tools to learning group and checks their configuration, part of test suite GroupManagementCombiTest.java. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. Authors goes to learning resources and opens course COURSE_NAME. <br/> - * 2. Author opens group management and edits group GROUP_NAME_1. <br/> - * 3. Author configures group tools to info on, contact form on, calendar on, folder on, forum on, wiki on, chat off. <br/> - * 4. Author edits group info message. <br/> - * 5. Author starts group and writes forum message. <br/> - * 6. Student selects group GROUP_NAME_1 from Home - My groups. <br/> - * 7. Student checks if info message is present. <br/> - * 8. Student replies to forum message. <br/> - * 9. Student checks if he can see members.<br/> - * 10. Student checks if calendar is present. <br/> - * 11. Student starts course and checks if enrolment course element is present. <br/> - * - * @author sandra - * - */ - - -public class ConfigureToolsLearningGroup extends BaseSeleneseTestCase { - - @Test(dependsOnGroups={GroupManagementCombiTest.SECOND}) - public void testConfigureToolsLearningGroupTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos student02= context.createuserIfNotExists(1, GroupManagementCombiTest.STUDENT_USER_NAME, standardPassword, true, false, false, false, false); - - // refactored with abstraction layer - OLATWorkflowHelper olatWorkflow1 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - LearningResources learningResources1 = olatWorkflow1.getLearningResources(); - LRDetailedView lRDetailedView1 = learningResources1.searchMyResource(GroupManagementCombiTest.COURSE_NAME); - CourseRun courseRun1 = lRDetailedView1.showCourseContent(); - GroupAdmin groupAdmin1 = courseRun1.getGroupManagement().editLearningGroup(GroupManagementCombiTest.GROUP_NAME_1); - groupAdmin1.setTools(true, true, true, true, true, true, false); - groupAdmin1.setInfo("hello everybody"); - Thread.sleep(5000); - groupAdmin1.setMemberDisplayOptions(null, true, null); - Thread.sleep(5000); - Group group1 = groupAdmin1.start(GroupManagementCombiTest.GROUP_NAME_1); - Thread.sleep(5000); - Forum forum1 = group1.selectForum(); - forum1.openNewTopic("welcome", "welcome everybody"); - olatWorkflow1.logout(); - - // log in student02 - OLATWorkflowHelper olatWorkflow2 = context.getOLATWorkflowHelper(student02); - Home home1 = olatWorkflow2.getHome(); - Group group2 = home1.selectMyGroup(GroupManagementCombiTest.GROUP_NAME_1); - group2.selectInfo(); - assertTrue(group2.isTextPresent("hello everybody")); - Forum forum2 = group2.selectForum(); - Thread.sleep(10000); - forum2.replyToTopic("welcome", "my reply", false); - group2.selectMembers(); - assertTrue(group2.isTextPresent(GroupManagementCombiTest.STUDENT_USER_NAME)); - assertTrue(group2.isTextPresent("srlgauthor02")); - group2.selectCalendar(); - group2.startCourse(); - assertTrue(group2.isTextPresent("Course element of the type Enrolment")); - olatWorkflow2.logout(); - - } - - -} - diff --git a/src/test/java/org/olat/test/functional/group/management/CreateLearningGroupLearningArea.java b/src/test/java/org/olat/test/functional/group/management/CreateLearningGroupLearningArea.java deleted file mode 100644 index 3a146c00a88..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/CreateLearningGroupLearningArea.java +++ /dev/null @@ -1,120 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.EnrolmentEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.selenium.olatapi.group.LearningArea; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Checks if enrolment course element with learning groups and learning areas works, part of test suite GroupManagementCombiTest.java. - * <br/> - * Test setup: <br/> - * 1. Delete all learning resources and groups from author. <br/> - * 2. Create user "srlgauthor02". <br/> - * <p> - * Test case: <br/> - * 1. Author creates course COURSE_NAME. <br/> - * 2. Author switches to course run, opens group management and creates group GROUP_NAME_1. <br/> - * 3. Author adds "srlgauthor02" to group. <br/> - * 5. Author closes group management and opens course editor. <br/> - * 6. Author adds enrolment course element and adds group GROUP_NAME_1. <br/> - * 7. Author publishes course. <br/> - * 8. Author closes editor, opens group management. <br/> - * 9. Author creates learning area "learning area selenium 1" and two groups, adds these two groups to learning area. <br/> - * 10. Author closes group management and opens course editor. <br/> - * 11. Author adds another course element enrolment "enrolment learning areas" and adds "learning area selenium 1". <br/> - * 12. Author publishes course and logs out. <br/> - * 13. Standard student opens course COURSE_NAME and navigates to "enrolment learning areas". <br/> - * 14. Student checks if the two groups are available. <br/> - * - * @author sandra - * - */ - -public class CreateLearningGroupLearningArea extends BaseSeleneseTestCase { - - @Test(groups = {GroupManagementCombiTest.FIRST}) - public void testCreateLearningGroupLearningAreaTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - // delete all author's groups first !!! - WorkflowHelper.deleteAllGroupsFromAuthor(context.getStandardAuthorOlatLoginInfos(1)); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - // TODO this user is never used, line could be deleted. - OlatLoginInfos author02= context.createuserIfNotExists(1, "srlgauthor02", standardPassword, true, false, false, false, false); - - // refactored with abstraction layer - OLATWorkflowHelper olatWorkflow1 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - LearningResources learningResources1 = olatWorkflow1.getLearningResources(); - LRDetailedView lRDetailedView1 = learningResources1.createResource(GroupManagementCombiTest.COURSE_NAME, "GroupAdmin Management Test", LR_Types.COURSE); - CourseRun courseRun1 = lRDetailedView1.showCourseContent(); - GroupAdmin group1 = courseRun1.getGroupManagement().createLearningGroup(GroupManagementCombiTest.GROUP_NAME_1, "first lg", 2, true, true); - assertFalse("Could not create group. It was already there: learning group selenium 1", group1.isTextPresent("This group name is already being used in this context, please select another one.")); - String[] userNames = {"srlgauthor02", context.getStandardStudentOlatLoginInfos(1).getUsername()}; - group1.addMembers(userNames, new String[0]); - courseRun1 = courseRun1.getGroupManagement().close(); - CourseEditor courseEditor1 = courseRun1.getCourseEditor(); - EnrolmentEditor enrolmentElement1 = (EnrolmentEditor)courseEditor1.insertCourseElement(CourseElemTypes.ENROLMENT, true, null); - enrolmentElement1.selectLearningGroups(GroupManagementCombiTest.GROUP_NAME_1); - courseEditor1.publishCourse(); - courseRun1 = courseEditor1.closeToCourseRun(); - GroupManagement groupManagement1 = courseRun1.getGroupManagement(); - groupManagement1.createLearningArea("learning area selenium 1", "area description"); - groupManagement1.createLearningGroup("learning group selenium 2", "description 2", 0, false, false); - groupManagement1.createLearningGroup("learning group selenium 3", "description 3", 0, false, false); - LearningArea learningArea1 = groupManagement1.editLearningArea("learning area selenium 1"); - String[] groupNames = {"learning group selenium 2", "learning group selenium 3"}; - learningArea1.assignGroup(groupNames); - courseRun1 = groupManagement1.close(); - courseEditor1 = courseRun1.getCourseEditor(); - enrolmentElement1 = (EnrolmentEditor)courseEditor1.insertCourseElement(CourseElemTypes.ENROLMENT, true, "Enrolment learning areas"); - enrolmentElement1.selectLearningAreas("learning area selenium 1"); - courseEditor1.publishCourse(); - courseEditor1.closeToCourseRun(); - olatWorkflow1.logout(); - - - // student logs in and checks if enrolment works as expected: should be fine like that - OLATWorkflowHelper olatWorkflow2 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - LearningResources learningResources2 = olatWorkflow2.getLearningResources(); - CourseRun courseRun2 = learningResources2.searchAndShowCourseContent(GroupManagementCombiTest.COURSE_NAME); - courseRun2.selectCourseElement("Enrolment learning areas"); - assertTrue(courseRun2.isTextPresent("learning group selenium 2")); - assertTrue(courseRun2.isTextPresent("learning group selenium 3")); - olatWorkflow2.logout(); - } -} diff --git a/src/test/java/org/olat/test/functional/group/management/EnrollmentWithSizeLimitationTest.java b/src/test/java/org/olat/test/functional/group/management/EnrollmentWithSizeLimitationTest.java deleted file mode 100644 index 670415ef73c..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/EnrollmentWithSizeLimitationTest.java +++ /dev/null @@ -1,160 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.EnrolmentEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Test Jira Issue OLAT-5022: <br/> - * define a learning group with a place limitation (assert that the place - limitation is saved), waiting list and automatic adding. Add users until the group is full, remove - one user, assert that the first on the waiting list is included in the group - * <br/> - * </p> - * Test case: <br/> - * create groupWithLimitation <br/> - * define a learning group with a place limitation <br/> - * open course editor <br/> - * insert enrolment element <br/> - * publish and close <br/> - * author enrolls in groupWithLimitation <br/> - * assert -> author is enrolled! <br/> - * student tries to enroll in groupWithLimitation that is already full! <br/> - * student opens course and navigates to enrollment course element <br/> - * assert -> student is on waiting list! <br/> - * author cancels enrollment <br/> - * assert author enrollment was canceled <br/> - * assert -> student is now enrolled! <br/> - * Delete groups <br/> - * Test the same adding several groups separated with a comma at one time <br/> - * Delete course <br/> - * - * @author alberto - */ -public class EnrollmentWithSizeLimitationTest extends BaseSeleneseTestCase { - private final String COURSE_NAME = "CourseName"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - - public void testEnrolmentWaitingList() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - - OLATWorkflowHelper olatWorkflow_0 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - - // author creates course with learning group (max 1 participant) and enrollment course element - - LearningResources learningResources_0 = olatWorkflow_0.getLearningResources(); - LRDetailedView lRDetailedView_0 = learningResources_0.createResource(COURSE_NAME, "Enrolment Test", LR_Types.COURSE); - CourseRun courseRun_0 = learningResources_0.searchAndShowMyCourseContent(COURSE_NAME); - - //create groupWithLimitation - GroupManagement groupManagement_0 = courseRun_0.getGroupManagement(); - GroupAdmin groupAdmin = groupManagement_0.createLearningGroup("groupWithLimitation", "group description", 1, true, true); - //assert that the place limitation is saved - assertTrue(groupAdmin.getMaxNumParticipants().equals("1"));; - courseRun_0 = groupManagement_0.close(); - - //open course editor - CourseEditor courseEditor_0 = courseRun_0.getCourseEditor(); - - //insert enrollment element - EnrolmentEditor enrollmentElement_0 = (EnrolmentEditor)courseEditor_0.insertCourseElement(CourseEditor.CourseElemTypes.ENROLMENT, true, null); - enrollmentElement_0.selectLearningGroups("groupWithLimitation"); - - //publish and close - courseEditor_0.publishCourse(); - courseEditor_0.closeToCourseRun(); - olatWorkflow_0.logout(); - - // author enrolls in groupWithLimitation - courseRun_0 = this.selectEnrolment(context.getStandardAuthorOlatLoginInfos(1), COURSE_NAME); - EnrolmentRun enrolmentRun_0 = courseRun_0.selectEnrolment("Enrolment"); - enrolmentRun_0.enrol("groupWithLimitation"); - - // assert -> author is enrolled! - //assertTrue(courseRun_0.isTextPresent("enrolled")); - - assertTrue(enrolmentRun_0.alreadyEnrolled("groupWithLimitation")); - - - // student opens course and navigates to enrollment course element - CourseRun courseRun_1 = this.selectEnrolment(context.getStandardStudentOlatLoginInfos(1), COURSE_NAME); - EnrolmentRun enrolmentRun_1 = courseRun_1.selectEnrolment("Enrolment"); - - - - // student tries to enroll in groupWithLimitation that is already full! - enrolmentRun_1.enrol("groupWithLimitation"); - - // assert -> student is on waiting list! - assertTrue(enrolmentRun_1.isTextPresent("On waiting list (1)")); - - // author cancels enrollment - enrolmentRun_0.cancelEnrolment("groupWithLimitation"); - - // assert author enrollment was canceled - assertTrue(courseRun_0.isTextPresent("Choose one of the learning groups below to enrol")); - - // assert -> student is now enrolled! - enrolmentRun_1 = courseRun_1.selectEnrolment("Enrolment"); - assertTrue(enrolmentRun_1.alreadyEnrolled("groupWithLimitation")); - - - } - private CourseRun selectEnrolment(OlatLoginInfos student, String courseName) { - Context context = Context.getContext(); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(student); - CourseRun courseRun = olatWorkflow.getLearningResources().searchAndShowCourseContent(courseName); - courseRun.selectCourseElement(CourseEditor.ENROLMENT_TITLE); - return courseRun; - } - - - - @Override - protected void cleanUpAfterRun() { - System.out.println("***************** cleanUpAfterRun STARTED *********************"); - //author01 deletes course - Context context = Context.getContext(); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - LRDetailedView lRDetailedView = olatWorkflow.getLearningResources().searchMyResource(COURSE_NAME); - try { - lRDetailedView.deleteLR(); - } catch (Exception e) {} - System.out.println("***************** cleanUpAfterRun ENDED *********************"); - } - -} diff --git a/src/test/java/org/olat/test/functional/group/management/EnrolmentLearningGroup.java b/src/test/java/org/olat/test/functional/group/management/EnrolmentLearningGroup.java deleted file mode 100644 index 7558bb7e55b..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/EnrolmentLearningGroup.java +++ /dev/null @@ -1,85 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.home.Home; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Student subscribes to waiting list and moves up to regular group member when other student cancels his enrolment, part of test suite GroupManagementCombiTest.java. - * <br/> - * Test setup: <br/> - * 1. Student 2 is already member of learning group (from test case CreateLearningGroupLearningArea.java) - * <p> - * Test case: <br/> - * 1. Student 1 opens course COURSE_NAME, sets bookmark and navigates to enrolment course element. <br/> - * 2. Student 1 enrols and checks if he is on waiting list. <br/> - * 3. Student 2 opens course COURSE_NAME and navigates to same enrolment course element. <br/> - * 5. Student 2 cancels enrolment. <br/> - * 6. Student 1 goes to enrolment again and checks if he has moved from waiting list to enrolled member. <br/> - * - * @author sandra - * - */ - -public class EnrolmentLearningGroup extends BaseSeleneseTestCase { - - @Test(dependsOnGroups = {GroupManagementCombiTest.FIRST}, groups = {GroupManagementCombiTest.SECOND}) - public void testEnrolmentLearningGroupTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos student02= context.createuserIfNotExists(1, GroupManagementCombiTest.STUDENT_USER_NAME, standardPassword, true, false, false, false, false); - - // refactored with abstraction layer - OLATWorkflowHelper workflow1 = context.getOLATWorkflowHelper(student02); - LearningResources learningResources1 = workflow1.getLearningResources(); - CourseRun courseRun1 = learningResources1.searchAndShowCourseContent(GroupManagementCombiTest.COURSE_NAME); - courseRun1.setBookmark(); - EnrolmentRun enrolmentRun1 = courseRun1.selectEnrolment("Enrolment"); - enrolmentRun1.enrol(GroupManagementCombiTest.GROUP_NAME_1); - assertTrue(enrolmentRun1.isTextPresent("On waiting list (1)")); - workflow1.logout(); - - OLATWorkflowHelper workflow2 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - LearningResources learningResources2 = workflow2.getLearningResources(); - CourseRun courseRun2 = learningResources2.searchAndShowCourseContent(GroupManagementCombiTest.COURSE_NAME); - EnrolmentRun enrolmentRun2 = courseRun2.selectEnrolment("Enrolment"); - enrolmentRun2.cancelEnrolment(GroupManagementCombiTest.GROUP_NAME_1); - workflow2.logout(); - - OLATWorkflowHelper workflow3 = context.getOLATWorkflowHelper(student02); - Home home1 = workflow3.getHome(); - CourseRun courseRun3 = home1.selectMyBookmarkedCourse(GroupManagementCombiTest.COURSE_NAME); - courseRun3.selectCourseElement("Enrolment"); - assertTrue(courseRun3.isTextPresent("enrolled")); - workflow3.logout(); - - } -} diff --git a/src/test/java/org/olat/test/functional/group/management/EnrolmentWaitinglistTest.java b/src/test/java/org/olat/test/functional/group/management/EnrolmentWaitinglistTest.java deleted file mode 100644 index cd000390885..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/EnrolmentWaitinglistTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests Enrolment and Waitinglist with 3 participants - * Original name: MultiBrowserClusterEnrolmentWaitinglistTest - * <br/> - * <p> - * Test case: <br/> - * make sure the limit on participants on group A is 1 <br/> - * go to group management and modify the limit on gruppe A to 1 <br/> - * log in user 2 and 3 <br/> - * user 1 does an enrolment to gruppe A <br/> - * user 2 does a enrol too but lands on the waitinglist <br/> - * user 3 and the admin in parallel (which is played by selenium1) <br/> - * user 3 does an enrol <br/> - * admin deletes user 1 from the course <br/> - * now in 'parallel' <br/> - * make the asserts <br/> - * - * </p> - * - * @author eglis - * - */ -public class EnrolmentWaitinglistTest extends BaseSeleneseTestCase { - - - - private OLATWorkflowHelper workflow1; - private CourseRun courseRun1; - - private OLATWorkflowHelper workflow2; - private CourseRun courseRun2; - - private OLATWorkflowHelper workflow3; - - private final String COURSE_NAME = Context.DEMO_COURSE_NAME_3; - private final String GROUP_NAME = "Gruppe A"; - private final String ENROLMENT_ELEMENT = "Einschreibung"; - - public void testMultiBrowserClusterNewLearningArea() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos user1 = context.createuserIfNotExists(1, "enrtstusr1", standardPassword, true, true, true, true, true); - OlatLoginInfos user2 = context.createuserIfNotExists(1, "enrtstusr2", standardPassword, true, true, true, true, true); - OlatLoginInfos user3 = context.createuserIfNotExists(2, "enrtstusr3", standardPassword, true, true, true, true, true); - - // step1: make sure the limit on participants on group A is 1 - { - System.out.println("logging in browser 1..."); - workflow1 = context.getOLATWorkflowHelper(user1); - courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - // go to group management and modify the limit on gruppe A to 1 - GroupAdmin groupAdmin = courseRun1.getGroupManagement().editLearningGroup(GROUP_NAME); - groupAdmin.removeAllWaiting(); - groupAdmin.removeAllParticipants(); - groupAdmin.configureParticipantsAndWaitingList(1, Boolean.TRUE, Boolean.TRUE); - groupAdmin.close(GROUP_NAME); - courseRun1.close(COURSE_NAME); - } - - // step 2: log in user 2 and 3 - { - System.out.println("logging in browser 2..."); - workflow2 = context.getOLATWorkflowHelper(user2); - } - { - System.out.println("logging in browser 3..."); - workflow3 = context.getOLATWorkflowHelper(user3); - } - - // step 3: user 1 does an enrolment to gruppe A - { - CourseRun courseRun = workflow1.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EnrolmentRun enrolmentRun = courseRun.selectEnrolment(ENROLMENT_ELEMENT); - enrolmentRun.enrol(GROUP_NAME); - assertTrue(enrolmentRun.isTextPresent("You have already enroled for the learning group mentioned below")); - } - - // step 4: user 2 does a enrol too but lands on the waitinglist - { - courseRun2 = workflow2.getLearningResources().searchAndShowCourseContent(COURSE_NAME); - EnrolmentRun enrolmentRun2 = courseRun2.selectEnrolment(ENROLMENT_ELEMENT); - enrolmentRun2.enrol(GROUP_NAME); - assertTrue(enrolmentRun2.isTextPresent("You are on the waiting list of the learning group mentioned below")); - } - - // step 5: user 3 and the admin in parallel (which is played by selenium1): - // user 3 does an enrol - // admin deletes user 1 from the course - { - // admin: - GroupAdmin groupAdmin1 = courseRun1.getGroupManagement().editLearningGroup(GROUP_NAME); - groupAdmin1.removeParticipant("enrtstusr1", false); - // selenium1.click("ui=dialog::Yes()"); .. but we wait with that - - EnrolmentRun enrolmentRun3 = workflow3.getLearningResources().searchAndShowCourseContent(COURSE_NAME).selectEnrolment(ENROLMENT_ELEMENT); - // selenium3.click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=Gruppe A)"); .. but we wait with that - - // now in 'parallel': - groupAdmin1.confirmRemove(); - enrolmentRun3.enrol(GROUP_NAME); - - // make the asserts: - assertTrue(enrolmentRun3.isTextPresent("You are on the waiting list of the learning group mentioned below")); - courseRun2.selectEnrolment(ENROLMENT_ELEMENT); - assertTrue(courseRun2.isTextPresent("You have already enroled for the learning group mentioned below")); - } - - } -} diff --git a/src/test/java/org/olat/test/functional/group/management/GroupManagementCombiTest.java b/src/test/java/org/olat/test/functional/group/management/GroupManagementCombiTest.java deleted file mode 100644 index a45809e166c..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/GroupManagementCombiTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * - * Combi test for group management. See respective test classes for extensive documentation. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. CreateLearningGroupLearningArea.java checks if enrolment course element with learning groups and learning areas works. <br/> - * 2. EnrolmentLearningGroup.java checks if student subscribed to waiting list moves up to regular group member when other student cancels his enrolment. <br/> - * 3. ConfigureToolsLearningGroup adds all collaborative tools to learning group and checks their configuration.<br/> - * - * @author sandra - * - */ - -public class GroupManagementCombiTest extends TestSuite { - - protected final static String COURSE_NAME = "Course_for_Group_Management" + System.currentTimeMillis(); - protected final static String GROUP_NAME_1 = "learning group selenium 1"; - - - - final static String FIRST = "GroupManagementCombiTest.FIRST"; - final static String SECOND = "GroupManagementCombiTest.SECOND"; - - //seleniumload: make sure that this is not a user with reusable urls!!! - //TODO:LD: temporary changed usernames - workaround for OLAT-5249 - //protected final static String STUDENT_USER_NAME = "srenrolstudi_02"; - protected final static String STUDENT_USER_NAME = "srenrolstudi02"; - - public static Test suite() { - TestSuite suite = new TestSuite("CombiTest"); - - suite.addTestSuite(CreateLearningGroupLearningArea.class); - suite.addTestSuite(EnrolmentLearningGroup.class); - suite.addTestSuite(ConfigureToolsLearningGroup.class); - - return suite; - } - -} diff --git a/src/test/java/org/olat/test/functional/group/management/MultiBrowserClusterUpdateLearningAreaTstDisabled3444.java b/src/test/java/org/olat/test/functional/group/management/MultiBrowserClusterUpdateLearningAreaTstDisabled3444.java deleted file mode 100644 index 003f1d39316..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/MultiBrowserClusterUpdateLearningAreaTstDisabled3444.java +++ /dev/null @@ -1,125 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.group.management; - -import org.junit.Ignore; -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -@Ignore -public class MultiBrowserClusterUpdateLearningAreaTstDisabled3444 extends BaseSeleneseTestCase { - - protected com.thoughtworks.selenium.Selenium selenium1; - protected com.thoughtworks.selenium.Selenium selenium2; - - public void testMultiBrowserClusterNewLearningArea() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos user1 = context.createuserIfNotExists(1, "mbcnla1", standardPassword, true, true, true, true, true); - OlatLoginInfos user2 = context.createuserIfNotExists(2, "mbcnla2", standardPassword, true, true, true, true, true); - - { - System.out.println("logging in browser 1..."); - selenium1 = context.createSeleniumAndLogin(user1); - selenium1.click("ui=tabs::learningResources()"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=learningResources::menu_searchForm()"); - selenium1.waitForPageToLoad("30000"); - selenium1.type("ui=learningResources::content_searchForm_titleField()", "Demo course wiki"); - selenium1.click("ui=learningResources::content_searchForm_search()"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=learningResources::content_clickCourseEntry(nameOfCourse=Demo course wiki)"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=learningResources::content_showContent()"); - selenium1.waitForPageToLoad("30000"); - - selenium1.click("ui=course::toolbox_courseTools_groupManagement()"); - selenium1.waitForPageToLoad("30000"); - - // make sure the learning area does not exist yet - delete otherwise - selenium1.click("ui=groupManagement::menu_allLearningAreas()"); - selenium1.waitForPageToLoad("30000"); - if (selenium1.isElementPresent("ui=groupManagement::content_learningAreaTable_deleteLearningArea(nameOfLearningArea=multibrowserclusterlearningarea)")) { - selenium1.click("ui=groupManagement::content_learningAreaTable_deleteLearningArea(nameOfLearningArea=multibrowserclusterlearningarea)"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=dialog::Yes()"); - selenium1.waitForPageToLoad("30000"); - } - - // create the learning area - selenium1.click("ui=groupManagement::toolbox_groupManagement_newLearningArea()"); - selenium1.waitForPageToLoad("30000"); - assertTrue(selenium1.isTextPresent("Create a new learning area")); - selenium1.type("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_name()", "multibrowserclusterlearningarea"); - selenium1.type("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_description()", "egal oder?"); - selenium1.click("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_save()"); - selenium1.waitForPageToLoad("30000"); - - // open the learning area in edit mode - selenium1.click("ui=groupManagement::menu_allLearningAreas()"); - selenium1.waitForPageToLoad("30000"); - selenium1.click("ui=groupManagement::content_learningAreaTable_editLearningArea(nameOfLearningArea=multibrowserclusterlearningarea)"); - selenium1.waitForPageToLoad("30000"); - - // edit the title - selenium1.type("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_name()", "mod1"); - } - - { - System.out.println("logging in browser 2..."); - selenium2 = context.createSeleniumAndLogin(user2); - selenium2.click("ui=tabs::learningResources()"); - selenium2.waitForPageToLoad("30000"); - selenium2.click("ui=learningResources::menu_searchForm()"); - selenium2.waitForPageToLoad("30000"); - selenium2.type("ui=learningResources::content_searchForm_titleField()", "Demo course wiki"); - selenium2.click("ui=learningResources::content_searchForm_search()"); - selenium2.waitForPageToLoad("30000"); - selenium2.click("ui=learningResources::content_clickCourseEntry(nameOfCourse=Demo course wiki)"); - selenium2.waitForPageToLoad("30000"); - selenium2.click("ui=learningResources::content_showContent()"); - selenium2.waitForPageToLoad("30000"); - - selenium2.click("ui=course::toolbox_courseTools_groupManagement()"); - selenium2.waitForPageToLoad("30000"); - - // open the learning area in edit mode - selenium2.click("ui=groupManagement::menu_allLearningAreas()"); - selenium2.waitForPageToLoad("30000"); - selenium2.click("ui=groupManagement::content_learningAreaTable_editLearningArea(nameOfLearningArea=multibrowserclusterlearningarea)"); - selenium2.waitForPageToLoad("30000"); - - // edit the title - selenium2.type("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_name()", "mod2"); - } - - selenium1.click("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_save()"); - selenium2.click("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_save()"); - - selenium1.waitForPageToLoad("30000"); - selenium2.waitForPageToLoad("30000"); - - assertTrue("Not found in selenium 1: Edit learning area multibrowserclusterlearningarea", selenium1.isTextPresent("Edit learning area multibrowserclusterlearningarea")); - assertTrue("Not found in selenium 2: Edit learning area multibrowserclusterlearningarea", selenium2.isTextPresent("Edit learning area multibrowserclusterlearningarea")); - } -} diff --git a/src/test/java/org/olat/test/functional/group/management/concurrent_visibility.html b/src/test/java/org/olat/test/functional/group/management/concurrent_visibility.html deleted file mode 100644 index 4237e5fe9ac..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/concurrent_visibility.html +++ /dev/null @@ -1,384 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>group_management_concurrencies2</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">group_management_concurrencies2</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz/</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_myEntries()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_clickLearningResource(nameOfLearningResource=Course_for_Enrolment)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_learningResource_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_groupManagement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_newLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_name()</td> - <td>learning group selenium 6</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_members_tabMembers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::content_learningGroupsEditor_addMembers_addTutor()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>student01</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=student01)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_participants_addUsers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>student02</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=student02)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_close()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_courseEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertFolder()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_tabVisbility()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_dependingGroup()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_selectLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=learning group selenium 6)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_visibility_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_publish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_selectall()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td>label=All registered OLAT users</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_closeEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student02</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=Course_for_Enrolment_Concurrency)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_folder()</td> - <td></td> -</tr> -<!--wait until student01 removes him from group--> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=Course_for_Enrolment_Concurrency)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_myGroupsTools_tutoredGroups(nameOfGroup=learning group selenium 6)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_administration()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_members_tabMembers()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_checkUsername(nameOfUser=student02)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_participants_remove()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dialog::Yes()</td> - <td></td> -</tr> -<!--student02--> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_folder()</td> - <td></td> -</tr> -<tr> - <td>waitForTextPresent</td> - <td>Your access rights have been altered in the meantime. Therefore you cannot select the desired course element anymore.</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/group/management/configure_tools.html b/src/test/java/org/olat/test/functional/group/management/configure_tools.html deleted file mode 100644 index bd71313d419..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/configure_tools.html +++ /dev/null @@ -1,297 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>configure_tools_neu</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">configure_tools_neu</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz/?o_winrndo=1</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_myEntries()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=Course_for_Group_Management)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_groupManagement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::menu_allLearningGroups()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::content_learningGroupTable_editLearningGroup(nameOfLearningGroup=learning group selenium 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_tools_tabTools()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_information()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_contactForm()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_calendar()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_folder()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_forum()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_wiki()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_tools_collaborationTools_save()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_informationForMembers_formFieldInformationMembers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=group::content_tools_informationForMembers_formFieldInformationMembers()</td> - <td>hello everybody</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_tools_informationForMembers_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_startCourse()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_forum()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_newTopic()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=course::content_forum_typeMsgTitle()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::content_forum_typeMsgTitle()</td> - <td>welcome</td> -</tr> -<tr> - <td>type</td> - <td>ui=course::content_forum_clickMsgBody()</td> - <td>welcome everybody</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>enrolmentstudent02</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat2</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=home::content_portlets_myGroups(nameOfGroup=learning group selenium 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_information()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>hello everybody</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_forum()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_viewTopic(nameOfTopic=welcome)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_replyWithoutQuotation()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=course::content_forum_clickMsgBody()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=course::content_forum_clickMsgBody()</td> - <td>my reply</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_forum_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_calendar()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_members()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>enrolmentstudent02</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>testauthor02</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_course()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_startCourse()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Course element of the type Enrolment</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/group/management/create_learning_group_learning_area.html b/src/test/java/org/olat/test/functional/group/management/create_learning_group_learning_area.html deleted file mode 100644 index 71bbf6b73be..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/create_learning_group_learning_area.html +++ /dev/null @@ -1,537 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>group_management_create_learning_group_learning_area</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">group_management_create_learning_group_learning_area</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz/</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_create_course()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_title()</td> - <td>Course_for_Group_Management</td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_description()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_description()</td> - <td>Group Management Test</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_startNo()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_myEntries()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=Course_for_Group_Management)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_groupManagement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_newLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_name()</td> - <td>learning group selenium 1</td> -</tr> -<tr> - <td>type</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_description()</td> - <td>first lg</td> -</tr> -<tr> - <td>click</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_enableWaitinglist()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_maxParticipants()</td> - <td>2</td> -</tr> -<tr> - <td>click</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_moveUpAutomatically()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_members_tabMembers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_participants_addUsers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>author02</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=author02)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_participants_addUsers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>student01</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=student01)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_close()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_courseEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertEnrolment()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_tabConfiguration()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=learning group selenium 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbEnrolment_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_publish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_selectall()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_closeEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_groupManagement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_newLearningArea()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningArea_name()</td> - <td>learning area selenium 1</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningArea_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_newLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_name()</td> - <td>learning group selenium 2</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_newLearningGroup()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_name()</td> - <td>learning group selenium 3</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::menu_allLearningAreas()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::content_learningAreaTable_editLearningArea(nameOfLearningArea=learning area selenium 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::content_learningAreaEditor_tabs_groupAssignment()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=groupManagement::content_learningAreaEditor_groupAssignment_checkLearningGroup(nameOfGroup=learning group selenium 2)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=groupManagement::content_learningAreaEditor_groupAssignment_checkLearningGroup(nameOfGroup=learning group selenium 3)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::content_learningAreaEditor_groupAssignment_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groupManagement::toolbox_groupManagement_close()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_courseTools_courseEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertEnrolment()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=courseEditor::content_TitleDescription_shortTitle()</td> - <td>Enrolment learning areas</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_TitleDescription_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_tabConfiguration()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningArea()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=learning area selenium 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbEnrolment_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_publish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_selectall()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td>label=All registered OLAT users</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student01</td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::password()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_clickCourseEntry(nameOfCourse=Course_for_Group_Management)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_learningResource_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Enrolment learning areas)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>learning group selenium 2</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>learning group selenium 3</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/group/management/createprojectgroup_add_users.html b/src/test/java/org/olat/test/functional/group/management/createprojectgroup_add_users.html deleted file mode 100644 index 5803a770f78..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/createprojectgroup_add_users.html +++ /dev/null @@ -1,257 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>groups_createprojectgroup_add_users</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">groups_createprojectgroup_add_users</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>nightly</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::toolbox_create_projectGroup()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::createGroup_groupName()</td> - <td>project group selenium 3</td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::createGroup_groupDescription()</td> - <td>selenium 3</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::createGroup_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_members_tabMembers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_owners_addUsers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>author02</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=author02)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_participants_addUsers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>student01</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=student01)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td></td> - <td>project group selenium 3</td> -</tr> -<tr> - <td>assertElementNotPresent</td> - <td>ui=groups::content_deleteGroup(nameOfGroup=project group selenium 3)</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>ui=groups::content_leaveGroup(nameOfGroup=project group selenium 3)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_leaveGroup(nameOfGroup=project group selenium 3)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_leaveYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author02</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_deleteGroup(nameOfGroup=project group selenium 3)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_deleteYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/group/management/enrolment.html b/src/test/java/org/olat/test/functional/group/management/enrolment.html deleted file mode 100644 index ba1128cd2c7..00000000000 --- a/src/test/java/org/olat/test/functional/group/management/enrolment.html +++ /dev/null @@ -1,211 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>group_management_enrolment</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">group_management_enrolment</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>nightly</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student02</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_clickCourseEntry(nameOfCourse=Course_for_Group_Management)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::toolbox_generalTools_setBookmark()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Enrolment)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_enrollment_enrolOnGroup(nameOfGroup=learning group selenium 1)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>On waiting list (1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_clickCourseEntry(nameOfCourse=Course_for_Group_Management)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Enrolment)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::content_enrollment_cancelEnrolment(nameOfGroup=learning group selenium 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student02</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>link=Course_for_Group_Management</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Enrolment)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>enrolled</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/groups/CreateProjectGroupAddUsersTest.java b/src/test/java/org/olat/test/functional/groups/CreateProjectGroupAddUsersTest.java deleted file mode 100644 index 345b7b730bc..00000000000 --- a/src/test/java/org/olat/test/functional/groups/CreateProjectGroupAddUsersTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.groups; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.selenium.olatapi.group.Groups; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * User creates course and tests case tests if he can add owner and participants. - * <br/> - * Test setup: <br/> - * 1. Clean-up: delete all groups from author - * 2. Create test user - * <p> - * Test case: <br/> - * 1. author creates group GROUP_NAME and adds users and owners - * 2. student logs in, checks if he's in GROUP_NAME and leaves GROUP_NAME - * 3. author deletes group <br/> - * - * - * @author sandra - * - */ - -public class CreateProjectGroupAddUsersTest extends BaseSeleneseTestCase { - - public void testCreateProjectGroupAddUsersTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos(1).getPassword(); - OlatLoginInfos author02= context.createuserIfNotExists(1, "testauthor02", standardPassword, true, false, false, false, false); - - // delete all my groups first !!! - WorkflowHelper.deleteAllGroupsFromAuthor(author02); - - // author creates group and adds users and owners - OLATWorkflowHelper oLATWorkflowHelper = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - Groups groupsTab = oLATWorkflowHelper.getGroups(); - GroupAdmin groupAdmin = groupsTab.createProjectGroup("project group selenium 3", "selenium 3"); - String[] owners = {"testauthor02"}; - String[] participants = {context.getStandardStudentOlatLoginInfos(1).getUsername()}; - groupAdmin.addMembers(participants, owners); - oLATWorkflowHelper.logout(); - - - //student logs in and leaves group - oLATWorkflowHelper = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - groupsTab = oLATWorkflowHelper.getGroups(); - assertFalse(groupsTab.getSelenium().isElementPresent("ui=groups::content_deleteGroup(nameOfGroup=project group selenium 3)")); - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (groupsTab.getSelenium().isElementPresent("ui=groups::content_leaveGroup(nameOfGroup=project group selenium 3)")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - groupsTab.leaveGroup("project group selenium 3"); - oLATWorkflowHelper.logout(); - - - // testauthor02 deletes group - oLATWorkflowHelper = context.getOLATWorkflowHelper(author02); - oLATWorkflowHelper.getGroups().deleteGroup("project group selenium 3"); - oLATWorkflowHelper.logout(); - assertEquals("OLAT - Online Learning And Training", oLATWorkflowHelper.getSelenium().getTitle()); - } -} diff --git a/src/test/java/org/olat/test/functional/groups/CreateProjectGroupConfigureToolsTest.java b/src/test/java/org/olat/test/functional/groups/CreateProjectGroupConfigureToolsTest.java deleted file mode 100644 index 3f2b635c4e5..00000000000 --- a/src/test/java/org/olat/test/functional/groups/CreateProjectGroupConfigureToolsTest.java +++ /dev/null @@ -1,101 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.groups; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.group.Group; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.selenium.olatapi.group.Groups; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * User creates course and configures group tools. - * <br/> - * Test setup: <br/> - * 1. Clean-up: delete all groups from author - * <p> - * Test case: <br/> - * 1. author creates group GROUP_NAME and adds student as participant.<br/> - * 2. author changes group description, activates all group tools, sets info, sets calendar writing access. <br/> - * 3. student logs in, checks if all tools are available as configured. <br/> - * 4. student leaves group.<br/> - * 5. author deletes group. <br/> - * - * @author sandra - * - */ - -public class CreateProjectGroupConfigureToolsTest extends BaseSeleneseTestCase { - - private final String GROUP_NAME_CHANGED = "project group selenium 2 changed"; - - public void testCourseOpenClose() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - // delete all my groups first !!! - WorkflowHelper.deleteAllGroupsFromAuthor(context.getStandardAuthorOlatLoginInfos(1)); - - //author creates group and adds user - OLATWorkflowHelper olatWorkflow1 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - Groups groups1 = olatWorkflow1.getGroups(); - GroupAdmin group = groups1.createProjectGroup("project group selenisum 2", "second test"); - group.setTitleAndDescription(GROUP_NAME_CHANGED, "description changed"); - group.setTools(true, true, true, true, true, true, false); - group.setInfo("hello everybody"); - group.selectCalendarWriteAccess("Owners and tutors respectively"); - String[] userNames = {context.getStandardStudentOlatLoginInfos(1).getUsername()}; - group.addMembers(userNames, new String[0]); - olatWorkflow1.logout(); - - // user clicks all tools and leaves group - OLATWorkflowHelper olatWorkflow2 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - Group myGroup = olatWorkflow2.getHome().selectMyGroup(GROUP_NAME_CHANGED); - myGroup.selectInfo(); - assertTrue(myGroup.isTextPresent("hello everybody")); - myGroup.selectCalendar(); - Thread.sleep(3000); - assertTrue(myGroup.getSelenium().isElementPresent("ui=group::menu_calendar_readOnly()")); - myGroup.selectMembers(); - myGroup.selectEmail(); - myGroup.selectFolder(); - myGroup.selectWiki(); - myGroup.selectForum(); - - Groups groups2 = olatWorkflow2.getGroups(); - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (groups2.getSelenium().isElementPresent("ui=groups::content_leaveGroup(nameOfGroup=" + GROUP_NAME_CHANGED + ")")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - groups2.leaveGroup(GROUP_NAME_CHANGED); - olatWorkflow2.logout(); - - //author deletes group - olatWorkflow1 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - olatWorkflow1.getGroups().deleteGroup(GROUP_NAME_CHANGED); - olatWorkflow1.logout(); - } - - -} diff --git a/src/test/java/org/olat/test/functional/groups/CreateProjectGroupTest.java b/src/test/java/org/olat/test/functional/groups/CreateProjectGroupTest.java deleted file mode 100644 index 81a29e7dcd0..00000000000 --- a/src/test/java/org/olat/test/functional/groups/CreateProjectGroupTest.java +++ /dev/null @@ -1,57 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.groups; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.group.Groups; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * User creates and deletes project group. - * <br/> - * Test setup: <br/> - * 1. Clean-up: missing? - * <p> - * Test case: <br/> - * 1. author creates group GROUP_NAME - * 2. author deletes group <br/> - * - * - * @author sandra - * - */ -public class CreateProjectGroupTest extends BaseSeleneseTestCase { - - public void testCreateProjectGroupTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - OLATWorkflowHelper oLATWorkflowHelper = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - oLATWorkflowHelper.getGroups().createProjectGroup("project group selenium 1", ""); - Groups groups = oLATWorkflowHelper.getGroups(); - assertTrue(groups.isTextPresent("selenium 1")); - groups.deleteGroup("project group selenium 1"); - assertFalse(groups.isTextPresent("selenium 1")); - oLATWorkflowHelper.logout(); - assertEquals("OLAT - Online Learning And Training", oLATWorkflowHelper.getSelenium().getTitle()); - } -} diff --git a/src/test/java/org/olat/test/functional/groups/GroupConcurrenciesTest.java b/src/test/java/org/olat/test/functional/groups/GroupConcurrenciesTest.java deleted file mode 100644 index 6b855cf04b9..00000000000 --- a/src/test/java/org/olat/test/functional/groups/GroupConcurrenciesTest.java +++ /dev/null @@ -1,105 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.groups; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.group.Group; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.SeleniumException; - -/** - * - * Group owner and participant test project group concurrencies. - * <br/> - * Test setup: <br/> - * 1. Clean-up: delete all groups from author <br/> - * <p> - * Test case: <br/> - * 1. author creates group GROUP_NAME with group tool wiki <br/> - * 2. author adds participant <br/> - * 3. student logs in, check if he can select wiki <br/> - * 4. author removes wiki <br/> - * 5. student checks that wiki is no longer available and that he gets appropriate error message <br/> - * 6. author deletes group <br/> - * - * - * @author sandra - * - */ - -public class GroupConcurrenciesTest extends BaseSeleneseTestCase { - - public void testGroupConcurrencies() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - // delete all my groups first !!! - WorkflowHelper.deleteAllGroupsFromAuthor(context.getStandardAuthorOlatLoginInfos(1)); - - // Author01 creates project group with wiki - System.out.println("logging in browser 1..."); - OLATWorkflowHelper oLATWorkflowHelper1 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - GroupAdmin groupAdmin1 = oLATWorkflowHelper1.getGroups().createProjectGroup("project group selenium 4", ""); - groupAdmin1.setTools(false, false, false, false, false, true, false); - String[] participants = {context.getStandardStudentOlatLoginInfos(1).getUsername()}; - groupAdmin1.addMembers(participants, new String[0]); - groupAdmin1.close("project group selenium 4"); - - // student01 opens group with wiki - System.out.println("logging in browser 2..."); - OLATWorkflowHelper oLATWorkflowHelper2 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(2)); - Group group2 = oLATWorkflowHelper2.getGroups().selectGroup("project group selenium 4"); - group2.selectWiki(); - - // Author01 removes wiki - groupAdmin1 = oLATWorkflowHelper1.getGroups().selectGroup("project group selenium 4").selectAdministration(); - groupAdmin1.setTools(false, false, false, false, false, true, false); - - // Student01 wants to click on Wiki, but wiki was removed by the group owner - if(group2.hasWiki()) { - group2.selectWiki(); - } - Thread.sleep(10000); - //wiki dissapears silently/or not (why behaviour changes?) with a certain delay after removal - assertFalse(group2.hasWiki()); - - // Author01 deletes group - oLATWorkflowHelper1.getGroups().deleteGroup("project group selenium 4"); - - //student clicks on group and gets appropriate message - try{ - if (group2.getSelenium().isElementPresent("ui=group::menu_members()")) { - group2.selectMembers(); - } - } catch(SeleniumException e) { - // ok - ajax could come and refresh the group tab and notice that it has been modified right - // after we asked 'isElementPresent' .. hence not doing anything with this exception! - } - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (group2.isTextPresent("This group's configuration has been modified (group deleted, members changed). Please close the tab.")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - } -} diff --git a/src/test/java/org/olat/test/functional/groups/createprojectgroup.html b/src/test/java/org/olat/test/functional/groups/createprojectgroup.html deleted file mode 100644 index 0c5d9577e43..00000000000 --- a/src/test/java/org/olat/test/functional/groups/createprojectgroup.html +++ /dev/null @@ -1,108 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>groups_createprojectgroup</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">groups_createprojectgroup</td></tr> -</thead><tbody> -<!--Create project group and check if project group is listed in group tab--> -<tr> - <td>open</td> - <td>nightly</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::toolbox_create_projectGroup()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::createGroup_groupName()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::createGroup_groupName()</td> - <td>project group selenium 1</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::createGroup_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>selenium 1</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_deleteGroup(nameOfGroup=project group selenium 1)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_deleteYes()</td> - <td></td> -</tr> -<tr> - <td>assertTextNotPresent</td> - <td>selenium 1</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/groups/groups_createprojectgroup_add_users b/src/test/java/org/olat/test/functional/groups/groups_createprojectgroup_add_users deleted file mode 100644 index 5803a770f78..00000000000 --- a/src/test/java/org/olat/test/functional/groups/groups_createprojectgroup_add_users +++ /dev/null @@ -1,257 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>groups_createprojectgroup_add_users</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">groups_createprojectgroup_add_users</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>nightly</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::toolbox_create_projectGroup()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::createGroup_groupName()</td> - <td>project group selenium 3</td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::createGroup_groupDescription()</td> - <td>selenium 3</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::createGroup_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_members_tabMembers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_owners_addUsers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>author02</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=author02)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_participants_addUsers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>student01</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=student01)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td></td> - <td>project group selenium 3</td> -</tr> -<tr> - <td>assertElementNotPresent</td> - <td>ui=groups::content_deleteGroup(nameOfGroup=project group selenium 3)</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>ui=groups::content_leaveGroup(nameOfGroup=project group selenium 3)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_leaveGroup(nameOfGroup=project group selenium 3)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_leaveYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author02</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_deleteGroup(nameOfGroup=project group selenium 3)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_deleteYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/groups/groups_createprojectgroup_configure_tools b/src/test/java/org/olat/test/functional/groups/groups_createprojectgroup_configure_tools deleted file mode 100644 index d574890f426..00000000000 --- a/src/test/java/org/olat/test/functional/groups/groups_createprojectgroup_configure_tools +++ /dev/null @@ -1,362 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>groups_createprojectgroup_configure_tools</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">groups_createprojectgroup_configure_tools</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>nightly</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::toolbox_create_projectGroup()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::createGroup_groupName()</td> - <td>project group selenium 2</td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::createGroup_groupDescription()</td> - <td>second test</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::createGroup_save()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_description_groupDetails_groupName()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=group::content_description_groupDetails_groupName()</td> - <td>project group selenium 2 changed</td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_description_groupDetails_groupDescription()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=group::content_description_groupDetails_groupDescription()</td> - <td>description changed</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_description_groupDetails_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_tools_tabTools()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_information()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_contactForm()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_calendar()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_folder()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_forum()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_chat()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_collaborationTools_wiki()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_tools_collaborationTools_save()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_informationForMembers_formFieldInformationMembers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=group::content_tools_informationForMembers_formFieldInformationMembers()</td> - <td>hello everybody</td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_informationForMembers_save()</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=group::content_tools_calendarAccess_calendarAccess()</td> - <td>label=Owners and tutors respectively</td> -</tr> -<tr> - <td>click</td> - <td>ui=group::content_tools_calendarAccess_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::content_members_tabMembers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_participants_addUsers()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=commons::searchUsers_userName()</td> - <td>student01</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::searchUsers_search()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=commons::usertable_adduser_checkUsername(nameOfUser=student01)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_choose()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::usertable_adduser_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>student01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=home::content_portlets_myGroups(nameOfGroup=project group selenium 2 changed)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_information()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>hello everybody</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_calendar()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Read only</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_members()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_email()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_folder()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_forum()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_chat()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=group::menu_wiki()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>ui=groups::content_leaveGroup(nameOfGroup=project group selenium 2 changed)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_leaveGroup(nameOfGroup=project group selenium 2 changed)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_leaveYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::groups()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_deleteGroup(nameOfGroup=project group selenium 2 changed)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=groups::content_deleteYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::logOut()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/home/FolderTest.java b/src/test/java/org/olat/test/functional/home/FolderTest.java deleted file mode 100644 index 961f19549f8..00000000000 --- a/src/test/java/org/olat/test/functional/home/FolderTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.home; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.SinglePageEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Folder test class (See: OLAT-4394); tests the basic functionality of a folder. - * TODO: LD: see TODOs below. - * - * Test case: <br/> - * 1. go to personal folder/public <br/> - * 2. select all, delete selection <br/> - * 3. create file with name SAMPLE_FILE1 <br/> - * 4. rename file <br/> - * 5. edit file <br/> - * 6. assert that cannot create fie with invalid name <br/> - * 7. upload doc file <br/> - * 8. upload doc file again, do overwrite <br/> - * 9. create folder <br/> - * 10. assert that cannot create folder with invalid name <br/> - * 11. create zip file <br/> - * 12. assert that cannot create zip with invalid name <br/> - * 13. delete doc file, assert that really deleted. - * - * @author Lavinia Dumitrescu - * - */ -public class FolderTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "CourseFolderTest"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - - private final String SAMPLE_FILE1 = "selenium.txt"; - private final String SAMPLE_FILE2 = "selenium_mod.txt"; - private final String INVALID_FILE_NAME = "a:b"; - - private final String SAMPLE_FOLDER = "sample_folder"; - private final String INVALID_FOLDER_NAME_1 = "folder:1"; - - private final String ZIP_NAME = "archive"; - private final String INVALID_ZIP_NAME = "archive:zip"; - - public void setUp() throws Exception { - Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - } - - public void testPersonalFolder() { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - - Folder folder = workflow.getHome().getPersonalFolder(); - folder.selectFileOrFolder("public"); - - //cleanup first - folder.selectAll(); - folder.deleteSelection(); - - //create file - boolean fileCreated = folder.createFile(null, SAMPLE_FILE1, "bla"); - assertTrue("Asserts file created.",fileCreated); - - //rename file - folder.editMetadata(SAMPLE_FILE1, SAMPLE_FILE2, "meta title", "meta description"); - assertTrue("Asserts file renamed.",folder.isFileOrFolderPresent(SAMPLE_FILE2)); - - //edit file - folder.editTxtFile(SAMPLE_FILE2, "any_text"); - assertEquals("Asserts text content.",folder.getText(SAMPLE_FILE2),"any_text"); - - //check that you cannot create file with an invalid name, empty, or already existing name - boolean notCreated = folder.createFile(null, INVALID_FILE_NAME, "bla"); - assertFalse("Asserts that cannot create file with invalid name", notCreated); - - //upload file - File doc = WorkflowHelper.locateFile(Context.FILE_RESOURCES_PATH + "Word.doc"); - String remoteDoc = Context.getContext().provideFileRemotely(doc); - folder.uploadFile(null, remoteDoc); - - //confirm overwrite file - boolean overwritten = folder.uploadWithOverwrite(null, remoteDoc, true); - assertTrue("Asserts that doc file was overwritten", overwritten); - - //TODO: check that you cannot upload file with an invalid name, cannot overwrite file without confirmation - - //create folder: selenium_folder - boolean folderCreated = folder.createFolder(SAMPLE_FOLDER); - assertTrue("Asserts folder created.", folderCreated); - - //check that one cannot create folder with an invalid name - folderCreated = folder.createFolder(INVALID_FOLDER_NAME_1); - assertFalse("Asserts that cannot create folder with invalid name.", folderCreated); - - //zip one or more files - List selection = new ArrayList(); - selection.add(doc.getName()); - boolean zipped = folder.zipSelection(selection, ZIP_NAME); - assertTrue("Asserts zip file created.", zipped); - assertTrue("Asserts that a zip with the given name is present.", folder.isFileOrFolderPresent(ZIP_NAME+".zip")); - - //check that you cannot use an invalid name for the zip file - zipped = folder.zipSelection(selection, INVALID_ZIP_NAME); - assertFalse("Asserts that cannot zip file with an invalid name.", zipped); - folder.cancelZipSelection(); - - //TODO: copy file to selenium_folder - //TODO:check that you cannot copy twice - //TODO:check that you cannot copy parent to child, but vice-versa should work - - //TODO:move file to folder, check that was moved - //TODO:check that you get notified if you move, copy, unzip file with an invalid name: see how to smuggle a data with an invalid name - - - //delete file - folder.deleteItem(doc.getName()); - assertFalse("Asserts that doc file was deleted.", folder.isTextPresent(doc.getName())); - } - - /** - * TODO: LD - */ - /*private void testStorageFolder() { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - //create course - CourseEditor courseEditor = workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - - //insert single page, create html page and assign to single page - SinglePageEditor singlePageEditor = (SinglePageEditor)courseEditor.insertCourseElement(CourseElemTypes.SINGLE_PAGE, true, "single page2"); - singlePageEditor.setDescription("This is the second course TS090533 Description"); - singlePageEditor.createHTMLPage("second_html_descr", "a not very long content that serves as an example too"); - - //delete html-page in the storage folder - Folder storageFolder = courseEditor.storageFolder(); - storageFolder.deleteItem("second_html_descr.html"); - }*/ - - -} diff --git a/src/test/java/org/olat/test/functional/home/HomeSettingsTest.java b/src/test/java/org/olat/test/functional/home/HomeSettingsTest.java deleted file mode 100644 index a8e0fbe7a8e..00000000000 --- a/src/test/java/org/olat/test/functional/home/HomeSettingsTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.home; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.home.MySettings; -import org.olat.test.util.selenium.olatapi.user.UserManagement; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Tests change email for a user in Home Settings. - * <p> - * <br/> - * Test case: <br/> - * create user <br/> - * log in user <br/> - * open settings of user <br/> - * change email and show email on vcard <br/> - * assert activation e-mail for e-mail address confirmation was sent <br/> - * logout user <br/> - * admin deletes user <br/> - * - * - * @author alberto - */ -public class HomeSettingsTest extends BaseSeleneseTestCase { - - - private final String USER_NAME = "emailtestdummyuser" + System.currentTimeMillis(); - private final String USER_FNAME = "First"; - private final String USER_LNAME = "Last"; - private final String USER_EMAIL = System.currentTimeMillis() + "@user.com"; - private final String USER_PW = "olat3"; - - - public void testHome_settings() throws Exception { - - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - OLATWorkflowHelper olatWorkflowAdmin = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - - UserManagement userManagement = olatWorkflowAdmin.getUserManagement(); - - //create user - userManagement.createUser(USER_NAME, USER_FNAME, USER_LNAME, USER_EMAIL, USER_PW); - - // log in user - OLATWorkflowHelper olatWorkflowUserToDelete = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, USER_NAME, USER_PW)); - - //open settings of user - MySettings mySettings = olatWorkflowUserToDelete.getHome().getUserSettings(); - - selenium = mySettings.getSelenium(); - - //change email and show email on vcard - mySettings.setEmail("NewEmailOfStudent01@olat-newinstall.com", true); - - //assert activation e-mail for e-mail address confirmation was sent - //TODO:LD: outcomment as soon as we have the email configured on olat instance: seleniumsinglevm & OLATNG (15.09.2010) - //assertTrue(selenium.isTextPresent("E-mail sent successfully")); - - //user logout - olatWorkflowUserToDelete.logout(); - - //admin deletes user - userManagement.deleteUserImmediately(USER_NAME); - olatWorkflowAdmin.logout(); //release possible locks - } - - - @Override - protected void cleanUpAfterRun() { - //login to release all possible locks - OLATWorkflowHelper olatWorkflowAdmin = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(1)); - } - - -} diff --git a/src/test/java/org/olat/test/functional/lr/CPTest.java b/src/test/java/org/olat/test/functional/lr/CPTest.java deleted file mode 100644 index 9db4a7ced11..00000000000 --- a/src/test/java/org/olat/test/functional/lr/CPTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import java.io.File; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.lr.CPResourceEditor; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests the CP Editor. - * <br/> - * <p> - * Test setup:<br/> - * 1. clean-up: Delete CPs starting with CP_NAME_SUFFFIX. <br/> - * 2. author creates cp CP_NAME <br/> - * - * Test case: <br/> - * 1. login as author and go to tab learning resources <br/> - * 2. click "cp" in toolbox "create" <br/> - * 3. enter titel CPName <br/> - * 4. enter description CPDescription <br/> - * 5. click save <br/> - * 6. click next <br/> - * 7. open the editor? click yes <br/> - * 8. assure is visible "Lorem Ipsum" <br/> - * 9. rename page "Neue Seite" to "fi&rst paäge" <br/> - * 10. click "add page" <br/> <br/> - * 11. click edit "page properties" and rename added page to "renamed page" <br/> - * 12. copy "renamed page" <br/> - * 13. assure exists page "renamed page copy" <br/> - * 12. move "renamed page copy" to the same hierarchy as the "fi&rst paäge" <br/> ??? possible to drag&drop with selenium? - * 13. delete "renamed page copy" <br/> - * 14. click "delete menu element and files" <br/> - * 15. click "import page" <br/> - * 16. click select file <br/> - * 17. choose cptest.html and click open <br/> - * 18. click "Import" <br/> - * 19. assert that "cptest.html" is displayed (in the file navigation on the lefthand side) <br/> - * 20. click symbol "insert/edit image" <br/> - * 21. click "Browse" <br/> - * 22. click "Upload file" <br/> - * 23. click Select file and select OLATteam.jpg <br/> - * 24. click "Upload" <br/> - * 25. add Image description = OLAT Team, click "Insert" <br/> - * 26. click "save" <br/> - * 27. delete cp <br/> - * - * </p> - * - * @author Kristina Isacson / Lavinia Dumitrescu - * - */ - -public class CPTest extends BaseSeleneseTestCase { - - private final String CP_NAME = "CP"+System.currentTimeMillis(); - private final String CP_DESCRIPTION = "CPDescription"+System.currentTimeMillis(); - private final String CP_TEXT = "Lorem Ipsum"; - private final String CP_PAGE_DEFAULT_TITLE = "New page"; - private final String CP_PAGE_SPECIAL_TITLE = "fi&rst paäge"; - private final String CP_PAGE_TITLE1 = "renamed page"; - private final String CP_PAGE_CONTENT1 = "page content"; - private final String CP_PAGE_TITLE1_COPY = "renamed page copy"; //default title for o copy - private final String FILE_NAME1 = "cptest.html"; - private final String FILE_NAME2 = "OLATteam.jpg"; - private final String IMAGE_DESCRIPTION = "OLAT Team"; - - @Override - public void setUp() throws Exception { - super.setUp(); - - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - // delete all LR from this author - WorkflowHelper.deleteAllLearningResourcesFromAuthor(context.getStandardAuthorOlatLoginInfos(1).getUsername()); - } - - - - public void testCP() throws Exception { - - OLATWorkflowHelper olatWorkflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - CPResourceEditor cPResourceEditor = olatWorkflow.getLearningResources().createCPAndStartEditing(CP_NAME, CP_DESCRIPTION); - - //select iframe - cPResourceEditor.getSelenium().selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - assertTrue("Asserts is text present: " + CP_TEXT, cPResourceEditor.isTextPresent(CP_TEXT)); - cPResourceEditor.getSelenium().selectFrame("relative=top"); - - cPResourceEditor.changeTitle(CP_PAGE_DEFAULT_TITLE, CP_PAGE_SPECIAL_TITLE); - cPResourceEditor.addPageAndRename(CP_PAGE_SPECIAL_TITLE, CP_PAGE_TITLE1, CP_PAGE_CONTENT1); - cPResourceEditor.copyPage(CP_PAGE_TITLE1); - assertTrue("Asserts a copy exists", cPResourceEditor.isTextPresent(CP_PAGE_TITLE1_COPY)); - - //move CP_PAGE_TITLE1_COPY as root child - //cPResourceEditor.movePage(CP_PAGE_TITLE1, CP_PAGE_TITLE1_COPY); - - cPResourceEditor.deletePage(CP_PAGE_TITLE1_COPY, false); - - File file = WorkflowHelper.locateFile(FILE_NAME1); - String remoteHtml = Context.getContext().provideFileRemotely(file); - cPResourceEditor.importPage(CP_PAGE_SPECIAL_TITLE, remoteHtml); - assertTrue("Asserts that file was imported", cPResourceEditor.isTextPresent(FILE_NAME1)); - - //insert image - file = WorkflowHelper.locateFile(FILE_NAME2); - remoteHtml = Context.getContext().provideFileRemotely(file); - cPResourceEditor.insertImage(remoteHtml, IMAGE_DESCRIPTION); - System.out.println("image inserted"); - - } - - - - @Override - protected void cleanUpAfterRun() { - WorkflowHelper.deleteLearningResources(Context.getContext().getStandardAuthorOlatLoginInfos(1).getUsername(), CP_NAME); - } - - -} diff --git a/src/test/java/org/olat/test/functional/lr/ClusterWikiTest.java b/src/test/java/org/olat/test/functional/lr/ClusterWikiTest.java deleted file mode 100644 index 1e9e708b90f..00000000000 --- a/src/test/java/org/olat/test/functional/lr/ClusterWikiTest.java +++ /dev/null @@ -1,146 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.WikiRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * test wiki functionality (editing wikipages, check GUI lock, select all menu options like Index A to Z etc. show VErsion and Compare) within a cluster <br/> - * <p> - * Test setup: <br/> - * 1. Login as Admin in browser 1 <br/> - * 2. Login as Author in browser 2 <br/> - * 3. cleanup at the end <br/> - * - * Test case: <br/> - * 1. Admin logs in in browser 1 <br/> - * 2. Author logs in in browser 2 <br/> - * 3. Admin creates a wiki and changes access to all registered users <br/> - * 4. Wiki is schown, Admin inserts link test in wiki and clicks it <br/> - * 5. Admin enters word "testing" in wiki page and it is checked whether "testing" is present <br/> - * 6. Author displays the wiki (on a different node), checks whether "test"-page is there <br/> - * 7. Author searches for "test" and checks that "testing" is displayed <br/> - * 8. Admin edits wiki <br/> - * 9. check that Author gets the message "is currently modified by" <br/> - * 10. show article "testing" in both browsers <br/> - * 11. Admin adds "lorem ibsum" <br/> - * 12. check that Author sees "lorem ibsum" <br/> - * 13. Admin clicks create or search "test", check if page is displayed <br/> - * 14. Admin clicks links in the navigation box <br/> - * 15. cleanup <br/> - * - * </p> - * - * @author guido - * - */ -public class ClusterWikiTest extends BaseSeleneseTestCase { - - private OLATWorkflowHelper workflow1; - private OLATWorkflowHelper workflow2; - - - public void testMultiBrowserClusterWiki() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - String wikiName = "wikijunit-"+System.currentTimeMillis(); - - // login first - System.out.println("logging in browser 1..."); - workflow1 = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - - System.out.println("logging in browser 2..."); - workflow2 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(2)); - - //browser 1 - //create a wiki and change access for all users - LRDetailedView lRDetailedView = workflow1.getLearningResources().createResource(wikiName, "test", LR_Types.WIKI); - lRDetailedView.modifyProperties(LRDetailedView.ACCESS_ALL_REGISTERED); - WikiRun wikiRun1 = lRDetailedView.showWikiContent(); - wikiRun1.editPage("[[test]]"); - wikiRun1.getSelenium().click("ui=wiki::article_testLink()"); - //wikiRun1.getSelenium().waitForPageToLoad("30000"); - wikiRun1.editPage("testing"); - assertTrue(wikiRun1.isTextPresent("testing")); - - //browser 2 - //start the wiki with the second user on the second node and check content - WikiRun wikiRun2 = workflow2.getLearningResources().showWikiContent(wikiName); - assertTrue(wikiRun2.isTextPresent("test")); //true: successfully loaded the page in the second node - //wikiRun2.searchArticle("test"); - wikiRun2.createOrSearchArticle("test", null); - assertTrue(wikiRun2.isTextPresent("testing")); //true: successfully loaded the page in the second node - - //browser 1 - wikiRun1.openEditor();//try to edit page. Second user should have GUI lock on this page - Thread.sleep(2000); - - //browser 2 - wikiRun2.openEditor(); - assertTrue(wikiRun2.isTextPresent("is being modified by")); //WARNING: HERE POTENTIAL FAILURE EACH TIME THE TRANSLATION CHANGES! - - //continue both - - //browser 1 - wikiRun1.showArticle(); - assertTrue(wikiRun1.isTextPresent("testing")); - - //browser 2 - wikiRun2.showArticle(); - assertTrue(wikiRun2.isTextPresent("testing")); - - //browser 1 - //edit page: second user on node 2 should see new content - wikiRun1.editPage("lorem ibsum"); - - - //browser 2 - wikiRun2.createOrSearchArticle("test", null); - assertTrue(wikiRun2.isTextPresent("lorem ibsum"));//true: new content visible on node 2 - - - //browser 1 - //continue with basic tests - wikiRun1.createOrSearchArticle("test", null); - assertTrue(wikiRun1.isTextPresent("lorem ibsum")); - wikiRun1.selectIndex(); - wikiRun1.selectFromAToZ(); - wikiRun1.editMenu("* [[Index]]\n* [[Index|Your link]]\n* [[test]]"); - wikiRun1.selectIndex(); - wikiRun1.createOrSearchArticle("test", null); - wikiRun1.showVersionsAndCompare(); - assertTrue(wikiRun1.isTextPresent("+ testing")); - - - } - - @Override - public void cleanUpAfterRun() { - workflow1.logout(); - workflow2.logout(); - } - - -} diff --git a/src/test/java/org/olat/test/functional/lr/CreateLearningRessourcesTest.java b/src/test/java/org/olat/test/functional/lr/CreateLearningRessourcesTest.java deleted file mode 100644 index c2a378b4b94..00000000000 --- a/src/test/java/org/olat/test/functional/lr/CreateLearningRessourcesTest.java +++ /dev/null @@ -1,151 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.lr.CPResourceEditor; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.ResourceEditor; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; -import org.olat.test.util.selenium.olatapi.qti.TestEditor; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Author creates learning resources, learning resources are deleted <br/> - * <p> - * Test setup: <br/> - * 1. Author creates all learning resources <br/> - * 2. Cleanup in the beginning and end: All learning resources are deleted <br/> - * - * Test case: <br/> - * 1. Author creates learning resource (course, glossary, questionnaire, resource folder, test, wiki, cp, blog, podcast, todo: eportfolio template)<br/> - * 2. Author starts editor <br/> - * 3. Author closes editor <br/> - * 4. Learning resources course, questionnaire and test are copied - * 5. Learning resources are deleted <br/> - * </p> - * - * @author kristina - */ - -public class CreateLearningRessourcesTest extends BaseSeleneseTestCase { - private final String GLOSSARY_NAME = "GlossaryName" + System.currentTimeMillis();; - private final String CP_NAME = "CP"+System.currentTimeMillis(); - private final String CP_DESCRIPTION = "CPDescription"+System.currentTimeMillis(); - private final String BLOG_TITLE = "My blog title"; - private final String PODCAST_TITLE = "My podcast title"; - private final String DESC = "My first lr"; - private final String COPY_TITLE = "Copy"; - private final String COPY_DESCRIPTION = "Copy Description"; - - //create course - public void testCreateCourseTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - LearningResources learningResources = olatWorkflow.getLearningResources(); - CourseEditor courseEditor = learningResources.createCourseAndStartEditing("CourseName", "CourseDescription"); - LRDetailedView lRDetailedView = courseEditor.closeToLRDetailedView(); - //copy course - lRDetailedView.copyLR(COPY_TITLE, COPY_DESCRIPTION); - - } - - - - //create glossary - public void testCreateGlossaryTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - LearningResources learningResources = olatWorkflow.getLearningResources(); - learningResources.createGlossaryAndStartEditing(GLOSSARY_NAME, "GlossaryDescription"); - - //cleanup - learningResources = olatWorkflow.getLearningResources(); - learningResources.searchMyResource(GLOSSARY_NAME); - - } - - //create questionnaire - public void testCreateQuestionnaireTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper olatWorkflowHelper = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - TestEditor testEditor = olatWorkflowHelper.getLearningResources().createQuestionnaireAndStartEditing("QuestionnaireName", "QuestionnaireDescription"); - LRDetailedView lRDetailedView = testEditor.close(); - //copy questionnaire - lRDetailedView.copyLR(COPY_TITLE, COPY_DESCRIPTION); - } - - //create resource folder - public void testCreateResourcefolderTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - ResourceEditor resourceEditor = olatWorkflow.getLearningResources().createResourceFolderAndStartEditing("ResourcefolderName", "ResourcefolderDescription"); - resourceEditor.close(); - - } - - //create test - public void testCreateTestTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper olatWorkflowHelper = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - TestEditor testEditor = olatWorkflowHelper.getLearningResources().createTestAndStartEditing("TestName", "TestDescription"); - LRDetailedView lRDetailedView = testEditor.close(); - //copy test - lRDetailedView.copyLR(COPY_TITLE, COPY_DESCRIPTION); - } - - //create wiki - public void testCreateWikiTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - olatWorkflow.getLearningResources().createResource("WikiName", "WikiDescription", LR_Types.WIKI); - - } - - //create cp content - public void testCP() throws Exception { - - OLATWorkflowHelper olatWorkflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos(1)); - olatWorkflow.getLearningResources().createCPAndStartEditing(CP_NAME, CP_DESCRIPTION); - } - - //create blog and podcast - public void testCreateLRBlogPodcast() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - // create blog - LearningResources lr1 = olatWorkflow.getLearningResources(); - lr1.createResource(BLOG_TITLE, DESC, LearningResources.LR_Types.BLOG); - - //create podcast - lr1.createResource(PODCAST_TITLE, DESC, LearningResources.LR_Types.PODCAST); - } - -} diff --git a/src/test/java/org/olat/test/functional/lr/DeleteAllCoursesTest.java b/src/test/java/org/olat/test/functional/lr/DeleteAllCoursesTest.java deleted file mode 100644 index c7e8d0037ed..00000000000 --- a/src/test/java/org/olat/test/functional/lr/DeleteAllCoursesTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * StandardAdmin creates and deletes courses<br/> - * <br/> - * Testsetup: <br/> - * 1. Admin creates 10 courses<br/> - * Testcase: <br/> - * 1. Admin creates 10 courses with prefix deletetest <br/> - * 2. Admin deletes all courses with prefix deletetest <br/> - * - * @author eglis - * - */ -public class DeleteAllCoursesTest extends BaseSeleneseTestCase { - - public void testDeleteAllCourses() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos()); - - String myRandomName="deletetest-"+System.currentTimeMillis(); - - for(int i=0; i<10; i++) { - workflow.getLearningResources().createResource(myRandomName, myRandomName, LR_Types.COURSE); - } - - WorkflowHelper.deleteAllCoursesNamed(myRandomName); - } -} diff --git a/src/test/java/org/olat/test/functional/lr/TestBlogAndPodcastLinks.java b/src/test/java/org/olat/test/functional/lr/TestBlogAndPodcastLinks.java deleted file mode 100644 index 92d3b12c613..00000000000 --- a/src/test/java/org/olat/test/functional/lr/TestBlogAndPodcastLinks.java +++ /dev/null @@ -1,98 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.BlogEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.BlogResource; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - - -/** - * - * test new xpaths - * <br/> - * <p> - * Test setup: <br/> - * create lr blog and podcast from tab lr and delete afterward<br/> - * insert blog and podcast bb<br/> - * <p> - * Test case: <br/> - * edit internal blog <br/> - * edit blog in new tab <br/> - * blogResource.createEntry(title, description, content) <br/> - * publish and preview <br/> - * - * - * - * - * @author sandra, finishing: alberto - */ -public class TestBlogAndPodcastLinks extends BaseSeleneseTestCase { - private final String COURSE_NAME = "CourseName"+System.currentTimeMillis(); - private final String BLOG_TITLE = "My blog title"; - private final String PODCAST_TITLE = "My podcast title"; - private final String DESC = "My first lr"; - private final String BLOG_URI = ""; - private final String BLOG_DESC = "BLOG_DESC"; - - - - public void testCreateLRBlogPodcast() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - // create lr blog and podcast from tab lr and delete afterward --> ok - LearningResources lr1 = olatWorkflow.getLearningResources(); - LRDetailedView lrdv = lr1.createResource(BLOG_TITLE, DESC, LearningResources.LR_Types.BLOG); - LearningResources lr2 = lrdv.deleteLR(); - LRDetailedView lrdv2 = lr2.createResource(PODCAST_TITLE, DESC, LearningResources.LR_Types.PODCAST); - LearningResources lr3 = lrdv2.deleteLR(); - - // insert blog and podcast bb --> ok - CourseEditor courseEditor = lr3.createCourseAndStartEditing(COURSE_NAME, DESC); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.BLOG, true, BLOG_TITLE); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.PODCAST, true, PODCAST_TITLE); - - - // edit internal blog - BlogEditor blogEditorInt = (BlogEditor)courseEditor.selectCourseElement(BLOG_TITLE); - blogEditorInt.create(BLOG_TITLE, BLOG_DESC); - - // edit blog in new tab - BlogResource blogResource = blogEditorInt.edit(); - - //blogResource.createEntry(title, description, content) - blogResource.createEntry("HongKong", "HongKong entry description", "dubai entry content", true); - - // publish and preview - LRDetailedView lRDetailedView = blogResource.close(); - courseEditor = lRDetailedView.editCourseContent(); - courseEditor.publishCourse(); - CourseRun courseRun = courseEditor.closeToLRDetailedView().showCourseContent(); - } -} diff --git a/src/test/java/org/olat/test/functional/lr/lr_RemoveOwnerTest.java b/src/test/java/org/olat/test/functional/lr/lr_RemoveOwnerTest.java deleted file mode 100644 index cefcf75b6a9..00000000000 --- a/src/test/java/org/olat/test/functional/lr/lr_RemoveOwnerTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Test checks, if it is ensured that each learning resource has at least one owner. Course is deleted at the end<br/> - * <p> - * <br/> - * Test setup: <br/> - * 1. Authors logs in in Browser 1 and creates course and adds Student as owner <br/> - * 2. Student logs in in Browser 2 <br/> - * <br/> - * Test case: <br/> - * 1. user1 creates course COURSE_NAME with two owners (user1 and user2)<br/> - * 2. user2 enters the course <br/> - * 3. user1 removes user2 as owner <br/> - * 4. user1 tries to remove himself as owner <br/> - * 5. check, if the message "At least one user is required in a group" appears <br/> - * 6. delete the course COURSE_NAME <br/> - * </p> - * - * @author kristina - */ - -public class lr_RemoveOwnerTest extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "CourseName" + System.currentTimeMillis(); - - - public void testlr_RemoveOwnerTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OlatLoginInfos user1 = context.getStandardAuthorOlatLoginInfos(); - OlatLoginInfos user2 = context.getStandardStudentOlatLoginInfos(); - - System.out.println("logging in browser 1..."); - OLATWorkflowHelper olatWorkflowHelper1 = context.getOLATWorkflowHelper(user1); - - LRDetailedView lRDetailedView1 = null; - try { - // user1 creates course CourseName with two owners - CourseEditor courseEditor1 = olatWorkflowHelper1.getLearningResources().createCourseAndStartEditing(COURSE_NAME, "CourseDescription"); - lRDetailedView1 = courseEditor1.closeToLRDetailedView(); - //assign only one new owner - lRDetailedView1.assignOwner(user2.getUsername()); - - // user2 opens detail view of COURSE_NAME with browser 2 - System.out.println("logging in browser 2..."); - OLATWorkflowHelper olatWorkflowHelper2 = context.getOLATWorkflowHelper(user2); - LRDetailedView lRDetailedView2 = olatWorkflowHelper2.getLearningResources().searchMyResource(COURSE_NAME); - - // now remove user2 in browser 1 - lRDetailedView1.removeOwner(user2.getUsername()); - - // now user1 tries to remove himself in browser 1 - Boolean successfullyRemoved = lRDetailedView1.removeOwner(user1.getUsername()); - assertNotNull(successfullyRemoved); - assertFalse(successfullyRemoved); - } finally { - if(lRDetailedView1!=null) { - lRDetailedView1.deleteLR(); - } - } - - // excellent, close course in browser 2 - // selenium2.click("ui=tabs::closeCourse(nameOfCourse=CourseName)"); - - } -} diff --git a/src/test/java/org/olat/test/functional/lr/lr_concurrenciesDelete.java b/src/test/java/org/olat/test/functional/lr/lr_concurrenciesDelete.java deleted file mode 100644 index 68caa453c3a..00000000000 --- a/src/test/java/org/olat/test/functional/lr/lr_concurrenciesDelete.java +++ /dev/null @@ -1,96 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.SeleniumHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Check if Student receives the message, that the Author has deleted the course. <br/> - * <p> - * Test setup: <br/> - * 1. Author creates course <br/> - * 2. Author deletes course which Student is viewing <br/> - * Test case: <br/> - * 1. Author creates course with forum, publishes course and sets access to all registered OLAT users. <br/> - * 2. Student opens course in course-run in browser 2 <br/> - * 3. Author deletes the course in browser 1 <br/> - * 4. Student clicks the link forum <br/> - * 5. Check if Student receives the message, that the course was deleted. <br/> - * - * </p> - * - * @author kristina - */ - -public class lr_concurrenciesDelete extends BaseSeleneseTestCase { - - private final String COURSE_NAME = "CourseName"; - - - - public void testlr_concurrenciesDelete() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OlatLoginInfos user1 = context.getStandardAuthorOlatLoginInfos(); - OlatLoginInfos user2 = context.getStandardStudentOlatLoginInfos(); - - // Author creates course CourseName with forum and open the detail view of course 'CourseName' - System.out.println("logging in browser 1..."); - OLATWorkflowHelper olatWorkflow1 = context.getOLATWorkflowHelper(user1); - LearningResources learningResources1 = olatWorkflow1.getLearningResources(); - CourseEditor courseEditor = learningResources1.createCourseAndStartEditing(COURSE_NAME, "CourseDescription"); - courseEditor.insertCourseElement(CourseElemTypes.FORUM, true, null); - courseEditor.publishCourse(); - courseEditor.closeToLRDetailedView(); - LRDetailedView lRDetailedView1 = learningResources1.searchResource(COURSE_NAME, null); - - // Student opens 'CourseName' with browser 2 - System.out.println("logging in browser 2..."); - OLATWorkflowHelper olatWorkflow2 = context.getOLATWorkflowHelper(user2); - LearningResources learningResources2 = olatWorkflow2.getLearningResources(); - LRDetailedView lRDetailedView2 = learningResources2.searchResource(COURSE_NAME, null); - CourseRun courseRun2 = lRDetailedView2.showCourseContent(); - - // Author deletes 'CourseName' in browser 1 - lRDetailedView1.deleteLR(); - - // after that Student clicks 'Forum' in browser 2 - // beware of polling which already shows the message "this course..." - // to stabilize the test: check first if Forum is available. - // test may still fail because of polling before clicking, but the probability is lowered. - if(courseRun2.isElementPresent("Forum")){ - courseRun2.selectCourseElement("Forum"); - } - //and waits until 'This course has been modified.' appears - SeleniumHelper.waitUntilTextPresent(courseRun2.getSelenium(), "This course has been modified.", 20); - // excellent, close course in browser 2 - courseRun2.close(COURSE_NAME); - } -} diff --git a/src/test/java/org/olat/test/functional/lr/lr_createCourseAMTest.java b/src/test/java/org/olat/test/functional/lr/lr_createCourseAMTest.java deleted file mode 100644 index 78830a87a82..00000000000 --- a/src/test/java/org/olat/test/functional/lr/lr_createCourseAMTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Author creates course, insert title and description, add owner, change access, delete course <br/> - * <p> - * Test setup: <br/> - * 1. Author creates course <br/> - * 2. course is deleted at the end<br/> - * Test case: <br/> - * 1. Author creates course CourseName <br/> - * 2. Author starts editor <br/> - * 3. Author closes editor <br/> - * 4. Author clicks assign owners, adds owner <br/> - * 5. Author clicks modify properties <br/> - * 6. Author changes to all registered OlAT users, save <br/> - * 7. course is deleted <br/> - * </p> - * - * @author kristina - */ - -public class lr_createCourseAMTest extends BaseSeleneseTestCase { - - - - public void testlr_createCourseAMTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - String standardPassword = context.getStandardStudentOlatLoginInfos().getPassword(); - OlatLoginInfos secondUser = context.createuserIfNotExists(1, "coursenameauthor", standardPassword, true, true, true, true, false); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing("CourseName", "CourseDescription"); - LRDetailedView lRDetailedView = courseEditor.closeToLRDetailedView(); - lRDetailedView.assignOwner(secondUser.getUsername()); - lRDetailedView.modifyProperties("All registered OLAT users"); - - //delete course - lRDetailedView.deleteLR(); - } -} diff --git a/src/test/java/org/olat/test/functional/lr/lr_createCourseTest.java b/src/test/java/org/olat/test/functional/lr/lr_createCourseTest.java deleted file mode 100644 index fdd67b7c9fe..00000000000 --- a/src/test/java/org/olat/test/functional/lr/lr_createCourseTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Author creates course, starts editor, closes editor, course is deleted <br/> - * <p> - * Test setup: <br/> - * 1. Author creates course <br/> - * 2. course is deleted <br/> - * - * Test case: <br/> - * 1. Author creates course <br/> - * 2. Author starts editor <br/> - * 3. Author closes editor <br/> - * 4. course is deleted <br/> - * </p> - * - * @author kristina - */ - -public class lr_createCourseTest extends BaseSeleneseTestCase { - - - - public void testlr_createCourseTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - LearningResources learningResources = olatWorkflow.getLearningResources(); - CourseEditor courseEditor = learningResources.createCourseAndStartEditing("CourseName", "CourseDescription"); - LRDetailedView lRDetailedView = courseEditor.closeToLRDetailedView(); - //cleanup - lRDetailedView.deleteLR(); - } -} diff --git a/src/test/java/org/olat/test/functional/lr/lr_createGlossaryTest.java b/src/test/java/org/olat/test/functional/lr/lr_createGlossaryTest.java deleted file mode 100644 index 6c03b0ddcd0..00000000000 --- a/src/test/java/org/olat/test/functional/lr/lr_createGlossaryTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Author creates glossary, starts editor, closes editor, glossary is deleted <br/> - * <p> - * Test setup: <br/> - * 1. cleanup <br/> - * 2. Author creates glossary <br/> - * 3. glossary is deleted <br/> - * - * Test case: <br/> - * 1. Author creates glossary <br/> - * 2. Author starts editor <br/> - * 3. Author closes editor <br/> - * 4. glossary is deleted<br/> - * </p> - * - * @author kristina - */ -public class lr_createGlossaryTest extends BaseSeleneseTestCase { - - private final String GLOSSARY_NAME = "GlossaryName" + System.currentTimeMillis();; - - - public void testlr_createGlossaryTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - - LearningResources learningResources = olatWorkflow.getLearningResources(); - learningResources.createGlossaryAndStartEditing(GLOSSARY_NAME, "GlossaryDescription"); - - //cleanup - learningResources = olatWorkflow.getLearningResources(); - LRDetailedView lRDetailedView = learningResources.searchMyResource(GLOSSARY_NAME); - lRDetailedView.deleteLR(); - } -} diff --git a/src/test/java/org/olat/test/functional/lr/lr_createQuestionnaireTest.java b/src/test/java/org/olat/test/functional/lr/lr_createQuestionnaireTest.java deleted file mode 100644 index cf39f3c1234..00000000000 --- a/src/test/java/org/olat/test/functional/lr/lr_createQuestionnaireTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.qti.TestEditor; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Author creates questionnaire, starts editor, closes editor, questionnaire is deleted <br/> - * <p> - * Test setup: <br/> - * 1. Author creates questionnaire <br/> - * 2. questionnaire is deleted <br/> - * - * Test case: <br/> - * 1. Author creates questionnaire <br/> - * 2. Author starts editor <br/> - * 3. Author closes editor <br/> - * 4. questionnaire is deleted <br/> - * </p> - * - * @author kristina - */ - -public class lr_createQuestionnaireTest extends BaseSeleneseTestCase { - - - - public void testlr_createQuestionnaireTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper olatWorkflowHelper = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - TestEditor testEditor = olatWorkflowHelper.getLearningResources().createQuestionnaireAndStartEditing("QuestionnaireName", "QuestionnaireDescription"); - LRDetailedView lRDetailedView = testEditor.close(); - - //questionnaire is deleted - lRDetailedView.deleteLR(); - } -} diff --git a/src/test/java/org/olat/test/functional/lr/lr_createResourcefolderTest.java b/src/test/java/org/olat/test/functional/lr/lr_createResourcefolderTest.java deleted file mode 100644 index 9f574be1837..00000000000 --- a/src/test/java/org/olat/test/functional/lr/lr_createResourcefolderTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.ResourceEditor; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Author creates resource folder, starts editor, closes editor, resource folder is deleted <br/> - * <p> - * Test setup: <br/> - * 1. Author creates resource folder <br/> - * - * - * Test case: <br/> - * 1. Author creates resource folder <br/> - * 2. Author starts editor <br/> - * 3. Author closes editor <br/> - * 4. resource folder is deleted <br/> - * </p> - * - * @author kristina - */ - -public class lr_createResourcefolderTest extends BaseSeleneseTestCase { - - - - public void testlr_createResourcefolderTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - ResourceEditor resourceEditor = olatWorkflow.getLearningResources().createResourceFolderAndStartEditing("ResourcefolderName", "ResourcefolderDescription"); - LRDetailedView lRDetailedView = resourceEditor.close(); - - // resource folder is deleted - lRDetailedView.deleteLR(); - - } -} diff --git a/src/test/java/org/olat/test/functional/lr/lr_createTestTest.java b/src/test/java/org/olat/test/functional/lr/lr_createTestTest.java deleted file mode 100644 index 6f3f9838208..00000000000 --- a/src/test/java/org/olat/test/functional/lr/lr_createTestTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.qti.TestEditor; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Author creates test, starts editor, closes editor, tes is deleted <br/> - * <p> - * Test setup: <br/> - * 1. Author creates test <br/> - * <br/> - * Test case: <br/> - * 1. Author creates test <br/> - * 2. Author starts editor <br/> - * 3. Author closes editor <br/> - * 4. test is deleted <br/> - * </p> - * - * @author kristina - */ - -public class lr_createTestTest extends BaseSeleneseTestCase { - - - - public void testlr_createTestTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper olatWorkflowHelper = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - TestEditor testEditor = olatWorkflowHelper.getLearningResources().createTestAndStartEditing("TestName", "TestDescription"); - LRDetailedView lRDetailedView = testEditor.close(); - - // test is deleted - lRDetailedView.deleteLR(); - - } -} diff --git a/src/test/java/org/olat/test/functional/lr/lr_createWikiTest.java b/src/test/java/org/olat/test/functional/lr/lr_createWikiTest.java deleted file mode 100644 index f059ada499f..00000000000 --- a/src/test/java/org/olat/test/functional/lr/lr_createWikiTest.java +++ /dev/null @@ -1,57 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.lr; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; - -/** - * Author creates wiki, wiki is deleted <br/> - * <p> - * Test setup: <br/> - * 1. Author creates wiki <br/> - * <br/> - * Test case: <br/> - * 1. Author creates wiki <br/> - * 2. wiki is deleted <br/> - * </p> - * - * @author kristina - */ - -public class lr_createWikiTest extends BaseSeleneseTestCase { - - - - public void testlr_createWikiTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - LRDetailedView lRDetailedView = olatWorkflow.getLearningResources().createResource("WikiName", "WikiDescription", LR_Types.WIKI); - - // wiki is deleted - lRDetailedView.deleteLR(); - - } -} diff --git a/src/test/java/org/olat/test/functional/portfolio/CollectOrCreateArtefactTest.java b/src/test/java/org/olat/test/functional/portfolio/CollectOrCreateArtefactTest.java deleted file mode 100644 index 6bee10cd95c..00000000000 --- a/src/test/java/org/olat/test/functional/portfolio/CollectOrCreateArtefactTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ - -package org.olat.test.functional.portfolio; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.Forum; -import org.olat.test.util.selenium.olatapi.course.run.StructureElement; -import org.olat.test.util.selenium.olatapi.portfolio.EPArtefactSearch; -import org.olat.test.util.selenium.olatapi.portfolio.EPCollectWizard; -import org.olat.test.util.selenium.olatapi.portfolio.EPExtensions; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -/** - * ePortfolio: testing - * - artefact collection - * - artefact creation - * - filtering with search - * - deleting artefacts - * - * - * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com - */ -public class CollectOrCreateArtefactTest extends BaseSeleneseTestCase { - - private static final String FORUM_SUBJECT = "forum artefact test"; - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.CLEAN_AND_RESTARTED_SINGLE_VM); - } - - /** - * - creates a forum post in the demo course - * - collect it as an artefact using the wizard - * - check that the artefact exists - * @throws Exception - */ - @Test - public void testCollectForumPost() throws Exception { - //cleanup first - cleanUpArtefacts(); - - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent(Context.DEMO_COURSE_NAME_1); - courseRun.selectAnyButGetToRoot("Activation Interaction"); - Forum forum = courseRun.selectForum("Forum"); - forum.openNewTopic(FORUM_SUBJECT, "Forum Message to collect as artefact"); - courseRun.selectForum("Forum").viewTopic(FORUM_SUBJECT); - - EPCollectWizard epwizz = forum.collectAsArtefact(); - assertNotNull("forum post seems not to be collectable or ePortfolio is turned off", epwizz); - epwizz.filloutWizardForOLATSource(FORUM_SUBJECT, "a test to collect a forum artefact"); - EPExtensions epExt = workflow.getHome().getEPortfolio(); - assertEquals(1, epExt.getTotalArtefactAmount()); - workflow.logout(); - } - - private void cleanUpArtefacts() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - - //cleanup first - EPExtensions epExt = workflow.getHome().getEPortfolio(); - while(epExt.hasArtefact()) { - epExt.deleteFirstArtefact(); - Thread.sleep(3000); - } - } - - /** - * - create a new text-artefact - * - search for it by artefact-type - * not functional in web 1.0 mode - */ - @Test(dependsOnMethods ={"testCollectForumPost"}) - public void testCreateTextArtefact() { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - - EPExtensions epExt = workflow.getHome().getEPortfolio(); - EPCollectWizard epWizz = epExt.createTextArtefactAndOpenWizard(); - epWizz.filloutWizardForTextArtefact("a great content for an artefact...", "text artefact", "how great it is"); - // filter for textartefact and get amount - EPArtefactSearch epSearch = epExt.getArtefactSearch(); - epSearch.toggleTextArtefactFilter(); - assertEquals(1, epExt.getArtefactAmount()); - workflow.logout(); - } - - /** - * - deletes 2 artefacts (created before) - * - check that no more artefacts exist - */ - @Test(dependsOnMethods ={"testCreateTextArtefact"}) - public void testDeleteArtefacts(){ - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - - EPExtensions epExt = workflow.getHome().getEPortfolio(); - assertEquals(2, epExt.getTotalArtefactAmount()); - epExt.deleteFirstArtefact(); - epExt.deleteFirstArtefact(); - assertEquals(0, epExt.getTotalArtefactAmount()); - workflow.logout(); - } - -} diff --git a/src/test/java/org/olat/test/functional/portfolio/CreateFillAndShareMapTest.java b/src/test/java/org/olat/test/functional/portfolio/CreateFillAndShareMapTest.java deleted file mode 100644 index 70299d382c3..00000000000 --- a/src/test/java/org/olat/test/functional/portfolio/CreateFillAndShareMapTest.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ - -package org.olat.test.functional.portfolio; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.portfolio.EPCollectWizard; -import org.olat.test.util.selenium.olatapi.portfolio.EPExtensions; -import org.olat.test.util.selenium.olatapi.portfolio.EPMapEditor; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * ePortfolio: this is testing the following scenarios: - * - creates a map - * - add pages and structures to this map - * - link artefacts in map - * - share map to others - * - edit a map - * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com - * - */ -public class CreateFillAndShareMapTest extends BaseSeleneseTestCase { - - private static final String SELENIUM_TEST_MAP_TITLE = "selenium test map"; - - public void setUp() throws Exception { - Context.setupContext(getFullName(), SetupType.CLEAN_AND_RESTARTED_SINGLE_VM); - } - @Test - public void testCreateDefaultMap(){ - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - selenium = workflow.getSelenium(); - EPExtensions epExt = workflow.getHome().getEPortfolio(); - EPMapEditor epMap = epExt.getMapEditor(); - epMap.createDefaultMap(SELENIUM_TEST_MAP_TITLE, "its cold outside, fill this map with funny stuff ;)"); - epMap.toggleEditMode(false); - } - - @Test(dependsOnMethods ={"testCreateDefaultMap"}) - public void testAddPagesToMap(){ - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - selenium = workflow.getSelenium(); - EPExtensions epExt = workflow.getHome().getEPortfolio(); - EPMapEditor epMap = epExt.getMapEditor(); - epMap.openMapByTitle(SELENIUM_TEST_MAP_TITLE); - epMap.addPages(2); - } - @Test(dependsOnMethods ={"testAddPagesToMap"}) - public void testAddStructuresToMap(){ - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - selenium = workflow.getSelenium(); - EPExtensions epExt = workflow.getHome().getEPortfolio(); - EPMapEditor epMap = epExt.getMapEditor(); - epMap.openMapByTitle(SELENIUM_TEST_MAP_TITLE); - epMap.openFirstPage(); - epMap.addStructures(3); - } - @Test(dependsOnMethods ={"testAddStructuresToMap"}) - public void testFillMap(){ - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - selenium = workflow.getSelenium(); - EPExtensions epExt = workflow.getHome().getEPortfolio(); - // create an artefact to be sure one exists - EPCollectWizard epWizz = epExt.createTextArtefactAndOpenWizard(); - epWizz.filloutWizardForTextArtefact("a great content for an artefact...", "text artefact", "how great it is"); - EPMapEditor epMap = epExt.getMapEditor(); - epMap.openMapByTitle(SELENIUM_TEST_MAP_TITLE); - epMap.openFirstPage(); - // attach to first page - selenium.click("ui=epMap::attachArtefactToPageLink()"); - selenium.waitForPageToLoad("30000"); - // set view to details mode! - selenium.click("ui=epArtefactSearch::viewModeDetails()"); - selenium.click("ui=epArtefactSearch::firstArtefactChooseLink()"); - selenium.waitForPageToLoad("30000"); - // attach to a structure - selenium.click("ui=epMap::attachArtefactToStructLink()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=epArtefactSearch::firstArtefactChooseLink()"); - selenium.waitForPageToLoad("30000"); - } - @Test(dependsOnMethods ={"testFillMap"}) - public void testShareMap(){ - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - selenium = workflow.getSelenium(); - EPExtensions epExt = workflow.getHome().getEPortfolio(); - EPMapEditor epMap = epExt.getMapEditor(); - epMap.openShareDialogForMapByTitle(SELENIUM_TEST_MAP_TITLE); - epMap.shareToOtherUserWithName("administrator"); - } - @Test(dependsOnMethods ={"testShareMap"}) - public void testEditMap(){ - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - selenium = workflow.getSelenium(); - EPExtensions epExt = workflow.getHome().getEPortfolio(); - EPMapEditor epMap = epExt.getMapEditor(); - epMap.openMapByTitle(SELENIUM_TEST_MAP_TITLE); - epMap.openFirstPage(); - epMap.toggleEditMode(true); - // first page was selected before, edit title&desc - epMap.changeElementTitleDescription("a new title for this page", "and even a better description! how great is this!"); - // delete all pages - while (!workflow.isTextPresent("at least one page")){ - if (!epMap.deleteActiveTOCElement()) break; - // workaround to get to a page again - epMap.toggleEditMode(false); - epMap.openFirstPage(); - epMap.toggleEditMode(true); - } - assertTrue(workflow.isTextPresent("at least one page")); - epMap.toggleEditMode(false); - } - -} diff --git a/src/test/java/org/olat/test/functional/search/MultiUserSearchTest.java b/src/test/java/org/olat/test/functional/search/MultiUserSearchTest.java deleted file mode 100644 index c7ecdb8b0ff..00000000000 --- a/src/test/java/org/olat/test/functional/search/MultiUserSearchTest.java +++ /dev/null @@ -1,262 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.functional.search; - -import java.io.File; -import java.io.FileInputStream; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.Selenium; - -/** - * Search service test with several users and several search queries. <p> - * - * THIS TEST ONLY RUNS AGAINST AN OLAT WITH SEARCH ACTIVATED. <br/> - * - * Test setup: <br/> - * It needs a property file (see searchTest.properties) with the following data: <br/> - * - user names - it is assumed that the users are already defined in OLAT <br/> - * - search query pool <br/> - * - max. number of searches before logout: maxSearches <br/> - * - testSpanMs - max running time of the test <br/> - * - timeToWaitBetweenSearches <br/> - * - * @author Lavinia Dumitrescu - * - */ -public class MultiUserSearchTest extends BaseSeleneseTestCase { - - private final String PROPERTIES_FILE_NAME = "org/olat/test/functional/search/searchTest.properties"; - - private List<String> userNamesList = new ArrayList<String>(); - - private List<String> searchQueryList = new ArrayList<String>(); - private Iterator<String> queryIterator; - - private final String SERVICE_NOT_AVAILABLE_MSG = "This service is temporarily unavailable."; - private final String RESULTS_FOUND = "Results 1"; - private final String NO_RESULTS_FOUND = "No results found."; - - private String timeToWaitBetweenSearches = "30000"; - private int maxSearches = 5; //max. number of searches before logout - private long testSpanMs; - private long startTimeStampMs; - - - - public void setUp() throws Exception { - //no need to setup the context - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - getTestData(); - startTimeStampMs = System.currentTimeMillis(); - } - - /** - * Search in loop for the testSpanMs. - * @throws Exception - */ - public void testSearch() throws Exception { - while(System.currentTimeMillis()-startTimeStampMs<testSpanMs) { - searchForOneLogin(); - } - } - - /** - * Tests the search instance with a configurable: - * - number of users - * - search query pool - * - number of searches per user - between login and logout - * - timeToWaitBetweenSearches - * - * @throws Exception - */ - public void searchForOneLogin() throws Exception { - System.out.println("testSearch STARTED"); - - List<Selenium> seleniumList = new ArrayList<Selenium>(); - //create a selenium instance for each user, and let the users sent the first search request - for(String username : userNamesList) { - String standardPassword = Context.getContext().getStandardAdminOlatLoginInfos(1).getPassword(); - //TODO:LD: create user with different roles - Context.getContext().createuserIfNotExists(1, username, standardPassword, true, false, false, false, false); - //we assume that all tests users have the same login, and the user already exists in the target olat instance (default users) - Selenium selenium_ = createSeleniumAndLogin(username, standardPassword); - seleniumList.add(selenium_); - - //search after login - String luceneQuery = getNextSearchQuery(); - selenium_.type("ui=search::topnavSearchInput()", luceneQuery); - selenium_.click("ui=search::topnavSubmitSearch()"); - selenium_.waitForPageToLoad(timeToWaitBetweenSearches); - assertTrue(evaluateSearchResult(selenium_, luceneQuery)); - } - int searchCounter = 1; //once already searched - - while(searchCounter<=maxSearches) { - //iterate over the seleniumList - and trigger searches via the search form - for(Selenium selenium_ : seleniumList) { - String luceneQuery = getNextSearchQuery(); - selenium_.type("ui=search::searchFormInput()", luceneQuery); - selenium_.click("ui=search::searchButton()"); - selenium_.waitForPageToLoad(timeToWaitBetweenSearches); - assertTrue(evaluateSearchResult(selenium_, luceneQuery)); - } - searchCounter++; - } - - //logout all users - for(Selenium selenium_ : seleniumList) { - selenium_.click("ui=tabs::logOut()"); - selenium_.waitForPageToLoad("30000"); - selenium_.close(); - selenium_.stop(); - } - - System.out.println("testSearch ENDED"); - } - - /** - * Get initial test data. - * - */ - private void getTestData() { - //input data - read it from property file - File propertiesFile = WorkflowHelper.locateFile(PROPERTIES_FILE_NAME); - if(propertiesFile.exists()) { - System.out.println("Read test data from properties file:"); - //read properties - Properties properties = new Properties(); - try { - FileInputStream fis = new FileInputStream(propertiesFile); - properties.load(fis); - Iterator keyIterator = properties.keySet().iterator(); - while(keyIterator.hasNext()) { - String currentKey = (String)keyIterator.next(); - String currentValue = (String)properties.get(currentKey); - if(currentKey.equals("testSpanMs")) { - testSpanMs = Long.parseLong(currentValue); - System.out.println("testSpanMs: " + currentValue); - } else if(currentKey.startsWith("user")) { - userNamesList.add(currentValue); - System.out.println("user: " + currentValue); - } else if(currentKey.startsWith("query")) { - searchQueryList.add(currentValue); - System.out.println("searchQuery: " + currentValue); - } else if (currentKey.equals("timeToWaitBetweenSearches")) { - timeToWaitBetweenSearches = currentValue; - System.out.println("timeToWaitBetweenSearches: " + timeToWaitBetweenSearches); - } else if(currentKey.equals("maxSearches")) { - maxSearches = Integer.parseInt(currentValue); - System.out.println("maxSearches: " + maxSearches); - } - } - } - catch (Exception ex) { - ex.printStackTrace(); - } - } else { - System.out.println("dummy test data"); - //testSpanMs = 60*60*1000; //1h - testSpanMs = 2*60*1000; //1h - - String[] userNames = {"test", "test2", "test3"}; - //String[] userNames = {"test"}; - String [] searchQueries = {"test", "olat", "Demo", "course"}; - - for(int i=0; i<userNames.length; i++) { - userNamesList.add(userNames[i]); - } - - for(int i=0; i<searchQueries.length; i++) { - searchQueryList.add(searchQueries[i]); - } - } - System.out.println("userNamesList: " + userNamesList); - System.out.println("searchQueryList: " + searchQueryList); - } - - /** - * Iterates over the query list over and over again. - * @return - */ - private String getNextSearchQuery() { - if(queryIterator==null || !queryIterator.hasNext()) { - queryIterator = searchQueryList.iterator(); - } - if(queryIterator.hasNext()) { - String searchQuery = queryIterator.next(); - System.out.println("getNextSearchQuery: " + searchQuery); - return searchQuery; - } - //should never return null - return null; - } - - /** - * - * @param username - * @param passwort - * @return Returns a selenium instance for the input username. - * @throws Exception - */ - private Selenium createSeleniumAndLogin(String username, String passwort) throws Exception { - OlatLoginInfos defaultOlatLoginInfos = Context.getContext().getStandardStudentOlatLoginInfos(1); - //OlatLoginInfos olatLoginInfos1 = Context.getContext().createuserIfNotExists(1, username, psw, true, false, false, false, false); - OlatLoginInfos olatLoginInfos1 = new OlatLoginInfos(defaultOlatLoginInfos.getSeleniumHostname(), - defaultOlatLoginInfos.getSeleniumBrowserId(), - defaultOlatLoginInfos.getFullOlatServerUrl(), - username, passwort); - Selenium selenium1 = Context.getContext().createSeleniumAndLogin(olatLoginInfos1); - return selenium1; - } - - /** - * We consider that an successful search should find at least a result entry. - * If no result found or service not available - this is regarded as an invalid search result. - * @param selenium_ - */ - private boolean evaluateSearchResult(Selenium selenium_, String luceneQuery) { - boolean noResults = selenium_.isTextPresent(NO_RESULTS_FOUND); - boolean resultsFound = selenium_.isTextPresent(RESULTS_FOUND); - boolean serviceNotAvailable = selenium_.isTextPresent(SERVICE_NOT_AVAILABLE_MSG); - boolean searchResultsFound = !serviceNotAvailable && (resultsFound && !noResults ); - System.out.println("searchResultsFound: " + searchResultsFound + " for query: " + luceneQuery); - System.out.println("serviceNotAvailable: " + serviceNotAvailable); - System.out.println("resultsFound: " + resultsFound); - System.out.println("noResults: " + noResults); - return searchResultsFound; - } - -} diff --git a/src/test/java/org/olat/test/functional/search/searchTest.properties b/src/test/java/org/olat/test/functional/search/searchTest.properties deleted file mode 100644 index 6d4c23adb67..00000000000 --- a/src/test/java/org/olat/test/functional/search/searchTest.properties +++ /dev/null @@ -1,24 +0,0 @@ -# MultiUserSearchTest test configuration - -#test span in milliseconds -#testSpanMs=3600000 -testSpanMs=60000 - -#timeToWaitBetweenSearches in milliseconds -timeToWaitBetweenSearches=120000 - -#max. number of searches before logout -maxSearches=5 - -#users - the key must start with the same "user" prefix -user1=seleniumstudent1 -user2=seleniumstudent2 -user3=seleniumstudent3 - -#search queries - the key must start with the "query" prefix - this should lead to at least 1 result for a student -query1=Assessment Tool Test -query2=CareOL -query3=Psychopathology -query4=Psychologie -query5=olat -query6=portlet \ No newline at end of file diff --git a/src/test/java/org/olat/test/functional/test/ChangeTstInEditor.java b/src/test/java/org/olat/test/functional/test/ChangeTstInEditor.java deleted file mode 100644 index 61b1148d256..00000000000 --- a/src/test/java/org/olat/test/functional/test/ChangeTstInEditor.java +++ /dev/null @@ -1,91 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.test; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.SeleniumHelper; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.qti.FIBQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.QuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.TestEditor; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Change test in test editor, part of test suite TestEditorCombiTest.java. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. author edits test TEST_NAME<br/> - * 2. author checks if only section and only item are not deletable. <br/> - * 3. Author copies question, deletes question. <br/> - * 4. Author saves test. <br/> - * - * @author sandra - * - */ - -public class ChangeTstInEditor extends BaseSeleneseTestCase { - - @Test(dependsOnGroups = {TestEditorCombiTest.FIRST}, groups = {TestEditorCombiTest.SECOND}) - public void testChangeTstInEditor() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - //author starts test from before - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - LearningResources learningResources = olatWorkflow.getLearningResources(); - LRDetailedView lRDetailedView = learningResources.searchMyResource(TestEditorCombiTest.TEST_NAME); - //edit Test - TestEditor testEditor = lRDetailedView.editTestContent(); - // gets info of not having saved - SeleniumHelper.waitUntilTextPresent(lRDetailedView.getSelenium(), "The test/questionnaire was not saved to learning resources during the last session.", 20); - // author sets passing score, tries to delete an only section, adds section and tries to delete only item - testEditor.setNecessaryPassingScore(4.0); - testEditor.selectSection("Test section"); - testEditor.deleteUndeleteable(true); - - testEditor.addSection("Second section"); - testEditor.selectQuestion("New question"); - testEditor.deleteUndeleteable(false); - - //author copies and deletes items - testEditor.selectSection("Test section"); - testEditor.selectQuestion("Gap Text Question"); - QuestionEditor questionEditor = testEditor.copyCurrentQuestion("Gap Text Question"); - questionEditor.setQuestionTitle("Second Gap"); - FIBQuestionEditor fIBQuestionEditor =(FIBQuestionEditor)testEditor.selectQuestion("Second Gap"); - questionEditor.selectQuestionAndAnswersTab(); - fIBQuestionEditor.changeCapitalization(2); - testEditor.selectSection("Second section"); - testEditor.selectQuestion("New question"); - testEditor.deleteCurrentNode(true); - testEditor.isTextPresent("New question"); - - testEditor.close(); - - } - } - diff --git a/src/test/java/org/olat/test/functional/test/CheckTestAttempts.java b/src/test/java/org/olat/test/functional/test/CheckTestAttempts.java deleted file mode 100644 index d6f8235b6df..00000000000 --- a/src/test/java/org/olat/test/functional/test/CheckTestAttempts.java +++ /dev/null @@ -1,142 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.test; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.TestElementEditor; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentForm; -import org.olat.test.util.selenium.olatapi.course.run.AssessmentTool; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.TestElement; -import org.olat.test.util.selenium.olatapi.course.run.TestRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.qti.TestEditor; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Tests attempts settings of a test integrated in a course. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. Author creates test TEST_NAME and integrates it in course COURSE_NAME. <br/> - * 2. First configuration: only one attempt. <br/> - * 3. Check if student can solve test only once. <br/> - * 4. Second configuration: Authors changes assessment form of student and sets attempts to zero. <br/> - * 5. Student can solve test once again. <br/> - * 6. Third configuration: Change attempts config in course editor to 2 attempts. <br/> - * 7. Check if user gets message to relaunch course and that he can solve test again.<br/> - * - * - * @author sandra - * - */ - -public class CheckTestAttempts extends BaseSeleneseTestCase { - - private final String TEST_NAME = "CheckTestAttemptsTest_" + System.currentTimeMillis(); - private final String TEST_DESCRIPTION = "CheckTestAttemptsTestDesc_" + System.currentTimeMillis(); - private final String COURSE_NAME = "CheckTestAttemptsCourseDesc_" + System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CheckTestAttemptsCourse_"+System.currentTimeMillis(); - private final String GROUP_NAME = "AttemptsGroup"; - private final String TEST_NODE_NAME = "Test1"; - - public void testIntegrateTestAndCheckAttempts() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - // author creates simple test - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - TestEditor testEditor = olatWorkflow.getLearningResources().createTestAndStartEditing(TEST_NAME, TEST_DESCRIPTION); - testEditor.setNecessaryPassingScore(1.0); - testEditor.close(); - - // author creates course, adds test, configures test with one attempt, publish - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - TestElementEditor testElementEditor = (TestElementEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.TEST, true,TEST_NODE_NAME); - testElementEditor.chooseMyFile(TEST_NAME); - testElementEditor.configureTestLayout(null, null, false, false, 1, true); - courseEditor.publishCourse(); - LRDetailedView lRDetailedView1 = courseEditor.closeToLRDetailedView(); - CourseRun courseRunAuthor = lRDetailedView1.showCourseContent(); - - //author creates learning group and adds student - courseRunAuthor.getGroupManagement().createGroupAndAddMembers(GROUP_NAME, context.getStandardAuthorOlatLoginInfos().getUsername(), context.getStandardStudentOlatLoginInfos().getUsername()); - - // student starts course - OLATWorkflowHelper olatWorkflow1 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos()); - - LearningResources learningResources = olatWorkflow1.getLearningResources(); - CourseRun courseRunStudent = learningResources.searchAndShowCourseContent(COURSE_NAME); - - // student starts and finishes test - TestElement testElement = courseRunStudent.selectTest(TEST_NODE_NAME); - TestRun testRun = testElement.startTest(); - testElement = testRun.finishTest(true, 0); - - //select course element again, check if he cannot start test anymore - testElement = courseRunStudent.selectTest(TEST_NODE_NAME); - assertEquals("0.000", testElement.getAchievedScore()); - assertEquals("Failed", testElement.getStatus()); - assertTrue(testElement.isShowResultsPresent()); - assertTrue(testElement.cannotStartTestAnymore()); - - //author opens assessment tool and sets attempt for student to zero - AssessmentTool assessmentTool = courseRunAuthor.getAssessmentTool(); - AssessmentForm assessmentForm = assessmentTool.getAssessmentFormAsPerUser(context.getStandardStudentOlatLoginInfos().getUsername(),TEST_NODE_NAME); - assessmentForm.setAttempts(0); - assessmentForm.save(); - assessmentForm.close(); - - //check if student can solve test for the second time now - testElement = courseRunStudent.selectTest(TEST_NODE_NAME); - TestRun testRun2 = testElement.startTest(); - testElement = testRun2.finishTest(true, 0); - testElement = courseRunStudent.selectTest(TEST_NODE_NAME); - assertEquals("0.000", testElement.getAchievedScore()); - assertEquals("Failed", testElement.getStatus()); - - //check that student cannot solve test any more - assertTrue(testElement.cannotStartTestAnymore()); - - //author opens course editor, sets max. number of attempts to 2 and publishes - CourseEditor courseEditor2 = courseRunAuthor.getCourseEditor(); - TestElementEditor testElementEditor2 = (TestElementEditor)courseEditor2.selectCourseElement(TEST_NODE_NAME); - testElementEditor2.configureTestLayout(null, null, false, false, 2, true); - courseEditor2.publishCourse(); - - Thread.sleep(10000); - //student should restart course after publish and can solve test once more. - courseRunStudent.getDisposedCourseRun().closeCourseAndRestart(); - testElement = courseRunStudent.selectTest(TEST_NODE_NAME); - TestRun testRun3 = testElement.startTest(); - testElement = testRun3.finishTest(true, 0); - assertEquals("0.000", testElement.getAchievedScore()); - assertEquals("Failed", testElement.getStatus()); - assertTrue(testElement.cannotStartTestAnymore()); - - } - } - diff --git a/src/test/java/org/olat/test/functional/test/CombiQuestionnaireTest.java b/src/test/java/org/olat/test/functional/test/CombiQuestionnaireTest.java deleted file mode 100644 index ddd11829148..00000000000 --- a/src/test/java/org/olat/test/functional/test/CombiQuestionnaireTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.test; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Combi test for questionnaire editor and attempts check. See respective test classes for extensive documentation. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. CreateQuestionnaireWithAllQuestionTypes.java creates a questionnaire with all kinds of question types. <br/> - * 2. IntegrateQuestionnaireAndCheckAttempts.java adds the questionnaire element to a course and tests the different configurations in the questionnaire run. <br/> - * - * @author sandra - * - */ - -public class CombiQuestionnaireTest extends TestSuite { - - protected final static String QUESTIONNAIRE_NAME = "QuestionnaireAttempts"+System.currentTimeMillis(); - protected final static String QUESTIONNAIRE_DESCRIPTION = "QuestionnaireAttemptsDesc"; - protected final static String COURSE_NAME = "QuestionnaireAttemptsCourse"+System.currentTimeMillis(); - protected final static String COURSE_DESCRIPTION = "QuestionnaireAttemptsCourseDesc"; - - public static Test suite() { - TestSuite suite = new TestSuite("CombiQuestionnaireTest"); - - suite.addTestSuite(CreateQuestionnaireWithAllQuestionTypes.class); - suite.addTestSuite(IntegrateQuestionnaireAndCheckAttempts.class); - - return suite; - } - -} diff --git a/src/test/java/org/olat/test/functional/test/CreateQuestionnaireWithAllQuestionTypes.java b/src/test/java/org/olat/test/functional/test/CreateQuestionnaireWithAllQuestionTypes.java deleted file mode 100644 index b77328ca530..00000000000 --- a/src/test/java/org/olat/test/functional/test/CreateQuestionnaireWithAllQuestionTypes.java +++ /dev/null @@ -1,106 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.test; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.qti.EssayQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.FIBQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.MCQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.QuestionnaireEditor; -import org.olat.test.util.selenium.olatapi.qti.SCQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.SectionEditor; -import org.olat.test.util.selenium.olatapi.qti.QuestionEditor.QUESTION_TYPES; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -/** - * - * Author creates questionnaire with all question types, part of test suite CombiQuestionnaireTest.java. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. Author creates questionnaire QUESTIONNAIRE_NAME and starts editing. <br/> - * 2. Author adds all four possible question types. <br/> - * 3. Author edits all question titles and adds answers options for SC and MC. <br/> - * 5. Author closes questionnaire. <br/> - * - * @author sandra - * - */ -public class CreateQuestionnaireWithAllQuestionTypes extends BaseSeleneseTestCase { - - - - public void testCreateQuestionnaireCheckAttempts() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - //author creates questionnaire - OLATWorkflowHelper olatWorkflowHelper = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - QuestionnaireEditor questionnaireEditor = olatWorkflowHelper.getLearningResources().createQuestionnaireAndStartEditing(CombiQuestionnaireTest.QUESTIONNAIRE_NAME, CombiQuestionnaireTest.QUESTIONNAIRE_DESCRIPTION); - - // adding all question types - questionnaireEditor.addQuestion(QUESTION_TYPES.MULTIPLE_CHOICE,"Multiple Choice Question"); - questionnaireEditor.addQuestion(QUESTION_TYPES.ESSAY,"Essay Question"); - questionnaireEditor.addQuestion(QUESTION_TYPES.GAP_TEXT,"Gap Text Question"); - - // editing question and answers - SectionEditor sectionEditor = questionnaireEditor.selectSection("New section"); - sectionEditor.setSectionTitle("New section", "Questionnaire section"); - - // edit single choice question - SCQuestionEditor scQuestionEditor = (SCQuestionEditor)questionnaireEditor.selectQuestion("New question"); - scQuestionEditor.setQuestionTitle("Single Choice Question"); - scQuestionEditor.selectQuestionAndAnswersTab(); - scQuestionEditor.editQuestion("Which do you think is the most famous tourist attraction in Hong Kong?"); - scQuestionEditor.editAnswer("Harbour Junk Trip", 1); - scQuestionEditor.addNewAnswer(); - scQuestionEditor.editAnswer("Victoria Peak", 2); - scQuestionEditor.addNewAnswer(); - scQuestionEditor.editAnswer("Disney Land", 3); - - // edit multiple choice question - MCQuestionEditor mcQuestionEditor = (MCQuestionEditor)questionnaireEditor.selectQuestion("Multiple Choice Question"); - mcQuestionEditor.selectQuestionAndAnswersTab(); - mcQuestionEditor.editQuestion("Which Dim Sum specialities do you like?"); - mcQuestionEditor.editAnswer("Shrimp dumplings", 1); - mcQuestionEditor.addNewAnswer(); - mcQuestionEditor.editAnswer("Chicken feet", 2); - mcQuestionEditor.addNewAnswer(); - mcQuestionEditor.editAnswer("Rice rolls", 3); - mcQuestionEditor.addNewAnswer(); - mcQuestionEditor.editAnswer("Rice pudding", 4); - - // edit gap text - FIBQuestionEditor fIBQuestionEditor = (FIBQuestionEditor)questionnaireEditor.selectQuestion("Gap Text Question"); - fIBQuestionEditor.selectQuestionAndAnswersTab(); - fIBQuestionEditor.editTextFragment(1,"Which skyscraper do you like most?"); - fIBQuestionEditor.addNewBlank(); - - // edit essay question - EssayQuestionEditor essayQuestionEditor = (EssayQuestionEditor)questionnaireEditor.selectQuestion("Essay Question"); - essayQuestionEditor.selectQuestionAndAnswersTab(); - essayQuestionEditor.editQuestion("Write about your impression of the 'Symphony of Lights'" ); - - questionnaireEditor.close(); - - } -} diff --git a/src/test/java/org/olat/test/functional/test/CreateTstInEditor.java b/src/test/java/org/olat/test/functional/test/CreateTstInEditor.java deleted file mode 100644 index 2efa1e73682..00000000000 --- a/src/test/java/org/olat/test/functional/test/CreateTstInEditor.java +++ /dev/null @@ -1,108 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.test; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.qti.FIBQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.KPrimQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.MCQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.SCQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.SectionEditor; -import org.olat.test.util.selenium.olatapi.qti.TestEditor; -import org.olat.test.util.selenium.olatapi.qti.QuestionEditor.QUESTION_TYPES; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Create test in test editor, part of test suite TestEditorCombiTest.java. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. author creates test TEST_NAME. <br/> - * 2. author adds questions of the types MC, Kprim and gap text. <br/> - * 3. author edits question titles and answers and sets correct answers. <br/> - * - * @author sandra - * - */ - -public class CreateTstInEditor extends BaseSeleneseTestCase { - private final String TEST_DESCRIPTION = "TestDescription"; - - @Test(groups = {TestEditorCombiTest.FIRST}) - public void testCreateTestInEditor() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - // author creates test - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - TestEditor testEditor = olatWorkflow.getLearningResources().createTestAndStartEditing(TestEditorCombiTest.TEST_NAME, TEST_DESCRIPTION); - // author adds question types - testEditor.addQuestion(QUESTION_TYPES.MULTIPLE_CHOICE,"Multiple Choice Question"); - testEditor.addQuestion(QUESTION_TYPES.KPRIM,"Kprim Question"); - testEditor.addQuestion(QUESTION_TYPES.GAP_TEXT,"Gap Text Question"); - - // author edits answers and sets correct - SectionEditor sectionEditor = testEditor.selectSection("New section"); - sectionEditor.setSectionTitle("New section", "Test section"); - SCQuestionEditor scQuestionEditor = (SCQuestionEditor)testEditor.selectQuestion("New question"); - scQuestionEditor.setQuestionTitle("Single Choice Question"); - scQuestionEditor.selectQuestionAndAnswersTab(); - scQuestionEditor.editQuestion("Is Kristina expecting a boy or a girl?"); - scQuestionEditor.editAnswer("boy", 1); - scQuestionEditor.addNewAnswer(); - scQuestionEditor.editAnswer("girl", 2); - scQuestionEditor.setSingleChoiceSolution(2); - // multiple choice - MCQuestionEditor mcQuestionEditor = (MCQuestionEditor)testEditor.selectQuestion("Multiple Choice Question"); - mcQuestionEditor.selectQuestionAndAnswersTab(); - mcQuestionEditor.editQuestion("What does Kristina like for breakfast?"); - mcQuestionEditor.editAnswer("Nussbrötli", 1); - mcQuestionEditor.addNewAnswer(); - mcQuestionEditor.editAnswer("Gipfeli", 2); - mcQuestionEditor.addNewAnswer(); - mcQuestionEditor.editAnswer("doppelter Espresso", 3); - mcQuestionEditor.addNewAnswer(); - mcQuestionEditor.editAnswer("Latte Macchiato", 4); - mcQuestionEditor.setMultipleChoiceSolution(4); - - // Kprim question - KPrimQuestionEditor kprimQuestionEditor = (KPrimQuestionEditor)testEditor.selectQuestion("Kprim Question"); - kprimQuestionEditor.selectQuestionAndAnswersTab(); - kprimQuestionEditor.editQuestion("Which specialities are from Sweden?"); - kprimQuestionEditor.editAnswer("Princess Tarta", 1); - kprimQuestionEditor.editAnswer("Spekemat", 2); - kprimQuestionEditor.editAnswer("Klipfisk", 3); - kprimQuestionEditor.editAnswer("Koetbullar", 4); - kprimQuestionEditor.setCorrectKprimSolution(true, false, false, true); - - // Gap text - FIBQuestionEditor fIBQuestionEditor = (FIBQuestionEditor)testEditor.selectQuestion("Gap Text Question"); - fIBQuestionEditor.selectQuestionAndAnswersTab(); - fIBQuestionEditor.editTextFragment(1,"Name of Kristinas boy:"); - fIBQuestionEditor.addNewBlank(); - fIBQuestionEditor.setBlankSolution("Nils", 2); - - } -} diff --git a/src/test/java/org/olat/test/functional/test/IntegrateQuestionnaireAndCheckAttempts.java b/src/test/java/org/olat/test/functional/test/IntegrateQuestionnaireAndCheckAttempts.java deleted file mode 100644 index 94b6014fadd..00000000000 --- a/src/test/java/org/olat/test/functional/test/IntegrateQuestionnaireAndCheckAttempts.java +++ /dev/null @@ -1,112 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.test; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.QuestionnaireElementEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.QuestionnaireElement; -import org.olat.test.util.selenium.olatapi.course.run.QuestionnaireRun; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -/** - * - * Author adds the questionnaire element to a course and tests the different configurations in the questionnaire run, part of test suite CombiQuestionnaireTest.java. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. Author creates course COURSE_NAME and starts editing. <br/> - * 2. Author adds questionnaire course element and adds questionnaire QUESTIONNAIRE_NAME. <br/> - * 3. Author sets configuration options: allow menu navigation, show menu navigation, allow cancel, - * do not allow suspend. <br/> - * 5. Author publishes course. <br/> - * 6. Student opens course COURSE_NAME and starts questionnaire QUESTIONNAIRE_NAME and checks if the above - * configuration options are effective. <br/> - * 7. Student edits answers and finishes questionnaire.<br/> - * 8. Student tries to start questionnaire for the second time, check if message that questionnaire was - * already solved is shown. <br/> - * - * @author sandra - * - */ -public class IntegrateQuestionnaireAndCheckAttempts extends BaseSeleneseTestCase { - - - - - public void testCreateQuestionnaireCheckAttempts() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - // author creates course - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos(1)); - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(CombiQuestionnaireTest.COURSE_NAME, CombiQuestionnaireTest.COURSE_DESCRIPTION);; - - // author adds questionnaire - QuestionnaireElementEditor questionnaireElementEditor = (QuestionnaireElementEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.QUESTIONNAIRE, true, "Questionnaire"); - String questionnaireName = CombiQuestionnaireTest.QUESTIONNAIRE_NAME; - questionnaireElementEditor.chooseMyFile(questionnaireName); - - // author configures questionnaire: cancel: ok, suspend: nok and publishes - questionnaireElementEditor.configureQuestionnaireLayout(true, true, true, false); - courseEditor.publishCourse(); - - //student starts course - OLATWorkflowHelper olatWorkflow2 = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos(1)); - LearningResources learningResources = olatWorkflow2.getLearningResources(); - String courseName = CombiQuestionnaireTest.COURSE_NAME; - CourseRun courseRun = learningResources.searchAndShowCourseContent(courseName); - - // student starts questionnaire and checks configuration - QuestionnaireElement questionnaireElement = courseRun.selectQuestionnaire("Questionnaire"); - QuestionnaireRun questionnaireRun = questionnaireElement.start(); - assertTrue("Assert that a cancel questionnaire button is present", questionnaireRun.isCancelPresent()); - assertFalse("Assert that a suspend questionnaire button is present", questionnaireRun.isSuspendPresent()); - - // student solves questionnaire - assertTrue(questionnaireRun.isTextPresent("Questionnaire section")); - questionnaireRun.selectMenuItem("Single Choice Question"); - questionnaireRun.setSingleChoiceSolution("Victoria Peak"); - - questionnaireRun.selectMenuItem("Multiple Choice Question"); - String[] answers = {"Shrimp dumplings","Rice pudding"}; - questionnaireRun.setMultipleChoiceSolution(answers); - - questionnaireRun.selectMenuItem("Gap Text Question"); - questionnaireRun.fillInGap("Which skyscraper do you like most?", "Bank of China Tower"); - - questionnaireRun.selectMenuItem("Essay Question"); - questionnaireRun.fillInEssay("Hmmm... difficult question..."); - - //student finishes and tries to do it once again - CourseRun courseRun2 = questionnaireRun.finish(); - - QuestionnaireElement questionnaireElement2 = courseRun2.selectQuestionnaire("Questionnaire"); - questionnaireElement2.cannotStartAnymore(); - questionnaireElement2.isTextPresent("You have already filled in this questionnaire, thank you! Questionnaires can only be filled in once."); - - - - } -} diff --git a/src/test/java/org/olat/test/functional/test/IntegrateTstInCourse.java b/src/test/java/org/olat/test/functional/test/IntegrateTstInCourse.java deleted file mode 100644 index 98a50b66fe2..00000000000 --- a/src/test/java/org/olat/test/functional/test/IntegrateTstInCourse.java +++ /dev/null @@ -1,78 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.test; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.SelfTestElementEditor; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.TestElementEditor; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Integrate test in course editor, part of test suite TestEditorCombiTest.java. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. author creates course COURSE_NAME<br/> - * 2. author adds self test course element, selects test from CreateTstInEditor.java<br/> - * 3. author configures self test layout options: do not allow menu navigation, do not show menu navigation, - * allow cancel, allow suspend <br/> - * 4. author adds test course element, selects test from CreateTstInEditor.java <br/> - * 5. author configures test layout options: allow menu navigation default (=true?), show menu navigation default - * (=true?), do not allow cancel, do not allow suspend, maximum nr of approaches is 2, do display results on - * test starting page <br/> - * 6. author publishes course <br/> - * - * @author sandra - * - */ - -public class IntegrateTstInCourse extends BaseSeleneseTestCase { - - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - - @Test(dependsOnGroups = {TestEditorCombiTest.SECOND}, groups = {TestEditorCombiTest.THIRD}) - public void testIntegrateTestInCourse() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - // author creates course - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(TestEditorCombiTest.COURSE_NAME, COURSE_DESCRIPTION); - - // author adds self-test and configures - SelfTestElementEditor selfTestElementEditor = (SelfTestElementEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.SELF_TEST, true, "SelfTest"); - selfTestElementEditor.chooseMyFile(TestEditorCombiTest.TEST_NAME); - selfTestElementEditor.configureSelfTestLayout(false, false, true, true); - - //author adds test and configures - TestElementEditor testElementEditor = (TestElementEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.TEST, true, "Test"); - testElementEditor.chooseMyFile(TestEditorCombiTest.TEST_NAME); - testElementEditor.configureTestLayout(null, null, false, false, 2, true); - - courseEditor.publishCourse(); - - } -} diff --git a/src/test/java/org/olat/test/functional/test/TestEditorCombiTest.java b/src/test/java/org/olat/test/functional/test/TestEditorCombiTest.java deleted file mode 100644 index 52ab7273180..00000000000 --- a/src/test/java/org/olat/test/functional/test/TestEditorCombiTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.test; - -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -import junit.framework.Test; -import junit.framework.TestSuite; -/** - * - * Combi test for test editor. See respective test classes for extensive documentation. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. CreateTstInEditor.java creates test in test editor. <br/> - * 2. ChangeTstInEditor changes test in test editor. <br/> - * 3. IntegrateTstInCourse.java integrates test in course editor. <br/> - * 4. TstRun.java tests how student solves test in test run. <br/> - * - * @author sandra - * - */ -public class TestEditorCombiTest extends TestSuite { - - - - protected final static String COURSE_NAME = "CourseTest_" + System.currentTimeMillis(); - protected final static String TEST_NAME = "TestTest_" + System.currentTimeMillis(); - - final static String FIRST = "TestEditorCombiTest.FIRST"; - final static String SECOND = "TestEditorCombiTest.SECOND"; - final static String THIRD = "TestEditorCombiTest.THIRD"; - - - public static Test suite() { - Context context = Context.setupContext("TestEditorCombiTest", SetupType.SINGLE_VM); - //context.deleteAllLearningResourcesFromMyAuthors(); - Context.tearDown(); - - TestSuite suite = new TestSuite("CombiTest"); - - suite.addTestSuite(CreateTstInEditor.class); - suite.addTestSuite(ChangeTstInEditor.class); - suite.addTestSuite(IntegrateTstInCourse.class); - suite.addTestSuite(TstRun.class); - - return suite; - } - -} diff --git a/src/test/java/org/olat/test/functional/test/TstRun.java b/src/test/java/org/olat/test/functional/test/TstRun.java deleted file mode 100644 index c68f5d6adf1..00000000000 --- a/src/test/java/org/olat/test/functional/test/TstRun.java +++ /dev/null @@ -1,182 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.test; - -import java.util.HashMap; -import java.util.Map; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.TestElement; -import org.olat.test.util.selenium.olatapi.course.run.TestRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -/** - * - * Test how student solves test in test run, part of test suite TestEditorCombiTest.java. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. Student starts course COURSE_NAME.<br/> - * 2. Student starts course element self test and check if configuration of IntegrateTstInCourse.java is effective.<br/> - * 3. Student solves self test and checks if actual score is updated according to correct solutions. <br/> - * 4. Student checks if he passed test and if setting of results layout is according to configuration. <br/> - * 5. Student starts course element test and check if configuration of IntegrateTstInCourse.java is effective.<br/> - * 6. Student solves test for the first time and checks if actual score is updated according to correct solutions. <br/> - * 7. Student checks if he failed the test and if setting of results layout is according to configuration. <br/> - * 8. Student starts test for the second time and finishes without saving any results.<br/> - * 9. Student tries to start test for the third time but cannot as max. nr of attempts is 2. <br/> - * 10. Author deletes course and test. <br/> - * - * @author sandra - * - */ - -public class TstRun extends BaseSeleneseTestCase { - - /** - * <p> - * This test is part of test suite TestEditorCombiTest.java. Student solves - * self-test and test. Check the configurations made in TestCase before. - * Author deletes course and test. - * </p> - * - * @throws Exception - */ - @Test(dependsOnGroups = {TestEditorCombiTest.THIRD}) - public void testTestRun() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - // student logs in and starts course - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardStudentOlatLoginInfos()); - LearningResources learningResources = olatWorkflow.getLearningResources(); - CourseRun courseRun = learningResources.searchAndShowCourseContent(TestEditorCombiTest.COURSE_NAME); - - // student starts self-test and checks configuration - TestElement testElement = courseRun.selectTest("SelfTest"); - TestRun testRun = testElement.startTest(); - // student solves self-test - testRun.isCancelPresent(); - testRun.isSuspendPresent(); - testRun.next(); - assertTrue(testRun.isTextPresent("Second section")); - testRun.next(); - assertTrue(testRun.isTextPresent("Second Gap")); - testRun.fillInGap("Name of Kristinas boy:", "nils"); - assertTrue(testRun.isTextPresent("Actual score: 1 / 5")); - testRun.next(); - - assertTrue(testRun.isTextPresent("Gap Text Question")); - testRun.fillInGap("Name of Kristinas boy:", "nils"); - assertTrue(testRun.isTextPresent("Actual score: 1 / 5")); - - assertTrue(testRun.isTextPresent("Kprim Question")); - Map<String, Boolean> answerToCorrectMap = new HashMap<String, Boolean>(); - answerToCorrectMap.put("Princess Tarta",true); - answerToCorrectMap.put("Spekemat", false); - answerToCorrectMap.put("Klipfisk", false); - answerToCorrectMap.put("Koetbullar", true); - testRun.setKprimSolution(answerToCorrectMap); - assertTrue(testRun.isTextPresent("Actual score: 2 / 5")); - - assertTrue(testRun.isTextPresent("Multiple Choice Question")); - String[] answers = {"Nussbrötli","Latte Macchiato"}; - testRun.setMultipleChoiceSolution(answers); - assertTrue(testRun.isTextPresent("Actual score: 3 / 5")); - - assertTrue(testRun.isTextPresent("Single Choice Question")); - testRun.setSingleChoiceSolution("girl"); - assertTrue(testRun.isTextPresent("Actual score: 4 / 5")); - - TestElement testElement2 = testRun.selfTestFinishedConfirm(); - //select course element again, else could not see the changes - testElement2 = courseRun.selectTest("SelfTest"); - assertEquals("4.000", testElement2.getAchievedScore()); - assertEquals("Passed",testElement2.getStatus()); - assertFalse(testElement2.isShowResultsPresent()); - - - // student starts test and checks configuration - testElement = courseRun.selectTest("Test"); - TestRun testRun2 = testElement.startTest(); - testRun2.isCancelPresent(); - testRun2.isSuspendPresent(); - - // student solves test for the first time - testRun2.selectMenuItem("Second Gap"); - testRun2.fillInGap("Name of Kristinas boy:", "nils"); - testRun2.selectMenuItem("Gap Text Question"); - testRun2.fillInGap("Name of Kristinas boy:", "nils"); - testRun2.selectMenuItem("Kprim Question"); - Map<String, Boolean> answerToCorrectMap2 = new HashMap<String, Boolean>(); - answerToCorrectMap.put("Princess Tarta",true); - answerToCorrectMap.put("Spekemat", false); - answerToCorrectMap.put("Klipfisk", false); - answerToCorrectMap.put("Koetbullar", true); - testRun2.setKprimSolution(answerToCorrectMap2); - testRun2.selectMenuItem("Multiple Choice Question"); - String[] answers2 = {"Nussbrötli","Latte Macchiato"}; - testRun2.setMultipleChoiceSolution(answers2); - testRun2.selectMenuItem("Single Choice Question"); - testRun2.setSingleChoiceSolution("girl"); - TestElement testElement3 = testRun2.finishTest(true, 3); - //select course element again, else could not see the changes - testElement3 = courseRun.selectTest("Test"); - - assertEquals("3.000", testElement3.getAchievedScore()); - assertEquals("Failed", testElement3.getStatus()); - assertTrue(testElement3.isShowResultsPresent()); - - - // student solves test for the second time - testElement = courseRun.selectTest("Test"); - TestRun testRun3 = testElement.startTest(); - TestElement testElement4 = testRun3.finishTest(true, 0); - testElement4 = courseRun.selectTest("Test"); - assertEquals("0.000", testElement4.getAchievedScore()); - assertEquals("Failed", testElement4.getStatus()); - - - // student tries to solve test for the third time - TestElement testElement5 = courseRun.selectTest("Test"); - testElement5 = courseRun.selectTest("Test"); - assertTrue(testElement5.cannotStartTestAnymore()); - assertTrue(testElement5.isTextPresent("There are no more attempts at your disposal.")); - - - // author deletes course and test - OLATWorkflowHelper olatWorkflow2 = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - LRDetailedView lRDetailedView = olatWorkflow2.getLearningResources().searchMyResource(TestEditorCombiTest.COURSE_NAME); - try { - lRDetailedView.deleteLR(); - } catch (Exception e) {} - lRDetailedView = olatWorkflow2.getLearningResources().searchMyResource(TestEditorCombiTest.TEST_NAME); - try { - lRDetailedView.deleteLR(); - } catch (Exception e) {} - - } -} diff --git a/src/test/java/org/olat/test/functional/test/package.html b/src/test/java/org/olat/test/functional/test/package.html deleted file mode 100644 index c5a13650a4a..00000000000 --- a/src/test/java/org/olat/test/functional/test/package.html +++ /dev/null @@ -1,12 +0,0 @@ -<html> -<head> -</head> - -<body> - -Contains tests for Test, Questionnaire learning resources. -<br/> - - -</body> -</html> \ No newline at end of file diff --git a/src/test/java/org/olat/test/functional/test/test_editor_combitest.html b/src/test/java/org/olat/test/functional/test/test_editor_combitest.html deleted file mode 100644 index e9c3ac4e369..00000000000 --- a/src/test/java/org/olat/test/functional/test/test_editor_combitest.html +++ /dev/null @@ -1,1429 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> -<head profile="http://selenium-ide.openqa.org/profiles/test-case"> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<link rel="selenium.base" href="" /> -<title>test_editor_create_test</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr><td rowspan="1" colspan="3">test_editor_create_test</td></tr> -</thead><tbody> -<tr> - <td>open</td> - <td>http://demo.olat.org/olat/dmz/</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Online Learning And Training</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=dmz::username()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::username()</td> - <td>author01</td> -</tr> -<tr> - <td>type</td> - <td>ui=dmz::password()</td> - <td>olat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=dmz::login()</td> - <td></td> -</tr> -<tr> - <td>assertTitle</td> - <td>OLAT - Home</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_create_test()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_title()</td> - <td>TestTest7</td> -</tr> -<tr> - <td>click</td> - <td>ui=learningResources::dialog_description()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_description()</td> - <td>Selenium Test 1</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_startYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=New section)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_section_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_section_title()</td> - <td>Test section</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_section_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=New question)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_metadata_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_metadata_title()</td> - <td>Single Choice Question</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_metadata_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_add_addMultipleChoice()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::toolbox_add_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_add_save()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_metadata_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_metadata_title()</td> - <td>Multiple Choice Question</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_metadata_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_add_addKprim()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::toolbox_add_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_add_save()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_metadata_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_metadata_title()</td> - <td>Kprim Question</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_metadata_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_add_addGapText()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::toolbox_add_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_add_save()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_metadata_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_metadata_title()</td> - <td>Gap Text Question</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_metadata_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=Single Choice Question)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_tabQuestionAnswers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickQuestion()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Is Kristina expecting a boy or a girl?</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswer(indexOfAnswer=1)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>boy</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_addNewAnswer()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswer(indexOfAnswer=2)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>girl</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_setCorrectSc(indexOfAnswer=2)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=Multiple Choice Question)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_tabQuestionAnswers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickQuestion()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>What does Kristina like for breakfast?</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswerMc(indexOfAnswer=1)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Nussbrötli</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_addNewAnswer()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswerMc(indexOfAnswer=2)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Gipfeli</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_addNewAnswer()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswerMc(indexOfAnswer=3)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>doppelter Espresso</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_addNewAnswer()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswerMc(indexOfAnswer=4)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Latte Macchiato</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_setCorrectMc(indexOfAnswer=4)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=Kprim Question)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_tabQuestionAnswers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickQuestion()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Which specialities are from Sweden?</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswer(indexOfAnswer=1)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Princess Tarta</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswer(indexOfAnswer=2)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Spekemat</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswer(indexOfAnswer=3)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Klipfisk</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickAnswer(indexOfAnswer=4)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Koetbullar</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_setCorrectKprim(indexOfAnswer=1)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_setCorrectKprim(indexOfAnswer=4)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_setIncorrectKprim(indexOfAnswer=2)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_setIncorrectKprim(indexOfAnswer=3)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=Gap Text Question)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_tabQuestionAnswers()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_clickTextElement(indexOfTextElement=1)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_questionField()</td> - <td>Name of Kristinas boy:</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_editMaterial_saveAndback()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_addNewBlank()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_questionAnswers_blankField(indexOfElement=2)</td> - <td>Nils</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_save()</td> - <td></td> -</tr> -<tr> - <td></td> - <td>TODO</td> - <td></td> -</tr> -<!--new sections, move, copy, delete items--> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_myEntries()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_clickCourseEntry(nameOfCourse=TestTest7)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_learningResource_editContent()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=TestTest7)</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_test_necessaryPassingScore()</td> - <td>4.0</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_test_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=Test section)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_Change_changeDelete()</td> - <td></td> -</tr> -<tr> - <td>waitForTextPresent</td> - <td>Section cannot be deleted.</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::dialog_clickOk()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_add_addSection()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_add_save()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_section_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_section_title()</td> - <td>Second section</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_section_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=New question)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_Change_changeDelete()</td> - <td></td> -</tr> -<tr> - <td>waitForTextPresent</td> - <td>Question cannot be deleted.</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::dialog_clickOk()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=Test section)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=Gap Text Question)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_Change_changeCopy()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_add_save()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_metadata_title()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=testEditor::content_metadata_title()</td> - <td>Second gap</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_metadata_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_tabQuestionAnswers()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=testEditor::content_questionAnswers_capitalization(indexOfElement=2)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::content_questionAnswers_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=Second section)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::menu_link(link=New question)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_Change_changeDelete()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::dialog_clickYes()</td> - <td></td> -</tr> -<tr> - <td>assertTextNotPresent</td> - <td>New question</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::toolbox_editorTools_closeEditor()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=testEditor::dialog_clickSave()</td> - <td></td> -</tr> -<!--author creates course and inserts test--> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::toolbox_create_course()</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_title()</td> - <td>CourseForTest</td> -</tr> -<tr> - <td>type</td> - <td>ui=learningResources::dialog_description()</td> - <td>I don't know what to type here</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::dialog_startYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertSelfTest()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbSelfTest_tabSelfTestConfiguration()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbSelfTest_chooseFile()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::commons_chooseLr_myEntries()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::commons_chooseLr_chooseTest(nameOfTest=TestTest7)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbSelfTest_layoutParameters_allowCancelYes()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbSelfTest_layoutParameters_allowSuspendYes()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigationNo()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigationNo()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbSelfTest_layoutParameters_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertTest()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbTest_tabTestConfiguration()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbTest_chooseFile()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::commons_chooseLr_myEntries()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::commons_chooseLr_chooseTest(nameOfTest=TestTest7)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbTest_layoutParameters_allowCancelNo()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbTest_layoutParameters_allowSuspendNo()</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=courseEditor::content_bbTest_layoutParameters_maximumNrOfApproach()</td> - <td>label=2 x</td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::content_bbTest_layoutParameters_displayresultsOnTestHomepageYes()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::content_bbTest_layoutParameters_save()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_publish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_selectall()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_next()</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td></td> -</tr> -<tr> - <td>select</td> - <td>ui=courseEditor::publishDialog_courseAccessDropDown()</td> - <td>label=All registered OLAT users</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::publishDialog_finish()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=courseEditor::toolbox_editorTools_closeEditor()</td> - <td></td> -</tr> -<tr> - <td></td> - <td>TODO</td> - <td></td> -</tr> -<!--student runs test--> -<tr> - <td>clickAndWait</td> - <td>ui=tabs::learningResources()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::menu_courses()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=learningResources::content_showContentOfLearningResource(nameOfLearningResource=CourseForTest)</td> - <td></td> -</tr> -<!--start with self-test--> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Self-test)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::start()</td> - <td></td> -</tr> -<tr> - <td>assertElementPresent</td> - <td>ui=qti::cancelTest()</td> - <td></td> -</tr> -<tr> - <td>assertElementPresent</td> - <td>ui=qti::suspendTest()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::next()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Second section</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::next()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Second gap</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=qti::testGapItemFormElement(text=Name of Kristinas boy:)</td> - <td>nils</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Actual score: 1 / 5</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::next()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Gap Text Question</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=qti::testGapItemFormElement(text=Name of Kristinas boy:)</td> - <td>nils</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Actual score: 1 / 5</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Kprim Question</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testKprimItemFormElementPlus(text=Princess Tarta)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testKprimItemFormElementMinus(text=Spekemat)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testKprimItemFormElementMinus(text=Klipfisk)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testKprimItemFormElementPlus(text=Koetbullar)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Actual score: 2 / 5</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Multiple Choice Question</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testItemFormElement(text=Nussbrötli)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testItemFormElement(text=Latte Macchiato)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Actual score: 3 / 5</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Single Choice Question</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testItemFormElement(text=girl)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Actual score: 4 / 5</td> - <td></td> -</tr> -<tr> - <td>waitForTextPresent</td> - <td>Your results were saved.</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::closeTest()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Self-test)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>4.000</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Passed</td> - <td></td> -</tr> -<tr> - <td>assertElementNotPresent</td> - <td>ui=qti::showHideResults(text=Show results)</td> - <td></td> -</tr> -<!--continue with test first run--> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Test)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=commons::start()</td> - <td></td> -</tr> -<tr> - <td>assertElementNotPresent</td> - <td>ui=qti::cancelTest()</td> - <td></td> -</tr> -<tr> - <td>assertElementNotPresent</td> - <td>ui=qti::suspendTest()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::menuItem(titleOfItem=Second gap)</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=qti::testGapItemFormElement(text=Name of Kristinas boy:)</td> - <td>nils</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::menuItem(titleOfItem=Gap Text Question)</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>ui=qti::testGapItemFormElement(text=Name of Kristinas boy:)</td> - <td>nils</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::menuItem(titleOfItem=Kprim Question )</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testKprimItemFormElementPlus(text=Princess Tarta)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testKprimItemFormElementMinus(text=Spekemat)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testKprimItemFormElementPlus(text=Klipfisk)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testKprimItemFormElementMinus(text=Koetbullar)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::menuItem(titleOfItem=Multiple Choice Question )</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testItemFormElement(text=Nussbrötli)</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testItemFormElement(text=Latte Macchiato)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::menuItem(titleOfItem=Single Choice Question )</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>ui=qti::testItemFormElement(text=girl)</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::saveAnswer()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::finishTest()</td> - <td></td> -</tr> -<tr> - <td>waitForTextPresent</td> - <td>Your results were saved</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::closeTest()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Test)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>3.000</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Failed</td> - <td></td> -</tr> -<tr> - <td>assertElementPresent</td> - <td>ui=qti::showHideResults(text=Show results)</td> - <td></td> -</tr> -<tr> - <td></td> - <td></td> - <td></td> -</tr> -<!--run test for second time--> -<tr> - <td>clickAndWait</td> - <td>ui=commons::start()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::finishTest()</td> - <td></td> -</tr> -<tr> - <td>waitForTextPresent</td> - <td>Your results were saved</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=qti::closeTest()</td> - <td></td> -</tr> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Test)</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>0.000</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>Failed</td> - <td></td> -</tr> -<!--run test for third time--> -<tr> - <td>clickAndWait</td> - <td>ui=course::menu_link(link=Test)</td> - <td></td> -</tr> -<tr> - <td>assertElementNotPresent</td> - <td>ui=commons::start()</td> - <td></td> -</tr> -<tr> - <td>assertTextPresent</td> - <td>You cannot launch this test anymore.</td> - <td></td> -</tr> - -</tbody></table> -</body> -</html> diff --git a/src/test/java/org/olat/test/functional/usermanagement/DeleteUserTest.java b/src/test/java/org/olat/test/functional/usermanagement/DeleteUserTest.java deleted file mode 100644 index 2e0e8dd660e..00000000000 --- a/src/test/java/org/olat/test/functional/usermanagement/DeleteUserTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.usermanagement; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.OlatLoginHelper; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.user.UserManagement; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - - -/** - * - * Test if deleted user cannot login anymore. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. Administrator opens user management. <br/> - * 2. Administrator creates user USER_NAME. <br/> - * 3. User USER_NAME logs in and out. <br/> - * 4. Administrator deletes user USER_NAME and check that user cannot be found anymore. <br/> - * 5. USER_NAME asserts that he cannot login anymore. <br/> - * - * @author sandra - * - */ - -public class DeleteUserTest extends BaseSeleneseTestCase { - - private final String USER_NAME = "usertodelete" + System.currentTimeMillis(); - private final String USER_FNAME = "First"; - private final String USER_LNAME = "Last"; - private final String USER_EMAIL = System.currentTimeMillis() + "@user.com"; - private final String USER_PW = "olat3"; - - - - public void testDeleteUser() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflowAdmin = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos()); - UserManagement userManagement = olatWorkflowAdmin.getUserManagement(); - - //create user - userManagement.createUser(USER_NAME, USER_FNAME, USER_LNAME, USER_EMAIL, USER_PW); - - // log in user - OLATWorkflowHelper olatWorkflowUserToDelete = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, USER_NAME, USER_PW)); - olatWorkflowUserToDelete.getHome(); - olatWorkflowUserToDelete.logout(); - - //admin deletes user and check that user cannot be found anymore - assertTrue(userManagement.searchUser(USER_NAME)); - boolean userDeleted = userManagement.deleteUserImmediately(USER_NAME); - Thread.sleep(5000); - if(userDeleted) { - assertFalse("Asserts that no user is found with this username: " + USER_NAME,userManagement.searchUser(USER_NAME)); - - // check that user cannot login any more - assertTrue("Asserts that the USER_NAME cannot login anymore!",OlatLoginHelper.loginExpectingError(1, USER_NAME, USER_PW)); - } else { - System.out.println("Could not delete user since the delete user workflow is locked!");//e.g. if running against OLATNG - } - olatWorkflowAdmin.logout(); - } -} - diff --git a/src/test/java/org/olat/test/functional/usermanagement/ImportUserTest.java b/src/test/java/org/olat/test/functional/usermanagement/ImportUserTest.java deleted file mode 100644 index 4ce92040213..00000000000 --- a/src/test/java/org/olat/test/functional/usermanagement/ImportUserTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.usermanagement; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.user.UserManagement; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Import users, assert that existing users don't get imported. - * <br/> - * Test setup: <br/> - * 1. Concatenate strings with all user attributes for user import. - * <p> - * Test case: <br/> - * 1. Administrator opens user management. <br/> - * 2. Admin imports NEW_USER_NAME1. <br/> - * 3. Admin imports multiple new users. <br/> - * 4. Admin imports one existing user and checks that existing user cannot be imported. <br/> - * 5. Admin imports one new and one existing user and checks that only new users can be imported. <br/> - * 6. Imported users check if the can all log in. <br/> - * - * @author sandra - * - */ - -public class ImportUserTest extends BaseSeleneseTestCase { - - private final String NEW_USER_NAME1 = "newuser1" + System.currentTimeMillis(); - private final String NEW_USER_NAME2 = "newuser2" + System.currentTimeMillis(); - private final String NEW_USER_NAME3 = "newuser3" + System.currentTimeMillis(); - private final String NEW_USER_NAME4 = "newuser4" + System.currentTimeMillis(); - private final String USER_FNAME = "First"; - private final String USER_LNAME = "Last"; - private final String USER_EMAIL = System.currentTimeMillis() + "@user1.com"; - private final String USER_EMAIL2 = System.currentTimeMillis() + "@user2.com"; - private final String USER_EMAIL3 = System.currentTimeMillis() + "@user3.com"; - private final String USER_EMAIL4 = System.currentTimeMillis() + "@user4.com"; - private final String USER_PW = "olat3"; - - private final String NEW_USER_TO_IMPORT = NEW_USER_NAME1 + " " + USER_PW + " en " + USER_FNAME + " " + USER_LNAME + " " + USER_EMAIL; - private final String MORETHANONE_NEW_USER_TO_IMPORT = NEW_USER_NAME2 + " " + USER_PW + " en " + USER_FNAME + " " + USER_LNAME + " " + USER_EMAIL2 + "\n"+ - NEW_USER_NAME3 + " " + USER_PW + " en " + USER_FNAME + " " + USER_LNAME + " " + USER_EMAIL3; - private final String NEW_AND_EXISTING_USER_TO_IMPORT = NEW_USER_TO_IMPORT + "\n" + - NEW_USER_NAME4 + " " + USER_PW + " en " + USER_FNAME + " " + USER_LNAME + " " + USER_EMAIL4;; - - public void testUserImport() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos()); - UserManagement userManagement = olatWorkflow.getUserManagement(); - - //case 1: import one new user from excel string - assertTrue(userManagement.importAllUsers(NEW_USER_TO_IMPORT)); - - // case 2: import multiple new users from excel string - assertTrue(userManagement.importAllUsers(MORETHANONE_NEW_USER_TO_IMPORT)); - - // case 3: try to import one existing user, assert that existing user cannot be imported - assertTrue(userManagement.importUsersExpectingError(NEW_USER_TO_IMPORT)); - - // case 4: try to import one new user and one existing user - assertTrue(userManagement.importOnlyNewUsers(NEW_AND_EXISTING_USER_TO_IMPORT)); - - // check that newly imported users can log in. - OLATWorkflowHelper olatWorkflowImportedUser1 = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, NEW_USER_NAME1, USER_PW)); - olatWorkflowImportedUser1.getHome(); - olatWorkflowImportedUser1.logout(); - - OLATWorkflowHelper olatWorkflowImportedUser2 = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, NEW_USER_NAME2, USER_PW)); - olatWorkflowImportedUser2.getHome(); - olatWorkflowImportedUser2.logout(); - - OLATWorkflowHelper olatWorkflowImportedUser3 = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, NEW_USER_NAME3, USER_PW)); - olatWorkflowImportedUser3.getHome(); - olatWorkflowImportedUser3.logout(); - - OLATWorkflowHelper olatWorkflowImportedUser4 = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, NEW_USER_NAME4, USER_PW)); - olatWorkflowImportedUser4.getHome(); - olatWorkflowImportedUser4.logout(); - } -} - diff --git a/src/test/java/org/olat/test/functional/usermanagement/UserRolesTest.java b/src/test/java/org/olat/test/functional/usermanagement/UserRolesTest.java deleted file mode 100644 index b3eca8910bd..00000000000 --- a/src/test/java/org/olat/test/functional/usermanagement/UserRolesTest.java +++ /dev/null @@ -1,150 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.usermanagement; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.user.UserManagement; -import org.olat.test.util.selenium.olatapi.user.UserSettings; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Test if user roles can be changed and the changes apply for user. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. Administrator opens user management. <br/> - * 2. Admin creates user USER_NAME. <br/> - * 3. Admin selects USER_NAME and sets role to author. <br/> - * 4. User USER_NAME logs in and checks if he has the according authoring rights but no rights for administrator, - * group and user management. <br/> - * 5. Admin resets roles, USER_NAME checks if he has no authoring rights anymore. <br/> - * 6. Admin sets roles to user manager. <br/> - * 7. USER_NAME logs in and checks if he has rights for user administration (edit other users but no admins).<br/> - * 8. Admin sets roles to group manager. <br/> - * 9. USER_NAME logs in and checks if he has rights for group administration.<br/> - * 10. Admin sets roles to system administrator. <br/> - * 11. USER_NAME logs in and checks if he has access to all administration and management tabs.<br/> - * 12. Admin resets roles. <br/> - * 13. USER_NAME logs in and checks if he has no more authoring, manager or administrator rights on the system. <br/> - * - * @author sandra - * - */ - -public class UserRolesTest extends BaseSeleneseTestCase { - - //TODO:LD: temporary changed usernames - workaround for OLAT-5249 - //private final String USER_NAME = "usermngt_testuser" + System.currentTimeMillis(); - private final String USER_NAME = "usermngttestuser" + System.currentTimeMillis(); - - private final String USER_FNAME = "First"; - private final String USER_LNAME = "Last"; - private final String USER_EMAIL = System.currentTimeMillis() + "@user.com"; - private final String USER_PW = "TestuserPW1"; - - - public void testUserRoles() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos()); - UserManagement userManagement = olatWorkflow.getUserManagement(); - - //create user - userManagement.createUser(USER_NAME, USER_FNAME, USER_LNAME, USER_EMAIL, USER_PW); - - // search and select user - UserSettings userSettings = olatWorkflow.getUserManagement().selectUser(USER_NAME); - - // change role: author - userSettings.setRoles(false, false, true, false, false); - - // log in user and check if he has authoring rights, but not tabs group management, user management, administration - OLATWorkflowHelper olatWorkflowAuthor = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, USER_NAME, USER_PW)); - assertTrue(olatWorkflowAuthor.getLearningResources().getSelenium().isElementPresent("ui=learningResources::toolbox_create_course()")); - assertFalse(olatWorkflowAuthor.getSelenium().isElementPresent("ui=tabs::groupAdministration()")); - assertFalse(olatWorkflowAuthor.getSelenium().isElementPresent("ui=tabs::userManagement()")); - assertFalse(olatWorkflowAuthor.getSelenium().isElementPresent("ui=tabs::administration()")); - olatWorkflowAuthor.logout(); - - // uncheck author role and make sure user has no more authoring rights after login - userSettings.setRoles(false, false, false, false, false); - - // login user, make sure he cannot create course, no tabs group management, user management, administration - OLATWorkflowHelper olatWorkflowStudent = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, USER_NAME, USER_PW)); - assertFalse(olatWorkflowStudent.getLearningResources().getSelenium().isElementPresent("ui=learningResources::toolbox_create_course()")); - assertFalse(olatWorkflowStudent.getSelenium().isElementPresent("ui=tabs::groupAdministration()")); - assertFalse(olatWorkflowStudent.getSelenium().isElementPresent("ui=tabs::userManagement()")); - assertFalse(olatWorkflowStudent.getSelenium().isElementPresent("ui=tabs::administration()")); - olatWorkflowStudent.logout(); - - // allocate user manager role - userSettings.setRoles(true, false, false, false, false); - - //login user manager, can create course, has tab user management, but not group management and administration - OLATWorkflowHelper olatWorkflowUserManager = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, USER_NAME, USER_PW)); - assertFalse(olatWorkflowUserManager.getLearningResources().getSelenium().isElementPresent("ui=learningResources::toolbox_create_course()")); - assertTrue(olatWorkflowUserManager.getSelenium().isElementPresent("ui=tabs::userManagement()")); - assertFalse(olatWorkflowUserManager.getSelenium().isElementPresent("ui=tabs::groupAdministration()")); - assertFalse(olatWorkflowUserManager.getSelenium().isElementPresent("ui=tabs::administration()")); - - //can edit student but not admin - UserSettings studentSettings = olatWorkflowUserManager.getUserManagement().selectUser(context.getStandardStudentOlatLoginInfos().getUsername()); - studentSettings.isTextPresent(USER_NAME); - assertTrue("Asserts that the current user doesn't not have enough rights to edit user", olatWorkflowUserManager.getUserManagement().cannotEditUser(context.getStandardAdminOlatLoginInfos().getUsername())); - olatWorkflowUserManager.logout(); - - // allocate group manager role - userSettings.setRoles(false, true, false, false, false); - - //login group manager, can create course, has tab group management, but not user management and administration - OLATWorkflowHelper olatWorkflowGroupManager = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, USER_NAME, USER_PW)); - assertTrue(olatWorkflowGroupManager.getSelenium().isElementPresent("ui=tabs::groupAdministration()")); - assertFalse(olatWorkflowGroupManager.getSelenium().isElementPresent("ui=tabs::userManagement()")); - assertFalse(olatWorkflowGroupManager.getSelenium().isElementPresent("ui=tabs::administration()")); - assertFalse(olatWorkflowGroupManager.getLearningResources().getSelenium().isElementPresent("ui=learningResources::toolbox_create_course()")); - olatWorkflowGroupManager.logout(); - - // allocate admin role - userSettings.setRoles(false, false, false, true, false); - - // log in admin, can create course, has all tabs - OLATWorkflowHelper olatWorkflowAdmin = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, USER_NAME, USER_PW)); - assertTrue(olatWorkflowAdmin.getLearningResources().getSelenium().isElementPresent("ui=learningResources::toolbox_create_course()")); - assertTrue(olatWorkflowAdmin.getSelenium().isElementPresent("ui=tabs::groupAdministration()")); - assertTrue(olatWorkflowAdmin.getSelenium().isElementPresent("ui=tabs::userManagement()")); - assertTrue(olatWorkflowAdmin.getSelenium().isElementPresent("ui=tabs::administration()")); - olatWorkflowAdmin.logout(); - - // uncheck all roles and make sure user has no more rights after login - userSettings.setRoles(false, false, false, false, false); - OLATWorkflowHelper olatWorkflowNoRights = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, USER_NAME, USER_PW)); - assertFalse(olatWorkflowNoRights.getLearningResources().getSelenium().isElementPresent("ui=learningResources::toolbox_create_course()")); - assertFalse(olatWorkflowNoRights.getSelenium().isElementPresent("ui=tabs::groupAdministration()")); - assertFalse(olatWorkflowNoRights.getSelenium().isElementPresent("ui=tabs::userManagement()")); - assertFalse(olatWorkflowNoRights.getSelenium().isElementPresent("ui=tabs::administration()")); - olatWorkflowNoRights.logout(); - } -} - diff --git a/src/test/java/org/olat/test/functional/usermanagement/UserSettingsTest.java b/src/test/java/org/olat/test/functional/usermanagement/UserSettingsTest.java deleted file mode 100644 index 466aeda9f62..00000000000 --- a/src/test/java/org/olat/test/functional/usermanagement/UserSettingsTest.java +++ /dev/null @@ -1,79 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.functional.usermanagement; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.home.MySettings; -import org.olat.test.util.selenium.olatapi.user.UserManagement; -import org.olat.test.util.selenium.olatapi.user.UserSettings; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Test if user settings can be changed in user management. - * <br/> - * Test setup: <br/> - * - - * <p> - * Test case: <br/> - * 1. Administrator opens user management and searches for user USER_NAME. <br/> - * 2. Admin changes USER_NAME's last name and password. <br/> - * 3. User USER_NAME logs in and checks if changes apply. <br/> - * - * @author sandra - * - */ - -public class UserSettingsTest extends BaseSeleneseTestCase { - - //TODO:LD: temporary changed usernames - workaround for OLAT-5249 - //private final String USER_NAME = "usermngt_testuser" + System.currentTimeMillis(); - private final String USER_NAME = "usermngttestuser" + System.currentTimeMillis(); - private final String USER_FNAME = "First"; - private final String USER_LNAME = "Last"; - private final String USER_EMAIL = System.currentTimeMillis() + "@user.com"; - private final String USER_PW = "TestuserPW1"; - private final String USER_LNAME_NEW = "LastNew"; - private final String USER_PW_NEW = "TestuserPWNew2"; - - public void testUserSettings() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OLATWorkflowHelper olatWorkflowAdmin = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos()); - UserManagement userManagement = olatWorkflowAdmin.getUserManagement(); - - //create user - userManagement.createUser(USER_NAME, USER_FNAME, USER_LNAME, USER_EMAIL, USER_PW); - - // search and select user, change first name, change password - UserSettings userSettings = olatWorkflowAdmin.getUserManagement().selectUser(USER_NAME); - userSettings.setLastName(USER_LNAME_NEW, true); - userSettings.setPassword(USER_PW_NEW); - - // log in as user, check if new password is valid - OLATWorkflowHelper olatWorkflowUser = context.getOLATWorkflowHelper(context.getOlatLoginInfo(1, USER_NAME, USER_PW_NEW)); - - // check if user's last name was changed - MySettings myNewSettings = olatWorkflowUser.getHome().getUserSettings(); - assertTrue(myNewSettings.isDisabledTextPresent(USER_LNAME_NEW)); - } -} - diff --git a/src/test/java/org/olat/test/load/LoginLoadTest.java b/src/test/java/org/olat/test/load/LoginLoadTest.java deleted file mode 100644 index e6fd20400eb..00000000000 --- a/src/test/java/org/olat/test/load/LoginLoadTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.load; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.OlatLoginHelper; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.Selenium; - -/** - * Performance test; it measures the time needed to login and logout "iterations" times, using the same browser window. <br/> - * - * Test case: <br/> - * Login/logout on one node numOfIterations times. - * - * @author lavinia - * - */ -public class LoginLoadTest extends BaseSeleneseTestCase { - - private int numOfIterations = 80; - - public void setUp() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - } - - /** - * We would like to login on 2 different nodes, but depends on the multiVmOlatUrl1, multiVmOlatUrl2 whether - * we really get to login in two different nodes. - * - * @throws Exception - */ - public void testLoginForEachNode() throws Exception { - long duration1 = loginOnOneNode(1); - long duration2 = loginOnOneNode(2); - System.out.println("$$$ login comparison - duration1: " + duration1/1000 + " s"); - System.out.println("$$$ login comparison - duration2: " + duration2/1000 + " s"); - } - - /** - * Login/logout on one node iterations times. - * - * @param nodeId - * @return - * @throws Exception - */ - private long loginOnOneNode(int nodeId) throws Exception { - long initialTime = System.currentTimeMillis(); - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos(nodeId)); - workflow.logout(); - int iterationCounter = 0; - for(int i=0; i<numOfIterations; i++) { - simpleLoginSameBrowserWindow(workflow.getSelenium(), Context.getContext().getStandardAdminOlatLoginInfos(nodeId)); - iterationCounter++; - workflow.logout(); - } - long endTime = System.currentTimeMillis(); - long duration = endTime - initialTime; - System.out.println("loginOnOneNode " + nodeId + " took: " + duration/1000 + " s --- " + iterationCounter + " times"); - return duration; - } - - /** - * - * @param selenium - * @param loginInfos - * @throws Exception - */ - private void simpleLoginSameBrowserWindow(Selenium selenium, OlatLoginInfos loginInfos) throws Exception { - String username = loginInfos.getUsername(); - String password = loginInfos.getPassword(); - - OlatLoginHelper.inputUserNameAndPassword(selenium, username, password); - int second = 0; - while(second<20) { - try { - if (selenium.isElementPresent("ui=home::menu_settings()")) //logged in - break; - } catch (Exception e) { - } - Thread.sleep(500); - second++; - } - assertTrue(selenium.isElementPresent("ui=home::menu_settings()")); - } - -} diff --git a/src/test/java/org/olat/test/load/MultiBrowserClusterEnrolmentLoadManualtest.java b/src/test/java/org/olat/test/load/MultiBrowserClusterEnrolmentLoadManualtest.java deleted file mode 100644 index 91b34223dc8..00000000000 --- a/src/test/java/org/olat/test/load/MultiBrowserClusterEnrolmentLoadManualtest.java +++ /dev/null @@ -1,212 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.load; - -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Random; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.EnrolmentRun; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.Selenium; -import com.thoughtworks.selenium.SeleniumException; - -/** - * This is a loadtest and is therefore excluded from the nightly selenium test set. - * The name being lowercase it is excluded from the rule 'include *Test*' - * @author Stefan - * - */ -public class MultiBrowserClusterEnrolmentLoadManualtest extends BaseSeleneseTestCase { - - protected com.thoughtworks.selenium.Selenium selenium1; - protected com.thoughtworks.selenium.Selenium selenium2; - protected com.thoughtworks.selenium.Selenium selenium3; - - public void testMultiBrowserClusterNewLearningArea() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - - String standardPassword = context.getStandardStudentOlatLoginInfos().getPassword(); - OlatLoginInfos user1 = context.createuserIfNotExists(1, "enrtstusr1", standardPassword, true, true, true, true, true); - OlatLoginInfos user2 = context.createuserIfNotExists(2, "enrtstusr2", standardPassword, true, true, true, true, true); - OlatLoginInfos user3 = context.createuserIfNotExists(1, "enrtstusr3", standardPassword, true, true, true, true, true); - - // step1: make sure the limit on participants on group A is 1 - OLATWorkflowHelper workflow1; - OLATWorkflowHelper workflow2; - OLATWorkflowHelper workflow3; - { - System.out.println("logging in browser 1..."); - - workflow1 = context.getOLATWorkflowHelper(user1); - CourseRun courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(Context.DEMO_COURSE_NAME_3); - - // go to group management and modify the limit on gruppe A to 1 - GroupManagement groupManagement1 = courseRun1.getGroupManagement(); - GroupAdmin editLearningGruppeA = groupManagement1.editLearningGroup("Gruppe A"); - editLearningGruppeA.removeAllWaiting(); - editLearningGruppeA.removeAllParticipants(); - editLearningGruppeA.configureParticipantsAndWaitingList(1, false, false); - editLearningGruppeA.close("Gruppe A"); - - courseRun1.close(Context.DEMO_COURSE_NAME_3); - } - - // relogin user1 step 2: log in user 2 and 3 - CourseRun courseRun1; - CourseRun courseRun2; - CourseRun courseRun3; - - { - workflow1 = context.getOLATWorkflowHelper(user1); - courseRun1 = workflow1.getLearningResources().searchAndShowCourseContent(Context.DEMO_COURSE_NAME_3); - - System.out.println("logging in browser 2..."); - workflow2 = context.getOLATWorkflowHelper(user2); - courseRun2 = workflow2.getLearningResources().searchAndShowCourseContent(Context.DEMO_COURSE_NAME_3); - - System.out.println("logging in browser 3..."); - workflow3 = context.getOLATWorkflowHelper(user3); - courseRun3 = workflow3.getLearningResources().searchAndShowCourseContent(Context.DEMO_COURSE_NAME_3); - } - - - // now spawn 3 threads all racing to get the enrolment and releasing after a random amount of time - final CourseRun[] courseRuns = new CourseRun[] {courseRun1, courseRun2, courseRun3}; - final List<String> errorList = new LinkedList<String>(); - List<Thread> l = new LinkedList<Thread>(); - for (int i=0; i<courseRuns.length; i++) { - final CourseRun courseRun = courseRuns[i]; - final int id = i; - - Thread th = new Thread(new Runnable() { - CourseRun myCourseRun = courseRun; - public void run() { - Random r = new Random(); - - while(true) { - System.out.println(id+" Nanosleep..."); - try { - Thread.sleep(r.nextInt(20)); - } catch (InterruptedException e1) { - break; - } - System.out.println(id+" Clicking on Einschreibung..."); - EnrolmentRun selectEnrolment = myCourseRun.selectEnrolment("Einschreibung"); - System.out.println(id+" Nanosleep2..."); - try { - Thread.sleep(r.nextInt(50)); - } catch (InterruptedException e1) { - break; - } - System.out.println(id + "Let's look for 'enrol'..."); - if ( ! selectEnrolment.alreadyEnrolled("Gruppe A")) { - Selenium s = null; - try{ - System.out.println(id+" Let's click 'enrol'..."); - selectEnrolment.enrol("Gruppe A"); - System.out.println(id+" We clicked enrol."); - - s = selectEnrolment.getSelenium(); - // let's see if we won or not - if (s.getBodyText().contains("In the meantime this group is complete.")) { -// if (s.isTextPresent("In the meantime this group is complete.")) { - // oh no, we lost! - System.out.println(id+" but we lost... click 'OK'"); - s.click("ui=dialog::OK()"); - try { - Thread.sleep(250); - } catch (InterruptedException e) { - break; - } - System.out.println(id+" and ocntinue..."); - continue; - } - System.out.println(id+" We got it!!!!"); - // otherwise: - // we're the winner!!! - if (!s.isTextPresent("You have already enroled for the learning group mentioned below")) { - errorList.add("enrol somehow didn't work (1)"); - return; - } - System.out.println(id+" Nanosleep 3..."); - try { - Thread.sleep(r.nextInt(200)); - } catch (InterruptedException e) { - break; - } - if (!s.isTextPresent("You have already enroled for the learning group mentioned below")) { - errorList.add("enrol somehow didn't work (2)"); - return; - } - - System.out.println(id+" cancel enrolment..."); - selectEnrolment.cancelEnrolment("Gruppe A"); - System.out.println(id+" cancel enrolment done. sleep a bit..."); - try { - Thread.sleep(r.nextInt(100)); - } catch (InterruptedException e) { - break; - } - } catch(SeleniumException e) { - // ok, someone else was quicker - - if (s != null && !s.isTextPresent("Learning group is complete")) { - errorList.add("expected 'learning group is complete' but didn't get it"); - return; - } - continue; - } - } - - } - - } - - }); - th.setDaemon(true); - th.start(); - l.add(th); - } - - - Thread.sleep(180000); - System.out.println("Stopping all threads..."); - for (Iterator<Thread> it = l.iterator(); it.hasNext();) { - Thread th = it.next(); - th.interrupt(); - System.out.println("Waiting for a thread..."); - th.join(); - System.out.println("Thread stopped."); - } - System.out.println("All threads stopped."); - assertEquals(0, errorList.size()); - } -} diff --git a/src/test/java/org/olat/test/load/OpenAllCoursesOnFirstPageTest.java b/src/test/java/org/olat/test/load/OpenAllCoursesOnFirstPageTest.java deleted file mode 100644 index ca43f7fb777..00000000000 --- a/src/test/java/org/olat/test/load/OpenAllCoursesOnFirstPageTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.load; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Performance test; it measures the time needed to open course, click few times (numOfIterations) - * in course, close course, and repeat for all courses on the first page (LearningResources/Courses). - * - * @author Lavinia Dumitrescu - * - */ -public class OpenAllCoursesOnFirstPageTest extends BaseSeleneseTestCase { - - private final int courseElemIterations = 10; - private int visitedCourseElements = 0; - private int testIterations = 3; //repeat all this times - - /** - * Open learning resources, select courses menu item select each course on first page, repeat testIteration. - * When course run is open select first courseElemIterations elements, and close course tab. - * - * @throws Exception - */ - public void testVisitAllCourses() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - LearningResources learningResources = workflow.getLearningResources(); - - long initialTime = System.currentTimeMillis(); - - //go to courses and open each course on each table page, then close the course - int iteration = 0; - int courseIndex = 1; - int visitedCourses = 0; - int pageLength = 20; - while(iteration<testIterations) { - System.out.println("iteration: " + iteration); - while(courseIndex<=pageLength) { - CourseRun courseRun = learningResources.showCourseContent(false, courseIndex); - if(courseRun!=null) { - visitCourse(courseRun); - courseIndex++; - visitedCourses++; - } else if(courseRun==null) { - courseIndex = 1; - break; - } - } - iteration++; - } - - long endTime = System.currentTimeMillis(); - long duration = endTime - initialTime; - - System.out.println("$$$$$$ testVisitAllCourses took: " + duration/1000 + " s"); - courseIndex--; - System.out.println("$$$$$$ visited courses: " + visitedCourses); - System.out.println("$$$$$$ visited course elements: " + visitedCourseElements); - } - - /** - * Select first numOfIterations elements in this course. - * - * @param courseRun - */ - public void visitCourse(CourseRun courseRun) throws Exception { - System.out.println("visit course"); - //select node in course - for(int i=1; i<=courseElemIterations; i++) { - boolean elemFound = courseRun.selectCourseElement(i); - Thread.sleep(200); - if(!elemFound) { - System.out.println("Could not select course element with index: " + i); - break; - } else { - visitedCourseElements++; - } - } - courseRun.closeAny(); - System.out.println("closed course"); - } - -} diff --git a/src/test/java/org/olat/test/load/OpenAllCoursesTest.java b/src/test/java/org/olat/test/load/OpenAllCoursesTest.java deleted file mode 100644 index 2d17a57ab9d..00000000000 --- a/src/test/java/org/olat/test/load/OpenAllCoursesTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.load; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * Performance test; it measures the time needed to open course, click few times (numOfIterations) - * in course, close course, and repeat for all courses. - * - * @author Lavinia Dumitrescu - * - */ -public class OpenAllCoursesTest extends BaseSeleneseTestCase { - - private final int numOfIterations = 5; - - public void testVisitAllCourses() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.TWO_NODE_CLUSTER); - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - LearningResources learningResources = workflow.getLearningResources(); - //go to courses and open each course on each table page, then close the course - boolean selectNextPage = false; - int courseIndex = 1; - int pageLength = 20; - while(courseIndex<=pageLength) { - CourseRun courseRun = learningResources.showCourseContent(selectNextPage, courseIndex); - if(courseRun!=null) { - visitCourse(courseRun); - courseIndex++; - selectNextPage = false; - } else if(courseRun==null && !learningResources.hasMorePages()) { - break; - } - if(courseIndex==21 && learningResources.hasMorePages()) { - courseIndex = 1; - selectNextPage = true; - } - } - - } - - /** - * Select first numOfIterations elements in this course. - * - * @param courseRun - */ - public void visitCourse(CourseRun courseRun) throws InterruptedException { - System.out.println("visit course"); - //select node in course - for(int i=1; i<=numOfIterations; i++) { - boolean elemFound = courseRun.selectCourseElement(i); - if(!elemFound) { - break; - } - } - Thread.sleep(3000); - courseRun.closeAny(); - System.out.println("closed course"); - } - -} diff --git a/src/test/java/org/olat/test/load/package.html b/src/test/java/org/olat/test/load/package.html deleted file mode 100644 index bfeb6d14dfd..00000000000 --- a/src/test/java/org/olat/test/load/package.html +++ /dev/null @@ -1,11 +0,0 @@ -<html> -<head> -</head> - -<body> - -Selenium load tests (that is login-logout n times, open all courses, etc), they measure how long it takes to perform these tasks. -<br/> - -</body> -</html> \ No newline at end of file diff --git a/src/test/java/org/olat/test/sandbox/CreateCourseTest.java b/src/test/java/org/olat/test/sandbox/CreateCourseTest.java deleted file mode 100644 index d0d45ae4287..00000000000 --- a/src/test/java/org/olat/test/sandbox/CreateCourseTest.java +++ /dev/null @@ -1,361 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.sandbox; - -import java.io.File; - -import org.olat.test.functional.test.TestEditorCombiTest; -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.AssessmentEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseElementEditor; -import org.olat.test.util.selenium.olatapi.course.editor.EnrolmentEditor; -import org.olat.test.util.selenium.olatapi.course.editor.TestElementEditor; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor.CourseElemTypes; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.Forum; -import org.olat.test.util.selenium.olatapi.course.run.QuestionnaireElement; -import org.olat.test.util.selenium.olatapi.course.run.TestElement; -import org.olat.test.util.selenium.olatapi.course.run.TestRun; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.selenium.olatapi.group.GroupAdmin; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.selenium.olatapi.group.Groups; -import org.olat.test.util.selenium.olatapi.home.HomeConfigurator; -import org.olat.test.util.selenium.olatapi.home.MySettings; -import org.olat.test.util.selenium.olatapi.lr.CPResourceEditor; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.lr.LearningResources.LR_Types; -import org.olat.test.util.selenium.olatapi.qti.EssayQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.FIBQuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.QuestionEditor; -import org.olat.test.util.selenium.olatapi.qti.QuestionnaireEditor; -import org.olat.test.util.selenium.olatapi.qti.TestEditor; -import org.olat.test.util.selenium.olatapi.qti.QuestionEditor.QUESTION_TYPES; -import org.olat.test.util.selenium.olatapi.user.UserManagement; -import org.olat.test.util.selenium.olatapi.user.UserSettings; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.olat.test.util.selenium.olatapi.course.editor.QuestionnaireElementEditor; -import org.olat.test.util.selenium.OlatLoginHelper; - -/** - * Sandbox test class. - * Tests basic functionality. - * - * @author Lavinia Dumitrescu - * - */ -public class CreateCourseTest extends BaseSeleneseTestCase { - - private String COURSE_NAME = "AAA"+ System.currentTimeMillis(); - private String WIKI_NAME = "aWiki"+ System.currentTimeMillis(); - private String GROUP_NAME = "aGroup"+ System.currentTimeMillis(); - private String TEST_NAME = "aTest"+ System.currentTimeMillis(); - - public void setUp() throws Exception { - Context.setupContext(getFullName(), SetupType.CLEAN_AND_RESTARTED_SINGLE_VM); - } - - private void testUserManagement() { - OLATWorkflowHelper workflow_A = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - /*UserManagement userManagement = workflow_A.getUserManagement(); - UserSettings userSettings = userManagement.selectUser("lavinia"); - userSettings.setFirstName("Lavinia A.", true); - userSettings.setPassword("lavinia1"); - userSettings.setRoles(null, false, true, false, false);*/ - - /*userManagement.createUser("lavinia3", "Lavinia", "D.", "ld3@gmail.com", "lavinia3"); - - OLATWorkflowHelper workflow_L = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, "lavinia3", "lavinia3")); - workflow_L.getHome().getEvidencesOfAchievement();*/ - MySettings mySettings = workflow_A.getHome().getUserSettings(); - String email = mySettings.getEmail(); - boolean isMyLastNamePresent = mySettings.isDisabledTextPresent("Administrator"); - - //String lastname = mySettings.getDisabledText("Last name"); - System.out.println("isMyLastNamePresent: " + isMyLastNamePresent); - //System.out.println("lastname: " + lastname); - System.out.println("email: " + email); - - workflow_A.logout(); - } - - private void testUserManager() { - /*OLATWorkflowHelper workflow_A = Context.getContext().getOLATWorkflowHelper(Context.getContext().getOlatLoginInfo(1, "lavinia", "lavinia1")); - boolean cannotEditAdmin = workflow_A.getUserManagement().cannotEditUser("administrator"); - System.out.println("cannotEditAdmin: " + cannotEditAdmin);*/ - - OLATWorkflowHelper workflow_A = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - workflow_A.getUserManagement().deleteUser("test12"); - System.out.println("user deleted"); - } - - /** - * Tests basic course functionality: - * - create course - * - insert node - * - publish - * - create learning group - * @throws Exception - */ - private void testCreateCourse() throws Exception { - //OlatLoginInfos loginInfos = Context.getContext().createuserIfNotExists(1, "test102", "test100", true, true, true, true, true); - - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - - CourseEditor courseEditor = workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, "bla"); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FORUM, true, null); - CourseElementEditor courseElementEditor = courseEditor.selectCourseElement("Forum"); - courseElementEditor.setDescription("NEW DESCRIPTION"); - - courseEditor.publishCourse(); - CourseRun courseRun = courseEditor.closeToLRDetailedView().showCourseContent(); - Forum forum = courseRun.selectForum("Forum"); - forum.openNewTopic("test entry concurrent edit", "forum message editing"); - - //attach doc - /*File doc = OlatServerSetupHelper.locateFile("org/olat/test/file_resources/Word.doc"); - String remoteDoc = Context.getContext().provideFileRemotely(doc); - forum.attachFileToMsg(remoteDoc); - forum.deleteAttachedFile("Word.doc"); - - - //create group - GroupManagement groupManagement = courseRun.getGroupManagement(); - groupManagement.createLearningGroup("learning group selenium 5", "fifth lg", 1, false, false); - courseRun = groupManagement.close(); - - courseEditor = courseRun.getCourseEditor(); - EnrolmentEditor enrolmentEditor = (EnrolmentEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.ENROLMENT, true, null); - enrolmentEditor.selectLearningGroups("learning group selenium 5"); - enrolmentEditor.changeVisibilityDependingOnGroup("learning group selenium 5"); - courseEditor.publishCourse(); - */ - - workflow.logout(); - } - - private void testCreateLearningArea() { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - LRDetailedView lRDetailedView1 = workflow.getLearningResources().createResource(COURSE_NAME, "bla", LR_Types.COURSE); - CourseRun courseRun1 = lRDetailedView1.showCourseContent(); - GroupManagement groupManagement1 = courseRun1.getGroupManagement(); - groupManagement1.createLearningArea("learning area selenium 1", null); - workflow.logout(); - } - - private void testAssessmentElement() { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - - CourseEditor courseEditor = workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, "bla"); - AssessmentEditor assessmentEditor = (AssessmentEditor)courseEditor.insertCourseElement(CourseElemTypes.ASSESSMENT, true, null); - // author fills in the assessment configuration form - assessmentEditor.configure(true, 1, 10, true, 5); - courseEditor.publishCourse(); - } - - private void testRunTest() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - CourseRun courseRun = workflow.getLearningResources().searchAndShowCourseContent("Demo Course"); - TestElement testElement = courseRun.selectTest("Test"); - TestRun testRun = testElement.startTest(); - testRun.finishTest(true, 0); - testElement = courseRun.selectTest("Test"); - assertEquals("0.000", testElement.getAchievedScore()); - } - - private void testCreateTest() { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos()); - TestEditor testEditor = workflow.getLearningResources().createTestAndStartEditing(TEST_NAME, "nonsense"); - testEditor.addQuestion(QUESTION_TYPES.GAP_TEXT,"Gap Text Question"); - // Gap text - FIBQuestionEditor fIBQuestionEditor = (FIBQuestionEditor)testEditor.selectQuestion("Gap Text Question"); - fIBQuestionEditor.selectQuestionAndAnswersTab(); - fIBQuestionEditor.editTextFragment(1,"Name of Kristinas boy:"); - fIBQuestionEditor.addNewBlank(); - fIBQuestionEditor.setBlankSolution("Nils", 2); - fIBQuestionEditor.changeCapitalization(2); - workflow.logout(); - } - - private void testCopyCourse() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - /*LRDetailedView lRDetailedView = workflow.getLearningResources().searchResource("Demo Course", null); - lRDetailedView.copyLR("Copy A of Demo course", "bla"); - - workflow.logout();*/ - } - - /*public void testChangeAccess() throws Exception { - //OlatLoginInfos loginInfos = Context.getContext().createuserIfNotExists(1, "test102", "test100", true, true, true, true, true); - - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - - CourseEditor courseEditor = workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, "bla"); - courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.FORUM, true, null); - CourseElementEditor courseElementEditor = courseEditor.selectCourseElement("Forum"); - - CourseRun courseRun = courseEditor.closeToLRDetailedView().showCourseContent(); - courseRun.getGroupManagement().createGroupAndAddMembers(GROUP_NAME, null, Context.getContext().getStandardStudentOlatLoginInfos().getUsername()); - courseEditor = courseRun.getCourseEditor(); - - //courseElementEditor.changeVisibilityDependingOnGroup("lg av 1"); - - courseElementEditor = courseEditor.insertCourseElement(CourseElemTypes.ASSESSMENT, true, null); - courseElementEditor.changeAccessyDependingOnGroup(GROUP_NAME); - courseElementEditor.editVisibilityInfo("this assessment is only accessible to learning group members"); - - courseEditor.publishCourse(); - - workflow.logout(); - }/* - - /*public void testCreateWiki() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - LRDetailedView lRDetailedView1 = workflow.getLearningResources().createResource(WIKI_NAME, "course run test", LR_Types.WIKI); - //select again the learningResources1 - LearningResources learningResources = workflow.getLearningResources(); - CourseEditor courseEditor1 = learningResources.createCourseAndStartEditing(COURSE_NAME, "course run test"); - - workflow.logout(); - }*/ - - /*public void testCreateGroup() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - Groups groupsTab = workflow.getGroups(); - GroupAdmin groupAdmin = groupsTab.createProjectGroup(GROUP_NAME, "bla bla"); - String[] owners = {Context.getContext().getStandardAuthorOlatLoginInfos().getUsername()}; - String[] participants = {Context.getContext().getStandardStudentOlatLoginInfos().getUsername()}; - groupAdmin.addMembers(participants, owners); - workflow.logout(); - }*/ - - /*public void testGroups() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - Groups groups1 = workflow.getGroups(); - GroupAdmin group = groups1.createProjectGroup(GROUP_NAME, "second test"); - group.setTitleAndDescription(GROUP_NAME + "changed", "description changed"); - group.setTools(true, true, true, true, true, true); - group.setInfo("hello everybody"); - group.selectCalendarWriteAccess("Owners and tutors respectively"); - String[] userNames = {Context.getContext().getStandardStudentOlatLoginInfos().getUsername()}; - group.addMembers(userNames, new String[0]); - workflow.logout(); - }*/ - - private void testCreateQuestionnaire() { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos()); - - WorkflowHelper.deleteAllLearningResourcesFromAuthor(Context.getContext().getStandardAuthorOlatLoginInfos().getUsername()); - QuestionnaireEditor qEditor = workflow.getLearningResources().createQuestionnaireAndStartEditing(TEST_NAME, "nonsense"); - EssayQuestionEditor questionEditor = (EssayQuestionEditor)qEditor.addQuestion(QUESTION_TYPES.ESSAY,"ESSAY"); - questionEditor.selectQuestionAndAnswersTab(); - questionEditor.editQuestion("please describe ..."); - questionEditor.setAnswerSize(120, 11); - qEditor.close(); - - CourseEditor courseEditor = workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, "bla bla"); - QuestionnaireElementEditor questionnaireElementEditor= (QuestionnaireElementEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.QUESTIONNAIRE, true, null); - questionnaireElementEditor.chooseMyFile("aTest1253791768388"); - questionnaireElementEditor.configureQuestionnaireLayout(true, true, true, true); - courseEditor.publishCourse(); - CourseRun courseRun = courseEditor.closeToLRDetailedView().showCourseContent(); - QuestionnaireElement questionnaireElement = courseRun.selectQuestionnaire(CourseEditor.QUESTIONNAIRE_TITLE); - questionnaireElement.start().finish(); - } - - private void testLoginExpectingError() throws Exception { - assertTrue(OlatLoginHelper.loginExpectingError(1, "test4", "test")); - } - - private void testForum() { - // author creates course with forum, opens welcome message topic - OLATWorkflowHelper olatWorkflow_1 = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAuthorOlatLoginInfos()); - CourseEditor courseEditor1 = olatWorkflow_1.getLearningResources().createCourseAndStartEditing("Concurrent_Forum_Replies_1260951770640", "selenium"); - courseEditor1.insertCourseElement(CourseElemTypes.FORUM, true, null); - courseEditor1.publishCourse(); - LRDetailedView lRDetailedView1 = courseEditor1.closeToLRDetailedView(); - CourseRun courseRun1 = lRDetailedView1.showCourseContent(); - Forum forum1 = courseRun1.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - forum1.openNewTopic("welcome", "werdet euren senf los"); - } - - private void testMyGroupPortletConfig() { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - workflow.getHome().getHomeConfigurator().configMyGroupPortlet(99, HomeConfigurator.SORT_TYPE.ALPHABET, true); - workflow.getHome().getHomeConfigurator().configMyBookmarkPortlet(99, HomeConfigurator.SORT_TYPE.ALPHABET, true); - } - - private void testImportCP() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - try { - File f = WorkflowHelper.locateFile("org/olat/test/sandbox/UserManual_6.2.zip"); - CPResourceEditor cpEditor = workflow.getLearningResources().importCP(f, "A_B12_CP", "BLA BLA"); - - if(cpEditor!=null) { - cpEditor.addPageAndRename("Introduction", "Lavinia", "bau bau"); - cpEditor.copyPageAndRename("Introduction", "SecondIntroduction"); - cpEditor.copyPageAndRename("Lavinia", "Dora"); - cpEditor.copyPageAndRename("Dora", "ET"); - - cpEditor.deletePage("Lavinia", true); - File doc = WorkflowHelper.locateFile("org/olat/test/sandbox/4_within_subjects_vs_between_subjects_designs.zip"); - String remoteDoc = Context.getContext().provideFileRemotely(doc); - cpEditor.importPage("Introduction", remoteDoc); - } - } finally { - workflow.logout(); - } - } - - private void testCreateCourseWithTest() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - - CourseEditor courseEditor = workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, "bla"); - TestElementEditor test1 = (TestElementEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.TEST, true, null); - test1.setTitle("TEST_1"); - test1.configureTestLayout(true, true, true, true, 10, true); - - - TestElementEditor test2 = (TestElementEditor)courseEditor.insertCourseElement(CourseEditor.CourseElemTypes.TEST, true, null); - test2.setTitle("TEST_2"); - test2.configureTestLayout(false, false, false, false, 0, false); - - courseEditor.publishCourse(); - CourseRun courseRun = courseEditor.closeToLRDetailedView().showCourseContent(); - - - workflow.logout(); - } - - public void testLearningGroup() throws Exception { - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(Context.getContext().getStandardAdminOlatLoginInfos()); - LRDetailedView lRDetailedView = workflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, "description").closeToLRDetailedView(); - GroupAdmin groupAdmin = lRDetailedView.showCourseContent().getGroupManagement().createLearningGroup(GROUP_NAME, "description", 0, false, false); - groupAdmin.setMemberDisplayOptions(null, true, null); - System.out.println("testLearningGroup"); - } - -} diff --git a/src/test/java/org/olat/test/sandbox/PreviewExternalPageTest.java b/src/test/java/org/olat/test/sandbox/PreviewExternalPageTest.java deleted file mode 100644 index 9e9a4ecafc8..00000000000 --- a/src/test/java/org/olat/test/sandbox/PreviewExternalPageTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.sandbox; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -/** - * - * Test issue OLAT-4597. - * Tries to reproduce a RS. - * <br/> - * <p> - * Test case: <br/> - * open course editor <br/> - * add course building block 'external page' <br/> - * Add an URL <br/> - * press preview button <br/> - * assert: there is NO RedScreen <br/> - * </p> - * - * @author alberto - * - */ -public class PreviewExternalPageTest extends BaseSeleneseTestCase { - private final String COURSE_NAME = "CourseName"+System.currentTimeMillis(); - private final String COURSE_DESCRIPTION = "CourseDescription"+System.currentTimeMillis(); - - public void testPreviewExternalPageTest() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - - OLATWorkflowHelper olatWorkflow = context.getOLATWorkflowHelper(context.getStandardAuthorOlatLoginInfos()); - - //open course editor - CourseEditor courseEditor = olatWorkflow.getLearningResources().createCourseAndStartEditing(COURSE_NAME, COURSE_DESCRIPTION); - - //add course building block 'external page' - - - //Add an URL - - //press preview button - - //=> assert: there is NO RedScreen NO RedScreen - - } -} diff --git a/src/test/java/org/olat/test/sandbox/package.html b/src/test/java/org/olat/test/sandbox/package.html deleted file mode 100644 index e9488da231c..00000000000 --- a/src/test/java/org/olat/test/sandbox/package.html +++ /dev/null @@ -1,12 +0,0 @@ -<html> -<head> -</head> - -<body> - -This package contains tests waiting to be reviewed/implemented. -<br/> - - -</body> -</html> \ No newline at end of file diff --git a/src/test/java/org/olat/test/tutorial/cluster/clean/package.html b/src/test/java/org/olat/test/tutorial/cluster/clean/package.html deleted file mode 100644 index 861e33f0bde..00000000000 --- a/src/test/java/org/olat/test/tutorial/cluster/clean/package.html +++ /dev/null @@ -1,14 +0,0 @@ -<html> -<head> -</head> - -<body> - -Tests in this package are run against a clean cluster. -<p> -<i>Clean</i> means that the cluster is set up for each of the tests in this package -fresh from CVS with a fresh DB -<p> - -</body> -</html> \ No newline at end of file diff --git a/src/test/java/org/olat/test/tutorial/package.html b/src/test/java/org/olat/test/tutorial/package.html deleted file mode 100644 index 80ffb6ee6d2..00000000000 --- a/src/test/java/org/olat/test/tutorial/package.html +++ /dev/null @@ -1,12 +0,0 @@ -<html> -<head> -</head> - -<body> - -This package should be removed. -<br/> - - -</body> -</html> \ No newline at end of file diff --git a/src/test/java/org/olat/test/tutorial/reg/ServerRestartTest.java b/src/test/java/org/olat/test/tutorial/reg/ServerRestartTest.java deleted file mode 100644 index f1b41543984..00000000000 --- a/src/test/java/org/olat/test/tutorial/reg/ServerRestartTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.tutorial.reg; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.OlatLoginHelper; -import org.olat.test.util.selenium.SeleniumManager; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.Selenium; - -/** - * This class tests 10x a singlevm server start and 10x a cluster server start - * . - * @author eglis - */ -public class ServerRestartTest extends BaseSeleneseTestCase { - - public void testRestarts() throws Exception { - for(int i=0; i<5; i++) { - Context context = Context.setupContext(getFullName(), SetupType.CLEAN_AND_RESTARTED_TWO_NODE_CLUSTER); - Selenium s = context.createSeleniumAndLogin(); - s.close(); - s.stop(); - Context.tearDown(); - } - for(int i=0; i<5; i++) { - Context context = Context.setupContext(getFullName(), SetupType.CLEAN_AND_RESTARTED_SINGLE_VM); - Selenium s = context.createSeleniumAndLogin(); - s.close(); - s.stop(); - Context.tearDown(); - } - Context.setupContext(getFullName(), SetupType.SINGLE_VM); - } -} diff --git a/src/test/java/org/olat/test/tutorial/singlenode/testng/CourseOpenCloseTest.java b/src/test/java/org/olat/test/tutorial/singlenode/testng/CourseOpenCloseTest.java deleted file mode 100644 index b23201143ef..00000000000 --- a/src/test/java/org/olat/test/tutorial/singlenode/testng/CourseOpenCloseTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.tutorial.singlenode.testng; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -@Test(groups = {"sequential"}, enabled=true ) -public class CourseOpenCloseTest extends BaseSeleneseTestCase { - - @Test - public void testCourseOpenClose() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - selenium = context.createSeleniumAndLogin(); - - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=learningResources::content_searchForm_titleField()", "Demo course wiki"); - selenium.click("ui=learningResources::content_searchForm_search()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::content_clickCourseEntry(nameOfCourse=Demo course wiki)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::content_showContent()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=tabs::closeCourse(nameOfCourse=Demo course wiki)"); - } -} diff --git a/src/test/java/org/olat/test/tutorial/singlenode/testng/CoursePublishTest.java b/src/test/java/org/olat/test/tutorial/singlenode/testng/CoursePublishTest.java deleted file mode 100644 index 39cacdcd33c..00000000000 --- a/src/test/java/org/olat/test/tutorial/singlenode/testng/CoursePublishTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.tutorial.singlenode.testng; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -@Test(groups = {"sequential"}) -public class CoursePublishTest extends BaseSeleneseTestCase { - - @Test - public void testCoursePublish(String olatUrl) throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - selenium = context.createSeleniumAndLogin(); - - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=learningResources::content_searchForm_titleField()", "Demo course wiki"); - selenium.click("ui=learningResources::content_searchForm_search()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::content_clickCourseEntry(nameOfCourse=Demo course wiki)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::content_showContent()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=course::toolbox_courseTools_courseEditor()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=courseEditor::content_TitleDescription_shortTitle()", "mod"); - selenium.click("ui=courseEditor::content_TitleDescription_save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (selenium.isTextPresent("Publishing")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - - selenium.click("ui=courseEditor::publishDialog_howToPublish_firstTreeCheckbox()"); - selenium.click("ui=courseEditor::publishDialog_next()"); - Thread.sleep(1000); - selenium.click("ui=courseEditor::publishDialog_next()"); - Thread.sleep(1000); - assertTrue(selenium.isTextPresent("No problems found")); - selenium.click("ui=courseEditor::publishDialog_next()"); - Thread.sleep(1000); - //assertTrue(selenium.isTextPresent("Do you really want to publish this course?")); - assertTrue(selenium.isTextPresent("Please confirm that you really want to publish the following course elements")); - selenium.click("ui=courseEditor::publishDialog_finish()"); - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (selenium.isTextPresent("Selected modifications published successfully")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - - selenium.click("ui=tabs::closeCourse(nameOfCourse=Demo course wiki)"); - } - -} diff --git a/src/test/java/org/olat/test/tutorial/singlenode/testng/CreateUserTest.java b/src/test/java/org/olat/test/tutorial/singlenode/testng/CreateUserTest.java deleted file mode 100644 index 759fc8e947b..00000000000 --- a/src/test/java/org/olat/test/tutorial/singlenode/testng/CreateUserTest.java +++ /dev/null @@ -1,47 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.tutorial.singlenode.testng; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.selenium.OlatLoginHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -@Test(groups = {"sequential"}) -public class CreateUserTest extends BaseSeleneseTestCase { - - @Test - public void testCoursePublish() throws Exception { - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - selenium = context.createSelenium(); - - OlatLoginInfos loginInfos = context.getStandardAdminOlatLoginInfos(); - OlatLoginInfos newLoginInfos = - WorkflowHelper.createUserIfNotExists(loginInfos, "newuser3", "newpassword2", true, true, false, true, false); - - OlatLoginHelper.olatLogin(selenium, newLoginInfos); - assertEquals("OLAT - Home", selenium.getTitle()); - OlatLoginHelper.olatLogout(selenium); - } - -} diff --git a/src/test/java/org/olat/test/tutorial/singlenode/testng/SimpleTutorialJUnitTest.java b/src/test/java/org/olat/test/tutorial/singlenode/testng/SimpleTutorialJUnitTest.java deleted file mode 100644 index 0c1aad11230..00000000000 --- a/src/test/java/org/olat/test/tutorial/singlenode/testng/SimpleTutorialJUnitTest.java +++ /dev/null @@ -1,69 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.tutorial.singlenode.testng; - -import junit.framework.TestCase; - -import org.testng.annotations.AfterClass; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -@Test(groups = {"sequential"} ) -public class SimpleTutorialJUnitTest extends TestCase { - - @BeforeClass - public void beforeClass() { - System.out.println("SimpleTutorialTest.beforeClass"); - } - - @BeforeTest - public void beforeTest() { - System.out.println("SimpleTutorialTest.beforeTest"); - } - - @BeforeMethod - public void beforeMethod() { - System.out.println("SimpleTutorialTest.beforeMethod"); - } - - @Test - public void theSimpleTutorialJUnitTest() { - System.out.println("SimpleTutorialTest.theTest"); - } - - @AfterMethod - public void afterMethod() { - System.out.println("SimpleTutorialTest.afterMethod"); - } - - @AfterTest - public void afterTest() { - System.out.println("SimpleTutorialTest.afterTest"); - } - - @AfterClass - public void afterClass() { - System.out.println("SimpleTutorialTest.afterClass"); - } -} diff --git a/src/test/java/org/olat/test/tutorial/singlenode/testng/SimpleTutorialTest.java b/src/test/java/org/olat/test/tutorial/singlenode/testng/SimpleTutorialTest.java deleted file mode 100644 index 254ed559b2a..00000000000 --- a/src/test/java/org/olat/test/tutorial/singlenode/testng/SimpleTutorialTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.tutorial.singlenode.testng; - -import org.testng.annotations.AfterClass; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.AfterTest; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.BeforeTest; -import org.testng.annotations.Test; - -@Test(groups = {"sequential"} ) -public class SimpleTutorialTest { - - @BeforeClass - public void beforeClass() { - System.out.println("SimpleTutorialTest.beforeClass"); - } - - @BeforeTest - public void beforeTest() { - System.out.println("SimpleTutorialTest.beforeTest"); - } - - @BeforeMethod - public void beforeMethod() { - System.out.println("SimpleTutorialTest.beforeMethod"); - } - - @Test - public void theSimpleTutorialTest() { - System.out.println("SimpleTutorialTest.theTest"); - } - - @AfterMethod - public void afterMethod() { - System.out.println("SimpleTutorialTest.afterMethod"); - } - - @AfterTest - public void afterTest() { - System.out.println("SimpleTutorialTest.afterTest"); - } - - @AfterClass - public void afterClass() { - System.out.println("SimpleTutorialTest.afterClass"); - } -} diff --git a/src/test/java/org/olat/test/util/MessageOrderingTest.java b/src/test/java/org/olat/test/util/MessageOrderingTest.java deleted file mode 100644 index d368b9dec09..00000000000 --- a/src/test/java/org/olat/test/util/MessageOrderingTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util; - -import javax.jms.Connection; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.MessageProducer; -import javax.jms.Session; - -import org.apache.activemq.ActiveMQConnectionFactory; -import org.apache.activemq.command.ActiveMQQueue; - -public class MessageOrderingTest implements MessageListener { - - private int counter_ = 0; - - public static void main(String[] args) throws Exception { - ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); - connectionFactory.setBrokerURL("tcp://localhost:61616"); - - Connection connection = connectionFactory.createQueueConnection(); - Session session1 = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - Session session2 = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - - Destination destination = new ActiveMQQueue("/atestqueue"); - - MessageProducer producer = session1.createProducer(destination); - - MessageConsumer consumer = session2.createConsumer(destination); - - consumer.setMessageListener(new MessageOrderingTest()); - connection.start(); - - for(int i=0; i<10000; i++) { - MapMessage message = session1.createMapMessage(); - message.setInt("Counter", i); - producer.send(message); - System.out.println("Sent counter="+i); - } - } - - public void onMessage(Message arg0) { - try{ - if (!(arg0 instanceof MapMessage)) { - new Exception("Wrong message type: "+arg0).printStackTrace(System.out); - System.exit(1); - } - MapMessage message = (MapMessage)arg0; - int receivedCounter = message.getInt("Counter"); - System.out.println("Received counter="+receivedCounter); - if (receivedCounter!=counter_) { - new Exception("Out of order, expected "+counter_+", but got "+receivedCounter).printStackTrace(System.out); - System.exit(1); - } - counter_++; - } catch(JMSException e) { - e.printStackTrace(System.out); - System.exit(1); - } - } -} diff --git a/src/test/java/org/olat/test/util/selenium/BaseSeleneseTestCase.java b/src/test/java/org/olat/test/util/selenium/BaseSeleneseTestCase.java deleted file mode 100644 index 78cb60c7a01..00000000000 --- a/src/test/java/org/olat/test/util/selenium/BaseSeleneseTestCase.java +++ /dev/null @@ -1,100 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium; - -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.AfterMethod; - -import com.thoughtworks.selenium.SeleneseTestCase; - -/** - * Base class for running Selenium tests in OLAT - all test cases - * should extend this class.</P> - * The environment of a test is defined over the a Context or derived class of it, and the corresponding spring context configuration. - * - * @author Stefan - */ -public class BaseSeleneseTestCase extends SeleneseTestCase { - - public String getFullName() { - return getClass().getCanonicalName()+"."+getName(); - } - - @Override - public void setUp() throws Exception { - // don't do anything by default - including not calling super.setUp() - } - - /** - * Hooks for subclasses who wanted to overwrite tearDown() - but - * the BaseSeleneseTestCase requires tearDown() to be called in - * any case - thus enforces this pattern of - * try{ - * doTearDown(); - * } finally { - * // do the framework.tearDown stuff anyway - * } - * @throws Exception - */ - public void doTearDown() throws Exception { - // nothing by default - } - - @Override - @AfterMethod(alwaysRun=true) - public final void tearDown() throws Exception { - try{ - checkForVerificationErrors(); - doTearDown(); - } finally { - Context.tearDown(); - } - - // don't call super.tearDown() by default - since we instantiate multiple selenium's here - // and the default 'selenium' instance variable might not be initialized - thus - // a NullPointerException will occur in this case when we call super.tearDown() here. - } - - @Override - protected void runTest() throws Throwable { - try{ - super.runTest(); - - - } catch(Throwable th) { - // OLAT-3653: in case of a failure, try to find out if it is a KnownIssueException somewhere in the - // olat.log - and if so, don't report it as the original failure but as a known issue so we immediately - // know from the test result that it is a known issue - if (!Context.maskTestFailureOrError(th)) { - throw th; - } - } - cleanUpAfterRun(); - } - - /** - * Clean up code to perform after the successful run. - * - */ - protected void cleanUpAfterRun() { - // nothing by default - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/OlatLoginHelper.java b/src/test/java/org/olat/test/util/selenium/OlatLoginHelper.java deleted file mode 100644 index ffc84d8d6f4..00000000000 --- a/src/test/java/org/olat/test/util/selenium/OlatLoginHelper.java +++ /dev/null @@ -1,300 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium; - -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.Selenium; - -/** - * Provides login, logout functionality. - * - * @author stefan - * - */ -public class OlatLoginHelper { - - /** - * Logout is anywhere available in OLAT. - * @param selenium - */ - public static void olatLogout(Selenium selenium) { - selenium.click("ui=tabs::logOut"); - selenium.waitForPageToLoad("30000"); - } - - /** - * - * @param selenium - * @param loginInfos - */ - public static void olatLogin(Selenium selenium, OlatLoginInfos loginInfos) { - String username = loginInfos.getUsername(); - String password = loginInfos.getPassword(); - String language = loginInfos.getLanguage(); - boolean success = false; - try { - for (int second = 0;; second++) { - if (second >= 120) - fail("timeout. Could not get to see 'OLAT - Online Learning And Training'... is OLAT down?"); - System.out.println("title now: " + selenium.getTitle()); - try { - if ("OLAT - Online Learning And Training".equals(selenium - .getTitle())) - break; - } catch (Exception e) { - } - sleep(500); - } - if (selenium.isTextPresent("OLAT-Benutzername") - && !language.equals("Deutsch")) { - // then we have to switch to english... - selenium.select("//select[contains(@name, 'language_SELBOX')]", "label=" + language); - for (int second = 0;; second++) { - if (second >= 120) - fail("timeout. Could not switch to English in DMZ!"); - try { - if (selenium.isTextPresent("OLAT user name")) - break; - } catch (Exception e) { - } - sleep(500); - } - } - assertEquals("OLAT - Online Learning And Training", selenium - .getTitle()); - login: while (true) { - System.out.println("logging in to " + selenium.getLocation() - + " as " + username); - - inputUserNameAndPassword(selenium, username, password); - - //sleep(5000); - if(selenium.isTextPresent("Terms of use") ) { - //accept disclaimer - selenium.click("ui=dmz::disclaimerCheckbox()"); - selenium.click("ui=dmz::acceptDisclaimer(acceptLabel=Accept)"); - selenium.waitForPageToLoad("30000"); - System.out.println("accept disclaimer - EN"); - } else if(selenium.isTextPresent("Nutzungsbedingungen")) { - selenium.click("ui=dmz::disclaimerCheckbox()"); - selenium.click("ui=dmz::acceptDisclaimer(acceptLabel=Akzeptieren)"); - selenium.waitForPageToLoad("30000"); - System.out.println("accept disclaimer - DE"); - } - - System.out.println("waiting for home page to open..."); - for (int second = 0;; second++) { - if (second >= 120) - fail("timeout. Could not login with username="+username+", password="+password); - System.out.println("fetching title..."); - System.out.println("title now: " + selenium.getTitle()); - try { - if ("OLAT - Home".equals(selenium.getTitle())) - break; - } catch (Exception e) { - } - sleep(500); - } - System.out.println("Great, Home opened!"); - - if (selenium.isElementPresent("ui=home::menu_settings()") - && language.equals("English")) { - // language is correct - break; - } - if (selenium.isElementPresent("ui=home::menu_einstellungen()") - && language.equals("Deutsch")) { - // language is correct - break; - } - - if (!selenium.isElementPresent("ui=home::menu_einstellungen()") - && !selenium - .isElementPresent("ui=home::menu_settings()")) { - fail("only supporting default language German or English for switching to another language at the moment"); - } - - if (selenium.isElementPresent("ui=home::menu_einstellungen()")) { - // then we're in german, lets switch to english - System.out - .println("We're in german, lets set the correct language"); - selenium.click("ui=home::menu_einstellungen()"); - selenium.waitForPageToLoad("30000"); - selenium - .click("ui=home::content_einstellungen_tabs_system()"); - selenium.waitForPageToLoad("60000"); - selenium.select( - "ui=home::content_einstellungen_system_sprache()", - "label=" + language); - selenium - .click("ui=home::content_einstellungen_system_speichern()"); - selenium.waitForPageToLoad("30000"); - System.out.println("HTMLSOURCE: " - + selenium.getHtmlSource()); - sleep(600); - if (selenium.isElementPresent("ui=tabs::logOut()")) { - System.out.println("logOut present!"); - } else { - for(int k=0; k<30; k++) { - while(!selenium.isElementPresent("ui=tabs::logOut()")) { - System.out.println("logOut not present!"); - sleep(500); - } - } - if (!selenium.isElementPresent("ui=tabs::logOut()")) { - System.out.println("logOut not present!"); - } - } - selenium.click("ui=tabs::logOut()"); - } else { - // then we're in german, lets switch to english - System.out - .println("We're in english, lets set the correct language"); - selenium.click("ui=home::menu_settings()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=home::content_settings_tabs_system()"); - selenium.waitForPageToLoad("30000"); - selenium - .select( - "ui=home::content_settings_system_general_language()", - "label=" + language); - selenium - .click("ui=home::content_settings_system_general_save()"); - selenium.waitForPageToLoad("30000"); - System.out.println("HTMLSOURCE: " - + selenium.getHtmlSource()); - sleep(600); - if (selenium.isElementPresent("ui=tabs::logOut()")) { - System.out.println("logOut present!"); - } else { - System.out.println("logOut not present!"); - } - selenium.click("ui=tabs::logOut()"); - } - - System.out.println("waiting for logout to be done"); - selenium.waitForPageToLoad("30000"); - for (int second = 0;; second++) { - if (second >= 120) - fail("timeout. Could not go back to DMZ to see 'OLAT - Online Learning And Training', did the logOut fail ?"); - System.out.println("title now: " + selenium.getTitle()); - try { - if ("OLAT - Online Learning And Training" - .equals(selenium.getTitle())) - break; - } catch (Exception e) { - } - sleep(500); - } - continue login; - } - System.out.println("login of user " + username + " to url " - + selenium.getLocation() + " successful"); - success = true; - } finally { - System.out.println("OLATLOGIN FINALLY. success="+success); - if (!success) { - System.out.println("Body: "+selenium.getBodyText()); - } - } - } - - /** - * Enter username and password, and press login, no matter whether the login form is in English or German. - * @param selenium - * @param username - * @param password - */ - public static void inputUserNameAndPassword(Selenium selenium, String username, String password) { - //if shib login, go to olat login - if(selenium.isElementPresent("ui=dmz::wayf()")) { - //switch to olat login - if(selenium.isElementPresent("ui=commons::anyLink(linkText=Weiter)")) { - selenium.click("ui=commons::anyLink(linkText=Weiter)"); - selenium.waitForPageToLoad("60000"); - } else if(selenium.isElementPresent("ui=commons::anyLink(linkText=Next)")) { - selenium.click("ui=commons::anyLink(linkText=Next)"); - selenium.waitForPageToLoad("60000"); - } - } - //assuming that we are on the olat login page... - if(selenium.isElementPresent("ui=commons::flexiForm_labeledTextInput(formElementLabel=OLAT-Benutzername)")) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=OLAT-Benutzername)", username); - sleep(5000); - selenium.type("ui=commons::flexiForm_labeledPasswordInput(formElementLabel=OLAT-Passwort)", password); - sleep(5000); - } else if(selenium.isElementPresent("ui=commons::flexiForm_labeledTextInput(formElementLabel=OLAT user name)")) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=OLAT user name)", username); - selenium.type("ui=commons::flexiForm_labeledPasswordInput(formElementLabel=OLAT password)", password); - } - selenium.click("ui=dmz::login()"); - selenium.waitForPageToLoad("30000"); - } - - private static void sleep(int time) { - while(true) { - try { - Thread.sleep(time); - return; - } catch (InterruptedException e) { - // do it again - } - } - } - - private static void assertEquals(String expected, String actual) { - if (expected==null && actual==null) { - return; - } else if (expected==null || actual==null) { - throw new AssertionError("expected "+expected+" but got "+actual); - } else if (!expected.equals(actual)) { - throw new AssertionError("expected "+expected+" but got "+actual); - } - } - - static void fail(String msg) { - throw new AssertionError("failure: "+msg); - } - - /** - * Try to login but gets an error message. - * @param nodeId - * @param username - * @param password - * @return Returns true, if it gets an error msg at login. - */ - public static boolean loginExpectingError(int nodeId, String username, String password) throws Exception{ - Selenium selenium = Context.getContext().createSelenium(Context.getContext().getOlatLoginInfo(nodeId, username, password)); - assertEquals("OLAT - Online Learning And Training", selenium.getTitle()); - System.out.println("logging in to " + selenium.getLocation() + " as " + username); - inputUserNameAndPassword(selenium, username, password); - - boolean cannotLogin = SeleniumHelper.isTextPresent(selenium, "OLAT user name or password invalid", 20); //English error message - cannotLogin |= SeleniumHelper.isTextPresent(selenium, "Fehler", 20); // German error message - /*if(!cannotLogin) { - fail("Expected to get an error message while login!"); - }*/ - selenium.click("ui=dmz::loginErrorOK()"); - return cannotLogin; - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/PageLoadWait.java b/src/test/java/org/olat/test/util/selenium/PageLoadWait.java deleted file mode 100644 index 1b5abe0bb1e..00000000000 --- a/src/test/java/org/olat/test/util/selenium/PageLoadWait.java +++ /dev/null @@ -1,72 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium; - - -/** - * Defines different page load waiting times in ms and allows nowait time. - * The facility "Not waiting" for page load was introduced in conjunction with codepoints. See the following example - * <pre> - //trigger "Activation Content" which in turn loads each of its children for displaying the Previews -> Changed behavior of test! - StructureElement selectActivation = courseRun.selectAnyButGetToRoot("Activation Interaction", PageLoadWait.NO_WAIT); - selenium = selectActivation.getSelenium(); - - // ASSERTION check if codepoint reached, if yes continue - beforeSyncCp_A.assertBreakpointReached(1, 10000); - System.out.println("beforeSyncCp_A.assertBreakpointReached"); - TemporaryPausedThread[] threadsA = beforeSyncCp_A.getPausedThreads(); - threadsA[0].continueThread(); - - doInSyncCp_A.assertBreakpointReached(1, 10000); - System.out.println("doInSyncCp_A.assertBreakpointReached"); - threadsA = doInSyncCp_A.getPausedThreads(); //overwrite threadsA - threadsA[0].continueThread(); - - // activate actual "Forum" content for proceeding - selenium.waitForPageToLoad("30000");//wait for previous NO_WAITED Action - courseRun.selectForum(CourseEditor.FORUM_COURSE_ELEM_TITLE); - </pre> - * <P> - * Initial Date: Apr 29, 2011 <br> - * - * @author patrick - */ -public enum PageLoadWait { - - LONG("60000"), DEFAULT("30000"), SHORT("5000"), NO_WAIT("0"); - - //ms are specified via String to Selenium - private String ms; - - PageLoadWait(String msValue) { - this.ms = msValue; - } - - public String getMs() { - return ms; - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/SeleniumHelper.java b/src/test/java/org/olat/test/util/selenium/SeleniumHelper.java deleted file mode 100644 index e92cf9ad054..00000000000 --- a/src/test/java/org/olat/test/util/selenium/SeleniumHelper.java +++ /dev/null @@ -1,81 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium; - -import com.thoughtworks.selenium.Selenium; -import junit.framework.Assert; - -/** - * @author Lavinia Dumitrescu - * - */ -public class SeleniumHelper extends Assert { - - /** - * If timeout exceeded fails. - * @param selenium - * @param text - * @return Returns true if text was present. - * @throws Exception - */ - public static boolean waitUntilTextPresent(Selenium selenium, String text, int timeoutSec) throws Exception { - for (int second = 0;; second++) { - if (second >= timeoutSec) fail("timeout"); - try { - if (selenium.isTextPresent(text)) - return true; - } catch (Exception e) {} - Thread.sleep(1000); - } - } - - /** - * Checks if text shows up in the first timeoutSec. - * @param selenium - * @param text - * @param timeoutSec - * @return Return true if the test was present, else false. - */ - public static boolean isTextPresent(Selenium selenium, String text, int timeoutSec) throws Exception { - for (int second = 0; second <= timeoutSec; second++) { - try { - if (selenium.isTextPresent(text)) - return true; - } catch (Exception e) {} - Thread.sleep(1000); - } - return false; - } - - public static void safeWait(long milliseconds){ - try { - Thread.sleep(milliseconds); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} diff --git a/src/test/java/org/olat/test/util/selenium/SeleniumManager.java b/src/test/java/org/olat/test/util/selenium/SeleniumManager.java deleted file mode 100644 index dea65082f8e..00000000000 --- a/src/test/java/org/olat/test/util/selenium/SeleniumManager.java +++ /dev/null @@ -1,237 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium; - -import java.io.OutputStreamWriter; -import java.lang.reflect.Method; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import junit.framework.AssertionFailedError; - -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.apache.log4j.PatternLayout; -import org.olat.test.util.selenium.log.LoggingSeleniumWrapper; -import org.olat.test.util.setup.OlatLoginInfos; - -import com.thoughtworks.selenium.DefaultSelenium; -import com.thoughtworks.selenium.Selenium; -import com.thoughtworks.selenium.SeleniumException; - -/** - * Creates and manages the selenium instances. - * - * @author stefan - * - */ -public class SeleniumManager { - - private static final Logger seleniumLogger_; - - static { - seleniumLogger_ = Logger.getLogger("Selenium"); - seleniumLogger_.setLevel(Level.INFO); - ConsoleAppender appender = new ConsoleAppender(); - appender.setLayout(new PatternLayout("%d [%t] %-5p %c{1} %x -_._- %m%n")); - appender.setWriter(new OutputStreamWriter(System.out)); - seleniumLogger_.addAppender(appender); - } - - private final String nameOfTest_; - - private List<Selenium> seleniums_ = new LinkedList<Selenium>(); - - /** - * - * @param nameOfTest - */ - public SeleniumManager(String nameOfTest) { - nameOfTest_ = nameOfTest; - } - - /** - * Creates a new DefaultSelenium, wraps it into a LoggingSeleniumWrapper, and opens Window. <br/> - * It adds the newly created selenium instance to the seleniums list. - * - * @param loginInfos - * @return - */ - public Selenium createSelenium(OlatLoginInfos loginInfos) { - String hostname = loginInfos.getSeleniumHostname(); - String browserId = loginInfos.getSeleniumBrowserId(); - String initialBrowserUrl = loginInfos.getFullOlatServerUrl(); - int port = getDefaultPort(); - System.out.println("connecting to "+hostname+" port "+port+"..." + " browserId: " + browserId + " initialBrowserUrl: " + initialBrowserUrl); - Selenium selenium = null; - - for(int i=1; i<6; i++) { - try{ - selenium = new DefaultSelenium(hostname, port, browserId, initialBrowserUrl); - System.out.println("createSelenium - DefaultSelenium created"); - - selenium.start(); - //Thread.sleep(100000); - System.out.println("createSelenium - DefaultSelenium started"); - // the next line can fail at times - selenium.setContext(this.getClass().getSimpleName() + "." + nameOfTest_); - //selenium.setBrowserLogLevel("debug"); - - System.out.println("connected."); - - selenium = new LoggingSeleniumWrapper(selenium, seleniumLogger_); - - System.out.println("createSelenium: launching browser (url="+loginInfos.getFullOlatServerUrl()+")"); - - // the next line can fail at times - selenium.openWindow(loginInfos.getFullOlatServerUrl(), "olat"); - - System.out.println("createSelenium: success so far."); - // success - break; - } catch (SeleniumException se) { - selenium = null; - System.out.println("createSelenium: browser creation failed...:"); - se.printStackTrace(System.out); - System.out.println("createSelenium: retrying in "+i+"*5 sec..."); - try { - Thread.sleep(i*5000); - } catch (InterruptedException e) { - e.printStackTrace(System.out); - } - System.out.println("createSelenium: ok, retrying now..."); - } catch (Exception ex) { - System.out.println("createSelenium: browser creation failed...:"); - ex.printStackTrace(System.out); - System.out.println("createSelenium: retrying in "+i+"*5 sec..."); - } - } - - if (selenium==null) { - System.out.println("createSelenium: COULD NOT CREATE A BROWSER, EVEN THOUGH I TRIED 5 TIMES WITH 5 SEC DELAYS. GIVING UP HERE."); - throw new AssertionFailedError("Could not create browser even though I tried 5 times with 5 sec delays, giving up"); - } - System.out.println("createSelenium: waiting 5sec."); - selenium.waitForPopUp("olat", "30000"); - System.out.println("createSelenium: selecting the olat window"); - selenium.selectWindow("olat"); - if (selenium.isTextPresent("OLAT-Benutzername")) { - // then we have to switch to english... - selenium.select("//select[contains(@name, 'language_SELBOX')]", "label=English"); - for (int second = 0;; second++) { - if (second >= 120) throw new AssertionError("timeout while checking for language change to English to occur"); - try { if (selenium.isTextPresent("OLAT user name")) break; } catch (Exception e) {} - try { - Thread.sleep(500); - } catch (InterruptedException e) { - // ignore - } - } - } - - seleniums_.add(selenium); - return selenium; - } - - /** - * Closes all selenium instances found in the seleniums list. - */ - public void closeSeleniums() { - System.out.println("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*"); - System.out.println("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-"); - System.out.println("* Getting body texts of all selenium browsers: *"); - int i = 0; - for (Iterator<Selenium> it = seleniums_.iterator(); it.hasNext();) { - Selenium s = (Selenium) it.next(); - System.out.println("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-"); - System.out.println("* Selenium["+(i++)+","+s+"].getBodyText(): *"); - System.out.println("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-"); - try{ - System.out.println(s.getBodyText()); - } catch(Exception e) { - //e.printStackTrace(System.out); - System.out.println("Couldn't fetch body of Selenium["+(i-1)+"]: "+e); - } - /*try{ - String filename = System.currentTimeMillis()+".png"; - System.out.println("Capturing screenshot into: "+filename); - s.captureEntirePageScreenshot(filename); - } catch(Exception e) { - System.out.println("Couldn't capture screenshot :( - "+e); - }*/ - } - System.out.println("* Done with getting body of all seleniums *"); - System.out.println("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-"); - System.out.println("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*"); - System.out.println("Killing the selenium servers..."); - for (Iterator<Selenium> it = seleniums_.iterator(); it.hasNext();) { - Selenium s = it.next(); - doClose(s); - } - } - - public boolean anySeleniumBrowserHasKnownIssue3857() { - for (Iterator<Selenium> it = seleniums_.iterator(); it.hasNext();) { - Selenium s = (Selenium) it.next(); - try{ - final String body = s.getBodyText(); - if (body.contains("Please do not use the `Reload` or `Back` button of your browser.")) { - return true; - } - } catch(Exception e) { - // ignore - } - } - return false; - } - - private static void doClose(Selenium selenium) { - try{ - selenium.close(); - } catch(Exception e) { - e.printStackTrace(); - } finally { - try{ - selenium.stop(); - } catch(Exception e) { - e.printStackTrace(); - } - } - - } - - /** - * Default port is 4444. - * @return - */ - public static int getDefaultPort() { - try { - Class c = Class.forName("org.openqa.selenium1.server.SeleniumServer"); - Method getDefaultPort = c.getMethod("getDefaultPort", new Class[0]); - Integer portNumber = (Integer)getDefaultPort.invoke(null, new Object[0]); - return portNumber.intValue(); - } catch (Exception e) { - return 4444; - } - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/log/Log4jSocketServer.java b/src/test/java/org/olat/test/util/selenium/log/Log4jSocketServer.java deleted file mode 100644 index 56e54cc9e74..00000000000 --- a/src/test/java/org/olat/test/util/selenium/log/Log4jSocketServer.java +++ /dev/null @@ -1,159 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.log; - -import java.io.IOException; -import java.net.ServerSocket; -import java.net.Socket; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import org.apache.log4j.LogManager; -import org.apache.log4j.PropertyConfigurator; -import org.apache.log4j.net.SocketNode; - -public class Log4jSocketServer { - - static { - System.out.println("=============================="); - System.out.println("Log4jSocketServer<static-init>"); - System.out.println("=============================="); - } - - static int port = 18081; - private static Thread thread_; - private static ServerSocket serverSocket_; - private static Object syncObj_ = new Object(); - private static boolean stop_ = false; - - /** - * - * @param log4JConfigFilename - */ - public static void setLog4JConfigFilename(String log4JConfigFilename) { - System.out.println("Log4jSocketServer - setLog4JConfigFilename: " + log4JConfigFilename); - PropertyConfigurator.configure(log4JConfigFilename); - } - - public static boolean isStarted() { - return thread_!=null; - } - - /** - * Call setLog4JConfigFilename before!!! - */ - public static void start() { - if (thread_!=null) { - System.out.println("========================="); - System.out.println("Log4jSocketServer.start(): already active"); - System.out.println("========================"); - stop(); -// throw new IllegalArgumentException("Log4jSocketServer already started (make sure to call super.tearDown() in your tests if you overwrite tearDown())"); - } - System.out.println("========================="); - System.out.println("Log4jSocketServer.start()"); - System.out.println("========================="); - stop_ = false; - serverSocket_ = null; - thread_ = new Thread(new Runnable() { - - private List<Socket> socketNodeSockets_ = new LinkedList<Socket>(); - - public void run() { - try { - System.out.println("[Log4jSocketServer] Listening on port " + port); - //System.setProperty("log4j.debug", "true"); - serverSocket_ = new ServerSocket(port); - while (true) { - synchronized (syncObj_) { - if (stop_) { - return; - } - } - System.out.println("[Log4jSocketServer] Waiting to accept a new client."); - Socket socket = serverSocket_.accept(); - System.out.println("[Log4jSocketServer] Connected to client at " - + socket.getInetAddress()); - System.out.println("[Log4jSocketServer] Starting new socket node."); - SocketNode socketNode = new SocketNode(socket, LogManager - .getLoggerRepository()); - Thread thread = new Thread(socketNode, "SimpleSocketServer-" - + port); - thread.setDaemon(true); - socketNodeSockets_.add(socket); - thread.start(); - } - } catch (Exception e) { - synchronized (syncObj_) { - if (stop_) { - return; - } - } - e.printStackTrace(); - } finally { - System.out.println("[Log4jSocketServer] Cleaning up Log4jSocketServer mess... ("+socketNodeSockets_.size()+" sockets)"); - thread_ = null; - for (Iterator<Socket> it = socketNodeSockets_.iterator(); it - .hasNext();) { - Socket socket = it.next(); - try { - System.out.println("[Log4jSocketServer] Shutting down socket "+socket+"..."); - socket.shutdownInput(); - socket.shutdownOutput(); - socket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - } - }); - thread_.setDaemon(true); - thread_.start(); - try { - Thread.sleep(300); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public static void stop() { - if (serverSocket_ == null) { - System.out.println("========================"); - System.out.println("Log4jSocketServer.stop(): not active"); - System.out.println("========================"); - return; - } - System.out.println("========================"); - System.out.println("Log4jSocketServer.stop()"); - System.out.println("========================"); - synchronized(syncObj_) { - stop_ = true; - } - try { - serverSocket_.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/log/LoggingSeleniumWrapper.java b/src/test/java/org/olat/test/util/selenium/log/LoggingSeleniumWrapper.java deleted file mode 100644 index 866602c5990..00000000000 --- a/src/test/java/org/olat/test/util/selenium/log/LoggingSeleniumWrapper.java +++ /dev/null @@ -1,770 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.log; - -import junit.framework.AssertionFailedError; - -import org.apache.log4j.Logger; - -import com.thoughtworks.selenium.Selenium; -import com.thoughtworks.selenium.SeleniumException; - -public class LoggingSeleniumWrapper implements Selenium { - - private static int highestSeqNum_ = 0; - - private final int seqNum_ = highestSeqNum_++; - - private final Logger logger_; - private final Selenium delegate_; - - public LoggingSeleniumWrapper(Selenium delegate, Logger logger) { - delegate_ = delegate; - logger_ = logger; - logger_.info(getLogPrefixDetails()+" <init>"); - } - - @Override - public String toString() { - return getLogPrefixDetails()+super.toString(); - } - - private String getLogPrefixDetails() { - return "[seleniumwrapper-"+seqNum_+"] "; - } - - public void addLocationStrategy(String strategyName, - String functionDefinition) { - logger_.info(getLogPrefixDetails()+"addLocationStrategy: "+strategyName+": "+functionDefinition); - delegate_.addLocationStrategy(strategyName, functionDefinition); - } - - public void addSelection(String locator, String optionLocator) { - delegate_.addSelection(locator, optionLocator); - } - - public void allowNativeXpath(String allow) { - delegate_.allowNativeXpath(allow); - } - - public void altKeyDown() { - delegate_.altKeyDown(); - } - - public void altKeyUp() { - delegate_.altKeyUp(); - } - - public void answerOnNextPrompt(String answer) { - delegate_.answerOnNextPrompt(answer); - } - - public void assignId(String locator, String identifier) { - delegate_.assignId(locator, identifier); - } - - public void attachFile(String fieldLocator, String fileLocator) { - delegate_.attachFile(fieldLocator, fileLocator); - } - - - public void captureScreenshot(String filename) { - delegate_.captureScreenshot(filename); - } - - public void check(String locator) { - delegate_.check(locator); - } - - public void chooseCancelOnNextConfirmation() { - delegate_.chooseCancelOnNextConfirmation(); - } - - public void chooseOkOnNextConfirmation() { - delegate_.chooseOkOnNextConfirmation(); - } - - public void click(String locator) { - logger_.info(getLogPrefixDetails()+"click: "+locator); - if (!locator.startsWith("ui=")) { - //throw new AssertionError("click must use olat mapping file. add the following to it or find it there already: "+locator); - } - try{ - if (!delegate_.isElementPresent(locator)) { - System.err.println(getLogPrefixDetails()+"UI Element not found: "+locator); - logger_.warn(getLogPrefixDetails()+"UI Element not found: "+locator); - } - } catch(SeleniumException e) { - System.err.println(getLogPrefixDetails()+"Could not determine whether UI Element exists: "+locator); - System.err.println(getLogPrefixDetails()+"Got exception instead: "+e); - throw e; - } - try{ - delegate_.click(locator); - } catch(SeleniumException e) { - throw e; - } - } - - public void clickAt(String locator, String coordString) { - if (!locator.startsWith("ui=")) { - throw new AssertionError("click must use olat mapping file. add the following to it or find it there already: "+locator); - } - delegate_.clickAt(locator, coordString); - } - - public void close() { - delegate_.close(); - } - - public void contextMenu(String locator) { - delegate_.contextMenu(locator); - } - - public void contextMenuAt(String locator, String coordString) { - delegate_.contextMenuAt(locator, coordString); - } - - public void controlKeyDown() { - delegate_.controlKeyDown(); - } - - public void controlKeyUp() { - delegate_.controlKeyUp(); - } - - public void createCookie(String nameValuePair, String optionsString) { - delegate_.createCookie(nameValuePair, optionsString); - } - - public void deleteAllVisibleCookies() { - delegate_.deleteAllVisibleCookies(); - } - - public void deleteCookie(String name, String optionsString) { - delegate_.deleteCookie(name, optionsString); - } - - public void doubleClick(String locator) { - delegate_.doubleClick(locator); - } - - public void doubleClickAt(String locator, String coordString) { - delegate_.doubleClickAt(locator, coordString); - } - - public void dragAndDrop(String locator, String movementsString) { - delegate_.dragAndDrop(locator, movementsString); - } - - public void dragAndDropToObject(String locatorOfObjectToBeDragged, - String locatorOfDragDestinationObject) { - delegate_.dragAndDropToObject(locatorOfObjectToBeDragged, locatorOfDragDestinationObject); - } - - public void dragdrop(String locator, String movementsString) { - delegate_.dragdrop(locator, movementsString); - } - - public void fireEvent(String locator, String eventName) { - delegate_.fireEvent(locator, eventName); - } - - public void focus(String locator) { - delegate_.focus(locator); - } - - public String getAlert() { - return delegate_.getAlert(); - } - - public String[] getAllButtons() { - return delegate_.getAllButtons(); - } - - public String[] getAllFields() { - return delegate_.getAllFields(); - } - - public String[] getAllLinks() { - return delegate_.getAllLinks(); - } - - public String[] getAllWindowIds() { - return delegate_.getAllWindowIds(); - } - - public String[] getAllWindowNames() { - return delegate_.getAllWindowNames(); - } - - public String[] getAllWindowTitles() { - return delegate_.getAllWindowTitles(); - } - - public String getAttribute(String attributeLocator) { - return delegate_.getAttribute(attributeLocator); - } - - public String[] getAttributeFromAllWindows(String attributeName) { - return delegate_.getAttributeFromAllWindows(attributeName); - } - - public String getBodyText() { - return delegate_.getBodyText(); - } - - public String getConfirmation() { - return delegate_.getConfirmation(); - } - - public String getCookie() { - return delegate_.getCookie(); - } - - public String getCookieByName(String name) { - return delegate_.getCookieByName(name); - } - - public Number getCursorPosition(String locator) { - return delegate_.getCursorPosition(locator); - } - - public Number getElementHeight(String locator) { - return delegate_.getElementHeight(locator); - } - - public Number getElementIndex(String locator) { - return delegate_.getElementIndex(locator); - } - - public Number getElementPositionLeft(String locator) { - return delegate_.getElementPositionLeft(locator); - } - - public Number getElementPositionTop(String locator) { - return delegate_.getElementPositionTop(locator); - } - - public Number getElementWidth(String locator) { - return delegate_.getElementWidth(locator); - } - - public String getEval(String script) { - return delegate_.getEval(script); - } - - public String getExpression(String expression) { - return delegate_.getExpression(expression); - } - - public String getHtmlSource() { - return delegate_.getHtmlSource(); - } - - public String getLocation() { - return delegate_.getLocation(); - } - - public Number getMouseSpeed() { - return delegate_.getMouseSpeed(); - } - - public String getPrompt() { - return delegate_.getPrompt(); - } - - public String[] getSelectOptions(String selectLocator) { - return delegate_.getSelectOptions(selectLocator); - } - - public String getSelectedId(String selectLocator) { - return delegate_.getSelectedId(selectLocator); - } - - public String[] getSelectedIds(String selectLocator) { - return delegate_.getSelectedIds(selectLocator); - } - - public String getSelectedIndex(String selectLocator) { - return delegate_.getSelectedIndex(selectLocator); - } - - public String[] getSelectedIndexes(String selectLocator) { - return delegate_.getSelectedIndexes(selectLocator); - } - - public String getSelectedLabel(String selectLocator) { - return delegate_.getSelectedLabel(selectLocator); - } - - public String[] getSelectedLabels(String selectLocator) { - return delegate_.getSelectedLabels(selectLocator); - } - - public String getSelectedValue(String selectLocator) { - return delegate_.getSelectedValue(selectLocator); - } - - public String[] getSelectedValues(String selectLocator) { - return delegate_.getSelectedValues(selectLocator); - } - - public String getSpeed() { - return delegate_.getSpeed(); - } - - public String getTable(String tableCellAddress) { - return delegate_.getTable(tableCellAddress); - } - - public String getText(String locator) { - return delegate_.getText(locator); - } - - public String getTitle() { - return delegate_.getTitle(); - } - - public String getValue(String locator) { - return delegate_.getValue(locator); - } - - public boolean getWhetherThisFrameMatchFrameExpression( - String currentFrameString, String target) { - return delegate_.getWhetherThisFrameMatchFrameExpression(currentFrameString, target); - } - - public boolean getWhetherThisWindowMatchWindowExpression( - String currentWindowString, String target) { - return delegate_.getWhetherThisWindowMatchWindowExpression(currentWindowString, target); - } - - public Number getXpathCount(String xpath) { - return delegate_.getXpathCount(xpath); - } - - public void goBack() { - delegate_.goBack(); - } - - public void highlight(String locator) { - delegate_.highlight(locator); - } - - public void ignoreAttributesWithoutValue(String ignore) { - delegate_.ignoreAttributesWithoutValue(ignore); - } - - public boolean isAlertPresent() { - return delegate_.isAlertPresent(); - } - - public boolean isChecked(String locator) { - return delegate_.isChecked(locator); - } - - public boolean isConfirmationPresent() { - return delegate_.isConfirmationPresent(); - } - - public boolean isCookiePresent(String name) { - return delegate_.isCookiePresent(name); - } - - public boolean isEditable(String locator) { - return delegate_.isEditable(locator); - } - - public boolean isElementPresent(String locator) { - logger_.info(getLogPrefixDetails()+"isElementPresent: "+locator); - boolean elementPresent = false; - try{ - elementPresent = delegate_.isElementPresent(locator); - } finally { - logger_.info(getLogPrefixDetails()+"isElementPresent: "+locator+" => "+elementPresent); - } - return elementPresent; - } - - public boolean isOrdered(String locator1, String locator2) { - return delegate_.isOrdered(locator1, locator2); - } - - public boolean isPromptPresent() { - return delegate_.isPromptPresent(); - } - - public boolean isSomethingSelected(String selectLocator) { - return delegate_.isSomethingSelected(selectLocator); - } - - public boolean isTextPresent(String pattern) { - return delegate_.isTextPresent(pattern); - } - - public boolean isVisible(String locator) { - return delegate_.isVisible(locator); - } - - public void keyDown(String locator, String keySequence) { - delegate_.keyDown(locator, keySequence); - } - - public void keyDownNative(String keycode) { - delegate_.keyDownNative(keycode); - } - - public void keyPress(String locator, String keySequence) { - delegate_.keyPress(locator, keySequence); - } - - public void keyPressNative(String keycode) { - delegate_.keyPressNative(keycode); - } - - public void keyUp(String locator, String keySequence) { - delegate_.keyUp(locator, keySequence); - } - - public void keyUpNative(String keycode) { - delegate_.keyUpNative(keycode); - } - - public void metaKeyDown() { - delegate_.metaKeyDown(); - } - - public void metaKeyUp() { - delegate_.metaKeyUp(); - } - - public void mouseDown(String locator) { - delegate_.mouseDown(locator); - } - - public void mouseDownAt(String locator, String coordString) { - delegate_.mouseDownAt(locator, coordString); - } - - public void mouseMove(String locator) { - delegate_.mouseMove(locator); - } - - public void mouseMoveAt(String locator, String coordString) { - delegate_.mouseMoveAt(locator, coordString); - } - - public void mouseOut(String locator) { - delegate_.mouseOut(locator); - } - - public void mouseOver(String locator) { - delegate_.mouseOver(locator); - } - - public void mouseUp(String locator) { - delegate_.mouseUp(locator); - } - - public void mouseUpAt(String locator, String coordString) { - delegate_.mouseUpAt(locator, coordString); - } - - public void open(String url) { - delegate_.open(url); - } - - public void openWindow(String url, String windowID) { - delegate_.openWindow(url, windowID); - } - - public void refresh() { - delegate_.refresh(); - } - - public void removeAllSelections(String locator) { - delegate_.removeAllSelections(locator); - } - - public void removeSelection(String locator, String optionLocator) { - delegate_.removeSelection(locator, optionLocator); - } - - public void runScript(String script) { - delegate_.runScript(script); - } - - public void select(String selectLocator, String optionLocator) { - logger_.info(getLogPrefixDetails()+"select: "+selectLocator+", "+optionLocator); - delegate_.select(selectLocator, optionLocator); - } - - public void selectFrame(String locator) { - delegate_.selectFrame(locator); - } - - public void selectWindow(String windowID) { - delegate_.selectWindow(windowID); - } - - public void setBrowserLogLevel(String logLevel) { - delegate_.setBrowserLogLevel(logLevel); - } - - public void setContext(String context) { - delegate_.setContext(context); - } - - public void setCursorPosition(String locator, String position) { - delegate_.setCursorPosition(locator, position); - } - - public void setMouseSpeed(String pixels) { - delegate_.setMouseSpeed(pixels); - } - - public void setSpeed(String value) { - delegate_.setSpeed(value); - } - - public void setTimeout(String timeout) { - delegate_.setTimeout(timeout); - } - - public void shiftKeyDown() { - delegate_.shiftKeyDown(); - } - - public void shiftKeyUp() { - delegate_.shiftKeyUp(); - } - - public void shutDownSeleniumServer() { - delegate_.shutDownSeleniumServer(); - } - - public void start() { - delegate_.start(); - } - - public void stop() { - delegate_.stop(); - } - - public void submit(String formLocator) { - delegate_.submit(formLocator); - } - - public void type(String locator, String value) { - logger_.info(getLogPrefixDetails()+"type: "+locator+", "+value); - if (!locator.startsWith("ui=")) { - throw new AssertionError("type must use olat mapping file. add the following to it or find it there already: "+locator); - } - delegate_.type(locator, value); - } - - public void typeKeys(String locator, String value) { - if (!locator.startsWith("ui=")) { - throw new AssertionError("type must use olat mapping file. add the following to it or find it there already: "+locator); - } - delegate_.typeKeys(locator, value); - } - - public void uncheck(String locator) { - delegate_.uncheck(locator); - } - - public void waitForCondition(String script, String timeout) { - delegate_.waitForCondition(script, timeout); - } - - public void waitForFrameToLoad(String frameAddress, String timeout) { - delegate_.waitForFrameToLoad(frameAddress, timeout); - } - - public void waitForPageToLoad(String timeout) { - logger_.info(getLogPrefixDetails()+"waitForPageToLoad: "+timeout); - delegate_.waitForPageToLoad(timeout); - try{ - final String title = delegate_.getTitle(); - final String knownIssuesStr = "KnownIssueException"; - final String bodyText = delegate_.getBodyText(); - if ("OLAT - Error".equals(title)) { - if (!bodyText.contains(knownIssuesStr)) { - throw new AssertionFailedError("Red Screen encountered! See System.out for details!!!"); - } - } else if (title.contains("Error")) { - if (!bodyText.contains(knownIssuesStr)) { - throw new AssertionFailedError("Red Screen encountered! See System.out for details!!!"); - } - } else { - if (!bodyText.contains(knownIssuesStr)) { - if (bodyText.contains("An error occured")) { - throw new AssertionFailedError("Red Screen encountered! See System.out for details!!!"); - } else if (bodyText.contains("translation:::")) { - throw new AssertionFailedError("Translation Issue encountered! (translation::: found in text) See System.out for details!!!"); - } - } - } - } catch(Exception e) { - logger_.info(getLogPrefixDetails()+"waitForPageToLoad: couldn't fetch title or body. bummer. but never mind.: "+e); - } - } - - public void waitForPopUp(String windowID, String timeout) { - delegate_.waitForPopUp(windowID, timeout); - } - - public void windowFocus() { - delegate_.windowFocus(); - } - - public void windowMaximize() { - delegate_.windowMaximize(); - } - - @Override - public void addCustomRequestHeader(String arg0, String arg1) { - // TODO Auto-generated method stub - delegate_.addCustomRequestHeader(arg0, arg1); - } - - @Override - public void addScript(String arg0, String arg1) { - // TODO Auto-generated method stub - delegate_.addScript(arg0, arg1); - } - - @Override - public void captureEntirePageScreenshot(String arg0, String arg1) { - // TODO Auto-generated method stub - delegate_.captureEntirePageScreenshot(arg0, arg1); - } - - @Override - public String captureEntirePageScreenshotToString(String arg0) { - // TODO Auto-generated method stub - return delegate_.captureEntirePageScreenshotToString(arg0); - } - - @Override - public String captureNetworkTraffic(String arg0) { - // TODO Auto-generated method stub - return delegate_.captureNetworkTraffic(arg0); - } - - @Override - public String captureScreenshotToString() { - // TODO Auto-generated method stub - return delegate_.captureScreenshotToString(); - } - - @Override - public void deselectPopUp() { - // TODO Auto-generated method stub - delegate_.deselectPopUp(); - } - - @Override - public void mouseDownRight(String arg0) { - // TODO Auto-generated method stub - delegate_.mouseDownRight(arg0); - } - - @Override - public void mouseDownRightAt(String arg0, String arg1) { - // TODO Auto-generated method stub - delegate_.mouseDownRightAt(arg0, arg1); - } - - @Override - public void mouseUpRight(String arg0) { - // TODO Auto-generated method stub - delegate_.mouseUpRight(arg0); - } - - @Override - public void mouseUpRightAt(String arg0, String arg1) { - // TODO Auto-generated method stub - delegate_.mouseUpRightAt(arg0, arg1); - } - - @Override - public void removeScript(String arg0) { - // TODO Auto-generated method stub - delegate_.removeScript(arg0); - } - - @Override - public String retrieveLastRemoteControlLogs() { - // TODO Auto-generated method stub - return delegate_.retrieveLastRemoteControlLogs(); - } - - @Override - public void rollup(String arg0, String arg1) { - // TODO Auto-generated method stub - delegate_.rollup(arg0, arg1); - } - - @Override - public void selectPopUp(String arg0) { - // TODO Auto-generated method stub - delegate_.selectPopUp(arg0); - } - - @Override - public void setExtensionJs(String arg0) { - // TODO Auto-generated method stub - delegate_.setExtensionJs(arg0); - } - - @Override - public void showContextualBanner() { - // TODO Auto-generated method stub - delegate_.showContextualBanner(); - } - - @Override - public void showContextualBanner(String arg0, String arg1) { - // TODO Auto-generated method stub - delegate_.showContextualBanner(arg0, arg1); - } - - @Override - public void start(String arg0) { - // TODO Auto-generated method stub - delegate_.start(arg0); - } - - @Override - public void start(Object arg0) { - // TODO Auto-generated method stub - delegate_.start(arg0); - } - - @Override - public void useXpathLibrary(String arg0) { - // TODO Auto-generated method stub - delegate_.useXpathLibrary(arg0); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/CannotExecuteException.java b/src/test/java/org/olat/test/util/selenium/olatapi/CannotExecuteException.java deleted file mode 100644 index e86db586ee5..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/CannotExecuteException.java +++ /dev/null @@ -1,44 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi; - -/** - * CannotExecuteException is thrown if a specific operation (for instance delete learning resource) - * cannot be executed because any reason (e.g. resource cannot be deleted since there is a reference to it). - * - * @author Lavinia Dumitrescu - * - */ -public class CannotExecuteException extends RuntimeException { - - /** - * @param arg0 - */ - public CannotExecuteException(String arg0) { - super(arg0); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/OLATSeleniumWrapper.java b/src/test/java/org/olat/test/util/selenium/olatapi/OLATSeleniumWrapper.java deleted file mode 100644 index e7394bb2612..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/OLATSeleniumWrapper.java +++ /dev/null @@ -1,102 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi; - -import junit.framework.Assert; - -import com.thoughtworks.selenium.Selenium; - -/** - * Generic superclass for all OLAT abstraction layer classes. - * - * @author Lavinia Dumitrescu - * - */ -public class OLATSeleniumWrapper extends Assert { - - protected Selenium selenium; - - /** - * It is recommended to check in the subclass's constructor that we're on the right page. - * @param selenium - */ - public OLATSeleniumWrapper(Selenium selenium) { - this.selenium = selenium; - } - - /** - * Provide access to the selenium instance, for the case a finer grained stepping is needed. - * @return - */ - public Selenium getSelenium() { - return selenium; - } - - /** - * Helper method. - * Use this instead of the selenium object. - * @param text - * @return - */ - public boolean isTextPresent(String text) { - return selenium.isTextPresent(text); - } - - /** - * Helper method - * Use this instead of the selenium method - * - * Check for the Element with given locator - * @param locator The locator for the element to check for - * @return true if the element with given locator exists, false otherwise - */ - public boolean isElementPresent(String locator){ - return selenium.isElementPresent(locator); - } - - /** - * Helper method. - * Only selects the iframe and types the text, back to the top frame. - * No save, finish is called. - * @param text - */ - public void typeInRichText(String text) { - // the description shows up in an iframe - //selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.type("ui=commons::tinyMce_styledTextArea()", text); - //selenium.selectFrame("relative=top"); - } - - public void sleepThread(int mills) { - try { - Thread.sleep(mills); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/OLATWorkflowHelper.java b/src/test/java/org/olat/test/util/selenium/olatapi/OLATWorkflowHelper.java deleted file mode 100644 index 3b87d166001..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/OLATWorkflowHelper.java +++ /dev/null @@ -1,130 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi; - - -import org.olat.test.util.selenium.olatapi.admin.Administration; -import org.olat.test.util.selenium.olatapi.components.ChatComponent; -import org.olat.test.util.selenium.olatapi.group.Groups; -import org.olat.test.util.selenium.olatapi.home.Home; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.selenium.olatapi.user.UserManagement; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the entry point for the OLAT abstraction around the selenium commands. - * - * @author Lavinia Dumitrescu - * - */ -public class OLATWorkflowHelper extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public OLATWorkflowHelper(Selenium selenium) { - super(selenium); - } - - /** - * Select the Learning resources tab and return the corresponding abstraction. - * @param selenium - */ - public LearningResources getLearningResources() { - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - } - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - return new LearningResources(selenium); - } - - /** - * Selects the Groups tab and returns the corresponding abstraction. - * @return - */ - public Groups getGroups() { - selenium.click("ui=tabs::groups()"); - selenium.waitForPageToLoad("30000"); - //click show all groups, if "Show all" link present. - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - return new Groups(selenium); - } - /** - * Select the Home tab and return the corresponding abstraction. - * @param selenium - */ - public Home getHome() { - //we are on Home just after login - if(selenium.isTextPresent("Welcome to OLAT")) { - return new Home(selenium); - } - //if not already on Home, go to Home - selenium.click("ui=tabs::home()"); - selenium.waitForPageToLoad("30000"); - return new Home(selenium); - } - - public UserManagement getUserManagement() { - selenium.click("ui=tabs::userManagement()"); - selenium.waitForPageToLoad("30000"); - return new UserManagement(selenium); - } - - public Administration getAdministration() { - selenium.click("ui=tabs::administration()"); - selenium.waitForPageToLoad("30000"); - return new Administration(selenium); - } - - /*public HelpCourse getHelp() throws Exception{ - selenium.click("ui=home::topNav_olatHelp()"); - Thread.sleep(10000); - - //select window - System.out.println(" title: " + selenium.getAllWindowTitles()[0]); - System.out.println(" title: " + selenium.getAllWindowTitles()[1]); - selenium.selectWindow(selenium.getAllWindowTitles()[0]); - - Thread.sleep(10000); - return new HelpCourse(selenium); - }*/ - - - public void logout() { - selenium.click("ui=tabs::logOut()"); - selenium.waitForPageToLoad("30000"); - } - - public ChatComponent getChatComponent() { - return new ChatComponent(selenium); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/WorkflowHelper.java b/src/test/java/org/olat/test/util/selenium/olatapi/WorkflowHelper.java deleted file mode 100644 index 671b7f0c1f1..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/WorkflowHelper.java +++ /dev/null @@ -1,797 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi; - -import java.io.File; -import java.net.MalformedURLException; - -import org.olat.test.util.selenium.OlatLoginHelper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.lr.LearningResources; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.Selenium; - -/** - * This class contains helper methods used by tests in order to setup olat - * server(s) as single vm, cluster mode-single node, cluster-mode-multiple - * nodes. - * <p> - * - * @author Stefan - * - */ -public class WorkflowHelper { - - /** - * Find a file inside the seleniumtests dir. - * Returns file if any found, null otherwise. - * - * @param srcRelativeFilePath - * @return - */ - public static File locateFile(String srcRelativeFilePath) { - File f = new File("target/test-classes/" + srcRelativeFilePath); - if (f.exists()) { - return f; - } - f = new File("target/test-classes/" + Context.FILE_RESOURCES_PATH + srcRelativeFilePath); - if (f.exists()) { - return f; - } - return null; - } - - public static void deleteAllGroupsFromAuthor(OlatLoginInfos loginInfos) { - System.out.println("====================================="); - System.out.println("DELETE ALL GROUPS FROM: " + loginInfos.getUsername()); - System.out.println(" START"); - System.out.println("====================================="); - - Selenium selenium = Context.getContext().createSeleniumAndLogin(loginInfos); - selenium.click("ui=tabs::groups()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::menu_myProjectGroups()"); - selenium.waitForPageToLoad("30000"); - while(selenium.isElementPresent("ui=groups::content_deleteFirstGroup()")) { - selenium.click("ui=groups::content_deleteFirstGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - System.out.println("Yes, we deleted a group!"); - } - - System.out.println("====================================="); - System.out.println("DELETE ALL GROUPS FROM: " + loginInfos.getUsername()); - System.out.println(" END"); - System.out.println("====================================="); - } - - public static void deleteAllLearningResourcesFromAuthor(String author) { - final long maxEnd = System.currentTimeMillis() + 900*1000 /*15 min*/; - System.out.println("====================================="); - System.out.println("DELETE ALL LEARNING RESOURCES FROM: " + author); - System.out.println(" START"); - System.out.println("====================================="); - - // get the list of all learning resources of the author - Selenium selenium = Context.getContext().createSeleniumAndLogin(); - while(System.currentTimeMillis()<maxEnd) { - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Author)", author); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - - // now loop through the list until there is no learning resource left to be deleted - if (!selenium.isElementPresent("ui=learningResources::content_firstLearningResourceInTable()")) { - break; - } - selenium.click("ui=learningResources::content_firstLearningResourceInTable()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::toolbox_learningResource_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - System.out.println("YESSS, WE DELETED A RESOURCE!!! "); - final String bodyText = selenium.getBodyText(); - if (bodyText.contains("cannot be deleted")) { - // fetch 'Used in course "CourseImportTestCourse-1227697859073"' - String nameOfReferredCourse = bodyText.substring(bodyText.indexOf("Used in course")+16); - nameOfReferredCourse = nameOfReferredCourse.substring(0, nameOfReferredCourse.indexOf("\"")); - System.out.println("Cannot delete resource since referenced in: " + nameOfReferredCourse); - selenium.click("ui=dialog::OK()"); - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", nameOfReferredCourse); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Author)", author); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - if (!selenium.isElementPresent("ui=learningResources::content_firstLearningResourceInTable()")) { - //throw new AssertionError("Got an ERROR box saying that the course is referenced. Tried to delete the referred course. But can't find it. Other author?"); - System.out.println("No Referred Course found! Maybe already deleted. Course deletion takes longer since 14.01.2010"); - } else { - selenium.click("ui=learningResources::content_firstLearningResourceInTable()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::toolbox_learningResource_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - System.out.println("Referred Course deleted!"); - } - - } - } - selenium.click("ui=tabs::logOut()"); - selenium.waitForPageToLoad("30000"); - selenium.close(); - selenium.stop(); - - System.out.println("====================================="); - System.out.println("DELETE ALL LEARNING RESOURCES FROM: " + author); - System.out.println(" END"); - System.out.println("====================================="); - } - - /** - * Deletes all learning resources found with the author + resourceTitle search filter. - * @param author - * @param resourceTitle - */ - public static void deleteLearningResources(String author, String resourceTitle) { - System.out.println("====================================="); - System.out.println("DELETE LEARNING RESOURCES FROM: " + author + " WITH TITLE: " + resourceTitle); - System.out.println(" START"); - System.out.println("====================================="); - - // get the list of all learning resources of the author - Selenium selenium = Context.getContext().createSeleniumAndLogin(); - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Author)", author); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", resourceTitle); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - - // now loop through the list until there is no learning resource left to be deleted - while(selenium.isElementPresent("ui=learningResources::content_firstLearningResourceInTable()")) { - selenium.click("ui=learningResources::content_firstLearningResourceInTable()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::toolbox_learningResource_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=tabs::logOut()"); - selenium.waitForPageToLoad("30000"); - selenium.close(); - selenium.stop(); - - System.out.println("====================================="); - System.out.println("DELETE ALL LEARNING RESOURCES FROM: " + author + " WITH TITLE: " + resourceTitle); - System.out.println(" END"); - System.out.println("====================================="); - } - - - public static void deleteAllCoursesNamed(String str) { - System.out.println("====================================="); - System.out.println("DELETE ALL COURSES NAMED: " + str); - System.out.println(" START"); - System.out.println("====================================="); - Selenium selenium = Context.getContext().createSeleniumAndLogin(); - int cnt = 0; - while (true) { - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", str); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - if (!selenium.isElementPresent("ui=learningResources::content_clickLearningResource(nameOfLearningResource=" + str + ")")) { - break; - } - selenium.click("ui=learningResources::content_showDetailedView(nameOfLearningResource=" + str + ")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::toolbox_learningResource_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - cnt++; - } - selenium.close(); - selenium.stop(); - System.out.println("====================================="); - System.out.println("DELETE ALL COURSES NAMED: " + str); - System.out.println(" (deleted " + cnt + " courses)"); - System.out.println(" DONE"); - System.out.println("====================================="); - } - - public static OlatLoginInfos createUserIfNotExists( - OlatLoginInfos loginInfos, String username, String password, - boolean isSystemUser, boolean userManagementRole, - boolean groupManagementRole, boolean authorRole, - boolean systemAdminRole) throws InterruptedException { - - if (Context.getContext().getStandardAdminOlatLoginInfos(1) - .getUsername().equals(username)) { - throw new IllegalArgumentException( - "Thou shall not use an existing username! (" + username - + ")"); - } - if (Context.getContext().getStandardAuthorOlatLoginInfos(1) - .getUsername().equals(username)) { - throw new IllegalArgumentException( - "Thou shall not use an existing username! (" + username - + ")"); - } - if (Context.getContext().getStandardStudentOlatLoginInfos(1) - .getUsername().equals(username)) { - throw new IllegalArgumentException( - "Thou shall not use an existing username! (" + username - + ")"); - } - if (Context.getContext().getStandardGuestOlatLoginInfos(1) - .getUsername().equals(username)) { - throw new IllegalArgumentException( - "Thou shall not use an existing username! (" + username - + ")"); - } - - if (password.length() < 4) { - throw new IllegalArgumentException( - "password must be at least 4 characters"); - } - if (!password.matches(".*[0-9].*")) { - throw new IllegalArgumentException( - "password must contain an numerical value as well mate"); - } - if (username.matches(".*[A-Z].*")) { - throw new IllegalArgumentException( - "username must not contain CAPITAL letters!"); - } - System.out.println("connecting to " + loginInfos.getSeleniumHostname() - + "..."); - - Selenium selenium = Context.getContext().createSelenium(loginInfos); - System.out.println("connected."); - - System.out.println("Logging in to " + loginInfos.getFullOlatServerUrl() - + "..."); - OlatLoginHelper.olatLogin(selenium, loginInfos); - System.out.println("Logged in to " + loginInfos.getFullOlatServerUrl() - + "."); - - selenium.click("ui=tabs::userManagement()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", username); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - - if (selenium.isTextPresent("No user was found with these attributes.")) { - // then create the user - System.out.println("Create the user '" + username - + "', couldn't find it."); - selenium.click("ui=userManagement::menu_createUser()"); - selenium.waitForPageToLoad("30000"); - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", username); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=First name)", username); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Last name)", "GenByOlatServerSetupHelper"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=E-mail)", username + "" + System.currentTimeMillis() + "_seleniumuser@olat.uzh.ch"); - selenium.type("ui=commons::flexiForm_labeledPasswordInput(formElementLabel=Password)", password); - selenium.type("ui=commons::flexiForm_labeledPasswordInput(formElementLabel=Verify password)", password); - selenium.click("ui=userManagement::content_createUser_save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=tabs::userManagement()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", username); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - - if (selenium - .isTextPresent("No user was found with these attributes.")) { - throw new IllegalStateException("Couldnt create user " - + username); - } - // perfect! - } else { - // otherwise select the user and make sure the rights are set - // correctly - System.out.println("User '" + username + "' already exists."); - } - - // now adjust the role if necessary - selenium.click("ui=tabs::userManagement()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", username); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium - .click("ui=commons::usertable_userlist_selectUserName(nameOfUser=" - + username + ")"); - selenium.waitForPageToLoad("30000"); - - selenium.click("ui=userManagement::content_userdetail_roles()"); - selenium.waitForPageToLoad("30000"); - - if (userManagementRole != selenium - .isChecked("ui=userManagement::content_userdetail_roles_isUsermanager()")) { - if (userManagementRole) { - selenium - .check("ui=userManagement::content_userdetail_roles_isUsermanager()"); - } else { - selenium - .uncheck("ui=userManagement::content_userdetail_roles_isUsermanager()"); - } - } - if (groupManagementRole != selenium - .isChecked("ui=userManagement::content_userdetail_roles_isGroupmanager()")) { - if (groupManagementRole) { - selenium - .check("ui=userManagement::content_userdetail_roles_isGroupmanager()"); - } else { - selenium - .uncheck("ui=userManagement::content_userdetail_roles_isGroupmanager()"); - } - } - if (authorRole != selenium - .isChecked("ui=userManagement::content_userdetail_roles_isAuthor()")) { - if (authorRole) { - selenium - .check("ui=userManagement::content_userdetail_roles_isAuthor()"); - } else { - selenium - .uncheck("ui=userManagement::content_userdetail_roles_isAuthor()"); - } - } - if (systemAdminRole != selenium - .isChecked("ui=userManagement::content_userdetail_roles_isAdmin()")) { - if (systemAdminRole) { - selenium - .check("ui=userManagement::content_userdetail_roles_isAdmin()"); - } else { - selenium - .uncheck("ui=userManagement::content_userdetail_roles_isAdmin()"); - } - } - - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - selenium.close(); - selenium.stop(); - - try { - return new OlatLoginInfos(loginInfos.getSeleniumHostname(), - loginInfos.getSeleniumBrowserId(), loginInfos - .getFullOlatServerUrl(), username, password); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - - } - - /** - * 1. Imports course if not already imported 2. Modifies access - change - * course access to "All registered OLAT users" 3. Publishes course - * - * @param zippedCourse - * @param newTitleOfCourse - * @param newDescriptionOfCourse - * @throws InterruptedException - */ - public static void importCourse(File zippedCourse, String newTitleOfCourse, - String newDescriptionOfCourse) throws InterruptedException { - // check if course with newTitleOfCourse exists - boolean checkIfExists = false; - Selenium selenium_0 = Context.getContext().createSeleniumAndLogin(); - selenium_0.click("ui=tabs::learningResources()"); - selenium_0.waitForPageToLoad("30000"); - selenium_0.click("ui=learningResources::menu_searchForm()"); - selenium_0.waitForPageToLoad("30000"); - selenium_0.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", newTitleOfCourse); - selenium_0.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium_0.waitForPageToLoad("30000"); - checkIfExists = (selenium_0.isTextPresent(newTitleOfCourse)); - selenium_0.close(); - selenium_0.stop(); - if (checkIfExists) { - System.out.println("Course with title " + newTitleOfCourse - + " already exists, no need to import it!"); - return; - } - - String remoteFile = Context.getContext().provideFileRemotely(zippedCourse); - - System.out.println("==================="); - System.out.println("Course Import Start"); - System.out.println(" Course: " + newTitleOfCourse); - System.out.println(" File: " + zippedCourse.getAbsolutePath()); - System.out.println(" Remote: " + remoteFile); - System.out.println("==================="); - - Selenium selenium = Context.getContext().createSeleniumAndLogin(); - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::toolbox_import_course()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::courseImport_uploadFile()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=upload::fileChooser()",remoteFile); - selenium.click("ui=upload::submit()"); - selenium.waitForPageToLoad("60000"); - - while (!selenium.isElementPresent("ui=learningResources::dialog_title()")) { - for (int second = 0;; second++) { - if (second >= 120) - break; - try { - if (selenium - .isTextPresent("How do you wish to proceed?")) - break; - } catch (Exception e) { - } - Thread.sleep(500); - } - Thread.sleep(2000); - selenium.click("ui=learningResources::courseImport_importReferencesImport()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::courseImport_importReferencesContinue()"); - selenium.waitForPageToLoad("30000"); - } - // until the import is done - selenium.type("ui=learningResources::dialog_title()", newTitleOfCourse); - //the description shows up in an iframe - //selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.click("ui=learningResources::dialog_description()"); - selenium.type("ui=learningResources::dialog_description()", newDescriptionOfCourse); - //selenium.selectFrame("relative=top"); - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("60000"); - Thread.sleep(5000); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::dialog_startNo()"); - //selenium.waitForPageToLoad("30000"); - - selenium.click("ui=tabs::home()"); - selenium.waitForPageToLoad("30000"); - selenium.close(); - selenium.stop(); - System.out.println("================="); - System.out.println("Course Import End"); - System.out.println("================="); - - // modify property - change course access to "All registered OLAT users" - Selenium selenium_1 = Context.getContext().createSeleniumAndLogin(); - selenium_1.click("ui=tabs::learningResources()"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.click("ui=learningResources::menu_searchForm()"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", newTitleOfCourse); - selenium_1.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.click("ui=learningResources::content_showDetailedView(nameOfLearningResource=" + newTitleOfCourse + ")"); - selenium_1.waitForPageToLoad("30000"); - selenium_1 - .click("ui=learningResources::toolbox_learningResource_modifyProperties()"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.click("ui=learningResourcesModifieProperties::accessAllRegistered()"); - selenium_1.click("ui=commons::flexiForm_saveButton()"); - selenium_1.waitForPageToLoad("30000"); - - //select evidence of achievement and enable it if not already enabled - selenium_1.click("ui=learningResourcesModifieProperties::evidenceOfAchievement()"); - selenium_1.waitForPageToLoad("30000"); - boolean isEfficiencyStatementEnabled = selenium_1.isChecked("ui=learningResourcesModifieProperties::evidenceOfAchievementEnabled()"); - if(!isEfficiencyStatementEnabled) { - selenium_1.click("ui=learningResourcesModifieProperties::evidenceOfAchievementEnabled()"); - selenium_1.click("ui=commons::flexiForm_saveButton()"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.click("ui=learningResources::dialog_yes()"); - selenium_1.waitForPageToLoad("30000"); - } - - selenium_1.click("ui=overlay::overlayClose()"); - selenium_1.waitForPageToLoad("30000"); - //new step in modify properties - selenium_1.click("ui=learningResources::dialog_yes()"); - selenium_1.waitForPageToLoad("30000"); - - // publish course - selenium_1.click("ui=learningResources::content_showContent()"); - Thread.sleep(3000); - selenium_1.waitForPageToLoad("60000"); - selenium_1.click("ui=course::toolbox_courseTools_courseEditor()"); - Thread.sleep(1000); - selenium_1.waitForPageToLoad("30000"); - selenium_1.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.click("ui=courseEditor::publishDialog_selectall()"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.click("ui=courseEditor::publishDialog_next()"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.click("ui=courseEditor::publishDialog_finish()"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.click("ui=courseEditor::toolbox_editorTools_closeEditor()"); - selenium_1.waitForPageToLoad("30000"); - selenium_1.close(); - selenium_1.stop(); - } - - /** - * Administrator adds user with username as owner of the course with - * courseName. - * - * @param username - * @param courseName - * @throws Exception - */ - public static void addOwnerToLearningResource(String username, String courseName) throws Exception { - Selenium selenium = Context.getContext().createSeleniumAndLogin( - Context.getContext().getStandardAdminOlatLoginInfos(1)); - - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", courseName); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::content_showDetailedView(nameOfLearningResource=" + courseName + ")"); - selenium.waitForPageToLoad("30000"); - selenium - .click("ui=learningResources::toolbox_learningResource_assignOwners()"); - selenium.waitForPageToLoad("30000"); - selenium - .click("ui=learningResources::toolbox_learningResource_assignOwners_addOwner()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", username); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium - .click("ui=commons::usertable_adduser_checkUsername(nameOfUser=" - + username + ")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.click("ui=overlay::overlayClose()"); - selenium.click("ui=tabs::logOut()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * admnistrator adds user as tutor of the group - * - */ - public static void addTutorToGroup(String tutorUsername, String courseName, - String groupName) { - Selenium selenium = Context.getContext().createSeleniumAndLogin( - Context.getContext().getStandardAdminOlatLoginInfos(1)); - - openCourseAfterLogin(selenium, courseName); - selenium.click("ui=course::toolbox_courseTools_groupManagement()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groupManagement::menu_allLearningGroups()"); - selenium.waitForPageToLoad("30000"); - selenium - .click("ui=groupManagement::content_learningGroupTable_selectGroup(nameOfGroup=" - + groupName + ")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=group::menu_administration()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=group::content_members_tabMembers()"); - selenium.waitForPageToLoad("30000"); - selenium - .click("ui=groupManagement::content_learningGroupsEditor_addMembers_addTutor()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", tutorUsername); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium - .click("ui=groupManagement::content_learningGroupsEditor_addMembers_checkUser(username=" - + tutorUsername + ")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - //per default is "Send e-mail" not checked - //selenium.check("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + Send e-mail + ")"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.click("ui=tabs::logOut()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Enter "assessmentTool" course. - * - * @param selenium_ - */ - public static void openCourseAfterLogin(Selenium selenium_, String courseName) { - selenium_.click("ui=tabs::learningResources()"); - selenium_.waitForPageToLoad("30000"); - selenium_.click("ui=learningResources::menu_searchForm()"); - selenium_.waitForPageToLoad("30000"); - selenium_.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", courseName); - selenium_.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium_.waitForPageToLoad("30000"); - selenium_.click("ui=learningResources::content_clickLearningResource(nameOfLearningResource=" + courseName + ")"); - selenium_.waitForPageToLoad("30000"); - } - - /** - * Delete evidence of achievement for any course containing courseName and user. - * @param courseName - * @param userName - */ - public static void deleteEvidencesOfAchievement(String courseName, OlatLoginInfos olatLoginInfos) { - System.out.println("OlatServerSetupHelper - START deleteEvidenceOfAchievement"); - OLATWorkflowHelper workflow = Context.getContext().getOLATWorkflowHelper(olatLoginInfos); - workflow.getHome().getEvidencesOfAchievement().deleteAll(courseName); - System.out.println("OlatServerSetupHelper - END deleteEvidenceOfAchievement"); - } - - /** - * Helper method. - * Makes a copy of the course courseName, with the given name, and publishes as public visible. - * @param context - * @param courseName - * @param cloneCourseName - * @return returns true if course was successfully cloned. - */ - public static boolean cloneCourse(Context context, String courseName, String cloneCourseName) { - OLATWorkflowHelper workflow = context.getOLATWorkflowHelper(context.getStandardAdminOlatLoginInfos(1)); - LRDetailedView lRDetailedView = workflow.getLearningResources().searchResource(courseName, null); - LearningResources learningResources = lRDetailedView.copyLR(cloneCourseName, cloneCourseName + " description"); - LRDetailedView clonedLRDetailedView = learningResources.searchMyResource(cloneCourseName); - CourseEditor courseEditor = clonedLRDetailedView.showCourseContent().getCourseEditor(); - courseEditor.publishCourse(); - //close course editor to release the lock - courseEditor.closeToCourseRun().close(cloneCourseName); - return true; - } - - /*public static void deleteAllFromMyEntriesStartingWith(OlatLoginInfos loginInfos, String str) { - System.out.println("====================================="); - System.out.println("DELETE ALL FROM MYENTRIES STARTING WITH: " + str + " for user "+loginInfos.getUsername()); - System.out.println(" START"); - System.out.println("====================================="); - Selenium selenium = Context.getContext().createSeleniumAndLogin(loginInfos); - int cnt = 0; - boolean all = false; - while (true) { - System.out.println("COUNTER: "+cnt); - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_myEntries()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=learningResources::content_searchInTableField()", str); - try{ - System.out.println("Waiting 1 sec..."); - Thread.sleep(1000); - } catch(InterruptedException ie) { - ie.printStackTrace(System.out); - } - selenium.submit("ui=learningResources::content_searchInTableForm()"); - selenium.waitForPageToLoad("30000"); - - - // now loop through the list until there is no learning resource left to be deleted - if (!selenium.isElementPresent("ui=learningResources::content_firstLearningResourceInTable()")) { - all = true; - break; - } - selenium.click("ui=learningResources::content_firstLearningResourceInTable()"); - selenium.waitForPageToLoad("30000"); - String resourceTitle = selenium.getText("//div[span/a/span/text()='Back']//h4"); - System.out.println("Resource title: "+resourceTitle); - if (!resourceTitle.startsWith(str)) { - throw new IllegalStateException("resource title not what we were looking for: "+resourceTitle+". search str: "+str); - } - selenium.click("ui=learningResources::toolbox_learningResource_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - final String bodyText = selenium.getBodyText(); - if (bodyText.contains("cannot be deleted")) { - System.out.println("DELETION FAILED FOR SOME REASON... GIVING UP"); - System.out.println(bodyText); - break; - } else if (bodyText.contains("Entry deleted.")){ - System.out.println("YESSS, WE DELETED A RESOURCE!!! "); - cnt++; - continue; - } else { - System.out.println("COULDNT FIGURE OUT WHETHER DELETION WAS SUCCESSFUL OR NOT, GIVING UP..."); - System.out.println(bodyText); - break; - } - } - selenium.close(); - selenium.stop(); - System.out.println("====================================="); - System.out.println("DELETE ALL FROM MYENTRIES STARTING WITH: " + str); - System.out.println(" (deleted " + cnt + " entries, all="+all+")"); - System.out.println(" DONE"); - System.out.println("====================================="); - -} - -public static void deleteAllCoursesStartingWith(String str) { - System.out.println("====================================="); - System.out.println("DELETE ALL COURSES STARTING WITH: " + str); - System.out.println(" START"); - System.out.println("====================================="); - Selenium selenium = Context.getContext().createSeleniumAndLogin(); - int cnt = 0; - boolean all = false; - while (true) { - System.out.println("COUNTER: "+cnt); - selenium.click("ui=tabs::learningResources()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=learningResources::content_searchForm_titleField()",str); - selenium.click("ui=learningResources::content_searchForm_search()"); - selenium.waitForPageToLoad("30000"); - - - // now loop through the list until there is no learning resource left to be deleted - if (!selenium.isElementPresent("ui=learningResources::content_firstLearningResourceInTable()")) { - all = true; - break; - } - selenium.click("ui=learningResources::content_firstLearningResourceInTable()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::toolbox_learningResource_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - final String bodyText = selenium.getBodyText(); - if (bodyText.contains("cannot be deleted")) { - System.out.println("DELETION FAILED FOR SOME REASON... GIVING UP"); - break; - } else if (bodyText.contains("Entry deleted.")){ - System.out.println("YESSS, WE DELETED A RESOURCE!!! "); - cnt++; - continue; - } else { - System.out.println("COULDNT FIGURE OUT WHETHER DELETION WAS SUCCESSFUL OR NOT, GIVING UP..."); - System.out.println(bodyText); - break; - } - } - selenium.close(); - selenium.stop(); - System.out.println("====================================="); - System.out.println("DELETE ALL COURSES STARTING WITH: " + str); - System.out.println(" (deleted " + cnt + " courses, all="+all+")"); - System.out.println(" DONE"); - System.out.println("====================================="); -}*/ - - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/admin/Administration.java b/src/test/java/org/olat/test/util/selenium/olatapi/admin/Administration.java deleted file mode 100644 index 98d47718861..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/admin/Administration.java +++ /dev/null @@ -1,54 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.admin; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -public class Administration extends OLATSeleniumWrapper { - - public Administration(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - public void editInfoMessage(String messageText) { - if(selenium.isElementPresent("ui=systemInformation::infoMsgTab()")) { - selenium.click("ui=systemInformation::infoMsgTab()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=systemInformation::infoMsgEditButton()"); - selenium.waitForPageToLoad("30000"); - - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Message)", messageText); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - public boolean hasInfoMessage(String message) { - if(selenium.isElementPresent("ui=systemInformation::infoMsgTab()")) { - selenium.click("ui=systemInformation::infoMsgTab()"); - selenium.waitForPageToLoad("30000"); - } - return selenium.isTextPresent(message); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/components/ChatComponent.java b/src/test/java/org/olat/test/util/selenium/olatapi/components/ChatComponent.java deleted file mode 100644 index a1dba7dcf4e..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/components/ChatComponent.java +++ /dev/null @@ -1,205 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.components; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * Utility class for the chat functionality. - * - * @author lavinia - * - */ -public class ChatComponent extends OLATSeleniumWrapper { - - public ChatComponent(Selenium selenium) { - super(selenium); - //TODO: check that Chat is configured for the tested instance - } - - /** COURSE CHAT */ - /** - * This is available in course. - */ - public void openChat(boolean showUser) { - selenium.mouseMoveAt("ui=courseChat::openCourseChat()", "300,300"); - selenium.click("ui=courseChat::openCourseChat()"); - selenium.waitForPageToLoad("90000"); - - sleepThread(6000); - - if(!selenium.isElementPresent("ui=courseChat::withinCourseChat()")) { - sleepThread(6000); - } - selenium.click("ui=courseChat::withinCourseChat()"); - selenium.waitForPageToLoad("30000"); - - if(showUser) { - toggleAnonymous(); - } - } - - public boolean isCourseChatAvailable() { - return selenium.isElementPresent("ui=courseChat::openCourseChat()"); - } - - - - /** - * COURSE CHAT. <br/> - * Toggle anonymous checkbox: show/hide username. - */ - public void toggleAnonymous() { - selenium.click("ui=courseChat::toggleAnonymous()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Works for any chat window: course/group/buddy. <br/> - * This should be called only after calling <code>openChat</code> or <code>openProjectGroupChat</code>. - * @param msg - */ - public void sendMessage(String msg, String chatroomLabel) { - selenium.type("ui=courseChat::labeledSendMsgInputField(label=" + chatroomLabel + ")", msg); - selenium.click("ui=courseChat::labeledSendMsgButton(label=" + chatroomLabel + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Works for any chat window: course/group/buddy, provided there is only one chat window open, - * else use the method with chatroomLabel parameter. <br/> - * This should be called only after calling <code>openChat</code> or <code>openProjectGroupChat</code>. - * @param msg - */ - public void sendMessage(String msg) { - selenium.type("ui=courseChat::sendMsgInputField()", msg); - selenium.click("ui=courseChat::sendMsgButton()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * BUDDY CHAT - */ - - /** - * BUDDY CHAT. <br/> - * clicks on the green star in upper right corner. - */ - public void openStatusChanger() { - selenium.click("ui=buddiesChat::openStatusChanger()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Works for any chat window: course/group/buddy. <br/> - * Closes the labeled chat window. - */ - public void closeExtWindow(String chatroomLabel) { - selenium.click("ui=buddiesChat::closeLabeledExtWindow(label=" + chatroomLabel + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Works for any chat window: course/group/buddy. <br/> - * Closes any chat window. - */ - public void closeExtWindow() { - selenium.click("ui=buddiesChat::closeExtWindow()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Open the buddies chat, this is available upon login in the upper right corner. - * @param fullname - */ - public void openBuddyChat(String fullname) { - selenium.click("ui=buddiesChat::showOnlineBuddies()"); - sleepThread(3000); - selenium.click("ui=buddiesChat::onlineBuddy(fullName=" + fullname + ")"); - selenium.waitForPageToLoad("30000"); - } - /** - * FIXME: how to switch to the new opened window? - * @param username - - public void openBuddyChat(String username) { - selenium.click("ui=buddiesChat::openOnlineUserList()"); - //selenium.waitForPageToLoad("90000"); - sleepThread(3000); - //selenium.selectWindow(selenium.getAllWindowTitles()[1]); - - selenium.selectWindow(selenium.getAllWindowTitles()[2]); - selenium.windowFocus(); - assertTrue(selenium.isTextPresent("List")); - }*/ - - /** - * This should be called only after calling <code>openBuddyChat</code>. - */ - public void sendBuddyMessage(String msg) { - selenium.type("ui=buddiesChat::sendMsgInputField()", msg); - selenium.click("ui=buddiesChat::sendMsgButton()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * This is available upon selection of a chat menu of a project group. - */ - public void openProjectGoupChat() { - selenium.click("ui=projectGroupChat::enterChatroom()"); - selenium.waitForPageToLoad("90000"); - - sleepThread(5000); - } - - /** - * Works for any chat window: course/group/buddy. <br/> - * Check if this chat window is still open. - * @param chatroomLabel - * @return - */ - public boolean isOpen(String chatroomLabel) { - return selenium.isElementPresent("ui=courseChat::labeledSendMsgInputField(label=" + chatroomLabel + ")"); - } - - /** - * BUDDY CHAT - * Is the green star in upper right corner available. - * @return - */ - public boolean isOpenStatusChangerAvailable() { - return selenium.isElementPresent("ui=buddiesChat::openStatusChanger()"); - } - - /** - * Works for any chat window: course/group/buddy. <br/> - * Check if a participant with this name is available for a chat window with this label. - * @param participantName - * @param chatroomLabel - * @return - */ - public boolean hasParticipant(String participantName, String chatroomLabel) { - //return selenium.isElementPresent("ui=courseChat::participant(participantName=" + participantName + ", chatroomLabel=" + chatroomLabel + ")"); - return selenium.isElementPresent("ui=courseChat::participant(participantName=" + participantName + ")"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/components/UserTableComponent.java b/src/test/java/org/olat/test/util/selenium/olatapi/components/UserTableComponent.java deleted file mode 100644 index 01c1ff554c2..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/components/UserTableComponent.java +++ /dev/null @@ -1,64 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.components; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This a page component representing a user table. - * - * @author lavinia - * - */ -public class UserTableComponent extends OLATSeleniumWrapper { - - public UserTableComponent(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - /** - * This assumes that "Add users" button was pressed, just before. - */ - public void chooseUser(String userName) { - //fill in username info in the search mask - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", userName); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - this.sleepThread(5000); - if(selenium.isElementPresent("ui=commons::usertable_adduser_checkUsername(nameOfUser=" + userName + ")")) { - selenium.click("ui=commons::usertable_adduser_checkUsername(nameOfUser=" + userName + ")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - } else { - System.out.println("bummer! no such user found!"); - throw new IllegalStateException("No such user found!"); - } - } - - public void removeUser() { - - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/AssessmentEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/AssessmentEditor.java deleted file mode 100644 index d20cee48e03..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/AssessmentEditor.java +++ /dev/null @@ -1,88 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Assessment Course Element page. - * @author Lavinia Dumitrescu - * - */ -public class AssessmentEditor extends CourseElementEditor { - - /** - * @param selenium - */ - public AssessmentEditor(Selenium selenium) { - super(selenium); - - // Check that we're on the right place - if(!selenium.isElementPresent("ui=courseEditor::content_bbAssessment_tabAssessment()")) { - throw new IllegalStateException("This is not the - Assessment course element - page"); - } - } - - /** - * By default the scoreGranted is "No" for a new AssessmentCourseElement. - * @param scoreGranted - * @param minScore - * @param maxScore - * @param typeOfDisplayAuto - * @param passedCutValue - */ - public void configure(Boolean scoreGranted, int minScore, int maxScore, Boolean typeOfDisplayAuto, int passedCutValue) { - if(selenium.isElementPresent("ui=courseEditor::content_bbAssessment_tabAssessment()")) { - selenium.click("ui=courseEditor::content_bbAssessment_tabAssessment()"); - selenium.waitForPageToLoad("30000"); - } - if(scoreGranted!=null && scoreGranted) { - if(selenium.isElementPresent("ui=courseEditor::content_assessmentElemConfig_scoreGranted()") && !selenium.isChecked("ui=courseEditor::content_assessmentElemConfig_scoreGranted()")) { - selenium.click("ui=courseEditor::content_assessmentElemConfig_scoreGranted()"); - } - selenium.waitForPageToLoad("30000"); - selenium.type("ui=courseEditor::content_assessmentElemConfig_minimumScore()", String.valueOf(minScore)); - selenium.type("ui=courseEditor::content_assessmentElemConfig_maximumScore()", String.valueOf(maxScore)); - if(typeOfDisplayAuto!=null && typeOfDisplayAuto) { - //selenium.check("ui=courseEditor::content_assessmentElemConfig_passedTypeAuto()"); //WARNING: check DOES NOT WORK!!! - selenium.click("ui=courseEditor::content_assessmentElemConfig_passedTypeAuto()"); - sleepThread(3000); - if(selenium.isElementPresent("ui=courseEditor::content_assessmentElemConfig_passedCutValue()")) { - selenium.type("ui=courseEditor::content_assessmentElemConfig_passedCutValue()", String.valueOf(passedCutValue)); - System.out.println("passedCutValue setted"); - } else if(selenium.isElementPresent("ui=courseEditor::content_assessmentElemConfig_passedCutValueErr()")) { - selenium.type("ui=courseEditor::content_assessmentElemConfig_passedCutValueErr()", String.valueOf(passedCutValue)); - System.out.println("passedCutValue setted"); - } - } - } else { - //default "No" - } - sleepThread(3000); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/BlogEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/BlogEditor.java deleted file mode 100644 index 1739fd8fcae..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/BlogEditor.java +++ /dev/null @@ -1,134 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - - -import org.olat.test.util.selenium.olatapi.lr.BlogResource; - -import com.thoughtworks.selenium.Selenium; - -/** - * Blog element configuration page in course editor. - * @author Sandra Arnold - * - */ -public class BlogEditor extends CourseElementEditor { - - //identifies the blogResource (e.g. for closing) - private String blogTitle; - - /** - * @param selenium - */ - public BlogEditor(Selenium selenium, String title) { - super(selenium); - blogTitle = title; - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=courseEditor::content_bbBlog_tabBlogLearningContent()")) { - throw new IllegalStateException("This is not the - Blog Learning Content - page"); - } - } - - /** - * Select, import, create, replace, edit blog - * - * @param testTitle - */ - public void select(String blogTitle_) { - if(selenium.isElementPresent("ui=courseEditor::content_bbBlog_tabBlogLearningContent()")) { - selenium.click("ui=courseEditor::content_bbBlog_tabBlogLearningContent()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbBlog_selectCreateImportBlog()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_myEntries()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_chooseBlog(nameOfBlog=" + blogTitle_ + ")"); - selenium.waitForPageToLoad("30000"); - blogTitle = blogTitle_; - } - - /** - * Creates new blog. - * @param blogTitle - * @param blogDescription - */ - public void create(String blogTitle, String blogDescription) { - if(selenium.isElementPresent("ui=courseEditor::content_bbBlog_tabBlogLearningContent()")) { - selenium.click("ui=courseEditor::content_bbBlog_tabBlogLearningContent()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbBlog_selectCreateImportBlog()"); - selenium.waitForPageToLoad("30000"); - // TODO click "create", enter blogTitle and blogDescription, save, next, return to course editor, not clear where xpaths should be added - selenium.click("ui=courseEditor::content_bbBlog_create()"); - selenium.waitForPageToLoad("30000"); - - selenium.click("ui=learningResources::dialog_title()"); - selenium.type("ui=learningResources::dialog_title()", blogTitle); - - //SR: - //selenium.setSpeed("1000"); - - selenium.click("ui=learningResources::dialog_description()"); - selenium.type("ui=learningResources::dialog_description()", blogDescription); - - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("60000"); - } - - public void replace(String newBlogTitle) { - if(selenium.isElementPresent("ui=courseEditor::content_bbBlog_tabBlogLearningContent()")) { - selenium.click("ui=courseEditor::content_bbBlog_tabBlogLearningContent()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbBlog_replaceBlog()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_myEntries()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_chooseBlog(nameOfBlog=" + newBlogTitle + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * blog opens in new tab - * @return - */ - public BlogResource edit() { - if(selenium.isElementPresent("ui=courseEditor::content_bbBlog_tabBlogLearningContent()")) { - selenium.click("ui=courseEditor::content_bbBlog_tabBlogLearningContent()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbBlog_editBlog()"); - selenium.waitForPageToLoad("30000"); - - return new BlogResource(selenium, blogTitle); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CPEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CPEditor.java deleted file mode 100644 index 60d0684acc8..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CPEditor.java +++ /dev/null @@ -1,43 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import com.thoughtworks.selenium.Selenium; - -public class CPEditor extends CourseElementEditor { - - public CPEditor(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - public void select(String title) { - if(selenium.isElementPresent("ui=courseEditor::content_bbCP_tabLearningContentCP()")) { - selenium.click("ui=courseEditor::content_bbCP_tabLearningContentCP()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbCP_selectCreateImportCP()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_myEntries()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_chooseCP(name=" + title + ")"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CourseEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CourseEditor.java deleted file mode 100644 index 01c3addca92..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CourseEditor.java +++ /dev/null @@ -1,608 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.selenium.olatapi.i18n.LocalStringProvider; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; - -import com.thoughtworks.selenium.Selenium; - -/** - * OLAT abstraction for the CourseEditor. - * One can get a CourseEditor instance either via the CourseRun, via the LRDetailedView, - * or via LearningResources createCourseAndStartEditing. - * <p> - * @author Lavinia Dumitrescu - * - */ -public class CourseEditor extends OLATSeleniumWrapper { - - //default titles for the course elements - public static final String STRUCTURE_TITLE = "Structure"; - public static final String SINGLE_PAGE_TITLE = "Single page"; - public static final String EXTERNAL_PAGE_TITLE = "External page"; - public static final String CP_LEARNING_CONTENT_TITLE = "CP learning content"; - public static final String SCORM_LEARNING_CONTENT_TITLE = "SCORM learning content"; - public static final String FORUM_COURSE_ELEM_TITLE = "Forum"; - public static final String WIKI_TITLE = "Wiki"; - public static final String FILE_DIALOG_TITLE = "File dialog"; - public static final String FOLDER_TITLE = "Folder"; - public static final String ASSESSMENT_TITLE = "Assessment"; - public static final String TASK_TITLE = "Task"; - public static final String TEST_TITLE = "Test"; - public static final String SELF_TEST_TITLE = "Self-test"; - public static final String QUESTIONNAIRE_TITLE = "Questionnaire"; - public static final String ENROLMENT_TITLE = "Enrolment"; - public static final String CONTACT_FORM_TITLE = "E-mail"; - public static final String BLOG_TITLE = "Blog"; - public static final String PODCAST_TITLE = "Podcast"; - public static final String TOPIC_ASSIGNMENT_TITLE = "Topic assignment"; - public static final String CALENDAR_TITLE = "Calendar"; - public static final String LTI_TITLE = "LTI page"; - - - //ALL VALID COURSE ELEMENT TYPES - public enum CourseElemTypes {STRUCTURE, SINGLE_PAGE, EXTERNAL_PAGE, CP_LEARNING_CONTENT, SCORM_LEARNING_CONTENT, - FORUM, WIKI, FILE_DIALOG, FOLDER, ASSESSMENT, TASK, TEST, SELF_TEST, QUESTIONNAIRE, ENROLMENT, CONTACT_FORM, BLOG, PODCAST, TOPIC_ASSIGNMENT, CALENDAR, - LTI_PAGE, INFO_MESSAGE} - - //ALL SUPPORTED INSERT TYPES - public enum InsertPosition {FIRST_CHILD_OF_ROOT, LAST_CHILD_OF_ROOT, FIRST_CHILD_OF_ELEMENT, FOLLOWING_SIBLING_OF_ELEMENT} - - private String currentElementTitle; - - /** - * - * @param selenium - */ - public CourseEditor(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - //if(!selenium.isTextPresent("Close editor")) { - if(!selenium.isElementPresent("ui=courseEditor::toolbox_editorTools_closeEditor()")) { - //sleep and check again later - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - } - if(!selenium.isElementPresent("ui=courseEditor::toolbox_editorTools_closeEditor()")) { - throw new IllegalStateException("This is not the - Course editor - page"); - } - } - } - - - /** - * Insert a course element of the given type, with the newTitle if any provided (newTitle!=null). - * If newTitle==null the element gets the default title. - * @param elementType - * @param asFirstChildOfRoot, if true as first child, else as last child - * @param newTitle - * @return Returns an instance of the CourseElementEditor by default, - * or an EnrolmentEditor if an enrolment element was selected, - * or an TestElementEditor, - * SelfTestElementEditor, - * FolderEditor, - * SinglePageEditor, - * AssessmentEditor. - */ - public CourseElementEditor insertCourseElement(CourseElemTypes elementType, boolean asFirstChildOfRoot, String newTitle) { - clickInsertElement(elementType); - - if(asFirstChildOfRoot) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()"); - } else { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsLastChild()"); - } - selenium.click("ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()"); - selenium.waitForPageToLoad("30000"); - if(newTitle!=null) { - selenium.type("ui=courseEditor::content_TitleDescription_shortTitle()", newTitle); - selenium.click("ui=courseEditor::content_TitleDescription_save()"); - selenium.waitForPageToLoad("30000"); - } - - return returnCourseElement(elementType); - } - - /** - * Inserts a course element of the given type, in the given position (one of the possible InsertType) relative to the element with elementTitle. - * If newTitle==null the element gets the default title. <p> - * elementTitle must not be null if the insertType is InsertType.FIRST_CHILD_OF_ELEMENT or InsertType.FOLLOWING_SIBLING_OF_ELEMENT. - * <p> - * @param elementType - * @param insertType - * @param elementTitle - * @param newTitle - * @return - */ - public CourseElementEditor insertCourseElement(CourseElemTypes elementType, InsertPosition insertType, String elementTitle, String newTitle) { - clickInsertElement(elementType); - - if(InsertPosition.FIRST_CHILD_OF_ROOT.equals(insertType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()"); - } else if(InsertPosition.LAST_CHILD_OF_ROOT.equals(insertType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsLastChild()"); - } else if(InsertPosition.FIRST_CHILD_OF_ELEMENT.equals(insertType) && elementTitle!=null && !elementTitle.equals("")) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsElementsFirstChild(title=" + elementTitle + ")"); - } else if(InsertPosition.FOLLOWING_SIBLING_OF_ELEMENT.equals(insertType) && elementTitle!=null && !elementTitle.equals("")) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsElementsFollowingSibling(title=" + elementTitle + ")"); - } else { - throw new IllegalStateException("InsertType or elementTitle are not acceptable!"); - } - - selenium.click("ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()"); - selenium.waitForPageToLoad("30000"); - if(newTitle!=null) { - selenium.type("ui=courseEditor::content_TitleDescription_shortTitle()", newTitle); - selenium.click("ui=courseEditor::content_TitleDescription_save()"); - selenium.waitForPageToLoad("30000"); - } - - return returnCourseElement(elementType); - } - - private void clickInsertElement(CourseElemTypes elementType) { - if(CourseElemTypes.STRUCTURE.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertStructure()"); - } else if(CourseElemTypes.SINGLE_PAGE.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertSinglePage()"); - } else if(CourseElemTypes.EXTERNAL_PAGE.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertExternalPage()"); - } else if(CourseElemTypes.CP_LEARNING_CONTENT.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertCP()"); - } else if(CourseElemTypes.SCORM_LEARNING_CONTENT.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertSCORM()"); - } else if(CourseElemTypes.FORUM.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertForum()"); - } else if(CourseElemTypes.WIKI.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertWiki()"); - } else if(CourseElemTypes.FILE_DIALOG.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertFileDialog()"); - } else if(CourseElemTypes.FOLDER.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertFolder()"); - } else if(CourseElemTypes.ASSESSMENT.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAssessment()"); - } else if(CourseElemTypes.TASK.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertTask()"); - } else if(CourseElemTypes.TEST.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertTest()"); - } else if (CourseElemTypes.SELF_TEST.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertSelfTest()"); - } else if(CourseElemTypes.QUESTIONNAIRE.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertQuestionnaire()"); - } else if(CourseElemTypes.ENROLMENT.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertEnrolment()"); - } else if(CourseElemTypes.CONTACT_FORM.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertContactForm()"); - } else if(CourseElemTypes.BLOG.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertBlog()"); - } else if(CourseElemTypes.PODCAST.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertPodcast()"); - } else if(CourseElemTypes.TOPIC_ASSIGNMENT.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertTopicAssignment()"); - } else if(CourseElemTypes.CALENDAR.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertCalendar()"); - } else if(CourseElemTypes.LTI_PAGE.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertLTIPage()"); - } else if(CourseElemTypes.INFO_MESSAGE.equals(elementType)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertInfoMessagePage()"); - } - selenium.waitForPageToLoad("60000"); - } - - private CourseElementEditor returnCourseElement(CourseElemTypes elementType) { - //check the inserted element type to decide the return type - if(CourseElemTypes.ENROLMENT.equals(elementType)) { - return new EnrolmentEditor(selenium); - } else if(CourseElemTypes.TEST.equals(elementType)) { - return new TestElementEditor(selenium); - } else if (CourseElemTypes.SELF_TEST.equals(elementType)) { - return new SelfTestElementEditor(selenium); - } else if(CourseElemTypes.FOLDER.equals(elementType)) { - return new FolderEditor(selenium); - } else if(CourseElemTypes.SINGLE_PAGE.equals(elementType)) { - return new SinglePageEditor(selenium); - } else if(CourseElemTypes.ASSESSMENT.equals(elementType)) { - return new AssessmentEditor(selenium); - } else if(CourseElemTypes.QUESTIONNAIRE.equals(elementType)) { - return new QuestionnaireElementEditor(selenium);// - } else if(CourseElemTypes.BLOG.equals(elementType)) { - return new BlogEditor(selenium, currentElementTitle); - } else if(CourseElemTypes.PODCAST.equals(elementType)) { - return new PodcastEditor(selenium, currentElementTitle); - } else if (CourseElemTypes.TOPIC_ASSIGNMENT.equals(elementType)) { - return new TopicAssignmentEditor(selenium); - } else if (CourseElemTypes.LTI_PAGE.equals(elementType)) { - return new LTIPageEditor(selenium); - } - return new CourseElementEditor(selenium); - } - - /** - * Deteles the current selected course element. - * @param elementTitle - */ - public void deleteCourseElement() { - selenium.click("ui=courseEditor::toolbox_modifyTools_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=dialog::Yes()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Restore the deleted course element. - */ - public void undeleteCourseElement() { - selenium.click("ui=courseEditor::content_undeleteCourseElement()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Moves the current selected course element and inserts it accordingly with the insertPosition. <p> - * elementTitle could be null if the insert position is relative to the root. - * @param insertPosition - * @param elementTitle - */ - public void moveCourseElement(InsertPosition insertPosition, String elementTitle) { - selenium.click("ui=courseEditor::toolbox_modifyTools_move()"); - selenium.waitForPageToLoad("30000"); - - if(InsertPosition.FIRST_CHILD_OF_ROOT.equals(insertPosition)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()"); - } else if(InsertPosition.LAST_CHILD_OF_ROOT.equals(insertPosition)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsLastChild()"); - } else if(InsertPosition.FIRST_CHILD_OF_ELEMENT.equals(insertPosition) && elementTitle!=null && !elementTitle.equals("")) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsElementsFirstChild(title=" + elementTitle + ")"); - } else if(InsertPosition.FOLLOWING_SIBLING_OF_ELEMENT.equals(insertPosition) && elementTitle!=null && !elementTitle.equals("")) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsElementsFollowingSibling(title=" + elementTitle + ")"); - } else { - throw new IllegalStateException("InsertType or elementTitle are not acceptable!"); - } - - selenium.click("ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()"); - selenium.waitForPageToLoad("30000"); - } - - public void copyCourseElement(InsertPosition insertPosition, String elementTitle) { - selenium.click("ui=courseEditor::toolbox_modifyTools_copy()"); - selenium.waitForPageToLoad("30000"); - - if(InsertPosition.FIRST_CHILD_OF_ROOT.equals(insertPosition)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()"); - } else if(InsertPosition.LAST_CHILD_OF_ROOT.equals(insertPosition)) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsLastChild()"); - } else if(InsertPosition.FIRST_CHILD_OF_ELEMENT.equals(insertPosition) && elementTitle!=null && !elementTitle.equals("")) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsElementsFirstChild(title=" + elementTitle + ")"); - } else if(InsertPosition.FOLLOWING_SIBLING_OF_ELEMENT.equals(insertPosition) && elementTitle!=null && !elementTitle.equals("")) { - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsElementsFollowingSibling(title=" + elementTitle + ")"); - } else { - throw new IllegalStateException("InsertType or elementTitle are not acceptable!"); - } - - selenium.click("ui=courseEditor::toolbox_insertCourseElements_clickInsertCourseElement()"); - selenium.waitForPageToLoad("30000"); - } - - - - /** - * Call this if the CourseEditor was created via the LRDetailedView, - * or if the course was just imported/created. - * @return - */ - public LRDetailedView closeToLRDetailedView() { - selenium.click("ui=courseEditor::toolbox_editorTools_closeEditor()"); - selenium.waitForPageToLoad("30000"); - - return new LRDetailedView(selenium); - } - - - /** - * Call this if the CourseEditor was created via the CourseRun. - * @return - */ - public CourseRun closeToCourseRun() { - selenium.click("ui=courseEditor::toolbox_editorTools_closeEditor()"); - selenium.waitForPageToLoad("30000"); - - return new CourseRun(selenium); - } - - /** - * Straightforward course publish. - * Click "Publish", "Select all", "Next", select "All registered users", "Finish". - * - */ - public void publishCourse() { - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium.waitForPageToLoad("30000"); - if(selenium.isElementPresent("ui=courseEditor::publishDialog_selectall()")) { - selenium.click("ui=courseEditor::publishDialog_selectall()"); - // select-all is implemented locally in the client - without any request to the server - // selenium seems to not interpret this as a page-load consistently - // hence disabling the waitForPageToLoad and replacing it with a sleep of 1 sec - //selenium.waitForPageToLoad("30000"); - try{ - Thread.currentThread().sleep(1000); - } catch(InterruptedException ie) { - ie.printStackTrace(System.out); - } - } - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - selenium.select("ui=courseEditor::publishDialog_courseAccessDropDown()", "label=All registered OLAT users"); - //TODO: LD: add here check if next selectable, else finish - if(selenium.isElementPresent("ui=courseEditor::publishDialog_next()")) { - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::publishDialog_finish()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * - * @return Returns true if anything found to be published, false otherwise. - */ - public boolean publishFirstChangedElement() { - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - selenium.waitForPageToLoad("30000"); - if(selenium.isElementPresent("ui=courseEditor::publishDialog_howToPublish_firstTreeCheckbox()")) { - System.out.println("There is something to publish ..."); - //if(!selenium.isTextPresent("The course is up to date.")) { - selenium.click("ui=courseEditor::publishDialog_howToPublish_firstTreeCheckbox()"); - //TODO: LD: select only certain elements - if(selenium.isElementPresent("ui=courseEditor::publishDialog_next()")) { - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - } - if(selenium.isElementPresent("ui=courseEditor::publishDialog_next()")) { - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - } - if(selenium.isElementPresent("ui=courseEditor::publishDialog_finish()")) { - selenium.click("ui=courseEditor::publishDialog_finish()"); - selenium.waitForPageToLoad("30000"); - System.out.println("Published finished!"); - } - return true; - } else { - System.out.println("No modifications to be published. The course is up to date. "); - selenium.click("ui=dialog::Cancel()"); - selenium.waitForPageToLoad("30000"); - } - return false; - } - - - /** - * Publishes only the root element, plus lots of asserts. - * @throws Exception - */ - public void publishCourseAfterCourseTitleChanged() throws Exception { - selenium.click("ui=courseEditor::toolbox_editorTools_publish()"); - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (selenium.isTextPresent("Publishing")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - - selenium.click("ui=courseEditor::publishDialog_howToPublish_firstTreeCheckbox()"); - selenium.click("ui=courseEditor::publishDialog_next()"); - Thread.sleep(1000); - selenium.click("ui=courseEditor::publishDialog_next()"); - Thread.sleep(1000); - assertTrue(selenium.isTextPresent("No problems found")); - selenium.click("ui=courseEditor::publishDialog_next()"); - Thread.sleep(1000); - //pbl.confirm.users - //assertTrue(selenium.isTextPresent("Do you really want to publish this course?")); - assertTrue(selenium.isTextPresent(LocalStringProvider.COURSE_PUBLISH_CONFIRM)); - selenium.click("ui=courseEditor::publishDialog_finish()"); - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (selenium.isTextPresent("Selected modifications published successfully")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - } - - /** - * Selects the course element with the given title. - * @param title - * @return Returns an instance of the CourseElementEditor by default, - * or an EnrolmentEditor if an enrolment element was inserted, - * or an TestElementEditor, - * SelfTestElementEditor, - * FolderEditor, - * SinglePageEditor, - * AssessmentEditor. - */ - public CourseElementEditor selectCourseElement(String title) { - selectTruncatedTitle(title); - return getCurrentElement(); - } - - private void selectTruncatedTitle(String title) { - String truncatedTitle = title; - if(title.length()>22) { - truncatedTitle = title.substring(0, 22); - } - currentElementTitle = truncatedTitle; - selenium.click("ui=courseEditor::menu_link(link=" + truncatedTitle + ")"); - selenium.waitForPageToLoad("60000"); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - } - } - - - public CourseElementEditor selectNextCourseElement(String title) { - //TODO: LD: implement this!!! - return null; - } - - /** - * Returns true if an element with this title is found. - * @param title - * @return - */ - public boolean containsElement(String title) { - String truncatedTitle = title; - if(title.length()>22) { - truncatedTitle = title.substring(0, 22); - } - currentElementTitle = truncatedTitle; - return selenium.isElementPresent("ui=courseEditor::menu_link(link=" + truncatedTitle + ")"); - } - - /** - * Selects the root if title provided, else assumes the root is selected. - * Per default the root is selected at open course editor. - * @return - */ - public StructureEditor getRoot (String title) { - if(title!=null) { - return (StructureEditor)selectCourseElement(title); - } else { - //hopefully the ROOT is selected!!!, if not bummer! - return (StructureEditor)getCurrentElement(); - } - } - - /** - * Automatically checks the type of the currently selected course element. - * - * @return the current selected course element. - */ - private CourseElementEditor getCurrentElement() { - if(selenium.isElementPresent("ui=courseEditor::content_bbEnrolment_tabConfiguration()")) { - return new EnrolmentEditor(selenium); - } else if(selenium.isElementPresent("ui=courseEditor::content_bbFolder_tabFolderConfiguration()")) { - return new FolderEditor(selenium); - } else if(selenium.isElementPresent("ui=courseEditor::content_bbStructure_scoreTab()")) { - return new StructureEditor(selenium); - } else if(selenium.isElementPresent("ui=courseEditor::content_bbSelfTest_tabSelfTestConfiguration()")) { - return new SelfTestElementEditor(selenium); - } else if(selenium.isElementPresent("ui=courseEditor::content_bbTest_tabTestConfiguration()")) { - return new TestElementEditor(selenium); - } else if(selenium.isElementPresent("ui=courseEditor::content_bbSinglePage_tabPageContent()") && selenium.isTextPresent("Single page")) { - //warning: it should have a long title containing "Single page" string in it, any better xpath? - return new SinglePageEditor(selenium); - } else if(selenium.isElementPresent("ui=courseEditor::content_bbBlog_tabBlogLearningContent()")) { - return new BlogEditor(selenium, currentElementTitle); - } else if(selenium.isElementPresent("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()")) { - return new PodcastEditor(selenium, currentElementTitle); - } else if (selenium.isElementPresent("ui=courseEditor::content_lti_tabPageContent()") && selenium.isTextPresent("LTI page")) { - //warning: it should have a long title containing "Single page" string in it, any better xpath? - return new LTIPageEditor(selenium); - } - //TODO: LD: Add more course elements if necessary - return new CourseElementEditor(selenium); - } - - /** - * Select a wiki course element an choose wiki resource (from My entries) for it. - * @param elementTitle - * @param wikiTitle - */ - public void chooseMyWikiForElement(String elementTitle, String wikiTitle) { - selenium.click("ui=courseEditor::menu_link(link=" + elementTitle + ")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_bbWiki_tabWikiLearningContent()"); - selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - // nothing to do - } - selenium.click("ui=courseEditor::content_bbWiki_chooseWiki()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_myEntries()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_chooseWiki(nameOfWiki=" + wikiTitle + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Choose wiki for the current selected course element by searching after wiki with wikiTitle and authorName. <p> - * This is an alternative to chooseMyWikiForElement (if myEntries list is too long). - * @param wikiTitle - * @param authorName - */ - public void chooseWikiForElement(String wikiTitle, String authorName) { - selenium.click("ui=courseEditor::content_bbWiki_tabWikiLearningContent()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_bbWiki_chooseWiki()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_search()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Author)", authorName); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", wikiTitle); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_chooseWiki(nameOfWiki=" + wikiTitle + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Shows course preview, and closes preview. - * - */ - public void preview() { - selenium.click("ui=courseEditor::toolbox_editorTools_coursePreview()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::preview_showCoursePreview()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::preview_closePreview()"); - selenium.waitForPageToLoad("30000"); - } - - public CoursePreview openPreview () { - selenium.click("ui=courseEditor::toolbox_editorTools_coursePreview()"); - selenium.waitForPageToLoad("30000"); - return new CoursePreview(selenium); - } - - - /** - * Selects the Storage folder. - * @return - */ - public Folder storageFolder() { - selenium.click("ui=courseEditor::toolbox_editorTools_storageFolder()"); - selenium.waitForPageToLoad("30000"); - return new Folder(selenium); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CourseElementEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CourseElementEditor.java deleted file mode 100644 index 7c1c35fcc52..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CourseElementEditor.java +++ /dev/null @@ -1,310 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * Covers the common tabs of the course elements editor - * ("Title and description", "Visibility", and "Access" tabs). - * <p> - * - * - * @author Lavinia Dumitrescu - * - */ -public class CourseElementEditor extends OLATSeleniumWrapper { - - public enum ACCESS_TYPE {ACCESS, READ_ONLY, READ_AND_WRITE, MODERATE, CREATE_EDIT_WIKI, PRESENT}//MISSING FOR FILE_DIALOG, TASK, TOPIC_ASSIGNMENT,CALENDAR - - /** - * @param selenium - */ - protected CourseElementEditor(Selenium selenium) { - super(selenium); - sleepThread(3000); - // Check that we're on the right place - if (!selenium.isElementPresent("ui=courseEditor::content_TitleDescription_shortTitle()") - && !selenium.isElementPresent("ui=courseEditor::content_undeleteCourseElement()")) { - throw new IllegalStateException("This is not the - Course element - page"); - } - } - - public void setTitle(String title) { - selenium.type("ui=courseEditor::content_TitleDescription_shortTitle()", title); - selenium.click("ui=courseEditor::content_TitleDescription_save()"); - selenium.waitForPageToLoad("30000"); - } - - public void setDescription(String description) { - this.typeInRichText(description); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Changes visibility the current selected course element. - * - * @param groupName - */ - public void changeVisibilityDependingOnGroup(String groupName) { - selectVisibilityTab(); - selenium.click("ui=courseEditor::content_visibility_dependingGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_visibility_selectLearningGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=" + groupName + ")"); - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_visibility_save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Changes access to the current selected course element, depending on - * assessment. - * - * @param title - */ - public void changeVisibilityDependingOnAssessment(String title) { - selectVisibilityTab(); - selenium.click("ui=courseEditor::content_visibility_dependingAssessment()"); - selenium.waitForPageToLoad("30000"); - selenium.select("ui=courseEditor::content_visibility_selectElement()", "label=" + title); - selenium.click("ui=courseEditor::content_visibility_save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Changes access to the current selected course element, block for learners. <br/> - * Switches state. - * - */ - public void changeVisibilityBlockForLearners() { - selectVisibilityTab(); - selenium.click("ui=courseEditor::content_visibility_blockedForLearners()"); - selenium.waitForPageToLoad("30000"); - //Save button is no more visible in olat7 - if(selenium.isElementPresent("ui=courseEditor::content_visibility_save()")) { - selenium.click("ui=courseEditor::content_visibility_save()"); - selenium.waitForPageToLoad("30000"); - } - } - - private void selectVisibilityTab() { - if (selenium.isElementPresent("ui=courseEditor::content_visibility_tabVisibility()")) { - selenium.click("ui=courseEditor::content_visibility_tabVisibility()"); - selenium.waitForPageToLoad("30000"); - } - } - - private void selectAccessTab() { - if (selenium.isElementPresent("ui=courseEditor::content_access_tabAccess()")) { - selenium.click("ui=courseEditor::content_access_tabAccess()"); - selenium.waitForPageToLoad("30000"); - } - } - - - public boolean changeVisibilityExpertMode(boolean swichToExpertMode, String appendCondition) { - selectVisibilityTab(); - return appendCondition(swichToExpertMode, appendCondition); - } - - public boolean changeAccessExpertMode(boolean swichToExpertMode,String appendCondition) { - selectAccessTab(); - return appendCondition(swichToExpertMode, appendCondition); - } - - /** - * Append condition to the expert mode. - * Cases: - * 1. append condition only if the expert mode is already selected, - * 2. append condition in any case, that is select the expert mode before. - * - * @param swichToExpertMode - * @param appendCondition - */ - private boolean appendCondition(boolean swichToExpertMode, String appendCondition) { - if(swichToExpertMode && selenium.isElementPresent("ui=courseEditor::content_visibilityOrAccess_displayExpertMode()")) { - selenium.click("ui=courseEditor::content_visibility_displayExpertMode()"); - selenium.waitForPageToLoad("30000"); - } - if(selenium.isElementPresent("ui=courseEditor::content_visibilityOrAccess_displaySimpleMode()")) { - String expertRuleString = selenium.getValue("ui=commons::flexiForm_labeledTextArea(formElementLabel=Expert rule)"); - if(expertRuleString!=null && !expertRuleString.equals("")) { - expertRuleString += appendCondition; - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Expert rule)", expertRuleString); - //selenium.click("ui=commons::saveInput()"); - if(selenium.isElementPresent("ui=courseEditor::content_visibilityOrAccess_saveVisibilityExpertRule()")) { - selenium.click("ui=courseEditor::content_visibilityOrAccess_saveVisibilityExpertRule()"); - } else if(selenium.isElementPresent("ui=courseEditor::content_visibilityOrAccess_saveAccessExpertRule()")) { - selenium.click("ui=courseEditor::content_visibilityOrAccess_saveAccessExpertRule()"); - } else { - System.out.println("Warning: no save button found, could not save expert rule!"); - } - selenium.waitForPageToLoad("30000"); - return true; - } - } - return false; - } - - - - /** - * Changes access to the current selected course element depending on the - * input group. - * - * @param groupName - */ - public void changeAccessyDependingOnGroup(String groupName) { - selectAccessTab(); - selenium.click("ui=courseEditor::content_access_dependingGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_access_selectLearningGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=" + groupName + ")"); - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_access_save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Edits the visibility info for the current selected course element. - * - * @param infoText - */ - public void editVisibilityInfo(String infoText) { - selectVisibilityTab(); - // the description shows up in an iframe - //selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.type("ui=commons::tinyMce_styledTextArea()", infoText); - //selenium.selectFrame("relative=top"); - - selenium.click("ui=courseEditor::content_visibility_saveInfo()"); - selenium.waitForPageToLoad("30000"); - } - - public boolean isVisibilityDependingOnDate() { - selectVisibilityTab(); - if(selenium.isElementPresent("ui=courseEditor::content_visibility_dependingDate()")) { - return selenium.isChecked("ui=courseEditor::content_visibility_dependingDate()"); - } - return false; - } - - /** - * Changes visibility depending on date, - * assuming at least startDateString or endDateString must be not null or not empty! - * @param startDateString - * @param endDateString - */ - public boolean changeVisibilityDependingOnDate(String startDateString, String endDateString) { - if((startDateString==null||startDateString.equals("")) && (endDateString==null || endDateString.equals(""))) { - throw new IllegalStateException("at least startDateString or endDateString must be not null or not empty!"); - } - boolean changed = false; - selectVisibilityTab(); - if(!isVisibilityDependingOnDate()) { - selenium.check("ui=courseEditor::content_visibility_dependingDate()"); - selenium.waitForPageToLoad("30000"); - } - if(startDateString!=null && !startDateString.equals("")) { - selenium.type("ui=courseEditor::content_visibility_startDate()", startDateString); - changed = true; - } - if(endDateString!=null && !endDateString.equals("")) { - selenium.type("ui=courseEditor::content_visibility_endDate()", endDateString); - changed = true; - } - selenium.click("ui=courseEditor::content_visibility_save()"); - selenium.waitForPageToLoad("30000"); - return changed; - } - - public boolean isAccessDependingOnDate() { - selectAccessTab(); - if(selenium.isElementPresent("ui=courseEditor::content_access_dependingDate()")) { - return selenium.isChecked("ui=courseEditor::content_access_dependingDate()"); - } - return false; - } - - /** - * Changes access depending on date, - * assuming at least startDateString or endDateString must be not null or not empty! - * @param startDateString - * @param endDateString - */ - public boolean changeAccessDependingOnDate(String startDateString, String endDateString) { - selectAccessTab(); - if((startDateString==null||startDateString.equals("")) && (endDateString==null || endDateString.equals(""))) { - throw new IllegalStateException("at least startDateString or endDateString must be not null and not empty!"); - } - boolean changed = false; - if(!isAccessDependingOnDate()) { - selenium.check("ui=courseEditor::content_access_dependingDate()"); - selenium.waitForPageToLoad("30000"); - } - if(startDateString!=null && !startDateString.equals("")) { - selenium.type("ui=courseEditor::content_access_startDate()", startDateString); - changed = true; - } - if(endDateString!=null && !endDateString.equals("")) { - selenium.type("ui=courseEditor::content_access_endDate()", endDateString); - changed = true; - } - selenium.click("ui=courseEditor::content_access_save()"); - selenium.waitForPageToLoad("30000"); - return changed; - } - - /** - * Switch "Blocked for learners" access, for the given section, and save. - */ - public void changeAccessBlockedForLearners(ACCESS_TYPE accessType) { - selectAccessTab(); - if(ACCESS_TYPE.PRESENT.equals(accessType)) { - selenium.click("ui=courseEditor::content_access_blockedForLearners(fieldsetLegend=Present)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_access_saveAccess(fieldsetLegend=Present)"); - selenium.waitForPageToLoad("30000"); - } else if (ACCESS_TYPE.READ_AND_WRITE.equals(accessType)){ - selenium.click("ui=courseEditor::content_access_blockedForLearners(fieldsetLegend=Read and write)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_access_saveAccess(fieldsetLegend=Read and write)"); - selenium.waitForPageToLoad("30000"); - } else { - throw new UnsupportedOperationException("Not yet implemented"); - } - - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CoursePreview.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CoursePreview.java deleted file mode 100644 index 7305c3c871a..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/CoursePreview.java +++ /dev/null @@ -1,69 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -public class CoursePreview extends OLATSeleniumWrapper { - - public enum Role {REGISTERED_USER, GUEST, TUTOR, COURSE_OWNER, AUTHOR} - - public CoursePreview(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - public CourseEditor closePreview() { - selenium.click("ui=courseEditor::preview_closePreview()"); - selenium.waitForPageToLoad("30000"); - return new CourseEditor(selenium); - } - - public void showPreview() { - selenium.click("ui=courseEditor::preview_showCoursePreview()"); - selenium.waitForPageToLoad("30000"); - } - - public void changeRole(Role role) { - if(Role.REGISTERED_USER.equals(role)) { - selenium.click("ui=courseEditor::preview_selectRole(role=role.student)"); - } else if(Role.GUEST.equals(role)) { - selenium.click("ui=courseEditor::preview_selectRole(role=role.guest)"); - } else if (Role.TUTOR.equals(role)) { - selenium.click("ui=courseEditor::preview_selectRole(role=role.coursecoach)"); - } else if (Role.COURSE_OWNER.equals(role)) { - selenium.click("ui=courseEditor::preview_selectRole(role=role.courseadmin)"); - } else if (Role.AUTHOR.equals(role)) { - selenium.click("ui=courseEditor::preview_selectRole(role=role.globalauthor)"); - } - } - - public void selectCourseElement(String title) { - selenium.click("ui=courseEditor::menu_link(link=" + title + ")"); - selenium.waitForPageToLoad("60000"); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - } - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/EnrolmentEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/EnrolmentEditor.java deleted file mode 100644 index afb806787f6..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/EnrolmentEditor.java +++ /dev/null @@ -1,131 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Enrolment course element editor. - * - * @author Lavinia Dumitrescu - * - */ -public class EnrolmentEditor extends CourseElementEditor { - - /** - * @param selenium - */ - public EnrolmentEditor(Selenium selenium) { - super(selenium); - - // Check that we're on the right place - if(!selenium.isElementPresent("ui=courseEditor::content_bbEnrolment_tabConfiguration()")) { - throw new IllegalStateException("This is not the - Enrolment course element - page"); - } - } - - /** - * - * @param groupName - */ - public void selectLearningGroups(String groupName) { - if(selenium.isElementPresent("ui=courseEditor::content_bbEnrolment_tabConfiguration()")) { - selenium.click("ui=courseEditor::content_bbEnrolment_tabConfiguration()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=" + groupName + ")"); - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_bbEnrolment_save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Selects groups in groupEnumerationString (Comma separated Value), - * and creates them if not already created. - * - * @param groupEnumerationString - */ - public void createAndSelectGroups(String groupEnumerationString) { - if(selenium.isElementPresent("ui=courseEditor::content_bbEnrolment_tabConfiguration()")) { - selenium.click("ui=courseEditor::content_bbEnrolment_tabConfiguration()"); - selenium.waitForPageToLoad("30000"); - } - if(selenium.isElementPresent("ui=commons::flexiForm_labeledTextInput(formElementLabel=Learning groups)")) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Learning groups)", groupEnumerationString); - selenium.click("ui=courseEditor::content_bbEnrolment_save()"); - selenium.waitForPageToLoad("30000"); - } else if(selenium.isElementPresent("ui=courseEditor::commons_groupBulk_selectGroupsIfError()")) { - //if error, type in the new groupEnumerationString - selenium.type("ui=courseEditor::commons_groupBulk_selectGroupsIfError()", groupEnumerationString); - selenium.click("ui=courseEditor::content_bbEnrolment_save()"); - selenium.waitForPageToLoad("30000"); - } - //if create button present, click create - if(selenium.isElementPresent("ui=courseEditor::commons_groupBulk_createGroups()")) { - selenium.click("ui=courseEditor::commons_groupBulk_createGroups()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::flexiForm_finishButton()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Check if the groupName is selected. - * - * @param groupName - * @return - */ - public boolean isGroupSelected(String groupName) { - if(selenium.isElementPresent("ui=courseEditor::content_bbEnrolment_tabConfiguration()")) { - selenium.click("ui=courseEditor::content_bbEnrolment_tabConfiguration()"); - selenium.waitForPageToLoad("30000"); - } - String groupValue = selenium.getValue("ui=commons::flexiForm_labeledTextInput(formElementLabel=Learning groups)"); - return groupValue.indexOf(groupName)!=-1; - } - - /** - * - * @param areaName - */ - public void selectLearningAreas(String areaName) { - if(selenium.isElementPresent("ui=courseEditor::content_bbEnrolment_tabConfiguration()")) { - selenium.click("ui=courseEditor::content_bbEnrolment_tabConfiguration()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningArea()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_checkGroup(nameOfGroup=" + areaName + ")"); - selenium.click("ui=courseEditor::content_bbEnrolment_selectLearningGroupDialog_apply()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_bbEnrolment_save()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/FolderEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/FolderEditor.java deleted file mode 100644 index 1246b083058..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/FolderEditor.java +++ /dev/null @@ -1,79 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Folder Course Element page. - * - * @author Lavinia Dumitrescu - * - */ -public class FolderEditor extends CourseElementEditor { - - /** - * @param selenium - */ - public FolderEditor(Selenium selenium) { - super(selenium); - if(!selenium.isElementPresent("ui=courseEditor::content_bbFolder_tabFolderConfiguration()")) { - throw new IllegalStateException("This is not the - Folder editor - page"); - } - } - - /** - * Changes access to the current selected course element, blocked for learners read and write. - * - */ - public void changeAccessBlockForLearnersReadAndWrite() { - if(selenium.isElementPresent("ui=courseEditor::content_access_tabAccess()")) { - selenium.click("ui=courseEditor::content_access_tabAccess()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_access_blockedForLearnersReadAndWrite()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_access_saveReadAndWrite()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Changes access to the current selected course element, blocked for learners read only. - * - */ - public void changeAccessBlockForLearnersReadOnly() { - if(selenium.isElementPresent("ui=courseEditor::content_access_tabAccess()")) { - selenium.click("ui=courseEditor::content_access_tabAccess()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_access_blockedForLearnersReadOnly()"); - selenium.waitForPageToLoad("30000"); - //Save button no more visible in olat7 - /*selenium.click("ui=courseEditor::content_access_saveReadOnly()"); - selenium.waitForPageToLoad("30000");*/ - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/LTIPageEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/LTIPageEditor.java deleted file mode 100644 index e79eebab385..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/LTIPageEditor.java +++ /dev/null @@ -1,114 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -public class LTIPageEditor extends CourseElementEditor { - - public LTIPageEditor(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - private void selectPageContent() { - if (selenium.isElementPresent("ui=courseEditor::content_lti_tabPageContent()")) { - selenium.click("ui=courseEditor::content_lti_tabPageContent()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Accepts null as input params, if null ignore. - * If boolean false ignore, else click on checkbox (swich state). - * @param url - * @param key - * @param password - * @param sendNameToSupplierSwitch - * @param sendEmailToSupplierSwitch - * @param showInfoSentSwitch - */ - public void configurePage(String url, String key, String password, boolean sendNameToSupplierSwitch, boolean sendEmailToSupplierSwitch ,boolean showInfoSentSwitch) { - selectPageContent(); - if(url!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=URL)", url); - } - if(key!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Key)", key); - } - if(password!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Password)", password); - } - if(sendNameToSupplierSwitch) { - selenium.click("ui=commons::flexiForm_labeledCheckbox(formElementLabel=Send name to provider)"); - } - if(sendEmailToSupplierSwitch) { - selenium.click("ui=commons::flexiForm_labeledCheckbox(formElementLabel=Send e-mail address to provider)"); - } - if(showInfoSentSwitch) { - selenium.click("ui=commons::flexiForm_labeledCheckbox(formElementLabel=Show information sent)"); - } - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - public LTIPreview showPreview(){ - selenium.click("ui=courseEditor::content_bbSinglePage_previewSinglePage()"); - selenium.waitForPageToLoad("30000"); - return new LTIPreview(this); - } - - /** - * Inner class since it could only be accessible via the parent class. - * @author lavinia - * - */ - public class LTIPreview extends OLATSeleniumWrapper { - - private LTIPageEditor lTIPageEditor; - - private LTIPreview(LTIPageEditor lTIPageEditor_) { - super(lTIPageEditor_.getSelenium()); - - lTIPageEditor = lTIPageEditor_; - } - - public boolean hasInfo(String info) { - //select iframe - selenium.selectFrame("//iframe[@id='IMSBasicLTIFrame']"); - boolean hasInfo = selenium.isTextPresent(info); - selenium.selectFrame("relative=top"); - return hasInfo; - } - - public LTIPageEditor closePreview() { - if(selenium.isElementPresent("ui=courseEditor::preview_closePreview()")) { - selenium.click("ui=courseEditor::preview_closePreview()"); - selenium.waitForPageToLoad("30000"); - } else { - throw new IllegalStateException("Close preview - link not available"); - } - return lTIPageEditor; - } - - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/PodcastEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/PodcastEditor.java deleted file mode 100644 index e94257a3056..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/PodcastEditor.java +++ /dev/null @@ -1,142 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - - -import org.olat.test.util.selenium.olatapi.lr.PodcastResource; - -import com.thoughtworks.selenium.Selenium; - -/** - * Podcast element configuration page in course editor. - * @author Sandra Arnold - * - */ -public class PodcastEditor extends CourseElementEditor { - - private String podcastTitle; - - /** - * @param selenium - */ - public PodcastEditor(Selenium selenium, String title) { - super(selenium); - podcastTitle = title; - - //Check that we're on the right place - //TODO tab - if(!selenium.isElementPresent("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()")) { - throw new IllegalStateException("This is not the - Podcast Learning Content - page"); - } - } - - /** - * Select, import, create, replace, edit podcast - * - * @param testTitle - */ - public void select(String podcastTitle) { - if(selenium.isElementPresent("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()")) { - selenium.click("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbPodcast_selectCreateImportPodcast()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_myEntries()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_choosePodcast(nameOfPodcast=" + podcastTitle + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Creates resource without starting editing. - * @param podcastTitle - * @param podcastDescription - */ - public void create(String podcastTitle, String podcastDescription) { - if(selenium.isElementPresent("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()")) { - selenium.click("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbPodcast_selectCreateImportPodcast()"); - selenium.waitForPageToLoad("30000"); - // TODO click "create", enter PodcastTitle and PodcastDescription, save, next, return to course editor, not clear where xpaths should be added - selenium.click("ui=courseEditor::content_bbPodcast_create()"); - selenium.waitForPageToLoad("30000"); - - selenium.click("ui=learningResources::dialog_title()"); - selenium.type("ui=learningResources::dialog_title()", podcastTitle); - - //SR: - //selenium.setSpeed("1000"); - - selenium.click("ui=learningResources::dialog_description()"); - selenium.type("ui=learningResources::dialog_description()", podcastDescription); - - //TODO: LD: add image for this learning resource - - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("60000"); - } - - /** - * Choose new podcast. - * @param newPodcastTitle - */ - public void replace(String newPodcastTitle) { - if(selenium.isElementPresent("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()")) { - selenium.click("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbPodcast_replacePodcast()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_myEntries()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_choosePodcast(nameOfPodcast=" + newPodcastTitle + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Start editing resource. Podcast opens in new tab. - * @return - */ - public PodcastResource edit() { - if(selenium.isElementPresent("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()")) { - selenium.click("ui=courseEditor::content_bbPodcast_tabPodcastLearningContent()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbPodcast_editPodcast()"); - selenium.waitForPageToLoad("30000"); - - return new PodcastResource(selenium, podcastTitle); - } - - - - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/QuestionnaireElementEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/QuestionnaireElementEditor.java deleted file mode 100644 index 45f437e25e8..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/QuestionnaireElementEditor.java +++ /dev/null @@ -1,83 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import com.thoughtworks.selenium.Selenium; - -public class QuestionnaireElementEditor extends CourseElementEditor { - - public QuestionnaireElementEditor(Selenium selenium) { - super(selenium); - //Check that we're on the right place - if(!selenium.isElementPresent("ui=courseEditor::content_bbQuestionnaire_tabQuestionnaireConfiguration()")) { - throw new IllegalStateException("This is not the - Questionnaire configuration - page"); - } - } - - private void selectTabQuestionnaireConfiguration () { - if(selenium.isElementPresent("ui=courseEditor::content_bbQuestionnaire_tabQuestionnaireConfiguration()")) { - selenium.click("ui=courseEditor::content_bbQuestionnaire_tabQuestionnaireConfiguration()"); - selenium.waitForPageToLoad("30000"); - } - } - - public void chooseMyFile(String testTitle) { - selectTabQuestionnaireConfiguration(); - - selenium.click("ui=courseEditor::content_bbQuestionnaire_chooseFile()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_myEntries()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_chooseQuestionnaire(nameOfQuestionnaire=" + testTitle + ")"); - selenium.waitForPageToLoad("30000"); - } - - public void configureQuestionnaireLayout(Boolean allowMenuNavigation, Boolean showMenuNavigation, Boolean allowCancel, Boolean allowSuspend) { - selectTabQuestionnaireConfiguration(); - - //TODO:LD: the XPATHs for test/survey/questionnaire are simply unnecessary replicated, remove the copies - if(showMenuNavigation!=null && showMenuNavigation && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()"); - } else if(showMenuNavigation!=null && !showMenuNavigation && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()")) { - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()"); - } - - if(allowMenuNavigation!=null && allowMenuNavigation && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()")) { - //check - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()"); - } else if(allowMenuNavigation!=null && !allowMenuNavigation && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()")) { - //uncheck - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()"); - } - - if(allowCancel!=null && allowCancel && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowCancel()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_allowCancel()"); - } else if(allowCancel!=null && !allowCancel && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowCancel()")){ - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_allowCancel()"); - } - - if(allowSuspend!=null && allowSuspend && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()"); - } else if(allowSuspend!=null && !allowSuspend && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()")){ - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()"); - } - selenium.click("ui=commons::flexiForm_saveButton()"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/SelfTestElementEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/SelfTestElementEditor.java deleted file mode 100644 index 9df1bdb7a7b..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/SelfTestElementEditor.java +++ /dev/null @@ -1,109 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - - -import com.thoughtworks.selenium.Selenium; - -/** - * Self-Test element configuration page in course editor. - * @author Lavinia Dumitrescu - * - */ -public class SelfTestElementEditor extends CourseElementEditor { - - /** - * @param selenium - */ - public SelfTestElementEditor(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=courseEditor::content_bbSelfTest_tabSelfTestConfiguration()")) { - throw new IllegalStateException("This is not the - Self-test configuration - page"); - } - } - - /** - * Choose the test file for this TestElement. - * - * @param testTitle - */ - public void chooseMyFile(String testTitle) { - if(selenium.isElementPresent("ui=courseEditor::content_bbSelfTest_tabSelfTestConfiguration()")) { - selenium.click("ui=courseEditor::content_bbSelfTest_tabSelfTestConfiguration()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbSelfTest_chooseFile()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_myEntries()"); - selenium.waitForPageToLoad("30000"); - //if too many entries found - show all - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::commons_chooseLr_chooseTest(nameOfTest=" + testTitle + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Configure Layout. - * There is only a partial coverage of the possible configuration. - * - * @param allowMenuNavigation - * @param showMenuNavigation - * @param allowCancel - * @param allowSuspend - */ - public void configureSelfTestLayout(Boolean allowMenuNavigation, Boolean showMenuNavigation, Boolean allowCancel, Boolean allowSuspend) { - if(selenium.isElementPresent("ui=courseEditor::content_bbSelfTest_tabSelfTestConfiguration()")) { - selenium.click("ui=courseEditor::content_bbSelfTest_tabSelfTestConfiguration()"); - selenium.waitForPageToLoad("30000"); - } - if(showMenuNavigation!=null && showMenuNavigation && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()"); - } else if(showMenuNavigation!=null && !showMenuNavigation && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()")) { - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()"); - } - - if(allowMenuNavigation!=null && allowMenuNavigation && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()")) { - //check - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()"); - } else if(allowMenuNavigation!=null && !allowMenuNavigation && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()")) { - //uncheck - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()"); - } - //self-tests always have a cancel button, so no need to configure this - - if(allowSuspend!=null && allowSuspend && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()"); - } else if(allowSuspend!=null && !allowSuspend && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()")){ - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()"); - } - selenium.click("ui=commons::flexiForm_saveButton()"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/SinglePageEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/SinglePageEditor.java deleted file mode 100644 index 3b1efc0ffb3..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/SinglePageEditor.java +++ /dev/null @@ -1,119 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import org.olat.test.util.selenium.olatapi.CannotExecuteException; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Single page - Page content editor. - * - * @author Lavinia Dumitrescu - * - */ -public class SinglePageEditor extends CourseElementEditor { - - public enum SELECT_TYPE {CREATE, CHOOSE_FROM_STORAGE_FOLDER, UPLOAD_TO_STORAGE_FOLDER}; - - /** - * @param selenium - */ - public SinglePageEditor(Selenium selenium) { - super(selenium); - //Check that we're on the right place - if(!selenium.isElementPresent("ui=courseEditor::content_bbSinglePage_tabPageContent()")) { - throw new IllegalStateException("This is not the - Single page - page"); - } - } - - /** - * Replace page, if possible. - * Throws CannotExecuteException if button not available. - * @param type - * @param title - * @throws CannotExecuteException - */ - public void replacePage(SELECT_TYPE type, String title) { - if (selenium.isElementPresent("ui=courseEditor::content_bbSinglePage_tabPageContent()")) { - selenium.click("ui=courseEditor::content_bbSinglePage_tabPageContent()"); - selenium.waitForPageToLoad("30000"); - } - if(selenium.isElementPresent("ui=courseEditor::content_bbSinglePage_replacePage()")) { - selenium.click("ui=courseEditor::content_bbSinglePage_replacePage()"); - selenium.waitForPageToLoad("30000"); - if(SELECT_TYPE.UPLOAD_TO_STORAGE_FOLDER.equals(type)) { - selenium.type("ui=upload::fileChooser()", title); - selenium.click("ui=upload::submit()"); - selenium.waitForPageToLoad("30000"); - } else if(SELECT_TYPE.CHOOSE_FROM_STORAGE_FOLDER.equals(type)) { - //TODO: LD: add code - } else if(SELECT_TYPE.CREATE.equals(type)) { - //TODO: LD: Add code - } - - } else { - throw new IllegalStateException("Replace page - button not available!"); - } - } - - public void createHTMLPage(String fileName, String content) { - if (selenium.isElementPresent("ui=courseEditor::content_bbSinglePage_tabPageContent()")) { - selenium.click("ui=courseEditor::content_bbSinglePage_tabPageContent()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbSinglePage_selectOrCreatePage()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=New HTML page)", fileName); - selenium.click("ui=commons::flexiForm_createButton()"); - selenium.waitForPageToLoad("30000"); - this.typeInRichText(content); - selenium.click("ui=courseEditor::content_bbSinglePage_saveAndClose()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Show the Preview page. - * - */ - public void preview() { - selenium.click("ui=courseEditor::content_bbSinglePage_previewSinglePage()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Close the preview - * - */ - public void closePreview() { - if(selenium.isElementPresent("ui=courseEditor::preview_closePreview()")) { - selenium.click("ui=courseEditor::preview_closePreview()"); - selenium.waitForPageToLoad("30000"); - } else { - throw new IllegalStateException("Close preview - link not available"); - } - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/StructureEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/StructureEditor.java deleted file mode 100644 index f41921dacdf..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/StructureEditor.java +++ /dev/null @@ -1,59 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Structure Course Element page. - * @author Lavinia Dumitrescu - * - */ -public class StructureEditor extends CourseElementEditor { - - /** - * @param selenium - */ - public StructureEditor(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=courseEditor::content_bbStructure_scoreTab()")) { - throw new IllegalStateException("This is not the - Structure element - page"); - } - } - - public void setMinimumScore(int score) { - if(selenium.isElementPresent("ui=courseEditor::content_bbStructure_scoreTab()")) { - selenium.click("ui=courseEditor::content_bbStructure_scoreTab()"); - selenium.waitForPageToLoad("30000"); - } - selenium.type("ui=courseEditor::content_bbStructure_minimumScore()", String.valueOf(score)); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/TestElementEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/TestElementEditor.java deleted file mode 100644 index 1ae97911fd0..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/TestElementEditor.java +++ /dev/null @@ -1,145 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - - -import com.thoughtworks.selenium.Selenium; - -/** - * Test element configuration page in course editor. - * @author Lavinia Dumitrescu - * - */ -public class TestElementEditor extends CourseElementEditor { - - /** - * @param selenium - */ - public TestElementEditor(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=courseEditor::content_bbTest_tabTestConfiguration()")) { - throw new IllegalStateException("This is not the - Test configuration - page"); - } - } - - /** - * Choose the test file for this TestElement. - * - * @param testTitle - */ - public void chooseMyFile(String testTitle) { - if(selenium.isElementPresent("ui=courseEditor::content_bbTest_tabTestConfiguration()")) { - selenium.click("ui=courseEditor::content_bbTest_tabTestConfiguration()"); - selenium.waitForPageToLoad("30000"); - } - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - // nothing to do - } - selenium.click("ui=courseEditor::content_bbTest_chooseFile()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::commons_chooseLr_myEntries()"); - selenium.waitForPageToLoad("30000"); - //if too many entries found - show all - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::commons_chooseLr_chooseTest(nameOfTest=" + testTitle + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Configure Layout. - * There is only a partial coverage of the possible configuration. - * - * @param allowMenuNavigation should be null if default, true or false otherwise - * @param showMenuNavigation should be null if default, true or false otherwise - * @param allowCancel should be null if default, true or false otherwise - * @param allowSuspend should be null if default, true or false otherwise - * @param maxNumApproaches greater the 0 if set to some value - * @param displayResultsOnTestHomepage should be null if default, true or false otherwise - */ - public void configureTestLayout(Boolean allowMenuNavigation, Boolean showMenuNavigation, Boolean allowCancel, Boolean allowSuspend, - int maxNumApproaches, Boolean displayResultsOnTestHomepage) { - if(selenium.isElementPresent("ui=courseEditor::content_bbTest_tabTestConfiguration()")) { - selenium.click("ui=courseEditor::content_bbTest_tabTestConfiguration()"); - selenium.waitForPageToLoad("30000"); - } - - if(maxNumApproaches>0) { - if(!selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_limitNumOfAttempts()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_limitNumOfAttempts()"); - } - try { - Thread.sleep(5000); //sleep - } catch (InterruptedException e) { - } - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Maximum number of attempts)", String.valueOf(maxNumApproaches)); - } - - //boolean isShowMenuNavigationPresent = selenium.isElementPresent("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()"); - //System.out.println("isShowMenuNavigationPresent: " + isShowMenuNavigationPresent); - if(showMenuNavigation!=null && showMenuNavigation && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()"); - } else if(showMenuNavigation!=null && !showMenuNavigation && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()")) { - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_showMenuNavigation()"); - } - - if(allowMenuNavigation!=null && allowMenuNavigation && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()")) { - //check - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()"); - } else if(allowMenuNavigation!=null && !allowMenuNavigation && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()")) { - //uncheck - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_allowMenuNavigation()"); - } - - if(allowCancel!=null && allowCancel && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowCancel()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_allowCancel()"); - } else if(allowCancel!=null && !allowCancel && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowCancel()")){ - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_allowCancel()"); - } - - if(allowSuspend!=null && allowSuspend && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()"); - } else if(allowSuspend!=null && !allowSuspend && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()")){ - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_allowSuspend()"); - } - - if(displayResultsOnTestHomepage!=null && displayResultsOnTestHomepage && !selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_displayResultsOnTestHomepage()")) { - selenium.click("ui=courseEditor::content_bbTest_layoutParameters_displayResultsOnTestHomepage()"); - } else if(displayResultsOnTestHomepage!=null && !displayResultsOnTestHomepage && selenium.isChecked("ui=courseEditor::content_bbTest_layoutParameters_displayResultsOnTestHomepage()")) { - selenium.uncheck("ui=courseEditor::content_bbTest_layoutParameters_displayResultsOnTestHomepage()"); - } - //TODO: LD: there are more parameters to configure, config only if neccessary! - selenium.click("ui=commons::flexiForm_saveButton()"); - //selenium.waitForPageToLoad("30000"); - - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/TopicAssignmentEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/TopicAssignmentEditor.java deleted file mode 100644 index effeb773f7b..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/editor/TopicAssignmentEditor.java +++ /dev/null @@ -1,108 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.editor; - -import org.olat.test.util.selenium.olatapi.components.UserTableComponent; - -import com.thoughtworks.selenium.Selenium; - -public class TopicAssignmentEditor extends CourseElementEditor { - - public TopicAssignmentEditor(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - private void selectConfigurationTab() { - if(selenium.isElementPresent("ui=courseEditor::content_bbTopicAssignment_tabConfig()")) { - selenium.click("ui=courseEditor::content_bbTopicAssignment_tabConfig()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * It assumes that there are no default values selected. <br/> - * If limitNumOfTopics is true, topicLimit must be >0. - * If acceptParticipants is true, onlyOneTopic is relevant, else not. - * - * @param limitNumOfTopics - * @param topicLimit - * @param acceptParticipants - * @param onlyOneTopic - */ - public void configure (boolean limitNumOfTopics, int topicLimit, boolean acceptParticipants, boolean onlyOneTopic) { - selectConfigurationTab(); - if(limitNumOfTopics) { - selenium.click("ui=courseEditor::content_bbTopicAssignment_topicsPerParticipant()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=courseEditor::content_bbTopicAssignment_howManyTopicsPerParticipant()",String.valueOf(topicLimit)); - } - if(acceptParticipants) { - selenium.click("ui=courseEditor::content_bbTopicAssignment_topicSelectionAccept()"); - selenium.waitForPageToLoad("30000"); - if(!selenium.isElementPresent("ui=courseEditor::content_bbTopicAssignment_onlyOneTopicAllowed()")){ - selenium.click("ui=courseEditor::content_bbTopicAssignment_topicSelectionAccept()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::content_bbTopicAssignment_onlyOneTopicAllowed()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::content_bbTopicAssignment_saveConfig()"); - selenium.waitForPageToLoad("30000"); - } - - } - - private void selectPersonsInCharge() { - if(selenium.isElementPresent("ui=courseEditor::content_bbTopicAssignment_tabPersons()")) { - selenium.click("ui=courseEditor::content_bbTopicAssignment_tabPersons()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Add user(s) with this userNamePrefix. - * @param userNamePrefix - */ - public void addUsers(String userNamePrefix) { - selectPersonsInCharge(); - //select all users starting with userNamePrefix - selenium.click("ui=commons::usertable_addUsers()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", userNamePrefix); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - sleepThread(5000); - selenium.click("ui=commons::usertable_adduser_selectAll()"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - sleepThread(3000); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Next)"); - selenium.waitForPageToLoad("30000"); - } - - public void addUser(String userName) { - selectPersonsInCharge(); - selenium.click("ui=commons::usertable_addUsers()"); - selenium.waitForPageToLoad("30000"); - UserTableComponent userTable = new UserTableComponent(selenium); - userTable.chooseUser(userName); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentElement.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentElement.java deleted file mode 100644 index 06fb98274cd..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentElement.java +++ /dev/null @@ -1,62 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * Represents an Assessment course element in course run. - * - * @author Lavinia Dumitrescu - * - */ -public class AssessmentElement extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public AssessmentElement(Selenium selenium) { - super(selenium); - // Check that we're on the right place - if(!selenium.isElementPresent("ui=course::content_assessment_summaryOfScore()")) { - throw new IllegalStateException("This is not the - Assessment course element run - page"); - } - } - - /** - * - * @return the achieved score, if any, throws IllegalStateException otherwise. - */ - public String getScore() { - if(selenium.isElementPresent("ui=qti::yourScore()")) { - return selenium.getText("ui=qti::yourScore()"); - } - throw new IllegalStateException("There is no score information to be displayed yet."); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentForm.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentForm.java deleted file mode 100644 index 726c893ec5f..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentForm.java +++ /dev/null @@ -1,154 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the AssessmentForm page abstraction. - * TODO: LD: add methods for comments, and test if setComments/getComments work! - * - * @author Lavinia Dumitrescu - * - */ -public class AssessmentForm extends OLATSeleniumWrapper { - - public static final String PASSED_NO_INFO = "undefined"; - public static final String PASSED_YES = "true"; - public static final String PASSED_NO = "false"; - - /** - * @param selenium - */ - public AssessmentForm(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=commons::flexiForm_labeledTextInput(formElementLabel=Score)") - && !selenium.isElementPresent("ui=course::assessment_setPassedYes()")) { - //no set score and no set passed present - throw new IllegalStateException("This is not the - Assessment form - page"); - } - } - - /** - * Only type the score. - * Call save to commit the change. - * - * @param score - */ - public void setScore(double score) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Score)", String.valueOf(score)); - } - - public String getScore() { - return selenium.getValue("ui=commons::flexiForm_labeledTextInput(formElementLabel=Score)"); - } - - public String getMinScore() { - return selenium.getText("ui=course::assessment_minMaxScore(title=Minimum score)"); - } - - public String getMaxScore() { - return selenium.getText("ui=course::assessment_minMaxScore(title=Maximum score)"); - } - - public String getPassedCutScore() { - return selenium.getText("ui=course::assessment_minMaxScore(title=Passed cut value)"); - } - - /** - * Only set passed info. - * Call save to commit the change. - * - * @param passed - */ - public void setPassed(Boolean passed) { - if(passed==null) { - selenium.click("ui=course::assessment_setPassedNoInfo()"); - } else if(passed) { - selenium.click("ui=course::assessment_setPassedYes()"); - } else { - selenium.click("ui=course::assessment_setPassedNo()"); - } - } - - public String getPassed() { - if(selenium.isChecked("ui=course::assessment_setPassedYes()")) - return PASSED_YES; - if(selenium.isChecked("ui=course::assessment_setPassedNo()")) - return PASSED_NO; - - return PASSED_NO_INFO; - } - - public void setAttempts(int attempts) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Number of attempts)", String.valueOf(attempts)); - } - - public String getAttempts() { - return selenium.getValue("ui=commons::flexiForm_labeledTextInput(formElementLabel=Number of attempts)"); - } - - public void setUserComments(String text) { - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Comments for users)", String.valueOf(text)); - } - - public String getUserComment() { - return selenium.getValue("ui=commons::flexiForm_labeledTextArea(formElementLabel=Comments for users)"); - } - - public void setCoachComments(String text) { - selenium.type("ui=course::assessment_coachComment()", String.valueOf(text)); - } - - public String getCoachComment() { - return selenium.getValue("ui=course::assessment_coachComment()"); - } - - /** - * Saves changes. - * @return - */ - public AssessmentTool save() { - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - return new AssessmentTool(selenium); - } - - /** - * Close AssessmentTool and get to the courseRun. - * @return - */ - public CourseRun close() { - selenium.click("ui=course::assessment_closeAssessmentTool()"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentTool.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentTool.java deleted file mode 100644 index 2549454cfa0..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/AssessmentTool.java +++ /dev/null @@ -1,142 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import java.util.Iterator; -import java.util.Map; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the AssessmentTool page abstraction. - * - * @author Lavinia Dumitrescu - * - */ -public class AssessmentTool extends OLATSeleniumWrapper { - - - /** - * @param selenium - */ - public AssessmentTool(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=course::assessment_selectType(text=As per user)")) { - throw new IllegalStateException("This is not the - Assessment tool - page"); - } - } - - /** - * Selects "As per user" if not already selected, selects user, and selects the courseElemTitle - * to get to the AssessmentForm. - * - * @param userName - * @param courseElemTitle - * @return - */ - public AssessmentForm getAssessmentFormAsPerUser(String userName, String courseElemTitle) { - getAssessmentTableAsPerUser(userName, courseElemTitle, false); - selenium.click("ui=course::assessment_selectAssessmentCourseNode(title=" + courseElemTitle + ")"); - selenium.waitForPageToLoad("30000"); - return new AssessmentForm(selenium); - } - - public String getScoreInTableAsPerUser(String userName, String courseElemTitle, boolean reloadTable) { - getAssessmentTableAsPerUser(userName, courseElemTitle, reloadTable); - return selenium.getText("ui=course::assessment_scoreInTable(title=" + courseElemTitle + ")"); - } - - public String getPassedStatusInTableAsPerUser(String userName, String courseElemTitle, boolean reloadTable) { - getAssessmentTableAsPerUser(userName, courseElemTitle, reloadTable); - return selenium.getText("ui=course::assessment_passedStatusInTable(title=" + courseElemTitle + ")"); - } - - public String getAttemptsInTableAsPerUser(String userName, String courseElemTitle, boolean reloadTable) { - getAssessmentTableAsPerUser(userName, courseElemTitle, reloadTable); - return selenium.getText("ui=course::assessment_attemptsInTable(title=" + courseElemTitle + ")"); - } - - /** - * Go to the assessment table - via "As per user". - * @param userName - * @param courseElemTitle - * @param reloadTable - this is a workaround for an assessment tool bug. (the table doesn't update if a value changes - * on another cluster node) - */ - private void getAssessmentTableAsPerUser(String userName, String courseElemTitle, boolean reloadTable) { - if(!selenium.isElementPresent("ui=course::assessment_tableFilterForm()") || reloadTable) { - selenium.click("ui=course::assessment_selectType(text=As per user)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=course::assessment_selectUser(username=" + userName + ")"); - selenium.waitForPageToLoad("10000"); - } - } - - public void bulkAssessment(String courseElementTitle, Map<String,Integer> userScoreMap) { - selenium.click("ui=course::assessment_selectType(text=Bulk assessment)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=course::assessment_startBulkAssessment()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Next)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=course::assessment_selectAssessmentCourseNodeInWizard(title=" + courseElementTitle + ")"); - selenium.waitForPageToLoad("30000"); - Iterator<String> userIterator = userScoreMap.keySet().iterator(); - String userScoreString = ""; - while(userIterator.hasNext()) { - String user = userIterator.next(); - Integer score = userScoreMap.get(user); - if(userScoreString.length()>0) { - userScoreString += "\n"; - } - userScoreString += user + " " + score; - } - System.out.println("userScoreString " + userScoreString); - selenium.type("ui=course::assessment_bulkAssessmentValues()", userScoreString); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Next)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Next)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Next)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=course::assessment_closeBulkAssessmentWizard()"); - } - - /** - * Closes the AssessmentTool. - * @return - */ - public CourseRun close() { - selenium.click("ui=course::assessment_closeAssessmentTool()"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/BlogRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/BlogRun.java deleted file mode 100644 index eecbc3852a1..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/BlogRun.java +++ /dev/null @@ -1,65 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.lr.BlogResource; - -import com.thoughtworks.selenium.Selenium; - -/** - * Uses a <code>BlogResource</code> to delegate the implementation to it. - * The difference between a <code>BlogRun</code> and a <code>BlogResource</code> is that a <code>BlogRun</code> instance - * could only be constructed within a <code>CourseRun</code> whereas a <code>BlogResource</code> lives in a separate resource tab. - * - * @author lavinia - * - */ - -public class BlogRun extends OLATSeleniumWrapper { - - private BlogResource blogResource; - - public BlogRun(Selenium selenium) { - super(selenium); - - blogResource = new BlogResource(selenium,""); - } - - public void createEntry(String title, String description, String content, boolean publish) { - blogResource.createEntry(title, description, content, publish); - } - - public boolean hasDraft(String title) { - return blogResource.hasDraftEntry(title); - } - - public void editEntry(String title, String description, String content, boolean publish) { - blogResource.editEntry(title, description, content, publish); - } - - public void commentEntry(String entryTitle, String comment) { - blogResource.commentEntry(entryTitle, comment); - } - - public boolean hasComments(String entryTitle, int numComments) { - return blogResource.hasComments(entryTitle, numComments); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/CourseElement.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/CourseElement.java deleted file mode 100644 index 2235017584e..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/CourseElement.java +++ /dev/null @@ -1,42 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * Generic course element. Provides access to the CourseRun. - * - * @author lavinia - * - */ -public class CourseElement extends OLATSeleniumWrapper{ - - public CourseElement(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - public CourseRun getCourseRun() { - return new CourseRun(selenium); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/CourseRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/CourseRun.java deleted file mode 100644 index 89afd58ac9c..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/CourseRun.java +++ /dev/null @@ -1,418 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.PageLoadWait; -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.components.ChatComponent; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.selenium.olatapi.group.GroupManagement; -import org.olat.test.util.selenium.olatapi.group.RightsManagement; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; - -import com.thoughtworks.selenium.Selenium; - -/** - * OLAT abstraction for the Course Run. - * @author Lavinia Dumitrescu - * - */ -public class CourseRun extends OLATSeleniumWrapper { - - - - /** - * @param selenium - */ - public CourseRun(Selenium selenium) { - super(selenium); - - try { - //delay at load course since 23.06.09 - Thread.sleep(3000); - } catch (Exception e) { - } - //Check that we're on the right place - if(!selenium.isElementPresent("ui=course::toolbox_generalTools_detailedView()")) { - throw new IllegalStateException("This is not the - Course run - page"); - } - } - - /** - * Selects root, it must start with: title. - * (Warning: the titles are truncated! if they are longer than 22 chars) - * @param title - * @return - */ - public StructureElement selectRoot(String title) { - String truncatedTitle = title; - if(title.length()>22) { - truncatedTitle = title.substring(0, 22); - } - selenium.click("ui=course::menu_root(nameOfCourse=" + truncatedTitle + ")"); - selenium.waitForPageToLoad("30000"); - return new StructureElement(selenium); - } - - /** - * Tries to select a course element than is no more visible, so it gets the root. - * @param title - * @return - */ - public StructureElement selectAnyButGetToRoot(String title) { - return selectAnyButGetToRoot(title, PageLoadWait.DEFAULT); - } - - public StructureElement selectAnyButGetToRoot(String title, PageLoadWait wait) { - selectCourseElement(title, wait); - return new StructureElement(selenium); - } - - /** - * Selects course element. CourseRun page still valid (returns void). - * Use this if the type of the selected element doesn't matter. - * @param title - */ - public void selectCourseElement(String title) { - selectCourseElement(title, PageLoadWait.DEFAULT); - } - - public void selectCourseElement(String title, PageLoadWait wait){ - selenium.click("ui=course::menu_link(link=" + title + ")"); - if(wait != PageLoadWait.NO_WAIT){ - selenium.waitForPageToLoad(wait.getMs()); - } - } - - /** - * Selects course element, identified by "position" (root's child). - * - * @param position starts from 1. - */ - public boolean selectCourseElement(int position) { - if(selenium.isElementPresent("ui=course::menu_positionedCourseElem(index=" + position + ")")) { - selenium.click("ui=course::menu_positionedCourseElem(index=" + position + ")"); - selenium.waitForPageToLoad("30000"); - return true; - } else if(position==1){ - System.out.println("NO COURSE ELEMENT FOUND TO BE SELECTED. IS THIS NOT STRANGE???"); - //throw new IllegalStateException("NO COURSE ELEMENT FOUND TO BE SELECTED! Is this really an empty course?"); - } - return false; - } - - /** - * - * @param title - * @return Returns an EnrolmentRun element. - */ - public EnrolmentRun selectEnrolment(String title) { - selectCourseElement(title); - return new EnrolmentRun(selenium); - } - - /** - * Selects the forum element with the given title. - * @param title - * @return - */ - public Forum selectForum(String title) { - selectCourseElement(title); - if(selenium.isElementPresent("ui=course::content_forum_newTopic()") || selenium.isElementPresent("ui=course::content_forum_displayForum()")) { - return new Forum(selenium); - } - throw new IllegalStateException("This is not the - Forum - page"); - } - - public TopicAssignmentRun selectTopicAssignment(String title) { - selectCourseElement(title); - //TODO: LD: add check - is this a project broker element? - return new TopicAssignmentRun(selenium); - } - - /** - * Selects and returns the SCORM element with the given title. - * @param title - * @return - */ - public SCORM selectSCORM(String title) { - selectCourseElement(title); - if(selenium.isElementPresent("ui=course::content_scorm_scormPreview()")) { - return new SCORM(selenium); - } - throw new IllegalStateException("This is not the - SCORM - page"); - } - - /** - * Selects and returns the Wiki element with the given title. - * - * @param title - * @return - */ - public WikiRun selectWiki(String title) { - //selectCourseElement(title); - //replace selectCourseElement call, no waitForPageToLoad needed - selenium.click("ui=course::menu_link(link=" + title + ")"); - try { - Thread.sleep(3000); - } catch (Exception e) { - } - if(selenium.isElementPresent("ui=wiki::sideNavigation_index()")) { - return new WikiRun(selenium); - } - throw new IllegalStateException("This is not the - Wiki - page"); - } - - /** - * Selects and returns an Assessment element with the given title. - * @param title - * @return - */ - public AssessmentElement selectAssessmentElement(String title) { - selectCourseElement(title); - return new AssessmentElement(selenium); - } - - /** - * Closes the CourseRun tab. (Leaves the CourseRun context.) - * Get to the previous selected tab - * - */ - public void close(String title) { - selenium.click("ui=tabs::closeCourse(nameOfCourse=" + title + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Selects the course tab, in case the selection changed to another tab. - * @param title - */ - public void selectCourseTab(String title) { - selenium.click("ui=tabs::selectCourse(nameOfCourse=" + title + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * It assumes that this is the only opened course. - */ - public void closeAny() { - selenium.click("ui=tabs::closeAnyCourse()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * - * @return Returns a CourseEditor object. - */ - public CourseEditor getCourseEditor() { - selenium.click("ui=course::toolbox_courseTools_courseEditor()"); - selenium.waitForPageToLoad("60000"); - return new CourseEditor(selenium); - } - - /** - * If the course run was disposed by another process (e.g. published, or properties modified), - * your CourseRun object gets disposed. - * @return - */ - public DisposedCourseRun getDisposedCourseRun() { - return new DisposedCourseRun(selenium); - } - - public ChatComponent getChatComponent() { - return new ChatComponent(selenium); - } - - /** - * The user tries to open the courseEditor but it is locked. - * The caller of this method expects to find the course locked, so it should not open the CourseEditor. - * - * @return Returns true if the "alreadyLocked" message shows up, false otherwise. - */ - public boolean checkCourseLocked(String lockOwnerUsername) throws Exception { - selenium.click("ui=course::toolbox_courseTools_courseEditor()"); - selenium.waitForPageToLoad("30000"); - - // and wait until 'This course is currently edited by lockOwnerUsername and therefore locked.' appears - for (int second = 0;; second++) { - if (second >= 20) return false; - try { - if (selenium.isTextPresent("This course is currently edited by "+lockOwnerUsername+" and therefore locked.")) - return true; - } catch (Exception e) {} - - Thread.sleep(1000); - } - } - - /** - * - * @return Returns a LRDetailedView object. - */ - public LRDetailedView getDetailedView() { - selenium.click("ui=course::toolbox_generalTools_detailedView()"); - selenium.waitForPageToLoad("30000"); - return new LRDetailedView(selenium); - } - - - public void setBookmark() { - selenium.click("ui=course::toolbox_generalTools_setBookmark()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - - /** - * Open group management from course run. - * @return Returns a GroupManagement object. - */ - public GroupManagement getGroupManagement() { - selenium.click("ui=course::toolbox_courseTools_groupManagement()"); - selenium.waitForPageToLoad("30000"); - return new GroupManagement(selenium); - } - - /** - * Open rights management from course run - * @return Returns a Rightsmanagement object - * - * @author Thomas Linowsky - */ - public RightsManagement getRightsManagement(){ - selenium.click("ui=course::toolbox_courseTools_rightsManagement()"); - selenium.waitForPageToLoad("30000"); - return new RightsManagement(selenium); - } - - /** - * TODO: LD: is this the right place for this method ??? - * @param groupName - * @param userName - */ - public void removeFromTutoredGroup(String groupName, String userName) { - selenium.click("ui=course::toolbox_myGroupsTools_tutoredGroups(nameOfGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=group::menu_administration()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=group::content_members_tabMembers()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_checkUsername(nameOfUser=" + userName + ")"); - selenium.click("ui=commons::usertable_participants_remove()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=dialog::Yes()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * - * @param groupName - * @return - */ - public boolean hasTutoredGroup(String groupName) { - if(selenium.isElementPresent("ui=course::toolbox_myGroupsTools_tutoredGroups(nameOfGroup=" + groupName + ")")) { - return true; - } - return false; - } - - /** - * Returns true if it has a group with this groupName in "My learning groups". - * @param groupName - * @return - */ - public boolean hasMyGroup(String groupName) { - if(selenium.isElementPresent("ui=course::toolbox_myGroupsTools_myLearningGroups(nameOfGroup=" + groupName + ")")) { - return true; - } - return false; - } - - /** - * - * @return Returns an AssessmentTool instance - */ - public AssessmentTool getAssessmentTool() { - selenium.click("ui=course::toolbox_courseTools_assessmentTool()"); - selenium.waitForPageToLoad("30000"); - return new AssessmentTool(selenium); - } - - /** - * Selects a test element with the given title. - * @param title - * @return - */ - public TestElement selectTest(String title) { - selectCourseElement(title); - if(selenium.isElementPresent("ui=commons::start()") || selenium.isTextPresent("There are no more attempts at your disposal.")) { - return new TestElement(selenium); - } - throw new IllegalStateException("This is not the - Test Element - page"); - } - - public QuestionnaireElement selectQuestionnaire(String title) { - selectCourseElement(title); - return new QuestionnaireElement(selenium); - } - - public FileDialog selectFileDialog(String title) { - selectCourseElement(title); - //TODO: LD: check if this a FileDialog element!!! - return new FileDialog(selenium); - } - - public Folder selectFolder(String title) { - selectCourseElement(title); - //TODO: LD: check if this a Folder element!!! - return new Folder(selenium); - } - - public LTIRun selectLTI(String title) { - selectCourseElement(title); - return new LTIRun(selenium); - } - - public BlogRun selectBlog(String title) { - selectCourseElement(title); - return new BlogRun(selenium); - } - - public PodcastRun selectPodcast(String title) { - selectCourseElement(title); - return new PodcastRun(selenium); - } - - public InfoMessageRun selectInfoMessage(String title) { - selectCourseElement(title); - return new InfoMessageRun(selenium); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/DisposedCourseRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/DisposedCourseRun.java deleted file mode 100644 index 09480c83235..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/DisposedCourseRun.java +++ /dev/null @@ -1,54 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the disposed course run. - * One could get to this, if the course run gets disposed either by a course publish, - * or by modify course properties. - * - * @author Lavinia Dumitrescu - * - */ -public class DisposedCourseRun extends OLATSeleniumWrapper { - - public DisposedCourseRun(Selenium selenium) { - super(selenium); - - if(!selenium.isElementPresent("ui=course::disposed_closeAndRestart()")) { - //click anywhere, the course run was disposed anyway - selenium.click("ui=course::toolbox_generalTools_detailedView()"); - selenium.waitForPageToLoad("30000"); - } - } - - public CourseRun closeCourseAndRestart() { - if(selenium.isElementPresent("ui=course::disposed_closeAndRestart()")) { - selenium.click("ui=course::disposed_closeAndRestart()"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - throw new IllegalStateException("There is no - Close and restart course - button present!"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/EnrolmentRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/EnrolmentRun.java deleted file mode 100644 index d24b8b88266..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/EnrolmentRun.java +++ /dev/null @@ -1,70 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Enrolment course run element. - * - * @author Lavinia Dumitrescu - * - */ -public class EnrolmentRun extends OLATSeleniumWrapper { - - private final String ENROLLED = "enrolled"; - - - /** - * @param selenium - */ - public EnrolmentRun(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=course::content_enrollment_enrolmentType()") && !selenium.isElementPresent("ui=course::content_contentElement()")) { - throw new IllegalStateException("This is not the - Enrolment - page"); - } - } - - public void enrol(String groupName) { - selenium.click("ui=course::content_enrollment_enrolOnGroup(nameOfGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - } - - public void cancelEnrolment(String groupName) { - if(alreadyEnrolled(groupName)) { - selenium.click("ui=course::content_enrollment_cancelEnrolment(nameOfGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - } - } - - public boolean alreadyEnrolled(String groupName) { - return ENROLLED.equals(selenium.getText("ui=course::content_enrollment_enrolledOrNot(nameOfGroup=" + groupName + ")")); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/FileDialog.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/FileDialog.java deleted file mode 100644 index 5f9ef799d23..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/FileDialog.java +++ /dev/null @@ -1,61 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * Represents a FileDialog course element in course run. - * - * @author lavinia - * - */ -public class FileDialog extends OLATSeleniumWrapper { - - public FileDialog(Selenium selenium) { - super(selenium); - // TODO: LD: add check - where am I? - } - - /** - * Upload file. - * @param fileName - */ - public void uploadFile(String fileName) { - selenium.click("ui=course::content_fileDialog_uploadFile()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=upload::fileChooser()", fileName); - selenium.click("ui=upload::submit()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * If any file present, delete it. - * If more files, use deleteFile(fileName) - */ - public void deleteSingleFile() { - selenium.click("ui=course::content_forum_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/Forum.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/Forum.java deleted file mode 100644 index 02503f6bf6a..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/Forum.java +++ /dev/null @@ -1,242 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.portfolio.EPCollectWizard; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Forum course element run page. - * - * @author Lavinia Dumitrescu - * - */ -public class Forum extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public Forum(Selenium selenium) { - super(selenium); - - // Check that we're on the right place - if(!selenium.isElementPresent("ui=course::content_forum_newTopic()") && !selenium.isElementPresent("ui=course::content_forum_displayForum()")) { - throw new IllegalStateException("This is not the - Forum - page"); - } - } - - private void displayForumIfNecessary() { - // if Display forum visible - click on it - if(selenium.isElementPresent("ui=course::content_forum_displayForum()")) { - selenium.click("ui=course::content_forum_displayForum()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Open new forum topic with the given title and text. - * @param title - * @param body - */ - public void openNewTopic(String title, String body) { - displayForumIfNecessary(); - if(selenium.isElementPresent("ui=course::content_forum_newTopic()")) { - selenium.click("ui=course::content_forum_newTopic()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=course::content_forum_typeMsgTitle()"); - selenium.type("ui=course::content_forum_typeMsgTitle()", title); - //the message body shows up in an iframe - //selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.type("ui=course::content_forum_clickMsgBody()", body); - //selenium.selectFrame("relative=top"); - selenium.click("ui=course::content_forum_save()"); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - } - selenium.waitForPageToLoad("30000"); - } else { - throw new IllegalStateException("Cannot open new topic!"); - } - } - - /** - * Selects the topic with this title. - * @param title - */ - public void viewTopic(String topicTitle) { - displayForumIfNecessary(); - if(selenium.isElementPresent("ui=course::content_forum_viewTopic(nameOfTopic=" + topicTitle + ")")) { - selenium.click("ui=course::content_forum_viewTopic(nameOfTopic=" + topicTitle + ")"); - selenium.waitForPageToLoad("30000"); - } else { - throw new IllegalStateException("Cannot viewTopic: " + topicTitle); - } - } - - - /** - * Deletes the topic with this title. - * Assumes that the Forum node is selected. - * @param title - */ - public void deleteForumTopic(String title) { - viewTopic(title); - if(selenium.isElementPresent("ui=course::content_forum_delete()")) { - selenium.click("ui=course::content_forum_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=course::content_forum_deleteYes()"); - selenium.waitForPageToLoad("30000"); - } else { - throw new IllegalStateException("Cannot delete topic with this title!"); - } - } - - /** - * Replay to the topic with the topicTitle title, it assusmes that the topic contains only one message. - * @param topicTitle - * @param body - * @param replyWithQuotation - */ - public void replyToTopic(String topicTitle, String body, boolean replyWithQuotation) { - viewTopic(topicTitle); - replyToCurrentMessage(body, replyWithQuotation); - } - - /** - * It is assumed that a topic (with one message) was selected. - * @param body - * @param replyWithQuotation - */ - public void replyToCurrentMessage(String body, boolean replyWithQuotation) { - if(replyWithQuotation) { - selenium.click("ui=course::content_forum_replyWithQuotation()"); - } else { - selenium.click("ui=course::content_forum_replyWithoutQuotation()"); - } - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - } - selenium.waitForPageToLoad("30000"); - //the message body shows up in an iframe - //selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.click("ui=course::content_forum_clickMsgBody()"); - selenium.type("ui=course::content_forum_clickMsgBody()", body); - //selenium.selectFrame("relative=top"); - selenium.click("ui=course::content_forum_save()"); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - } - selenium.waitForPageToLoad("30000"); - } - - /** - * Assumes that a certain message in this forum is selected, so the "Edit" link is present. - * @param fileName - */ - public void attachFileToMsg(String fileName) { - editCurrentMessage(); - - selenium.type("ui=upload::fileChooser()", fileName); - selenium.waitForPageToLoad("30000"); - sleepThread(5000); - selenium.click("ui=course::content_forum_save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Deletes the attached file from the current selected message, if possible, - * and saves the message. - * - */ - public void deleteAttachedFile(String fileName) { - editCurrentMessage(); - - selenium.click("ui=course::content_forum_deleteFile(nameOfFile=" + fileName + ")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=course::content_forum_save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Only one selenium step. A test case needs openNewTopic decomposed in composing steps. - */ - public void clickNewTopic() { - selenium.click("ui=course::content_forum_newTopic()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Type in a new forum message assuming that we already have an open message editor. - * Save message. - * @param title - * @param body - */ - public void typeInNewMessage(String title, String body) { - selenium.click("ui=course::content_forum_typeMsgTitle()"); - selenium.type("ui=course::content_forum_typeMsgTitle()", title); - //the message body shows up in an iframe - //selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.type("ui=course::content_forum_clickMsgBody()", body); - //selenium.selectFrame("relative=top"); - selenium.click("ui=course::content_forum_save()"); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - } - selenium.waitForPageToLoad("30000"); - } - - /** - * Start editing the current forum message, if "Edit" button present. - */ - private void editCurrentMessage() { - if(selenium.isElementPresent("ui=course::content_forum_edit()")) { - selenium.click("ui=course::content_forum_edit()"); - selenium.waitForPageToLoad("30000"); - } else if (!selenium.isElementPresent("ui=course::content_forum_save()")) { - throw new IllegalStateException("Edit - button not available!"); - } - } - - /** - * click the ePortfolio button to start collecting message as artefact - */ - public EPCollectWizard collectAsArtefact() { - if (selenium.isElementPresent("ui=course::content_forum_collectAsArtefact()")) { - selenium.click("ui=course::content_forum_collectAsArtefact()"); - selenium.waitForPageToLoad("30000"); - return new EPCollectWizard(selenium); - } - return null; - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/InfoMessageRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/InfoMessageRun.java deleted file mode 100644 index ebd86c056a8..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/InfoMessageRun.java +++ /dev/null @@ -1,149 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ - - -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * - * Description:<br> - * - * - * <P> - * Initial Date: 4. jan 2011 <br> - * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com - */ -public class InfoMessageRun extends OLATSeleniumWrapper { - - public InfoMessageRun(Selenium selenium) { - super(selenium); - } - - /* - * Create a message - */ - public void createMessage(String title, String message) { - selenium.click("ui=infoMessage::createMessage()"); - selenium.waitForPageToLoad("30000"); - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Subject)", title); - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Message)", message); - - selenium.click("ui=infoMessage::finishMessage()"); - selenium.waitForPageToLoad("30000"); - - try{//the order by is made up to the second, if the selenium test is too quick - //the order is not predictable. - Thread.sleep(1100); - } catch(InterruptedException ie) { - ie.printStackTrace(System.out); - } - } - - public void showOlderMessage() { - selenium.click("ui=infoMessage::olderMessage()"); - selenium.waitForPageToLoad("30000"); - } - - public void showCurrentMessage() { - selenium.click("ui=infoMessage::currentMessage()"); - selenium.waitForPageToLoad("30000"); - } - - public boolean hasMessage(String title) { - if(selenium.isElementPresent("ui=infoMessage::messageTitle(titleOfMessage=" + title + ")")) { - return true; - } - return false; - } - - public boolean canCreateMessage() { - if(selenium.isElementPresent("ui=infoMessage::createMessage()")) { - return true; - } - return false; - } - - public boolean canEditMessage() { - if(selenium.isElementPresent("ui=infoMessage::editFirstMessage()")) { - return true; - } - return false; - } - - public boolean canDeleteMessage() { - if(selenium.isElementPresent("ui=infoMessage::deleteFirstMessage()")) { - return true; - } - return false; - } - - public void editFirstMessage() { - selenium.click("ui=infoMessage::editFirstMessage()"); - selenium.waitForPageToLoad("30000"); - } - - public void deleteFirstMessage() { - selenium.click("ui=infoMessage::deleteFirstMessage()"); - selenium.waitForPageToLoad("30000"); - } - - public void dialogOk() { - selenium.click("ui=dialog::OK()"); - } - - public void save() { - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - } - - public void yes() { - selenium.click("ui=dialog::Yes()"); - selenium.waitForPageToLoad("30000"); - } - - public void cancel() { - selenium.click("ui=dialog::Cancel()"); - selenium.waitForPageToLoad("30000"); - } - - public void close() { - selenium.click("ui=overlay::overlayClose()"); - selenium.waitForPageToLoad("30000"); - } - - public boolean isMessageEdited() { - if(selenium.isElementPresent("ui=infoMessage::messageInEdition()")) { - return true; - } - return false; - } - - public boolean isMessageAlreadyEdited() { - if(selenium.isElementPresent("ui=infoMessage::messageAlreadyEdited()")) { - return true; - } - return false; - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/LTIRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/LTIRun.java deleted file mode 100644 index f7556acea7f..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/LTIRun.java +++ /dev/null @@ -1,49 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * Basic LTI run. - * - * @author lavinia - * - */ -public class LTIRun extends OLATSeleniumWrapper { - - public LTIRun(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - public void launch() { - selenium.selectFrame("//iframe[@id='IMSBasicLTIFrame']"); - if(selenium.isElementPresent("ui=course::content_lti_launch()")) { - selenium.click("ui=course::content_lti_launch()"); - //TODO: LD: add security warning confirmation step! - } else { - throw new IllegalStateException("Cannot launch LTI, button missing!"); - } - selenium.selectFrame("relative=top"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/PodcastRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/PodcastRun.java deleted file mode 100644 index fdba4d8b4fb..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/PodcastRun.java +++ /dev/null @@ -1,53 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.lr.PodcastResource; - -import com.thoughtworks.selenium.Selenium; - -public class PodcastRun extends OLATSeleniumWrapper { - - private PodcastResource podcastResource; - - public PodcastRun(Selenium selenium) { - super(selenium); - - podcastResource = new PodcastResource(selenium, ""); - } - - public void createEpisode(String title, String description, String fileName) { - podcastResource.createEpisode(title, description, fileName); - } - - public void editEpisode(String title, String description, String fileName) { - podcastResource.editEpisode(title, description, fileName); - } - - public void commentEpisode(String title,String comment) { - podcastResource.commentEpisode(title, comment); - } - - public boolean hasComments(String entryTitle, int numComments) { - return podcastResource.hasComments(entryTitle, numComments); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/QTIHelper.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/QTIHelper.java deleted file mode 100644 index b643cbdd3f5..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/QTIHelper.java +++ /dev/null @@ -1,59 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import com.thoughtworks.selenium.Selenium; - -public class QTIHelper { - - /** - * Select the answer for the selected SingleChoice question type. - * @param answer - */ - public static void setSingleChoiceSolution (Selenium selenium, String answer) { - selenium.click("ui=qti::testItemFormElement(text=" + answer + ")"); - selenium.click("ui=qti::saveAnswer()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Select the MultipleChoice answers. - * @param answers - */ - public static void setMultipleChoiceSolution(Selenium selenium, String[] answers) { - for(String answer:answers) { - selenium.click("ui=qti::testItemFormElement(text=" + answer + ")"); - } - selenium.click("ui=qti::saveAnswer()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Fill in the answer for the given text fragment. - * TODO: LD: check if it works with more than 1 text fragments. - * @param textFragment - * @param answer - */ - public static void fillInGap(Selenium selenium, String textFragment, String answer) { - selenium.type("ui=qti::testGapItemFormElement(text=" + textFragment + ")", answer); - selenium.click("ui=qti::saveAnswer()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/QuestionnaireElement.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/QuestionnaireElement.java deleted file mode 100644 index 1f084171439..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/QuestionnaireElement.java +++ /dev/null @@ -1,56 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Questionnaire course element. - * - * @author Lavinia Dumitrescu - * - */ -public class QuestionnaireElement extends OLATSeleniumWrapper { - - public QuestionnaireElement(Selenium selenium) { - super(selenium); - // TODO : LD: add check: where am I? - } - - /** - * A questionnaire could be started only once! - * @return - */ - public QuestionnaireRun start() { - if(selenium.isElementPresent("ui=commons::start()")) { - selenium.click("ui=commons::start()"); - selenium.waitForPageToLoad("30000"); - return new QuestionnaireRun(selenium); - } else { - throw new IllegalStateException("Cannot start questionnaire!"); - } - } - - public boolean cannotStartAnymore() { - return !selenium.isElementPresent("ui=commons::start()"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/QuestionnaireRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/QuestionnaireRun.java deleted file mode 100644 index 679c61f4208..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/QuestionnaireRun.java +++ /dev/null @@ -1,129 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the questionnaire run page. - * - * @author Lavinia Dumitrescu - * - */ -public class QuestionnaireRun extends OLATSeleniumWrapper { - - public QuestionnaireRun(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - /** - * Press finishQuestionnaire, you cannot start the questionnaire a second time. - */ - public CourseRun finish() { - selenium.click("ui=qti::finishQuestionnaire()"); - selenium.waitForPageToLoad("30000"); - assertTrue(selenium.getConfirmation().matches("^Do you really want to submit[\\s\\S]$")); - return new CourseRun(selenium); - } - - /** - * Press cancel and close, and get to the QuestionnaireElement. - */ - public QuestionnaireElement cancel() { - selenium.click("ui=qti::cancelQuestionnaire()"); - selenium.waitForPageToLoad("30000"); - - selenium.click("ui=qti::closeTest()"); - selenium.waitForPageToLoad("30000"); - return new QuestionnaireElement(selenium); - } - - /** - * Press suspend and get to the QuestionnaireElement. - * @return - */ - public QuestionnaireElement suspend() { - selenium.click("ui=qti::suspendQuestionnaire()"); - selenium.waitForPageToLoad("30000"); - - return new QuestionnaireElement(selenium); - } - - /** - * Selects the menu item with the given name. - * @param title - */ - public void selectMenuItem(String title) { - selenium.click("ui=qti::menuItem(titleOfItem=" + title + ")"); - selenium.waitForPageToLoad("30000"); - } - - public boolean isSuspendPresent() { - return selenium.isElementPresent("ui=qti::suspendQuestionnaire()"); - } - - public boolean isCancelPresent() { - return selenium.isElementPresent("ui=qti::cancelQuestionnaire()"); - } - - /** - * Select the answer for the selected SingleChoice question type. - * @param answer - */ - public void setSingleChoiceSolution (String answer) { - QTIHelper.setSingleChoiceSolution(selenium, answer); - } - - /** - * Select the MultipleChoice answers. - * @param answers - */ - public void setMultipleChoiceSolution(String[] answers) { - QTIHelper.setMultipleChoiceSolution(selenium, answers); - } - - /** - * Fill in the answer for the given text fragment. - * TODO: LD: check if it works with more than 1 text fragments. - * @param textFragment - * @param answer - */ - public void fillInGap(String textFragment, String answer) { - QTIHelper.fillInGap(selenium, textFragment, answer); - } - - /** - * Fill in the essay text area. - * @param text - */ - public void fillInEssay (String text) { - selenium.type("ui=qti::questionnaireEssayTextArea()", text); - selenium.click("ui=qti::saveAnswer()"); - selenium.waitForPageToLoad("30000"); - } - - public void next() { - selenium.click("ui=qti::next()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/SCORM.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/SCORM.java deleted file mode 100644 index 43d5dddb49c..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/SCORM.java +++ /dev/null @@ -1,62 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the SCORM run page. - * @author Lavinia Dumitrescu - * - */ -public class SCORM extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public SCORM(Selenium selenium) { - super(selenium); - - // Check that we're on the right place - if(!selenium.isElementPresent("ui=course::content_scorm_scormPreview()")) { - throw new IllegalStateException("This is not the - SCORM run - page"); - } - } - - public void showSCORMLearningContent() { - selenium.click("ui=course::content_scorm_scormPreview()"); - selenium.waitForPageToLoad("30000"); - } - - public CourseRun back() throws Exception { - selenium.click("ui=course::content_scorm_back()"); - Thread.sleep(500); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/StructureElement.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/StructureElement.java deleted file mode 100644 index 640fce89cdf..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/StructureElement.java +++ /dev/null @@ -1,50 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Structure course run element. - * @author Lavinia Dumitrescu - * - */ -public class StructureElement extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public StructureElement(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - public String getPassedStatus() { - return selenium.getText("ui=course::content_passedFailedStatus()"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TestElement.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TestElement.java deleted file mode 100644 index 93b858aa2b3..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TestElement.java +++ /dev/null @@ -1,94 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Test course run element. - * @author Lavinia Dumitrescu - * - */ -public class TestElement extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public TestElement(Selenium selenium) { - super(selenium); - // TODO : LD: add check: where am I? - } - - /** - * Starts the current selected test. - * @return a TestRun instance. - */ - public TestRun startTest() { - if(selenium.isElementPresent("ui=commons::start()")) { - selenium.click("ui=commons::start()"); - selenium.waitForPageToLoad("30000"); - return new TestRun(selenium); - } else { - throw new IllegalStateException("This is not a test element - cannot start test!"); - } - } - - public boolean cannotStartTestAnymore() { - return !selenium.isElementPresent("ui=commons::start()"); - } - - /** - * - * @return the achieved score, if any, throws IllegalStateException otherwise. - */ - public String getAchievedScore() { - if(selenium.isElementPresent("ui=qti::yourScore()")) { - return selenium.getText("ui=qti::yourScore()"); - } - throw new IllegalStateException("There is no score information to be displayed yet."); - } - - public String getStatus() { - if(selenium.isElementPresent("ui=qti::yourStatus()")) { - return selenium.getText("ui=qti::yourStatus()"); - } - throw new IllegalStateException("There is no status information to be displayed yet."); - } - - public boolean isShowResultsPresent() { - return selenium.isElementPresent("ui=qti::showHideResults(text=Show results)"); - } - - public String getCommentFromTutor() { - if(selenium.isElementPresent("ui=qti::commentFromTutor()")) { - return selenium.getText("ui=qti::commentFromTutor()"); - } - System.out.println("No comment found"); - return ""; - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TestRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TestRun.java deleted file mode 100644 index fa0da5242b9..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TestRun.java +++ /dev/null @@ -1,201 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import java.util.Iterator; -import java.util.Map; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the TestRun page. - * - * @author Lavinia Dumitrescu - * - */ -public class TestRun extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public TestRun(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=qti::finishTest()")) { - throw new IllegalStateException("This is not the - Test run - page"); - } - } - - /** - * Finish and close this test. - * @return Returns a CourseRun instance. - * @throws Exception - */ - public TestElement finishTest(boolean assertAchievedScore, int referenceScore) throws Exception { - selenium.click("ui=qti::finishTest()"); - selenium.waitForPageToLoad("30000"); - assertTrue(selenium.getConfirmation().matches("^Do you really want to submit[\\s\\S]$")); - //check if results were saved - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - if (selenium.isTextPresent("Your results were saved")) break; - Thread.sleep(1000); - } - //check the score - if(assertAchievedScore) { - assertEquals(String.valueOf(referenceScore),selenium.getText("ui=qti::achievedScore()")); - } - //close test - selenium.click("ui=qti::closeTest()"); - selenium.waitForPageToLoad("30000"); - return new TestElement(selenium); - } - - /** - * Waits for confirmation: your results were saved, and closes test. - * The self test finishes silently, no explicit finish test command needed. - * @throws Exception - */ - public TestElement selfTestFinishedConfirm() throws Exception { - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (selenium.isTextPresent("Your results were saved.")) break; } catch (Exception e) {} - Thread.sleep(1000); - } - selenium.click("ui=qti::closeTest()"); - selenium.waitForPageToLoad("30000"); - return new TestElement(selenium); - } - - /*public TestElement closeTest() { - selenium.click("ui=qti::closeTest()"); - selenium.waitForPageToLoad("30000"); - return new TestElement(selenium); - }*/ - - /** - * - * @return - */ - public CourseRun suspendTest() { - if(!isSuspendPresent()) { - throw new IllegalStateException("No suspend test button available!"); - } - selenium.click("ui=qti::suspendTest()"); - selenium.waitForPageToLoad("30000"); - //TODO: LD: confirm suspend - return new CourseRun(selenium); - } - - /** - * - * @return - */ - public CourseRun cancelTest() { - if(!isCancelPresent()) { - throw new IllegalStateException("No cancel test button available!"); - } - selenium.click("ui=qti::cancelTest()"); - selenium.waitForPageToLoad("30000"); - //TODO: LD: confirm cancel - selenium.click("ui=qti::closeTest()"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - - public boolean isSuspendPresent() { - return selenium.isElementPresent("ui=qti::suspendTest()"); - } - - public boolean isCancelPresent() { - return selenium.isElementPresent("ui=qti::cancelTest()"); - } - - public void next() { - selenium.click("ui=qti::next()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Fill in the answer for the given text fragment. - * TODO: LD: check if it works with more than 1 text fragments. - * @param textFragment - * @param answer - */ - public void fillInGap(String textFragment, String answer) { - QTIHelper.fillInGap(selenium, textFragment, answer); - } - - /** - * Select in the KPrim answers. - * The input map contains as keys the answer text and as value a Boolean for correct or not. - * - * @param answerToCorrectMap - */ - public void setKprimSolution(Map<String, Boolean> answerToCorrectMap) { - Iterator<String> keyIterator = answerToCorrectMap.keySet().iterator(); - while(keyIterator.hasNext()) { - String currentAnswer = keyIterator.next(); - Boolean isCorrect = answerToCorrectMap.get(currentAnswer); - if(isCorrect) { - selenium.click("ui=qti::testKprimItemFormElementPlus(text=" + currentAnswer + ")"); - } else { - selenium.click("ui=qti::testKprimItemFormElementMinus(text=" + currentAnswer + ")"); - } - } - selenium.click("ui=qti::saveAnswer()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Select the MultipleChoice answers. - * @param answers - */ - public void setMultipleChoiceSolution(String[] answers) { - QTIHelper.setMultipleChoiceSolution(selenium, answers); - } - - /** - * Select the answer for the selected SingleChoice question type. - * @param answer - */ - public void setSingleChoiceSolution (String answer) { - QTIHelper.setSingleChoiceSolution(selenium, answer); - } - - /** - * Selects the menu item with the given name. - * @param title - */ - public void selectMenuItem(String title) { - selenium.click("ui=qti::menuItem(titleOfItem=" + title + ")"); - selenium.waitForPageToLoad("30000"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TopicAssignmentRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TopicAssignmentRun.java deleted file mode 100644 index d4a97a28300..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TopicAssignmentRun.java +++ /dev/null @@ -1,212 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * Represents a TopicAssignment course element in course run. - * - * @author lavinia - * - */ -public class TopicAssignmentRun extends CourseElement { - - public TopicAssignmentRun(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - /** - * - * @param title - * @param description - * @param limitVacancies - * @param vacanciesNumber - * @return - */ - public TopicEditor createTopic(String title, String description, boolean limitVacancies, int vacanciesNumber) { - selenium.click("ui=projectBroker::createTopic()"); - selenium.waitForPageToLoad("30000"); - if(title!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - } - if(description!=null) { - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Description)", description); - } - - //add limit vacancies, attach file, select email notification - selenium.click("ui=projectBroker::doLimitVacancies()"); - selenium.waitForPageToLoad("30000"); - if(vacanciesNumber>1) { - //change limit - selenium.type("ui=projectBroker::vacanciesNumber()", String.valueOf(vacanciesNumber)); - } - - //save - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - - return new TopicEditor(selenium); - } - - /** - * Accepts null as input params. If a parameter is null, do not change the defaults. - * @param title - * @param description - * @param faculty - * @param registrationStartDate - * @param registrationEndDate - * @param dueStartDate - * @param dueEndDate - * @param limitVacancies - * @param vacanciesNumber - * @param attachment - * @param emailNotification - * @return - */ - @Deprecated - public TopicEditor createTopic(String title, String description, String faculty, - String registrationStartDate, String registrationEndDate, String dueStartDate, String dueEndDate, - boolean limitVacancies, int vacanciesNumber, String attachment, boolean emailNotification) { - - selenium.click("ui=projectBroker::createTopic()"); - selenium.waitForPageToLoad("30000"); - if(title!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - } - if(description!=null) { - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Description)", description); - } - - //TODO: LD choose faculty - - //add registration start and end date - //WARNING: NO DATE CORRECTNESS CHECK IS PERFORMED! - if(registrationStartDate!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Registration)", registrationStartDate); - } - if(registrationEndDate!=null) { - selenium.type("ui=projectBroker::registrationDeadline()",registrationEndDate); - } - //add due date starting and end date - if(dueStartDate!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Due date)", dueStartDate); - } - if(dueEndDate!=null) { - selenium.type("ui=projectBroker::dueDeadline()",dueEndDate); - } - - //TODO: LD: add limit vacancies, attach file, select email notification - - //save - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - - return new TopicEditor(selenium); - } - - public boolean hasTopic(String topicName) { - if(selenium.isElementPresent("ui=projectBroker::topicLink(nameOfTopic=" + topicName + ")")) { - return true; - } - return false; - } - - public TopicEditor openTopic(String topicName) { - selenium.click("ui=projectBroker::topicLink(nameOfTopic=" + topicName + ")"); - selenium.waitForPageToLoad("30000"); - return new TopicEditor(selenium); - } - - public boolean hasVacancies(String topicName) { - if(selenium.isElementPresent("ui=projectBroker::hasVacancies(nameOfTopic=" + topicName + ")")) { - return true; - } - return false; - } - - public boolean isFilled(String topicName) { - if(selenium.isElementPresent("ui=projectBroker::filled(nameOfTopic=" + topicName + ")")) { - return true; - } - return false; - } - - public boolean isTemporaryRegisterd(String topicName) { - if(selenium.isElementPresent("ui=projectBroker::temporaryRegistration(nameOfTopic=" + topicName + ")")) { - return true; - } - return false; - } - - public boolean isRegistered(String topicName) { - if(selenium.isElementPresent("ui=projectBroker::isRegistered(nameOfTopic=" + topicName + ")")) { - return true; - } - return false; - } - - public boolean hasParticipantsAccepted(String topicName) { - if(selenium.isElementPresent("ui=projectBroker::participantsAccepted(nameOfTopic=" + topicName + ")")) { - return true; - } - return false; - } - - public boolean hasCheckParticipants(String topicName) { - if(selenium.isElementPresent("ui=projectBroker::checkParticipants(nameOfTopic=" + topicName + ")")) { - return true; - } - return false; - } - - public boolean canSelectTopic(String topicName) { - if(selenium.isElementPresent("ui=projectBroker::selectTopic(nameOfTopic=" + topicName + ")")) { - return true; - } - return false; - } - - public void selectTopic(String topicName) { - selenium.click("ui=projectBroker::selectTopic(nameOfTopic=" + topicName + ")"); - selenium.waitForPageToLoad("30000"); - } - - public boolean canDeselect(String topicName) { - if(selenium.isElementPresent("ui=projectBroker::deselectTopic(nameOfTopic=" + topicName + ")")) { - return true; - } - return false; - } - - public boolean canCreateTopic() { - if(selenium.isElementPresent("ui=projectBroker::createTopic()")) { - return true; - } - return false; - } - - public boolean hasTutoredGroup(String groupName) { - return getCourseRun().hasTutoredGroup(groupName); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TopicEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TopicEditor.java deleted file mode 100644 index d25cc2b58d9..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/TopicEditor.java +++ /dev/null @@ -1,236 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import java.util.List; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * Topic editor, this is role independent. See the javadoc for role specific info. - * - * @author lavinia - * - */ -public class TopicEditor extends OLATSeleniumWrapper { - - public TopicEditor(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - public TopicAssignmentRun back() { - selenium.click("ui=commons::backLink()"); - selenium.waitForPageToLoad("30000"); - return new TopicAssignmentRun(selenium); - } - - private void selectFolderTab() { - if(selenium.isElementPresent("ui=projectBroker::folder_folderTab()")) { - selenium.click("ui=projectBroker::folder_folderTab()"); - selenium.waitForPageToLoad("30000"); - } - } - - public boolean hasDropbox() { - selectFolderTab(); - if (selenium.isElementPresent("ui=projectBroker::folder_dropboxDiv()")) { - return true; - } - return false; - } - - public boolean hasFileInDropBoxFolder(String folderName, String fileName) { - selectFolderTab(); - //if it has folder, select it - if (selenium.isElementPresent("ui=projectBroker::folder_dropBoxFolderLink(folderName=" + folderName + ")")) { - selenium.click("ui=projectBroker::folder_dropBoxFolderLink(folderName=" + folderName + ")"); - selenium.waitForPageToLoad("30000"); - } - //it has file - if(selenium.isElementPresent("ui=projectBroker::folder_dropBoxFolderLink(folderName=" + fileName + ")")) { - return true; - } - return false; - } - - /** - * For students. - * @param fileName - */ - public void uploadFileInDropBox(String remoteFileName) { - selectFolderTab(); - selenium.click("ui=projectBroker::folder_uploadFile()"); - selenium.waitForPageToLoad("90000"); - selenium.click("ui=projectBroker::folder_uploadFileInOverlay()"); - selenium.waitForPageToLoad("90000"); - selenium.type("ui=upload::fileChooser()", remoteFileName); - selenium.click("ui=upload::submit()"); - selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - } - - public boolean hasReturnbox() { - selectFolderTab(); - if (selenium.isElementPresent("ui=projectBroker::folder_returnboxDiv()")) { - return true; - } - return false; - } - - public boolean hasReturnboxFolder(String folderName) { - selectFolderTab(); - //if (selenium.isElementPresent("ui=projectBroker::folder_returnboxFolderCheckbox(folderName=" + folderName + ")")) { - if (selenium.isElementPresent("ui=projectBroker::folder_returnBoxFolderLink(folderName=" + folderName + ")")) { - return true; - } - return false; - } - - public boolean hasFileInReturnBoxFolder(String fileName) { - selectFolderTab(); - //it has file - if(selenium.isElementPresent("ui=projectBroker::folder_returnBoxFolderLink(folderName=" + fileName + ")")) { - return true; - } - return false; - } - - - /** - * Accessible only for tutors. - */ - private void edit() { - - } - - - /** - * Accessible only for tutors. - * @return - */ - public TopicAssignmentRun delete() { - selenium.click("ui=projectBroker::createTopic()"); - selenium.waitForPageToLoad("30000"); - return new TopicAssignmentRun(selenium); - } - - - /** - * Accessible only for tutors. - */ - private void createDocument(String name) { - - } - - - /** - * Accessible only for tutors. - * TODO: check if could use Folder.java - * @param filename - * @param title - * @param description - */ - public void uploadFileInReturnBoxFolder(String folderName, String remoteFileName) { - selectFolderTab(); - //select folder - selenium.click("ui=projectBroker::folder_returnBoxFolderLink(folderName=" + folderName + ")"); - selenium.waitForPageToLoad("30000"); - //upload file in the current folder - selenium.click("ui=briefCase::uploadFile()"); - selenium.waitForPageToLoad("90000"); - selenium.type("ui=upload::fileChooser()", remoteFileName); - selenium.click("ui=upload::submit()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Accessible only for tutors. - * @param name - */ - private void createFolder(String name) { - - } - - public boolean hasAdminTab() { - if(selenium.isElementPresent("ui=projectBroker::administrationOfParticipants_adminTab()")) { - return true; - } - return false; - } - - private void selectAminTab() { - if(selenium.isElementPresent("ui=projectBroker::administrationOfParticipants_adminTab()")) { - selenium.click("ui=projectBroker::administrationOfParticipants_adminTab()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Accessible only for tutors. - * @param userList - */ - private void addParticipants(List<String> userList) { - - } - - public boolean hasParticipant(String username) { - selectAminTab(); - if(selenium.isElementPresent("ui=projectBroker::administrationOfParticipants_participants_checkUser(userName=" + username + ")")) { - return true; - } - return false; - } - - - public boolean hasCandidate(String username) { - selectAminTab(); - if(selenium.isElementPresent("ui=projectBroker::administrationOfParticipants_candidates_checkUser(userName=" + username + ")")) { - return true; - } - return false; - } - - public void moveAsParticipant(String username) { - selectAminTab(); - if(selenium.isElementPresent("ui=projectBroker::administrationOfParticipants_candidates_checkUser(userName=" + username + ")")) { - selenium.click("ui=projectBroker::administrationOfParticipants_candidates_checkUser(userName=" + username + ")"); - selenium.click("ui=projectBroker::administrationOfParticipants_candidates_moveToParticipants()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - } else { - throw new IllegalStateException("No participant with this username found!"); - } - } - - /** - * Accessible only for tutors. - * @param userList - */ - private void addAuthors(List<String> userList) { - - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/WikiRun.java b/src/test/java/org/olat/test/util/selenium/olatapi/course/run/WikiRun.java deleted file mode 100644 index 7a0a112f7c4..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/course/run/WikiRun.java +++ /dev/null @@ -1,197 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.course.run; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the Wiki course Run element. - * @author Lavinia Dumitrescu - * - */ -public class WikiRun extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public WikiRun(Selenium selenium) { - super(selenium); - // Check that we're on the right place - //if(!selenium.isTextPresent("Article")) { - if(!selenium.isElementPresent("ui=wiki::sideNavigation_index()")) { - throw new IllegalStateException("This is not the - Wiki - page"); - } - } - - /** - * Edit page, save, and go to Article link. - * @param text - */ - public void editPage(String text) { - openEditor(); - selenium.click("ui=wiki::edit_editFormTextarea()"); - selenium.type("ui=wiki::edit_editFormTextarea()", text); - selenium.click("ui=commons::flexiForm_saveButton()"); //this should clean the cache - //selenium.waitForPageToLoad("30000"); - selenium.click("ui=wiki::topNavigation_article()"); //release lock - //selenium.waitForPageToLoad("30000"); - } - - public void openEditor() { - if(selenium.isElementPresent("ui=wiki::topNavigation_editPage()")) { - selenium.click("ui=wiki::topNavigation_editPage()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * - * @param filepath - * @param mediaLabel - * @throws Exception - */ - public void insertMedia(String filepath, String mediaLabel) throws Exception { - openEditor(); - if(selenium.isElementPresent("ui=wiki::edit_uploadFileButton()")) { - selenium.click("ui=wiki::edit_uploadFileButton()"); - Thread.sleep(1000); - selenium.type("ui=upload::fileChooser()", filepath); - selenium.click("ui=upload::submit()"); - //selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(3000); - } catch (Exception e) { - } - selenium.select("mediaFileChooser", "label=" + mediaLabel); - selenium.click("ui=wiki::edit_insertFileButton()"); - selenium.click("ui=commons::save()"); - //selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(3000); - } catch (Exception e) { - } - selenium.click("ui=wiki::topNavigation_article()"); - selenium.waitForPageToLoad("30000"); - } else { - throw new IllegalStateException("Upload file - link not available"); - } - } - - /** - * Creates a wiki page via the Create article, or searches a wiki page, if already selected. - * @param wikiPage - * @param articleText, could be null if search is wanted. - */ - public void createOrSearchArticle(String wikiPage, String articleText) { - //searches wikiPage and creates it if not already created - selenium.type("ui=wiki::sideNavigation_createInput()", wikiPage); - selenium.click("ui=wiki::sideNavigation_createButton()"); - selenium.waitForPageToLoad("30000"); - //new page created, edit it - if(selenium.isElementPresent("ui=wiki::sideNavigation_clickAWikiPage(nameOfWikiPage=" + wikiPage + ")")) { - selenium.click("ui=wiki::sideNavigation_clickAWikiPage(nameOfWikiPage=" + wikiPage + ")"); - //selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(3000); - } catch (Exception e) { - } - selenium.type("ui=wiki::edit_editFormTextarea()", articleText); - selenium.click("ui=commons::save()"); - //selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(3000); - } catch (Exception e) { - } - } else { - System.out.println("The wiki page is supposed to already exist!"); - } - } - - /** - * Searches article with this title. - * @param wikiPage - */ - public void searchArticle(String wikiPage) { - selenium.type("ui=wiki::sideNavigation_searchInput()", wikiPage); - selenium.click("ui=wiki::sideNavigation_searchButton()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Selects Article link. - * - */ - public void showArticle() { - selenium.click("ui=wiki::topNavigation_article()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Selects index. - * - */ - public void selectIndex() { - selenium.click("ui=wiki::sideNavigation_index()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Click the From a-z link. - * - */ - public void selectFromAToZ() { - selenium.click("ui=wiki::sideNavigation_from-a-z()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Edit menu and go to the Article link. - * @param wikiString - */ - public void editMenu(String wikiString) { - selenium.click("ui=wiki::sideNavigation_editWikiMenu()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=wiki::edit_editFormTextarea()", wikiString); - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=wiki::topNavigation_article()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Show versions and click on version compare link. - * - */ - public void showVersionsAndCompare() { - selenium.click("ui=wiki::topNavigation_versions()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=wiki::versions_compare()"); - selenium.waitForPageToLoad("30000"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/folder/Folder.java b/src/test/java/org/olat/test/util/selenium/olatapi/folder/Folder.java deleted file mode 100644 index 37b69d7221d..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/folder/Folder.java +++ /dev/null @@ -1,336 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.folder; - -import java.util.Iterator; -import java.util.List; - -import org.olat.test.util.selenium.SeleniumHelper; -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; - -import com.mchange.util.AssertException; -import com.thoughtworks.selenium.Selenium; - -/** - * Generic Folder abstraction for the FolderRunController. - * Supposed to be used from: Personal folder, Storage folder in course editor, Folder node in course run, etc. - * - * @author Lavinia Dumitrescu - * - */ -public class Folder extends OLATSeleniumWrapper { - - public Folder(Selenium selenium) { - super(selenium); - //Check that we're on the right place - if(!selenium.isElementPresent("ui=briefCase::folderComponent()")) { - throw new IllegalStateException("This is not the - Folder - page"); - } - } - - /** - * Select item. - * @param name - */ - public void selectFileOrFolder(String name) { - if(name!=null && selenium.isElementPresent("ui=briefCase::clickBriefcaseEntry(linkText=" + name + ")")) { - selenium.click("ui=briefCase::clickBriefcaseEntry(linkText=" + name + ")"); - selenium.waitForPageToLoad("30000"); - } - } - - public void selectLink(String link, boolean waitForPageToLoad) { - selenium.click("ui=briefCase::clickBriefcaseEntry(linkText=" + link + ")"); - if(waitForPageToLoad) { - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Click on checkbox of an item. - * @param name - */ - public void checkFileOrFolder(String name) { - SeleniumHelper.safeWait(100); - if(name!=null && selenium.isElementPresent("ui=briefCase::selectBriefcaseCheckBox(linkText=" + name + ")")) { - selenium.click("ui=briefCase::selectBriefcaseCheckBox(linkText=" + name + ")"); - } - } - - /** - * Closes storage folder. - * @return - */ - public CourseEditor closeStorageFolder() { - selenium.click("ui=overlay::overlayClose()"); - selenium.waitForPageToLoad("30000"); - return new CourseEditor(selenium); - } - - - /** - * Creates a file with a given name in the current container. - * It checks if the filename is valid and returns true if valid, false otherwise. - * Closes the overlay. - * @param fileName - */ - public boolean createFile(String folder, String fileName, String text) { - selectFileOrFolder(folder); - - selenium.click("ui=briefCase::createFile()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=briefCase::createFileName()", fileName); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Create document)"); - selenium.waitForPageToLoad("30000"); - if(selenium.isElementPresent("ui=commons::flexiForm_formErrorMsg()")) { - selenium.click("ui=commons::flexiForm_cancelButton()"); - selenium.waitForPageToLoad("30000"); - return false; - } - //selenium.type(locator, text) - //TODO: LD: add text - if(fileName.endsWith(".txt")) { - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Content of document)", text); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } else if (fileName.endsWith(".html")) { - selenium.click("ui=briefCase::htmlEditorSaveAndClose()"); - selenium.waitForPageToLoad("30000"); - } - return true; - } - - /** - * Creates a folder if does not encounter a error message: either because the folder already exists, - * or because the folder name is invalid. - * @param folderName - * @return Returns true if folder successful created, false otherwise. - */ - public boolean createFolder(String folderName) { - selenium.click("ui=briefCase::createFolder()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Name)", folderName); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Create folder)"); - selenium.waitForPageToLoad("30000"); - if(selenium.isElementPresent("ui=commons::flexiForm_formErrorMsg()")) { - selenium.click("ui=commons::flexiForm_cancelButton()"); - return false; - } - return true; - } - - /** - * Uploads a file in the specified folder, or in the current folder if none specified. - * @param folder could be null. - * @param fileName - */ - public void uploadFile(String folder,String fileName) { - selectFileOrFolder(folder); - - boolean uploadIsThere = false; - int retries = 5; - while(!uploadIsThere && retries > 1){ - selenium.click("ui=briefCase::uploadFile()"); - selenium.waitForPageToLoad("90000"); - uploadIsThere = selenium.isElementPresent("ui=upload::fileChooser()"); - if(!uploadIsThere){ - retries--; - try { - Thread.sleep(100); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - selenium.type("ui=upload::fileChooser()", fileName); - selenium.click("ui=upload::submit()"); - selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - } - - /** - * Upload, overwrite or rename. - * @param folder - * @param fileName - * @param overwrite - */ - public boolean uploadWithOverwrite(String folder,String fileName, boolean overwrite) { - selectFileOrFolder(folder); - - boolean overwritten = false; - - selenium.click("ui=briefCase::uploadFile()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=upload::fileChooser()", fileName); - selenium.click("ui=upload::submit()"); - selenium.waitForPageToLoad("30000"); - if(overwrite && selenium.isTextPresent("Overwrite")) { - selenium.click("ui=commons::anyLink(linkText=Overwrite)"); - overwritten = true; - } else if(!overwrite && selenium.isTextPresent("Overwrite")) { - //TODO: LD: implement this! - } - selenium.waitForPageToLoad("30000"); - return overwritten; - } - - /** - * Delete the item with the input title. - * @param title - */ - public void deleteItem(String title) { - if(selenium.isElementPresent("ui=briefCase::selectBriefcaseCheckBox(linkText=" + title + ")")) { - selenium.click("ui=briefCase::selectBriefcaseCheckBox(linkText=" + title + ")"); - selenium.click("ui=briefCase::buttonDelete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - System.out.println("Item deleted: " + title); - } else { - System.out.println("No item found for deletion: " + title); - } - } - - public void deleteSelection() { - if(selenium.isElementPresent("ui=briefCase::buttonDelete()")) { - selenium.click("ui=briefCase::buttonDelete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - System.out.println("Selection deleted"); - } else { - System.out.println("No item deleted."); - } - } - - public void moveSelection(List selection) { - - } - - public void copySelection(List selection) { - - } - - /** - * Return true if successfully zipped. - * @param selection - * @param zipName - * @return - */ - public boolean zipSelection(List<String> selection, String zipName) { - Iterator<String> selIterator = selection.iterator(); - while(selIterator.hasNext()) { - String item = selIterator.next(); - checkFileOrFolder(item); - } - //buttonZip - selenium.click("ui=briefCase::buttonZip()"); - selenium.waitForPageToLoad("30000"); - //enter zip name - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Name of new Zip file)", zipName); - - selenium.click("ui=briefCase::zipFiles()"); - selenium.waitForPageToLoad("30000"); - if(selenium.isElementPresent("ui=briefCase::zipFiles()")) { - //todo: cancel - return false; - } - return true; - } - - /** - * Cancels zip workflow if any started. - */ - public void cancelZipSelection() { - if(selenium.isElementPresent("ui=briefCase::zipFiles()")) { - selenium.click("ui=commons::flexiForm_cancelButton()"); - selenium.waitForPageToLoad("30000"); - } - } - - public void unzipSelection(List selection) { - - } - - /** - * - * @param fileFolderName - * @param newName - * @param title - * @param description - */ - public void editMetadata(String fileFolderName, String newName, String title, String description) { - selenium.click("ui=briefCase::editMetadata(linkText=" + fileFolderName + ")"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=File name)", newName); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - //TODO: add description - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - public void editTxtFile(String fileName, String content) { - selenium.click("ui=briefCase::editFile(linkText=" + fileName + ")"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Content of document)", content); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - public String getText(String fileName) { - selenium.click("ui=briefCase::editFile(linkText=" + fileName + ")"); - selenium.waitForPageToLoad("30000"); - String content = selenium.getValue("ui=commons::flexiForm_labeledTextArea(formElementLabel=Content of document)"); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - return content; - } - - public void editHtmlFile(String fileName, String content) { - - } - - public void selectAll() { - if(selenium.isElementPresent("ui=briefCase::selectAll()")) { - selenium.click("ui=briefCase::selectAll()"); - } - } - - public void deselectAll() { - - } - - public boolean isFileOrFolderPresent(String fileName) { - return selenium.isElementPresent("ui=briefCase::clickBriefcaseEntry(linkText=" + fileName + ")"); - } - - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/group/Group.java b/src/test/java/org/olat/test/util/selenium/olatapi/group/Group.java deleted file mode 100644 index bc5a6ad4138..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/group/Group.java +++ /dev/null @@ -1,144 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.group; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.components.ChatComponent; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.Forum; - -import com.thoughtworks.selenium.Selenium; - -/** - * @author Lavinia Dumitrescu - * - */ -public class Group extends OLATSeleniumWrapper { - - private String groupName; - - /** - * @param selenium - */ - public Group(Selenium selenium, String groupName) { - super(selenium); - this.groupName = groupName; - try { - //delay at load group since 30.08.09 - Thread.sleep(10000); - } catch (Exception e) { - } - //Check that we're on the right place - if(!selenium.isTextPresent(groupName)) { - throw new IllegalStateException("This is not the - Group - page"); - } - } - - /** - * TODO: LD: check this out!!! - * Use carefully this method. - * This starts a course if the group was achieved via the My groups portlet, - * else if the group was achieved via the GroupManager, this doesn't return - * a CourseRun. - * <p> - * It is assumed that there is only one course associated with this group. - * - * @return Returns a CourseRun instance. - */ - public CourseRun startCourse() { - selenium.click("ui=group::menu_course()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=group::content_startCourse()"); - selenium.waitForPageToLoad("30000"); - if(!selenium.isTextPresent("General")) { - throw new IllegalStateException("This is not the - CourseRun - page, this Group was not selected via the My groups portlet"); - } - return new CourseRun(selenium); - } - - public void selectInfo() { - selenium.click("ui=group::menu_information()"); - selenium.waitForPageToLoad("30000"); - } - - public void selectCalendar() { - selenium.click("ui=group::menu_calendar()"); - selenium.waitForPageToLoad("30000"); - } - - public void selectMembers() { - selenium.click("ui=group::menu_members()"); - selenium.waitForPageToLoad("30000"); - } - - public Forum selectForum() { - selenium.click("ui=group::menu_forum()"); - selenium.waitForPageToLoad("30000"); - return new Forum(selenium); - } - - public void selectEmail() { - selenium.click("ui=group::menu_email()"); - selenium.waitForPageToLoad("30000"); - } - - public void selectFolder() { - selenium.click("ui=group::menu_folder()"); - selenium.waitForPageToLoad("30000"); - } - - public void selectWiki() { - selenium.click("ui=group::menu_wiki()"); - //outcommented selenium.waitForPageToLoad on 28.04.2010 to avoid getting the "Translation Issue encountered!" error - selenium.waitForPageToLoad("30000"); - } - - public boolean hasWiki() { - return selenium.isElementPresent("ui=group::menu_wiki()"); - } - - public GroupAdmin selectAdministration() { - selenium.click("ui=group::menu_administration()"); - selenium.waitForPageToLoad("30000"); - return new GroupAdmin(selenium); - } - - public ChatComponent selectChat() { - selenium.click("ui=group::menu_chat()"); - selenium.waitForPageToLoad("30000"); - return new ChatComponent(selenium); - } - - public void close(String groupName) { - if(selenium.isElementPresent("ui=tabs::closeGroup(nameOfGroup=" + groupName + ")")) { - selenium.click("ui=tabs::closeGroup(nameOfGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - } else { - System.out.println("Could not close this group!"); - } - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/group/GroupAdmin.java b/src/test/java/org/olat/test/util/selenium/olatapi/group/GroupAdmin.java deleted file mode 100644 index 27d3d64b633..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/group/GroupAdmin.java +++ /dev/null @@ -1,418 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.group; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the GroupAdministration page. - * - * @author Lavinia Dumitrescu - * - */ -public class GroupAdmin extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public GroupAdmin(Selenium selenium) { - super(selenium); - sleepThread(3000); - //Check that we're on the right place - if(!selenium.isElementPresent("ui=group::content_tools_tabTools()")) { - throw new IllegalStateException("This is not the - Administration group - page"); - } - } - - /** - * Adds participants and owners to the current group, looping through Add user(s). - * @param participants - * @param owners - * @throws Exception - */ - public void addMembers(String[] participants, String[] owners) throws Exception { - selectMembersTab(); - - //add participants - for(String userName:participants) { - selenium.click("ui=commons::usertable_participants_addUsers()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", userName); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - Thread.sleep(5000); - if(selenium.isElementPresent("ui=commons::usertable_adduser_checkUsername(nameOfUser=" + userName + ")")) { - selenium.click("ui=commons::usertable_adduser_checkUsername(nameOfUser=" + userName + ")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - } else { - System.out.println("GroupAdmin.addMembers - since no user found, skip participant: " + userName); - } - } - //add owners - for(String userName:owners) { - selenium.click("ui=commons::usertable_owners_addUsers()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", userName); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_checkUsername(nameOfUser=" + userName + ")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Import participants to this group. Accepts a formatted input string, one username per row. - * Assumes that there is at least a new user in the participants list - * @param participants - */ - public boolean importParticipants(String participants) { - selectMembersTab(); - if(participants==null || participants.trim().equals("")) { - throw new IllegalArgumentException("participants string is not valid!"); - } - - selenium.click("ui=commons::usertable_participants_import()"); - selenium.waitForPageToLoad("30000"); - //wizard - //step 1: enter username and press next - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=User names)", participants); - sleepThread(3000); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Next)"); - //selenium.waitForPageToLoad("30000"); - sleepThread(3000); - //step2: suppose they are all new users - if(selenium.isElementPresent("ui=commons::anyLink(linkText=Next)")) { - selenium.click("ui=commons::anyLink(linkText=Next)"); - selenium.waitForPageToLoad("30000"); - //step 3: do not sent email, just go on - selenium.click("ui=commons::usertable_adduser_finish()"); - //selenium.waitForPageToLoad("30000"); - sleepThread(3000); - return true; - } else if(selenium.isElementPresent("ui=commons::anyLink(linkText=Next)")) { - //cancel wizard - selenium.click("ui=commons::usertable_adduser_cancelWizard()"); - selenium.waitForPageToLoad("30000"); - } - return false; - } - - public void removeAllWaiting() { - selectMembersTab(); - if (selenium.isElementPresent("ui=commons::usertable_waitingList_selectAll()")) { - selenium.click("ui=commons::usertable_waitingList_selectAll()"); - selenium.click("ui=commons::usertable_waitingList_remove()"); - selenium.waitForPageToLoad("30000"); - //per default is "Send e-mail" not checked - //selenium.check("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + Send e-mail + ")") - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=dialog::Yes()"); - selenium.waitForPageToLoad("30000"); - } - } - - public void removeAllParticipants() { - selectMembersTab(); - if (selenium.isElementPresent("ui=commons::usertable_participants_selectAll()")) { - selenium.click("ui=commons::usertable_participants_selectAll()"); - selenium.click("ui=commons::usertable_participants_remove()"); - selenium.waitForPageToLoad("30000"); - //per default is "Send e-mail" not checked - //selenium.check("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + Send e-mail + ")") - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=dialog::Yes()"); - selenium.waitForPageToLoad("30000"); - } - } - - public void removeParticipant(String userName, boolean confirmRemoval) { - selectMembersTab(); - selenium.check("ui=commons::usertable_userlist_checkUsername(nameOfUser=" + userName + ")"); - selenium.click("ui=commons::usertable_participants_remove()"); - selenium.waitForPageToLoad("30000"); - //per default is "Send e-mail" not checked - //selenium.check("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + Send e-mail + ")") - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - if(confirmRemoval) { - selenium.click("ui=dialog::Yes()"); - selenium.waitForPageToLoad("30000"); - } - } - - public void confirmRemove() { - selenium.click("ui=dialog::Yes()"); - } - - private void selectMembersTab() { - //go to the Members tab, if not already there - if(selenium.isElementPresent("ui=group::content_members_tabMembers()")) { - selenium.click("ui=group::content_members_tabMembers()"); - selenium.waitForPageToLoad("30000"); - } - } - - private void selectToolsTab() { - //go to the Tool tab, if not already there - if(selenium.isElementPresent("ui=group::content_tools_tabTools()")) { - selenium.click("ui=group::content_tools_tabTools()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * - * @return Returns a CourseRun instance. - */ - /*public CourseRun close() { - selenium.click("ui=groupManagement::toolbox_groupManagement_close()"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - }*/ - - /** - * Change title and description, if in Administration page. - * @param groupName - * @param groupDescription - */ - public void setTitleAndDescription(String groupName, String groupDescription) { - //go to the Description tab, if not already there - if(selenium.isElementPresent("ui=group::content_description_tabDescription()")) { - selenium.click("ui=group::content_description_tabDescription()"); - selenium.waitForPageToLoad("30000"); - } - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Group name)", groupName); - //the description shows up in an iframe - selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.type("ui=commons::tinyMce_styledTextArea()", groupDescription); - selenium.selectFrame("relative=top"); - selenium.click("ui=commons::flexiForm_finishButton()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Toggle tool selection, if in Administration/Tools page. - * (e.g. if you want to change the selection ON/OFF for wiki, just pass true for this parameter) - * @param toggleInfo - * @param toggleContactForm - * @param toggleCalendar - * @param toggleFolder - * @param toggleForum - * @param toggleWiki - */ - public void setTools(boolean toggleInfo, boolean toggleContactForm, boolean toggleCalendar, boolean toggleFolder, boolean toggleForum, boolean toggleWiki, boolean toggleChat) { - selectToolsTab(); - if(toggleInfo) { - selenium.click("ui=group::content_tools_collaborationTools_information()"); - } - try { Thread.sleep(3000); } catch (Exception e) {} - if(toggleContactForm) { - selenium.click("ui=group::content_tools_collaborationTools_contactForm()"); - } - try { Thread.sleep(3000); } catch (Exception e) {} - if(toggleCalendar) { - selenium.click("ui=group::content_tools_collaborationTools_calendar()"); - } - try { Thread.sleep(3000); } catch (Exception e) {} - if(toggleFolder) { - selenium.click("ui=group::content_tools_collaborationTools_folder()"); - } - try { Thread.sleep(3000); } catch (Exception e) {} - if(toggleForum) { - selenium.click("ui=group::content_tools_collaborationTools_forum()"); - } - try { Thread.sleep(3000); } catch (Exception e) {} - if(toggleWiki) { - selenium.click("ui=group::content_tools_collaborationTools_wiki()"); - } - try { Thread.sleep(3000); } catch (Exception e) {} - if(toggleChat && selenium.isElementPresent("ui=group::content_tools_collaborationTools_chat()")) { - selenium.click("ui=group::content_tools_collaborationTools_chat()"); - } - try { Thread.sleep(3000); } catch (Exception e) {} - //save button was removed - //selenium.click("ui=commons::flexiForm_saveButton()"); - //selenium.waitForPageToLoad("30000"); - } - - public boolean isChatSelected() { - selectToolsTab(); - return selenium.isChecked("ui=group::content_tools_collaborationTools_chat()"); - } - - public boolean isWikiSelected() { - selectToolsTab(); - return selenium.isChecked("ui=group::content_tools_collaborationTools_wiki()"); - } - - /** - * Sets info, only if the info text field is available. - * @param text - */ - public void setInfo(String text) { - // go to the Tool tab, if not already there - if(selenium.isElementPresent("ui=group::content_tools_tabTools()")) { - selenium.click("ui=group::content_tools_tabTools()"); - selenium.waitForPageToLoad("30000"); - } - //selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - if(selenium.isElementPresent("ui=group::content_tools_informationForMembers_formFieldInformationMembers()")) { - selenium.click("ui=group::content_tools_informationForMembers_formFieldInformationMembers()"); - selenium.type("ui=group::content_tools_informationForMembers_formFieldInformationMembers()", text); - //selenium.selectFrame("relative=top"); - selenium.click("ui=group::content_tools_informationForMembers_save()"); - } else { - throw new IllegalStateException("Select Info in Tools first!"); - } - } - - /** - * - * @param text - */ - public void selectCalendarWriteAccess(String text) { - // go to the Tool tab, if not already there - if(selenium.isElementPresent("ui=group::content_tools_tabTools()")) { - selenium.click("ui=group::content_tools_tabTools()"); - selenium.waitForPageToLoad("30000"); - } - if(selenium.isElementPresent("ui=group::content_tools_calendarAccess_save()") && !selenium.isChecked("ui=group::content_tools_calendarAccess_calendarAccess(label=" + text + ")")) { - selenium.click("ui=group::content_tools_calendarAccess_calendarAccess(label=" + text + ")"); - selenium.click("ui=group::content_tools_calendarAccess_save()"); - selenium.waitForPageToLoad("30000"); - } else if(!selenium.isElementPresent("ui=group::content_tools_calendarAccess_save()")) { - throw new IllegalStateException("Select Calendar in Tools first!"); - } - } - - /** - * Select the description tab, if not already there, and enable/disable waiting list and/or move up, save. - * @param maxParticipants - * @param hasWaitingList - * @param moveUp - */ - public void configureParticipantsAndWaitingList(int maxParticipants, Boolean hasWaitingList, Boolean moveUp) { - if(selenium.isElementPresent("ui=group::content_description_tabDescription()")) { - selenium.click("ui=group::content_description_tabDescription()"); - selenium.waitForPageToLoad("30000"); - } - selenium.type("ui=groupManagement::content_learningGroupsEditor_maxParticipants()", String.valueOf(maxParticipants)); - if (hasWaitingList!=null && hasWaitingList && !selenium.isChecked("ui=groupManagement::content_learningGroupsEditor_enableWaitinglist()")) { - //enableWaitinglist - selenium.check("ui=groupManagement::content_learningGroupsEditor_enableWaitinglist()"); - } else if (hasWaitingList!=null && !hasWaitingList && selenium.isChecked("ui=groupManagement::content_learningGroupsEditor_enableWaitinglist()")) { - selenium.uncheck("ui=groupManagement::content_learningGroupsEditor_enableWaitinglist()"); - } - if (moveUp!=null && moveUp && !selenium.isChecked("ui=groupManagement::content_learningGroupsEditor_moveUpAutomatically()")) { - //moveUpAutomatically - selenium.check("ui=groupManagement::content_learningGroupsEditor_moveUpAutomatically()"); - } else if (moveUp!=null && !moveUp && selenium.isChecked("ui=groupManagement::content_learningGroupsEditor_moveUpAutomatically()")) { - selenium.uncheck("ui=groupManagement::content_learningGroupsEditor_moveUpAutomatically()"); - } - - selenium.click("ui=commons::flexiForm_finishButton()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * - * @return - */ - public Group start(String name) { - selenium.click("ui=group::menu_startCourse()"); - selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(30000); - } catch (InterruptedException e) { - } - return new Group(selenium, name); - } - - /** - * - * @param groupName - */ - public void close(String groupName) { - if(selenium.isElementPresent("ui=tabs::closeGroup(nameOfGroup=" + groupName + ")")) { - selenium.click("ui=tabs::closeGroup(nameOfGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - } else { - System.out.println("Call GroupManager.close() to close this!"); - } - } - - public String getMaxNumParticipants() { - return selenium.getValue("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_maxParticipants()"); - } - - /** - * Change displayXXX if the corresponding input is not null. - * If one input param is null, do nothing for that one. - * @param dsiplayOwners - * @param displayParticipants - * @param displayWaitingList - */ - public void setMemberDisplayOptions(Boolean displayOwners, Boolean displayParticipants, Boolean displayWaitingList) { - selectMembersTab(); - //TODO: impl on/off displayOwners - sleepThread(3000); - - //TODO:LD: remove debug code! - if(!selenium.isTextPresent("Display members")) { - System.out.println("Display members - still unavailable"); - sleepThread(3000); - if(!selenium.isTextPresent("Display members")) { - System.out.println("Display members - still unavailable"); - } - } else if(selenium.isTextPresent("Members can see")){ - System.out.println("Members can see..."); - if(selenium.isTextPresent("Members can see participants")) { - System.out.println("Members can see participants"); - } - } - - //on/off displayParticipants - if(displayParticipants!=null && displayParticipants && !selenium.isChecked("ui=commons::flexiForm_labeledCheckbox(formElementLabel=Members can see participants)")) { - selenium.click("ui=commons::flexiForm_labeledCheckbox(formElementLabel=Members can see participants)"); - } else if(displayParticipants!=null && !displayParticipants && selenium.isChecked("ui=commons::flexiForm_labeledCheckbox(formElementLabel=Members can see participants)")) { - selenium.uncheck("ui=commons::flexiForm_labeledCheckbox(formElementLabel=Members can see participants)"); - } - sleepThread(1000); - //TODO: impl on/off displayWaitingList - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/group/GroupManagement.java b/src/test/java/org/olat/test/util/selenium/olatapi/group/GroupManagement.java deleted file mode 100644 index 766516deb6f..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/group/GroupManagement.java +++ /dev/null @@ -1,249 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.group; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; - -import com.thoughtworks.selenium.Selenium; - -/** - * OLAT abstraction for the GroupManagement page. - * This is acquired via the CourseRun. - * - * @author Lavinia Dumitrescu - * - */ -public class GroupManagement extends OLATSeleniumWrapper { - - - /** - * @param selenium - */ - public GroupManagement(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isTextPresent("Group management")) { - throw new IllegalStateException("This is not the - Group management - page"); - } - } - - /** - * create new group with the given name, - * add one tutor to group, - * add one participant to the group, - * and close the group management. - * @param groupName - * @param userName - */ - public void createGroupAndAddMembers(String groupName, String tutorName, String participantName) { - //create new learning group - selenium.click("ui=groupManagement::toolbox_groupManagement_newLearningGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_name()", groupName); - selenium.click("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()"); - selenium.waitForPageToLoad("30000"); - //add members - selenium.click("ui=group::content_members_tabMembers()"); - selenium.waitForPageToLoad("30000"); - //add tutor - if(tutorName!=null) { - selenium.click("ui=groupManagement::content_learningGroupsEditor_addMembers_addTutor()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", tutorName); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_checkUsername(nameOfUser="+tutorName+")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - } - //add participants - if(participantName!=null) { - selenium.click("ui=commons::usertable_participants_addUsers()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", participantName); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_checkUsername(nameOfUser="+participantName+")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=groupManagement::toolbox_groupManagement_close()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * If maxParticipants>0 type the value into the appropriate field. - * @param groupName - * @param description - * @param maxParticipants - * @param hasWaitingList - * @param moveUpAutomatically - * @return Returns the newly created GroupAdmin. - */ - public GroupAdmin createLearningGroup(String groupName, String description, int maxParticipants, boolean hasWaitingList, boolean moveUpAutomatically) { - - // create new learning group - selenium.click("ui=groupManagement::toolbox_groupManagement_newLearningGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_name()", groupName); - if(description!=null) { - //uses a Rich text element - selenium.type("ui=commons::tinyMce_styledTextArea()", description); - } - selenium.click("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()"); - selenium.waitForPageToLoad("30000"); - - if(maxParticipants>0) { - selenium.type("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_maxParticipants()", String.valueOf(maxParticipants)); - } - if(hasWaitingList) { - selenium.click("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_enableWaitinglist()"); - } - if(moveUpAutomatically) { - selenium.click("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_moveUpAutomatically()"); - } - selenium.click("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()"); - selenium.waitForPageToLoad("30000"); - - return new GroupAdmin(selenium); - } - - /** - * Select "All learning groups" and select the group with the given name. - * @param groupName - * @return Returns a GroupAdmin instance. - */ - public GroupAdmin editLearningGroup(String groupName) { - selenium.click("ui=groupManagement::menu_allLearningGroups()"); - selenium.waitForPageToLoad("30000"); - // if too many entries found - show all - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=groupManagement::content_learningGroupTable_editLearningGroup(nameOfLearningGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - return new GroupAdmin(selenium); - } - - /** - * Selects the learning group with the given name. - * @param groupName - * @return - */ - public Group selectLearningGroup(String groupName) { - selenium.click("ui=groupManagement::menu_allLearningGroups()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groupManagement::content_learningGroupTable_selectGroup(nameOfGroup="+ groupName + ")"); - selenium.waitForPageToLoad("30000"); - return new Group(selenium, groupName); - } - - - /** - * - * @param areaName - * @param description - */ - public LearningArea createLearningArea(String areaName, String description) { - selenium.click("ui=groupManagement::toolbox_groupManagement_newLearningArea()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=groupManagement::toolbox_groupManagement_formNewLearningArea_name()", areaName); - if(description!=null) { - typeInRichText(description); - } - selenium.click("ui=commons::flexiForm_finishButton()"); - selenium.waitForPageToLoad("30000"); - - return new LearningArea(selenium); - } - - /** - * - * @param areaName - * @return - */ - public LearningArea editLearningArea(String areaName) { - selenium.click("ui=groupManagement::menu_allLearningAreas()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groupManagement::content_learningAreaTable_editLearningArea(nameOfLearningArea=learning area selenium 1)"); - selenium.waitForPageToLoad("30000"); - - return new LearningArea(selenium); - } - - /** - * - * @param userName - * @param groupName - */ - public void removeMemberFromGroup(String userName, String groupName) { - selenium.click("ui=groupManagement::menu_allMembers()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_userlist_clickUserName(nameOfUser="+userName+")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groupManagement::content_userDetails_removeFromGroup(nameOfGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - } - - /** - * - * @return Returns a CourseRun instance. - */ - public CourseRun close() { - selenium.click("ui=groupManagement::toolbox_groupManagement_close()"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - - /** - * Deletes group only if such group found. - * @param groupName - */ - public void deleteGroup(String groupName) { - if(selenium.isElementPresent("ui=groupManagement::menu_allLearningGroups()")) { - selenium.click("ui=groupManagement::menu_allLearningGroups()"); - selenium.waitForPageToLoad("30000"); - } - if (selenium.isElementPresent("ui=groupManagement::content_learningGroupTable_deleteLearningGroup(nameOfLearningGroup=" + groupName + ")")) { - selenium.click("ui=groupManagement::content_learningGroupTable_deleteLearningGroup(nameOfLearningGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=dialog::Yes()"); - selenium.waitForPageToLoad("30000"); - System.out.println("Group deleted: " + groupName); - } else { - System.out.println("No such group found, could not delete group: " + groupName); - } - } -} - - diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/group/Groups.java b/src/test/java/org/olat/test/util/selenium/olatapi/group/Groups.java deleted file mode 100644 index 6f5449ee6d3..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/group/Groups.java +++ /dev/null @@ -1,112 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.group; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This represents the Groups tab. - * - * @author Lavinia Dumitrescu - * - */ -public class Groups extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public Groups(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isTextPresent("Groups")) { - throw new IllegalStateException("This is not the - Groups - page"); - } - } - - /** - * - * @param groupName - * @param groupDescription - * @return - */ - public GroupAdmin createProjectGroup(String groupName, String groupDescription) { - selenium.click("ui=groups::toolbox_create_projectGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Group name)", groupName); - //the description shows up in an iframe - selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.type("ui=commons::tinyMce_styledTextArea()", groupDescription); - selenium.selectFrame("relative=top"); - - selenium.click("ui=commons::flexiForm_finishButton()"); - selenium.waitForPageToLoad("30000"); - return new GroupAdmin(selenium); - } - - /** - * Deletes group with the given name. - * @param groupName - */ - public void deleteGroup(String groupName) { - selenium.click("ui=groups::content_deleteGroup(nameOfGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYes()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Leave group. - * @param groupName - */ - public void leaveGroup(String groupName) { - selenium.click("ui=groups::content_leaveGroup(nameOfGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_leaveYes()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * - * @param groupName - * @return Returns the selected group. - */ - public Group selectGroup(String groupName) { - selenium.click("ui=groups::content_clickGroupEntry(nameOfGroup=" + groupName + ")"); - selenium.waitForPageToLoad("30000"); - return new Group(selenium, groupName); - } - - public boolean hasGroup(String groupName) { - if(selenium.isElementPresent("ui=groups::content_clickGroupEntry(nameOfGroup=" + groupName + ")")) { - return true; - } - return false; - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/group/LearningArea.java b/src/test/java/org/olat/test/util/selenium/olatapi/group/LearningArea.java deleted file mode 100644 index cd690d649cb..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/group/LearningArea.java +++ /dev/null @@ -1,63 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.group; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * @author Lavinia Dumitrescu - * - */ -public class LearningArea extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public LearningArea(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isTextPresent("Edit learning area")) { - throw new IllegalStateException("This is not the - Edit learning area - page"); - } - } - - /** - * - * @param groupNames - */ - public void assignGroup(String[] groupNames) { - selenium.click("ui=groupManagement::content_learningAreaEditor_tabs_groupAssignment()"); - selenium.waitForPageToLoad("30000"); - for(String groupName:groupNames) { - selenium.click("ui=groupManagement::content_learningAreaEditor_groupAssignment_checkLearningGroup(nameOfGroup=" + groupName + ")"); - } - selenium.click("ui=groupManagement::content_learningAreaEditor_groupAssignment_save()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/group/RightsAdmin.java b/src/test/java/org/olat/test/util/selenium/olatapi/group/RightsAdmin.java deleted file mode 100644 index 5037d20eaf3..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/group/RightsAdmin.java +++ /dev/null @@ -1,83 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.group; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * Page for Rightsgroup Administration - * @author Thomas Linowsky, BPS GmbH - * - */ - - -public class RightsAdmin extends OLATSeleniumWrapper{ - - /** - * Default constructor - * @param selenium - */ - public RightsAdmin(Selenium selenium){ - super(selenium); - } - - - /** - * Add members to Group (e.g. Rightsgroup) looping through Add user(s). - * @param members The usernames of the members to add - * @throws InterruptedException - */ - - public void addMembers(String[] members) throws InterruptedException{ - selectMembersTab(); - for(String userName:members) { - selenium.click("ui=commons::usertable_members_addUsers()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", userName); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - Thread.sleep(5000); - if(selenium.isElementPresent("ui=commons::usertable_adduser_checkUsername(nameOfUser=" + userName + ")")) { - selenium.click("ui=commons::usertable_adduser_checkUsername(nameOfUser=" + userName + ")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - } else { - System.out.println("GroupAdmin.addMembers - since no user found, skip participant: " + userName); - } - } - } - - /** - * Go to Tab Members - */ - - private void selectMembersTab() { - //go to the Members tab, if not already there - if(selenium.isElementPresent("ui=group::content_members_tabMembers()")) { - selenium.click("ui=group::content_members_tabMembers()"); - selenium.waitForPageToLoad("30000"); - } - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/group/RightsManagement.java b/src/test/java/org/olat/test/util/selenium/olatapi/group/RightsManagement.java deleted file mode 100644 index cbeea228d12..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/group/RightsManagement.java +++ /dev/null @@ -1,78 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.group; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; - -/** - * Wrapper for Rights Management, triggered from Course Run - * - * @author Thomas Linowsky - */ - -import com.thoughtworks.selenium.Selenium; - -public class RightsManagement extends OLATSeleniumWrapper{ - - /** - * Constructor - * @param selenium - */ - public RightsManagement(Selenium selenium) { - super(selenium); - if(!selenium.isTextPresent("Rights management")) { - throw new IllegalStateException("This is not the - Rights management - page"); - } - } - - /** - * create a new rights group with given title and description - * @param title The title of the new rights group - * @param description The description of the new rights group - * @return The GroupAdmin object of the newly created rights group - */ - - public RightsAdmin createRightsGroup(String title, String description) { - selenium.click("ui=rightsManagement::createRightsGroup()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=group::content_description_groupDetails_groupName()", title); - if(description!=null) { - //uses a Rich text element - selenium.type("ui=commons::tinyMce_styledTextArea()", description); - } - selenium.click("ui=groupManagement::toolbox_groupManagement_formNewLearningGroup_save()"); - selenium.waitForPageToLoad("30000"); - - return new RightsAdmin(selenium); - } - - /** - * close the rights group and show Course run the group was inited by - * @return The courserun where we came from - */ - - public CourseRun closeRightsManagement() { - selenium.click("ui=rightsManagement::rightGroups_close()"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/home/EvidencesOfAchievement.java b/src/test/java/org/olat/test/util/selenium/olatapi/home/EvidencesOfAchievement.java deleted file mode 100644 index cf1bb55dfac..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/home/EvidencesOfAchievement.java +++ /dev/null @@ -1,118 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.home; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is the EvidencesOfAchievement page. - * @author Lavinia Dumitrescu - * - */ -public class EvidencesOfAchievement extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public EvidencesOfAchievement(Selenium selenium) { - super(selenium); - // TODO check for label - } - - /** - * Get the Passed status for the courseName. - * @param courseName - * @return - */ - public String getCoursePassedStatus(String courseName) { - return selenium.getText("ui=home::content_evidencesOfAchievement_passedStatus(title=" + courseName + ")"); - } - - /** - * Starts course. - * @return - */ - public CourseRun startCourse(String title) { - selenium.click("ui=home::content_evidencesOfAchievement_startCourse(title=" + title + ")"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - /** - * Selects the details page for the given course. - * @param courseName - * @throws Exception - */ - public void selectDetails(String courseName) throws Exception { - //if too many entries found - show all - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=home::content_evidencesOfAchievement_selectDetails(title=" + courseName + ")"); - Thread.sleep(10000); - selenium.selectWindow(selenium.getAllWindowTitles()[2]); - assertTrue(selenium.isElementPresent("ui=home::content_evidencesOfAchievement_evidenceOfAchievement()")); - } - - /** - * Set the score for the courseElemTitle in the EvidenceOfAchievement details. - * @param courseElemTitle - * @return - */ - public String getCourseElementScore(String courseElemTitle) { - return selenium.getText("ui=course::assessment_scoreInTable(title=" + courseElemTitle + ")"); - } - - /** - * Get the passed status for the courseElemTitle in the EvidenceOfAchievement details. - * @param courseElemTitle - * @return - */ - public String getCourseElementPassedStatus(String courseElemTitle) { - return selenium.getText("ui=course::assessment_passedStatusInTable(title=" + courseElemTitle + ")"); - } - - public String getCourseElementAttempts(String courseElemTitle) { - return selenium.getText("ui=course::assessment_attemptsInTable(title=" + courseElemTitle + ")"); - } - - /** - * delete evidences of achievement for the courses containing courseName. - * @param courseName - */ - public void deleteAll(String courseName) { - while(selenium.isElementPresent("ui=home::content_evidencesOfAchievement_delete(title=" + courseName + ")")) { - System.out.println("Delete link found, delete evidence of achievement!"); - selenium.click("ui=home::content_evidencesOfAchievement_delete(title=" + courseName + ")"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=dialog::Yes()"); - selenium.waitForPageToLoad("30000"); - } - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/home/Home.java b/src/test/java/org/olat/test/util/selenium/olatapi/home/Home.java deleted file mode 100644 index 4b15fe9d149..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/home/Home.java +++ /dev/null @@ -1,115 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.home; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.folder.Folder; -import org.olat.test.util.selenium.olatapi.group.Group; -import org.olat.test.util.selenium.olatapi.portfolio.EPExtensions; - -import com.thoughtworks.selenium.Selenium; - -/** - * @author Lavinia Dumitrescu - * - */ -public class Home extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public Home(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isTextPresent("Welcome to OLAT")) { - throw new IllegalStateException("This is not the - Home - page"); - } - } - - /** - * Select the group in MyGroups portlet with the given name. - * @param title - * @return - */ - public Group selectMyGroup(String title) { - //increase number of entries for the "My groups" portlet - getHomeConfigurator().configMyGroupPortlet(99, HomeConfigurator.SORT_TYPE.ALPHABET, true); - - selenium.click("ui=home::content_portlets_myGroups(nameOfGroup=" + title + ")"); - selenium.waitForPageToLoad("30000"); - return new Group(selenium, title); - } - - /** - * Select the course in MyBookmarks portlets with the given title. - * @param title - * @return - */ - public CourseRun selectMyBookmarkedCourse(String title) { - //increase number of entries for the "My bookmarks" portlet - getHomeConfigurator().configMyBookmarkPortlet(99, HomeConfigurator.SORT_TYPE.ALPHABET, true); - - selenium.click("ui=home::content_portlets_myBookmarks(nameOfBookmark=" + title + ")"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - - /** - * Selects the EvidencesOfAchievement. - * @return Returns the EvidencesOfAchievement page. - */ - public EvidencesOfAchievement getEvidencesOfAchievement() { - selenium.click("ui=home::menu_evidencesOfAchievement()"); - selenium.waitForPageToLoad("30000"); - return new EvidencesOfAchievement(selenium); - } - - public MySettings getUserSettings() { - selenium.click("ui=home::menu_settings()"); - selenium.waitForPageToLoad("30000"); - return new MySettings(selenium); - } - - public Folder getPersonalFolder() { - selenium.click("ui=home::menu_personalFolder()"); - selenium.waitForPageToLoad("30000"); - return new Folder(selenium); - } - - public HomeConfigurator getHomeConfigurator() { - selenium.click("ui=home::config_editConfig()"); - selenium.waitForPageToLoad("30000"); - return new HomeConfigurator(selenium); - } - - public EPExtensions getEPortfolio(){ - selenium.click("ui=home::menu_ePortfolio()"); - selenium.waitForPageToLoad("30000"); - return new EPExtensions(selenium); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/home/HomeConfigurator.java b/src/test/java/org/olat/test/util/selenium/olatapi/home/HomeConfigurator.java deleted file mode 100644 index 0ec9332f810..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/home/HomeConfigurator.java +++ /dev/null @@ -1,84 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.home; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -public class HomeConfigurator extends OLATSeleniumWrapper { - - public enum SORT_TYPE {TYPE, ALPHABET, DATE} - - - public HomeConfigurator(Selenium selenium) { - super(selenium); - // TODO: LD: Check that we're on the right place - } - - /** - * Configures only the numOfEntries. - * TODO: LD: add configuration after sortType and ascending. - * @param numOfEntries - * @param sortType - * @param ascending - * @return - */ - public Home configMyGroupPortlet(int numOfEntries, SORT_TYPE sortType, boolean ascending) { - //start auto config wizard - selenium.click("ui=home::config_autoConfigMyGroups()"); - selenium.waitForPageToLoad("30000"); - //do configure - configureCurrentSelectedPortlet(numOfEntries, sortType, ascending); - - return new Home(selenium); - } - - public Home configMyBookmarkPortlet(int numOfEntries, SORT_TYPE sortType, boolean ascending) { - selenium.click("ui=home::config_autoConfigMyBookmarks()"); - selenium.waitForPageToLoad("30000"); - //do configure - configureCurrentSelectedPortlet(numOfEntries, sortType, ascending); - - return new Home(selenium); - } - - /** - * Change num of entries if different of the current one. - * @param numOfEntries - * @param sortType - * @param ascending - */ - private void configureCurrentSelectedPortlet(int numOfEntries, SORT_TYPE sortType, boolean ascending) { - String currentNumOfEntries = selenium.getValue("ui=commons::flexiForm_labeledTextInput(formElementLabel=Number of entries in portlet)"); - if(!currentNumOfEntries.equals(String.valueOf(numOfEntries))) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Number of entries in portlet)", String.valueOf(numOfEntries)); - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - } else { - selenium.click("ui=commons::cancelButton()"); - selenium.waitForPageToLoad("30000"); - } - //close editor - selenium.click("ui=home::config_endConfig()"); - selenium.waitForPageToLoad("30000"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/home/MySettings.java b/src/test/java/org/olat/test/util/selenium/olatapi/home/MySettings.java deleted file mode 100644 index 3fbb4c8e794..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/home/MySettings.java +++ /dev/null @@ -1,179 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.home; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * The user settings in Home. - * @author Lavinia Dumitrescu - * - */ -public class MySettings extends OLATSeleniumWrapper { - - public MySettings(Selenium selenium) { - super(selenium); - - if(!selenium.isElementPresent("ui=home::content_settings_tabs_password()")) { - throw new IllegalStateException("This is not the - UserSettings - page"); - } - } - - /** - * - * @param newPassword - */ - public void setPassword(String newPassword) { - selectPasswordTab(); - selenium.type("ui=userManagement::content_userdetail_changePasswordTab_newPassword()", newPassword); - selenium.type("ui=userManagement::content_userdetail_changePasswordTab_confirmPassword()", newPassword); - - selenium.click("ui=commons::saveInput()"); - selenium.waitForPageToLoad("30000"); - } - - private void selectPasswordTab() { - if(selenium.isElementPresent("ui=home::content_settings_tabs_password()")) { - selenium.click("ui=home::content_settings_tabs_password()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Sets email and/or showOnVisitingCard status. - * @param email - * @param showOnVisitingCard - */ - public void setEmail(String email, Boolean showOnVisitingCard) { - selectProfileTab(); - setTextInput("E-mail", email, showOnVisitingCard); - selenium.click("ui=home::content_settings_profile_yesLink()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * - * @return - */ - public String getEmail() { - selectProfileTab(); - return getText("E-mail"); - } - - /** - * Gets the value for the labeled input element. - * @param label - * @return - */ - public String getText(String label) { - return selenium.getValue("ui=commons::flexiForm_labeledTextInput(formElementLabel=" + label + ")"); - } - - /*public String getDisabledText(String label) { - return selenium.getValue("ui=commons::flexiForm_disabledLabeledTextInput(formElementLabel=" + label + ")"); - }*/ - - private void setTextInput(String inputLabel, String text, Boolean showOnVisitingCard) { - if(text!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=" + inputLabel + ")", text); - } - if(showOnVisitingCard!=null) { - if(showOnVisitingCard) { - selenium.check("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + inputLabel + ")"); - } else { - selenium.uncheck("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + inputLabel + ")"); - } - } - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * If showOnVisitingCard!=null, check/uncheck the show on visit card checkbox, depending on the boolean value. - * @param showOnVisitingCard - */ - public void showFirstNameOnVisitingCard(Boolean showOnVisitingCard) { - selectProfileTab(); - checkShowOnVisitingCard("First name", showOnVisitingCard); - } - - - private void checkShowOnVisitingCard(String inputLabel,Boolean showOnVisitingCard) { - if(showOnVisitingCard!=null) { - if(showOnVisitingCard) { - selenium.check("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + inputLabel + ")"); - } else { - selenium.uncheck("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + inputLabel + ")"); - } - } - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Check if the input test is present as value for a disabled input field: e.g. firstname, lastname. - * @param text - * @return - */ - public boolean isDisabledTextPresent(String text) { - return selenium.isElementPresent("ui=commons::flexiForm_disabledTextInput(inputValue=" + text + ")"); - } - - /** - * Selects the System tab. - */ - private void selectSystemTab() { - if(selenium.isElementPresent("ui=home::content_settings_tabs_system()")) { - selenium.click("ui=home::content_settings_tabs_system()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Selects the profile tab, if not already there. - */ - private void selectProfileTab() { - if(selenium.isElementPresent("ui=home::content_settings_tabs_profile()")) { - selenium.click("ui=home::content_settings_tabs_profile()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Select System tab, if not already there, set language and save. - * @param languageLabel - */ - public void selectSystemLanguage(String languageLabel) { - selectSystemTab(); - selenium.select("language", "label=" + languageLabel); - selenium.click("ui=home::content_settings_system_general_save()"); - selenium.waitForPageToLoad("30000"); - } - - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/i18n/LocalStringProvider.java b/src/test/java/org/olat/test/util/selenium/olatapi/i18n/LocalStringProvider.java deleted file mode 100644 index 10ba0469bd2..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/i18n/LocalStringProvider.java +++ /dev/null @@ -1,33 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.i18n; - -/** - * Provides some common local strings. - * @author Lavinia Dumitrescu - * - */ -public class LocalStringProvider { - - public static String COURSE_ALREADY_LOCKED_PREFIX = "This course is currently locked by"; - //pbl.confirm - public static String COURSE_PUBLISH_CONFIRM = "Please confirm the publication of the following course elements."; - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/lr/BlogResource.java b/src/test/java/org/olat/test/util/selenium/olatapi/lr/BlogResource.java deleted file mode 100644 index 8f56d3336ad..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/lr/BlogResource.java +++ /dev/null @@ -1,169 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.lr; - -import com.thoughtworks.selenium.Selenium; - -public class BlogResource extends ResourceEditor { - - public BlogResource(Selenium selenium, String title) { - super(selenium, title); - // TODO Auto-generated constructor stub - } - - /** - * - * @param title - * @param description - * @param imageName - */ - public void editBlog(String title, String description, String imageName) { - selenium.click("ui=blog::edit()"); - selenium.waitForPageToLoad("30000"); - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - selenium.type("ui=commons::tinyMce_styledTextArea()", description); - - if(imageName!=null) { - //TODO: LD: add image - } - - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Create blog entry. - * @param title - * @param description - * @param content - * @param publish TODO - */ - public void createEntry(String title, String description, String content, boolean publish) { - if(selenium.isElementPresent("ui=blog::create()")) { - selenium.click("ui=blog::create()"); - selenium.waitForPageToLoad("30000"); - } else if(selenium.isElementPresent("ui=blog::createNewEntry()")) { - selenium.click("ui=blog::createNewEntry()"); - selenium.waitForPageToLoad("30000"); - } - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - this.sleepThread(3000); - - editBlogEntry(description, content, publish); - } - - /** - * This edits an existing entry, therefore if description or content are null, they don't get changed. - * The title cannot be null. - * - * @param title - * @param description - * @param content - * @param publish - */ - public void editEntry(String title, String description, String content, boolean publish) { - selenium.click("ui=blog::editEntry(entryTitle=" + title + ")"); - //selenium.waitForPageToLoad("30000"); - this.sleepThread(3000); - - editBlogEntry(description, content, publish); - } - - private void editBlogEntry(String description, String content, boolean publish) { - if(description!=null) { - selenium.selectFrame("ui=blog::blogEntryDescriptionFrame()"); - selenium.type("ui=commons::tinyMce_styledTextArea()", description); - selenium.selectFrame("relative=top"); - } - - this.sleepThread(3000); - if(content!=null && selenium.isElementPresent("ui=blog::blogEntryContentFrame()")) { - selenium.selectFrame("ui=blog::blogEntryContentFrame()"); - selenium.type("ui=commons::tinyMce_styledTextArea()", content); - selenium.selectFrame("relative=top"); - } - - if(publish) { - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Publish)"); - selenium.waitForPageToLoad("30000"); - } else { - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Save draft)"); - selenium.waitForPageToLoad("30000"); - } - } - - public boolean hasDraftEntry(String entryTitle) { - return selenium.isElementPresent("ui=blog::draft(entryTitle=" + entryTitle + ")"); - } - - /** - * Add one comment and go back to the blog view. - * - * @param entryTitle - * @param comment - */ - public void commentEntry(String entryTitle, String comment) { - selenium.click("ui=blog::addComment(entryTitle=" + entryTitle + ")"); - selenium.waitForPageToLoad("30000"); - this.sleepThread(5000); - - //typeInRichText(comment); - selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.type("ui=commons::tinyMce_styledTextArea()", comment); - selenium.selectFrame("relative=top"); - - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::backLink()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * TODO: fix this implementation. It does not use the entryTitle. - * @param entryTitle - * @param num - * @return - */ - public boolean hasComments(String entryTitle, int num) { - return selenium.isTextPresent("Comments (" + num + ")"); - } - - /** - * Include external blog. - * Suppose that a valid feedURL is provided. - * @param title - * @param description - * @param feedURL - */ - public void includeExternalBlog(String title, String description, String feedURL) { - selenium.click("ui=blog::includeExternal()"); - selenium.waitForPageToLoad("30000"); - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Description)", description); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Feed URL)", feedURL); - - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - //TODO: LD: if no valid URL is provided, cancel or enter a new URL - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/lr/CPResourceEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/lr/CPResourceEditor.java deleted file mode 100644 index 772a2980fab..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/lr/CPResourceEditor.java +++ /dev/null @@ -1,246 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.lr; - - -import com.thoughtworks.selenium.Selenium; - -public class CPResourceEditor extends ResourceEditor { - - public CPResourceEditor(Selenium selenium, String title) { - super(selenium, title); - //Check that we're on the right place - if(!selenium.isElementPresent("ui=cpEditor::addPage()")) { - throw new IllegalStateException("This is not the - CPResourceEditor - page"); - } - } - - /** - * Changes title of the page assuming that the page is visible to be selected before. - * @param currentTitle - * @param newTitle - */ - public void changeTitle(String currentTitle, String newTitle) { - selectPage(currentTitle); - changeCurrentTitle(newTitle); - } - - /** - * Uses only saveAndClose. - * - * @param newTitle - */ - private void changeCurrentTitle(String newTitle) { - selenium.click("ui=cpEditor::editPageProperties()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=cpEditor::metadataTitleInput()", newTitle); - selenium.click("ui=cpEditor::saveAndClose()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Selects the page with this title, if visible. - * As with selecting the node the subtree opens. - * @param title - * @return Returns true if page gets selected, else false. - */ - private boolean selectPage(String title) { - //if link exists but it is not selected - if(selenium.isElementPresent("ui=cpEditor::menuTreeLink(link=" + title + ")") - && !selenium.isElementPresent("ui=cpEditor::selectedTreeNodeExpanded(link=" + title + ")") - && !selenium.isElementPresent("ui=cpEditor::selectedTreeNodeLeaf(link=" + title + ")")) { - selenium.click("ui=cpEditor::menuTreeLink(link=" + title + ")"); - selenium.waitForPageToLoad("30000"); - return true; - } - //no such page found - return false; - } - - /** - * Add page, after selecting the parent page, assuming that this is visible. - * Renames page. - * - * @param parentTitle - * @param title - * @param content - */ - public void addPageAndRename(String parentTitle, String title, String content) { - selectPage(parentTitle); - //add page - selenium.click("ui=cpEditor::addPage()"); - selenium.waitForPageToLoad("30000"); - //changeTitle - changeCurrentTitle(title); - //add some content - selenium.type("ui=commons::tinyMce_styledTextArea()", content); - selenium.click("ui=commons::saveLink()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Sets content to the page named title. - * - * @param title - * @param content - */ - public void editPage(String title, String content) { - selectPage(title); - //replace content - selenium.type("ui=commons::tinyMce_styledTextArea()", content); - selenium.click("ui=commons::saveLink()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Copies and renames the copy page. - * - * @param sourceTitle - * @param targetTitle - */ - public void copyPageAndRename(String sourceTitle, String targetTitle) { - copyPage(sourceTitle); - //changeTitle - changeCurrentTitle(targetTitle); - } - - /** - * Select source page and press copy, creates a copy with the default title. - * - * @param sourceTitle - * @param targetTitle - */ - public void copyPage(String sourceTitle) { - selectPage(sourceTitle); - //copy page - selenium.click("ui=cpEditor::copyPage()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Select parent and import file. - * @param parentTitle - * @param archiveFileName - */ - public void importPage(String parentTitle, String fileName) { - selectPage(parentTitle); - //import page - selenium.click("ui=cpEditor::importPage()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=upload::fileChooser()", fileName); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Import)"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Select page and delete. - * @param currentTitle - * @param deleteMenuElementOnly - */ - public void deletePage(String currentTitle, boolean deleteMenuElementOnly) { - selectPage(currentTitle); - //delete page - selenium.click("ui=cpEditor::deletePage()"); - selenium.waitForPageToLoad("30000"); - //choose delete type - if(deleteMenuElementOnly) { - selenium.click("ui=commons::anyLink(linkText=Delete menu element only)"); - } else { - selenium.click("ui=commons::anyLink(linkText=Delete menu element and files)"); - } - selenium.waitForPageToLoad("30000"); - } - - /** - * Drags and drops from the sourceTitle to the targetTitle. - * - * @param sourceTitle - * @param targetTitle - */ - public void movePage(String sourceTitle, String targetTitle) { - //TODO:LD: fix this!!! - - //selenium.dragAndDropToObject("ui=cpEditor::dragAndDropSrcObject(link=" + sourceTitle + ")", "ui=cpEditor::dragAndDropSrcObject(link=" + targetTitle + ")"); - selenium.mouseDownAt("ui=cpEditor::dragAndDropSrcObject(link=" + sourceTitle + ")","10,10"); - selenium.mouseMoveAt("ui=cpEditor::dragAndDropSrcObject(link=" + targetTitle + ")","10,10"); - selenium.mouseOver("ui=cpEditor::dragAndDropSrcObject(link=" + targetTitle + ")"); - selenium.mouseUpAt("ui=cpEditor::dragAndDropSrcObject(link=" + targetTitle + ")","10,10"); - - //selenium.waitForPageToLoad("30000"); - } - - /** - * TODO LD: check this out!!! Open, close preview, is this OK? - * @param title - * @return - */ - public void preview(String title) { - selectPage(title); - //press preview - selenium.click("ui=cpEditor::preview()"); - selenium.waitForPageToLoad("30000"); - //close preview - selenium.click("ui=commons::anyLink(linkText=Close preview)"); - selenium.waitForPageToLoad("30000"); - } - - - /** - * Inserts image, steps: - * click symbol "insert/edit image" <br/> - * add Image description <br/> - * click "Browse" <br/> - * click "Upload file" <br/> - * click Select file and select filename <br/> - * click "Upload" <br/> - * click "Insert" <br/> - * click "save" <br/> - * - * @param filename - */ - public void insertImage(String filename, String description) { - selenium.click("ui=commons::tinyMce_insertEditImage()"); - this.sleepThread(3000); - selenium.selectFrame("//iframe[contains(@src,'/image.htm')]"); - - //add description - selenium.type("ui=cpEditor::imageDescription()", description); - - selenium.click("ui=commons::tinyMce_browse()"); - - //upload file - this.sleepThread(10000); - selenium.selectWindow(selenium.getAllWindowTitles()[2]); - selenium.click("ui=cpEditor::uploadFile()"); - this.sleepThread(10000); - //select file - selenium.type("ui=upload::fileChooser()",filename); - selenium.click("ui=upload::submit()"); - selenium.selectWindow(selenium.getAllWindowTitles()[1]); - - //insert image - selenium.click("ui=cpEditor::insertImage()"); - - //save - selenium.click("ui=commons::saveLink()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/lr/Catalog.java b/src/test/java/org/olat/test/util/selenium/olatapi/lr/Catalog.java deleted file mode 100644 index ae38fe6ada7..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/lr/Catalog.java +++ /dev/null @@ -1,55 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.lr; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - - -/** - * Wrapper for the catalog view - * @author Thomas Linowsky, BPS GmbH - * - */ - -public class Catalog extends OLATSeleniumWrapper{ - - /** - * Default constructor - * @param selenium - */ - public Catalog(Selenium selenium){ - super(selenium); - } - - /** - * Check whether a catalog entry with given name exists - * @param name The name of the resource to check for - * @return true if the resource exists in the catalog - */ - - public boolean isEntryAvailable(String name){ - return selenium.isElementPresent("ui=learningResources::content_clickCatalogEntry(nameOfLearningResource="+name+")"); - } - - - -} \ No newline at end of file diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/lr/CourseWizard.java b/src/test/java/org/olat/test/util/selenium/olatapi/lr/CourseWizard.java deleted file mode 100644 index 163e7f3f127..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/lr/CourseWizard.java +++ /dev/null @@ -1,145 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.lr; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -/** - * Wrapper for Course wizard - * - * This Class provides a wrapper for the course wizard which helps users to create a simple course - * - * @author Thomas Linowsky, BPS GmbH - * - * - */ - -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; - -import com.thoughtworks.selenium.Selenium; - - -public class CourseWizard extends OLATSeleniumWrapper{ - - /** - * Default constructor - * @param selenium - */ - - public CourseWizard(Selenium selenium) { - super(selenium); - } - - /** - * Select course elements that should be created. Possible elements are - * - * @param singlePage A Single Page with some text - * @param enrollment An Enrollment - * @param downloadFolder A download Folder - * @param forum a forum - * @param contactForm a contact form - */ - - public void selectCourseElements(boolean singlePage, boolean enrollment, boolean downloadFolder, boolean forum, boolean contactForm){ - if(singlePage){ - selenium.click("ui=learningResources::courseWizard_createSinglePage()"); - } - if(enrollment){ - selenium.click("ui=learningResources::courseWizard_createEnrollment()"); - } - if(downloadFolder){ - selenium.click("ui=learningResources::courseWizard_createDownloadFolder()"); - } - if(forum){ - selenium.click("ui=learningResources::courseWizard_createForum()"); - } - if(contactForm){ - selenium.click("ui=learningResources::courseWizard_createContactForm()"); - } - } - - /** - * Edit the enrollment properties. Select all CBBs that should be affected by this changes - * - * @param accessLimit whether the selected CBBs should be hidden if not enrolled - * @param singlePage whether the single page should be hidden - * @param downloadFolder whether the download folder should be hidden - * @param forum whether the forum should be hidden - * @param contactForm whether the contact form should be hidden - */ - - public void editEnrollment(boolean accessLimit, boolean singlePage, boolean downloadFolder, boolean forum, boolean contactForm){ - selenium.click("ui=learningResources::courseWizard_editEnrollmentLink()"); - selenium.waitForPageToLoad("30000"); - if(accessLimit){ - selenium.click("ui=learningResources::courseWizard_editEnrollment_accessLimit()"); - if(singlePage){ - selenium.click("ui=learningResources::courseWizard_editEnrollment_selectSP()"); - } - if(downloadFolder){ - selenium.click("ui=learningResources::courseWizard_editEnrollment_selectBC()"); - } - if(forum){ - selenium.click("ui=learningResources::courseWizard_editEnrollment_selectFO()"); - } - if(contactForm){ - selenium.click("ui=learningResources::courseWizard_editEnrollment_selectCO()"); - } - } - selenium.click("ui=commons::flexiForm_saveButton()"); - } - - /** - * Create the course and run it, providing access with @param publishLabel - * @param publishLabel The label to use for access - * @return A CourseRun from the created course - */ - - public CourseRun createCourseAndRun(String publishLabel){ - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - // skip catalog entry - selenium.click("ui=learningResources::courseWizard_catalogRoot()"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - selenium.select("ui=courseEditor::publishDialog_courseAccessDropDown()", "label="+publishLabel); - //TODO: LD: add here check if next selectable, else finish - if(selenium.isElementPresent("ui=courseEditor::publishDialog_next()")) { - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=courseEditor::publishDialog_finish()"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - - } - - /** - * Create the course and run it, providing access with default ("All registered OLAT users") publish Label - * @return The resulting CourseRun object - */ - - public CourseRun createCourseAndRun(){ - return createCourseAndRun("All registered OLAT users"); - } - - - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/lr/LRDetailedView.java b/src/test/java/org/olat/test/util/selenium/olatapi/lr/LRDetailedView.java deleted file mode 100644 index febcf0671da..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/lr/LRDetailedView.java +++ /dev/null @@ -1,390 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.lr; - -import org.olat.test.util.selenium.olatapi.CannotExecuteException; -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.DisposedCourseRun; -import org.olat.test.util.selenium.olatapi.course.run.WikiRun; -import org.olat.test.util.selenium.olatapi.qti.TestEditor; - -import com.thoughtworks.selenium.Selenium; - -/** - * OLAT abstraction for the Detailed view of learning resource. - * - * @author Lavinia Dumitrescu - * - */ -public class LRDetailedView extends OLATSeleniumWrapper { - - public static final String ACCESS_ALL_REGISTERED = "All registered OLAT users"; - public static final String ACCESS_REGISTERED_AND_GUESTS = "Registered OLAT users and guests"; - public static final String ACCESS_OWNERS_AND_AUTHORS = "Owners and other OLAT authors"; - public static final String ACCESS_ONLY_OWNERS = "Only owners of this learning resource"; - - /** - * @param selenium - */ - public LRDetailedView(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=learningResources::content_showContent()")) { - throw new IllegalStateException("This is not the - Detailed view - page"); - } - } - - /** - * Deletes this learning resource, if possible. - * If not possible to delete this LR, go back to the Learning resources, - * and throw new CannotExecuteException. - * - * @return - * @throws CannotExecuteException - */ - public LearningResources deleteLR() { - selenium.click("ui=learningResources::toolbox_learningResource_delete()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=groups::content_deleteYesLs()"); - //delete course takes very long since 12.01.2010 (the course logs are also deleted) - selenium.waitForPageToLoad("150000"); - //This learning resource cannot be deleted - if(selenium.isTextPresent("This learning resource cannot be deleted.")) { - //click OK - selenium.click("ui=dialog::OK()"); - //back to resource list - selenium.click("ui=courseEditor::publishDialog_back()"); - selenium.waitForPageToLoad("30000"); - throw new CannotExecuteException("Cannot delete resource!"); - } - return new LearningResources(selenium); - } - - /** - * Modify properties. - * Modify access if necessary. - * @param accessLabel - */ - public void modifyProperties(String accessLabel) { - //open the LR Settings dialog - selenium.click("ui=learningResources::toolbox_learningResource_modifyProperties()"); - selenium.waitForPageToLoad("30000"); - //change access - boolean accessChanged = false; - if(ACCESS_ALL_REGISTERED.equals(accessLabel) && !selenium.isChecked("ui=learningResourcesModifieProperties::accessAllRegistered()")) { - selenium.click("ui=learningResourcesModifieProperties::accessAllRegistered()"); - accessChanged = true; - } else if(ACCESS_REGISTERED_AND_GUESTS.equals(accessLabel) && !selenium.isChecked("ui=learningResourcesModifieProperties::accessRegisteredAndGuests()")) { - selenium.click("ui=learningResourcesModifieProperties::accessRegisteredAndGuests()"); - accessChanged = true; - } else if(ACCESS_OWNERS_AND_AUTHORS.equals(accessLabel) && !selenium.isChecked("ui=learningResourcesModifieProperties::accessOwnersAndAuthors()")) { - selenium.click("ui=learningResourcesModifieProperties::accessOwnersAndAuthors()"); - accessChanged = true; - } else if (ACCESS_ONLY_OWNERS.equals(accessLabel) && !selenium.isChecked("ui=learningResourcesModifieProperties::accessOnlyOwners()")) { - selenium.click("ui=learningResourcesModifieProperties::accessOnlyOwners()"); - accessChanged = true; - } - if(accessChanged) { - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=overlay::overlayClose()"); - selenium.waitForPageToLoad("30000"); - //confirm modification of settings (new step in modify properties) - if(selenium.isElementPresent("ui=learningResources::dialog_yes()")) { - selenium.click("ui=learningResources::dialog_yes()"); - selenium.waitForPageToLoad("30000"); - } - } else { - selenium.click("ui=overlay::overlayClose()"); - selenium.waitForPageToLoad("30000"); - } - - } - - /** - * Show course content. - * @return - */ - public CourseRun showCourseContent() { - selenium.click("ui=learningResources::content_showContent()"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - - /** - * Show wiki content. - * @return - */ - public WikiRun showWikiContent() { - selenium.click("ui=learningResources::content_showContent()"); - //selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - //e.printStackTrace(); - } - return new WikiRun(selenium); - } - - /** - * Click Edit content for a course detailed view. - * @return a new CourseEditor instance. - */ - public CourseEditor editCourseContent() { - //TODO: LD: add a string independent for the resource type - if(selenium.isTextPresent("Type") && selenium.isTextPresent("Course")) { - selenium.click("ui=learningResources::toolbox_learningResource_editContent()"); - selenium.waitForPageToLoad("30000"); - - return new CourseEditor(selenium); - } - throw new IllegalStateException("This is not a course detailed view"); - } - - /** - * Try to edit the course who was already been open, and got disposed. - * The user sees the "Close and restart course" button. - * @return - */ - public DisposedCourseRun selectDisposedCourse() { - selenium.click("ui=learningResources::toolbox_learningResource_editContent()"); - selenium.waitForPageToLoad("30000"); - return new DisposedCourseRun(selenium); - - } - - /** - * Start editing test. - * @return a new TestEditor instance. - */ - public TestEditor editTestContent() { - //TODO: LD: add a string independent for the resource type - if(selenium.isTextPresent("Type") && selenium.isTextPresent("Test")) { - selenium.click("ui=learningResources::toolbox_learningResource_editContent()"); - selenium.waitForPageToLoad("30000"); - - return new TestEditor(selenium); - } - throw new IllegalStateException("This is not a test detailed view"); - } - - /** - * The user tries to open the courseEditor but it is locked. - * The caller of this method expects to find the course locked, so it should not open the CourseEditor. - * - * @return Returns true if the "alreadyLocked" message shows up, false otherwise. - */ - public boolean checkCourseLocked(String lockOwnerUsername) throws Exception { - // TODO: LD: add a string independent for the resource type - if(selenium.isTextPresent("Type") && selenium.isTextPresent("Course")) { - selenium.click("ui=learningResources::toolbox_learningResource_editContent()"); - - // and wait until 'This course is currently edited by lockOwnerUsername and therefore locked.' appears - for (int second = 0;; second++) { - if (second >= 20) return false; - try { //WARNING: HERE POTENTIAL FAILURE EACH TIME THE TRANSLATION CHANGES! - if (selenium.isTextPresent("This course is being edited by "+lockOwnerUsername+" and therefore locked.")) - return true; - } catch (Exception e) {} - - Thread.sleep(1000); - } - } - throw new IllegalStateException("This is not a course detailed view"); - } - - - public void setBookmark() { - selenium.click("ui=course::toolbox_generalTools_setBookmark()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::saveInput()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Assign new owner. - * @param userName - */ - public void assignOwner(String userName) { - selenium.click("ui=learningResources::toolbox_learningResource_assignOwners()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::toolbox_learningResource_assignOwners_addOwner()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", userName); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_checkUsername(nameOfUser="+ userName +")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=overlay::overlayClose()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Assign new owners. - * It selects all users received by filtering with userName. - * - * @param userName - */ - public void assignOwners(String userName) { - selenium.click("ui=learningResources::toolbox_learningResource_assignOwners()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::toolbox_learningResource_assignOwners_addOwner()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", userName); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_userlist_selectAll()"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=overlay::overlayClose()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Remove userName as owner of this learning resource. - * @param userName - * @return Returns Boolean.TRUE if the owner was successfully removed, - * Boolean.FALSE if the owner is the last one in group, - * and null if none of the above is true. - */ - public Boolean removeOwner(String userName) { - Boolean successfullyRemoved = null; - - selenium.click("ui=learningResources::toolbox_learningResource_assignOwners()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_checkUsernameToRemove(nameOfUser=" + userName + ")"); - selenium.click("ui=commons::usertable_removeOwner()"); - selenium.waitForPageToLoad("30000"); - if(selenium.isTextPresent("Do you really want to remove")) { - selenium.click("ui=dialog::Yes()"); - selenium.waitForPageToLoad("30000"); - successfullyRemoved = true; - } else { - for (int second = 0; second < 20; second++) { - try { - if (selenium.isTextPresent("At least one user is required in a group.")) { - successfullyRemoved = false; - break; - } - } - catch (Exception e) {} - } - } - selenium.click("ui=overlay::overlayClose()"); - selenium.waitForPageToLoad("30000"); - - return successfullyRemoved; - } - - /** - * Get the String of the Access value - * - * Returns the value of course access, e.g. only owners - * - * @return value of course access - */ - public String getAccessString(){ - return selenium.getText("ui=learningResources::content_selectedAccessLabel()"); - } - - /** - * Make a copy of the current learning resource, withj the given title and description. - * - * @param newTitle - * @param newDescription could be null, keeps the old description - */ - public LearningResources copyLR(String newTitle, String newDescription) { - if(selenium.isElementPresent("ui=learningResources::toolbox_learningResource_copy()")) { - selenium.click("ui=learningResources::toolbox_learningResource_copy()"); - selenium.waitForPageToLoad("30000"); - try { //TODO: LD: is this really needed? - Thread.sleep(5000); - } catch (InterruptedException e) { - } - selenium.type("ui=learningResources::dialog_title()", newTitle); - if(newDescription!=null) { - selenium.type("ui=learningResources::dialog_description()", newDescription); - } - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - //selenium.waitForPageToLoad("30000"); - } else { - throw new IllegalStateException("Cannot copy learning resource!"); - } - return new LearningResources(selenium); - } - - public void exportLR() { - selenium.click("ui=learningResources::toolbox_learningResource_exportContent()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Close the course with dialog - * - * @param cleanCatalog clean catalog entries? - * @param cleanGroup clean group entries? - * - * @author Thomas Linowsky - */ - - public void closeCourse(boolean cleanCatalog, boolean cleanGroup){ - selenium.click("ui=learningResources::toolbox_learningResource_closeCourse()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - if(cleanCatalog){ - selenium.click("ui=learningResources::closeCourseWizard_cleanCatalog()"); - } - if(cleanGroup){ - selenium.click("ui=learningResources::closeCourseWizard_cleanGroup()"); - } - selenium.click("ui=learningResources::dialog_buttonNext()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::dialog_buttonNext()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Add the course to Catalog root - * - * @author Thomas Linowsky - */ - - public void addToCatalog(){ - selenium.click("ui=learningResources::toolbox_learningResource_addToCatalog()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::dialog_catalogRoot()"); - selenium.click("ui=dialog::select()"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/lr/LearningResources.java b/src/test/java/org/olat/test/util/selenium/olatapi/lr/LearningResources.java deleted file mode 100644 index bcdff8b14d6..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/lr/LearningResources.java +++ /dev/null @@ -1,613 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.lr; - -import java.io.File; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.course.editor.CourseEditor; -import org.olat.test.util.selenium.olatapi.course.run.CourseRun; -import org.olat.test.util.selenium.olatapi.course.run.WikiRun; -import org.olat.test.util.selenium.olatapi.qti.QuestionnaireEditor; -import org.olat.test.util.selenium.olatapi.qti.TestEditor; -import org.olat.test.util.setup.context.Context; - -import com.thoughtworks.selenium.Selenium; - -/** - * OLAT abstraction for the Learning Resources tab. - * Provides methods for the most common workflows. - * - * @author Lavinia Dumitrescu - * - */ -public class LearningResources extends OLATSeleniumWrapper { - - - public enum LR_Types {COURSE, TEST, WIKI, GLOSSARY, QUESTIONNAIRE, RESOURCE_FOLDER, BLOG, PODCAST, CP} - - /** - * @param selenium - */ - public LearningResources(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=learningResources::menu_searchForm()")) { - throw new IllegalStateException("This is not the - Learning resources - page"); - } - } - - /** - * Create resource with the given type, but do not start editing. - * @param title - * @param description - * @param type - * @return Returns a LRDetailedView object. - */ - public LRDetailedView createResource(String title, String description, LR_Types type) { - createResourceWithoutStartEdit(title, description, type); - if(LR_Types.COURSE.equals(type)) { - //new course wizard - //choose: create course with wizard, start course editor, or show detail view - selenium.click("ui=learningResources::courseImport_wizardShowDetailsView()"); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Next)"); - selenium.waitForPageToLoad("30000"); - } else if(!LR_Types.WIKI.equals(type)) { - //if the resource type is not wiki, the start dialog should show up - selenium.click("ui=learningResources::dialog_startNo()"); - selenium.waitForPageToLoad("60000"); - try { //TODO: LD: is this really needed? - Thread.sleep(1000); - } catch (InterruptedException e) { - } - } - return new LRDetailedView(selenium); - } - - /** - * Clicks on the create XXX_resource button, fills the title and description, and clicks next. - * @param title - * @param description - * @param type - */ - private void createResourceWithoutStartEdit(String title, String description, LR_Types type) { - if(LR_Types.COURSE.equals(type)) { - selenium.click("ui=learningResources::toolbox_create_course()"); - } else if(LR_Types.GLOSSARY.equals(type)) { - selenium.click("ui=learningResources::toolbox_create_glossary()"); - } else if(LR_Types.WIKI.equals(type)) { - selenium.click("ui=learningResources::toolbox_create_wiki()"); - } else if(LR_Types.QUESTIONNAIRE.equals(type)) { - selenium.click("ui=learningResources::toolbox_create_questionnaire()"); - } else if(LR_Types.RESOURCE_FOLDER.equals(type)) { - selenium.click("ui=learningResources::toolbox_create_resourceFolder()"); - } else if(LR_Types.TEST.equals(type)) { - selenium.click("ui=learningResources::toolbox_create_test()"); - } else if(LR_Types.BLOG.equals(type)) { - selenium.click("ui=learningResources::toolbox_create_blog()"); - } else if(LR_Types.PODCAST.equals(type)) { - selenium.click("ui=learningResources::toolbox_create_podcast()"); - } else if (LR_Types.CP.equals(type)) { - selenium.click("ui=learningResources::toolbox_create_createCP()"); - } - - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::dialog_title()"); - selenium.type("ui=learningResources::dialog_title()", title); - - //SR: - selenium.setSpeed("1000"); - - selenium.click("ui=learningResources::dialog_description()"); - selenium.type("ui=learningResources::dialog_description()", description); - - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("60000"); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - } - } - - /** - * - * @param title - * @param description - */ - public void createGlossaryAndStartEditing(String title, String description) { - createResourceWithoutStartEdit(title, description, LR_Types.GLOSSARY); - selenium.click("ui=learningResources::dialog_startYes()"); - selenium.waitForPageToLoad("30000"); - //TODO: LD: return a Glossary object if needed - } - - /** - * - * @param title - * @param description - * @return - */ - public CourseEditor createCourseAndStartEditing(String title, String description) { - createResourceWithoutStartEdit(title, description, LR_Types.COURSE); - - selenium.click("ui=learningResources::courseImport_wizardStartCourseEditor()"); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Next)"); - selenium.waitForPageToLoad("30000"); - - return new CourseEditor(selenium); - } - - /** - * Create a new Course wizard by creating new course - * @param title The title of the course - * @param description The description of the course - * @return A CourseWizard object that represents the wizard component - * - * @author Thomas Linowsky - */ - - public CourseWizard createCourseWizard(String title, String description){ - createResourceWithoutStartEdit(title, description, LR_Types.COURSE); - - selenium.click("ui=learningResources::courseWizard_selectWizardRadio()"); - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Next)"); - selenium.waitForPageToLoad("30000"); - return new CourseWizard(selenium); - } - - /** - * - * @param title - * @param description - * @return - */ - public TestEditor createTestAndStartEditing(String title, String description) { - createResourceWithoutStartEdit(title, description, LR_Types.TEST); - selenium.click("ui=learningResources::dialog_startYes()"); - selenium.waitForPageToLoad("30000"); - - return new TestEditor(selenium); - } - - /** - * - * @param title - * @param description - * @return - */ - public QuestionnaireEditor createQuestionnaireAndStartEditing(String title, String description) { - createResourceWithoutStartEdit(title, description, LR_Types.QUESTIONNAIRE); - selenium.click("ui=learningResources::dialog_startYes()"); - selenium.waitForPageToLoad("30000"); - - return new QuestionnaireEditor(selenium); - } - - /** - * - * @param title - * @param description - */ - public ResourceEditor createResourceFolderAndStartEditing(String title, String description) { - createResourceWithoutStartEdit(title, description, LR_Types.RESOURCE_FOLDER); - selenium.click("ui=learningResources::dialog_startYes()"); - selenium.waitForPageToLoad("30000"); - //TODO: LD: return a ResourceFolderEditor if neccessary - return new ResourceEditor(selenium, title); - } - - /** - * Creates blog resource and opens it in a new tab. - * @param title - * @param description - * @return - */ - public BlogResource createBlogAndStartEditing(String title, String description) { - createResourceWithoutStartEdit(title, description, LR_Types.BLOG); - selenium.click("ui=learningResources::dialog_startYes()"); - selenium.waitForPageToLoad("30000"); - return new BlogResource(selenium, title); - } - - /** - * Creates podcast resource and opens it in a new tab. - * @param title - * @param description - * @return - */ - public PodcastResource createPodcastAndStartEditing(String title, String description) { - createResourceWithoutStartEdit(title, description, LR_Types.PODCAST); - selenium.click("ui=learningResources::dialog_startYes()"); - selenium.waitForPageToLoad("30000"); - return new PodcastResource(selenium, title); - } - - /** - * Select "Search form" and find the resource with the given title if provided, - * and with the given author if any provided. - * The title and the author could be null if not used for filtering. - * TODO : LD: filter after the resource type - * <br/> - * Could return null, if no resource found. - * - * @param selenium - * @param title - * @param author could be null - * @return Returns a LRDetailedView instance if a resource was found, null otherwise - */ - public LRDetailedView searchResource(String title, String author) { - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - - if(title!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", title); - } - if(author!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Author)", author); - } - //uncheck course type, if already checked - /*if(selenium.isChecked("ui=learningResources::content_searchForm_courseType()")) { - selenium.uncheck("ui=learningResources::content_searchForm_courseType()"); - }*/ - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - // if too many entries found - show all - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - - if(selenium.isTextPresent(title) && selenium.isElementPresent("ui=learningResources::content_showDetailedView(nameOfLearningResource=" + title + ")")) { - selenium.click("ui=learningResources::content_showDetailedView(nameOfLearningResource=" + title + ")"); - selenium.waitForPageToLoad("30000"); - return new LRDetailedView(selenium); - } - //no resource found - return null; - } - - /** - * Search resource and show the course content with the input title. - * @param title - * @return Returns a CourseRun instance if a course with the given name is found, else returns null. - */ - public CourseRun searchAndShowCourseContent (String title) { - selenium.click("ui=learningResources::menu_searchForm()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title of learning resource)", title); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - //if too many entries found - show all - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - - selenium.click("ui=learningResources::content_clickLearningResource(nameOfLearningResource=" + title + ")"); - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - } - selenium.waitForPageToLoad("60000"); - - return new CourseRun(selenium); - } - - /** - * Select "My Entries", if too many [Show all] link present, click [Show all], - * and select the entry with the input name. - * - * @param selenium - * @param entryName - * @return - */ - public LRDetailedView searchMyResource(String title) { - selenium.click("ui=learningResources::menu_myEntries()"); - selenium.waitForPageToLoad("30000"); - //if too many entries in myEntries - show all - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=learningResources::content_showDetailedView(nameOfLearningResource=" + title + ")"); - selenium.waitForPageToLoad("30000"); - - return new LRDetailedView(selenium); - } - - /** - * Search and open a course from "My Entries". - * @param title - * @return - */ - public CourseRun searchAndShowMyCourseContent(String title) { - selenium.click("ui=learningResources::menu_myEntries()"); - selenium.waitForPageToLoad("30000"); - //if too many entries in myEntries - show all - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=learningResources::content_clickLearningResource(nameOfLearningResource=" + title + ")"); - selenium.waitForPageToLoad("30000"); - - return new CourseRun(selenium); - } - - /** - * Selects the "Courses" link, and next clicks on "Show content" of the course with the - * given title. It assumes that the course is visible on the first page of the courses list. - * @return - */ - public CourseRun showCourseContent(String title) { - selenium.click("ui=learningResources::menu_courses()"); - selenium.waitForPageToLoad("30000"); - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=learningResources::content_clickLearningResource(nameOfLearningResource=" + title + ")"); - selenium.waitForPageToLoad("30000"); - - return new CourseRun(selenium); - } - - /** - * Show the wiki content with this title. - * @param title - * @return - */ - public WikiRun showWikiContent(String title) { - selenium.click("ui=learningResources::menu_wikis()"); - selenium.waitForPageToLoad("30000"); - if(selenium.isElementPresent("ui=commons::table_showAll()")) { - selenium.click("ui=commons::table_showAll()"); - selenium.waitForPageToLoad("30000"); - } - selenium.click("ui=learningResources::content_clickLearningResource(nameOfLearningResource=" + title + ")"); - selenium.waitForPageToLoad("30000"); - return new WikiRun(selenium); - } - - /** - * Shows the OLAT catalog view - * - * Click the Catalog entry on the left hand menu - * click it twice so the catalog is refreshed - * @return The Catalog object representing the OLAT catalog - */ - - public Catalog showCatalog(){ - selenium.click("ui=learningResources::menu_catalog()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::menu_catalog()"); - selenium.waitForPageToLoad("30000"); - return new Catalog(selenium); - } - - /** - * Imports a course with the given title only if there is no course with this title. - * Opens course editor and publish course. - * - * @param zippedCourse - * @param newTitleOfCourse - * @param newDescriptionOfCourse - * @return - * @throws InterruptedException - */ - public CourseEditor importCourse(File zippedCourse, String newTitleOfCourse, String newDescriptionOfCourse) throws InterruptedException { - // check if course with newTitleOfCourse exists - boolean checkIfExists = false; - LRDetailedView lRDetailedView = searchResource(newTitleOfCourse, null); - checkIfExists = lRDetailedView!=null; - - if (checkIfExists) { - System.out.println("Course with title " + newTitleOfCourse + " already exists, no need to import it!"); - return null; - } - - String remoteFile = Context.getContext().provideFileRemotely(zippedCourse); - - System.out.println("==================="); - System.out.println("Course Import Start"); - System.out.println(" Course: " + newTitleOfCourse); - System.out.println(" File: " + zippedCourse.getAbsolutePath()); - System.out.println(" Remote: " + remoteFile); - System.out.println("==================="); - - selenium.click("ui=learningResources::toolbox_import_course()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::courseImport_uploadFile()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=learningResources::courseImport_fileChooser()",remoteFile); - selenium.click("ui=upload::submit()"); - selenium.waitForPageToLoad("60000"); - - while (!selenium.isElementPresent("ui=learningResources::dialog_title()")) { - for (int second = 0;; second++) { - if (second >= 120) - break; - try { - if (selenium.isTextPresent("How do you wish to proceed?")) - break; - } catch (Exception e) { - } - Thread.sleep(500); - } - Thread.sleep(2000); - selenium.click("ui=learningResources::courseImport_importReferencesImport()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::courseImport_importReferencesContinue()"); - selenium.waitForPageToLoad("30000"); - } - // until the import is done - selenium.type("ui=learningResources::dialog_title()", newTitleOfCourse); - selenium.click("ui=learningResources::dialog_description()"); - selenium.type("ui=learningResources::dialog_description()", newDescriptionOfCourse); - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("60000"); - - selenium.click("ui=learningResources::dialog_startYes()"); - selenium.waitForPageToLoad("30000"); - - System.out.println("================="); - System.out.println("Course Import End"); - System.out.println("================="); - - CourseEditor courseEditor = new CourseEditor(selenium); - courseEditor.publishCourse(); - return courseEditor; - } - - /** - * Import CP and open CP editor. - * Attention: It could return null, if a resource with the same name already exists! Use unique names for resources!!! - * - * @param zippedResource - * @param newTitleOfCourse - * @param newDescriptionOfCourse - * @throws InterruptedException - */ - public CPResourceEditor importCP(File zippedResource, String newTitleOfCourse, String newDescriptionOfCourse) throws InterruptedException { - if(zippedResource==null) { - throw new IllegalArgumentException("zippedResource is null!!"); - } - boolean alreadyExists = checkIfExists(newTitleOfCourse); - if (alreadyExists) { - System.out.println("CP with title " + newTitleOfCourse + " already exists, no need to import it!"); - return null; - } - String remoteFile = Context.getContext().provideFileRemotely(zippedResource); - - selenium.click("ui=learningResources::toolbox_import_cpLearningContent()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::courseImport_uploadFile()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=learningResources::courseImport_fileChooser()",remoteFile); - selenium.click("ui=upload::submit()"); - selenium.waitForPageToLoad("60000"); - - selenium.type("ui=learningResources::dialog_title()", newTitleOfCourse); - selenium.click("ui=learningResources::dialog_description()"); - selenium.type("ui=learningResources::dialog_description()", newDescriptionOfCourse); - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::publishDialog_next()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=learningResources::dialog_startYes()"); - selenium.waitForPageToLoad("30000"); - - return new CPResourceEditor(selenium,newTitleOfCourse); - } - - /** - * Check if resource exists. Returns true if found. - * @param title - * @return - */ - private boolean checkIfExists(String title) { - // check if resource with title exists - boolean checkIfExists = false; - LRDetailedView lRDetailedView = searchResource(title, null); - checkIfExists = lRDetailedView!=null; - - if (checkIfExists) { - return true; - } - return false; - } - - - /** - * Selects the courseIndex course in the next page, if desired, - * and returns a CourseRun if any found or null otherwise. - * - * @param selectNextPage - * @param courseIndex starts at 1. - * @return - */ - public CourseRun showCourseContent (boolean selectNextPage, int courseIndex) { - selectCoursesMenuItemOnce(); - - //select next page - if(selectNextPage && selenium.isElementPresent("ui=commons::table_selectNextPage()")) { - selenium.click("ui=commons::table_selectNextPage()"); - selenium.waitForPageToLoad("30000"); - } - - // select course in page - if(selenium.isElementPresent("ui=learningResources::content_courseTable_selectCourse(index=" + courseIndex + ")")) { - selenium.click("ui=learningResources::content_courseTable_selectCourse(index=" + courseIndex + ")"); - selenium.waitForPageToLoad("30000"); - return new CourseRun(selenium); - } - //no course found for the input values - return null; - } - - /** - * Select courses menu item ONLY if not already selected. - * Motivation: the implementation changed on 14.12.2010: - * Was: if the courses was on second page, - * it remained on the second page upon new selection. - * Now: each selection of courses leads to the first page. - * - */ - private void selectCoursesMenuItemOnce() { - if(!selenium.isElementPresent("ui=learningResources::menu_coursesMenuItemSelected()")) { - selenium.click("ui=learningResources::menu_courses()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * - * @return Returns true if the Forward button available. - */ - public boolean hasMorePages() { - return selenium.isElementPresent("ui=commons::table_selectNextPage()"); - } - - /** - * Creates CP resource. - * - * @param title - * @param description - * @return - */ - public CPResourceEditor createCPAndStartEditing(String title, String description) { - createResourceWithoutStartEdit(title, description, LR_Types.CP); - selenium.click("ui=learningResources::dialog_startYes()"); - selenium.waitForPageToLoad("30000"); - return new CPResourceEditor(selenium, title); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/lr/PodcastResource.java b/src/test/java/org/olat/test/util/selenium/olatapi/lr/PodcastResource.java deleted file mode 100644 index 727f72fdc9a..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/lr/PodcastResource.java +++ /dev/null @@ -1,137 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.lr; - -import com.thoughtworks.selenium.Selenium; - -public class PodcastResource extends ResourceEditor { - - public PodcastResource(Selenium selenium, String title) { - super(selenium, title); - // TODO Auto-generated constructor stub - } - - /** - * - * @param title - * @param description - * @param imageName - */ - public void editPodcast(String title, String description, String imageName) { - selenium.click("ui=podcast::edit()"); - selenium.waitForPageToLoad("30000"); - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Description)", description); - - if(imageName!=null) { - //TODO: LD: add image - } - - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * An episode requires an audio or video file that can be used with Flash. - * @param title - * @param description - * @param fileName - */ - public void createEpisode(String title, String description, String fileName) { - if(selenium.isElementPresent("ui=podcast::create()")) { - selenium.click("ui=podcast::create()"); - selenium.waitForPageToLoad("30000"); - } else if(selenium.isElementPresent("ui=podcast::addEpisode()")) { - selenium.click("ui=podcast::addEpisode()"); - selenium.waitForPageToLoad("30000"); - } - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - - editEpisodeForm(description, fileName); - } - - /** - * FIXME LD: this doesn't use the episode title! - * description or fileName could be null, if so they won't change. - * @param title - * @param description - * @param fileName - */ - public void editEpisode(String title, String description, String fileName) { - //selenium.click("ui=podcast::editEpisode(episodeTitle=" + title + ")"); - selenium.click("ui=podcast::editEpisode()"); - selenium.waitForPageToLoad("30000"); - - //we don't change the title - - //selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - editEpisodeForm(description, fileName); - } - - private void editEpisodeForm(String description, String fileName) { - if(description!=null) { - selenium.type("ui=commons::tinyMce_styledTextArea()", description); - } - - if(fileName!=null) { - //an episode requires an audio or video file that can be used with Flash. - selenium.type("ui=upload::fileChooser()", fileName); - sleepThread(5000); - } - - selenium.click("ui=commons::flexiForm_genericButton(buttonLabel=Publish)"); - selenium.waitForPageToLoad("30000"); - } - - public void commentEpisode(String title,String comment) { - selenium.click("ui=podcast::addComment(entryTitle=" + title + ")"); - selenium.waitForPageToLoad("30000"); - this.sleepThread(5000); - - //typeInRichText(comment); - selenium.selectFrame("//iframe[contains(@src,'javascript:\"\"')]"); - selenium.type("ui=commons::tinyMce_styledTextArea()", comment); - selenium.selectFrame("relative=top"); - - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::backLink()"); - selenium.waitForPageToLoad("30000"); - } - - public boolean hasComments(String entryTitle, int num) { - return selenium.isTextPresent("Comments (" + num + ")"); - } - - public void includeExternal(String title, String description, String feedURL) { - selenium.click("ui=podcast::includeExternal()"); - selenium.waitForPageToLoad("30000"); - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - selenium.type("ui=commons::flexiForm_labeledTextArea(formElementLabel=Description)", description); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Feed URL)", feedURL); - - selenium.click("ui=commons::save()"); - selenium.waitForPageToLoad("30000"); - //TODO: LD: if no valid URL is provided, cancel or enter a new URL - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/lr/ResourceEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/lr/ResourceEditor.java deleted file mode 100644 index 057f7c3ed2e..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/lr/ResourceEditor.java +++ /dev/null @@ -1,59 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.lr; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * @author Lavinia Dumitrescu - * - */ -public class ResourceEditor extends OLATSeleniumWrapper { - - private String resourceTitle; - - /** - * @param selenium - */ - public ResourceEditor(Selenium selenium, String title) { - super(selenium); - resourceTitle = title; - // TODO Auto-generated constructor stub - } - - /** - * TODO: works only if one resource open. - * @return - */ - public LRDetailedView close() { - //selenium.click("ui=tabs::closeNavTab()"); - selenium.click("ui=tabs::closeCourse(nameOfCourse=" + resourceTitle + ")"); - selenium.waitForPageToLoad("30000"); - return new LRDetailedView(selenium); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/package.html b/src/test/java/org/olat/test/util/selenium/olatapi/package.html deleted file mode 100644 index 1d164d61202..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/package.html +++ /dev/null @@ -1,24 +0,0 @@ -<html> -<head> -</head> - -<body> - -OLAT Abstraction Layer API. -<br/> -This represents a hierarchical object model (OLATSeleniumWrapper objects) of the -OLAT's sub-workflows, and encapsulates the selenium commands succession in an API. -The application layer classes are design based on the GUI pages structure. -The implementation status of this API reflects the current needs of the existing -tests (clients), that is only the minimum is implemented to fulfil the demands of -the tests cases. -<br/> -Another limitation of this API is that is role independent. -This means that the test developer has to keep in mind that the API is designed -from the administrator perspective. -<br/> -Ideally all tests cases should contain no selenium commands but only calls to the -Abstraction Layer API. - -</body> -</html> \ No newline at end of file diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPCollectWizard.java b/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPCollectWizard.java deleted file mode 100644 index d8fabf327ec..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPCollectWizard.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ - -package org.olat.test.util.selenium.olatapi.portfolio; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * - * abstraction for the ePortfolio artefact collect wizard - * possible steps in wizard are: - * 1. Inhalt erfassen - * 2. Metadaten erfassen - * 3. Tags angeben - * 4. Urheberrecht - * 5. Reflexion erfassen - * 6. Mappe auswählen - * not all of them are available depending on artefact-type - * - * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com - */ -public class EPCollectWizard extends OLATSeleniumWrapper { - - public EPCollectWizard(Selenium selenium) { - super(selenium); - } - - // wizzard to collect olat internal sources has 3 steps only as long as no map exists - public void filloutWizardForOLATSource(String title, String description) { - filloutStep2(title, description); - filloutStep3(); - filloutStep5(description); - } - - public void filloutWizardForTextArtefact(String content, String title, String description) { - // step 1: text content - selenium.type("ui=epCollectDialog::description()", content); - selenium.click("ui=commons::flexiForm_wizzard_next()"); - selenium.waitForPageToLoad("30000"); - filloutStep2(title, description); - filloutStep3(); - filloutStep4(); - filloutStep5(description); - } - - /** - * @param title - * @param description - */ - private void filloutStep2(String title, String description) { - // step 2: metadata - selenium.type("ui=epCollectDialog::title()", title); - selenium.type("ui=epCollectDialog::description()", description); - selenium.click("ui=commons::flexiForm_wizzard_next()"); - selenium.waitForPageToLoad("30000"); - } - - private void filloutStep3() { - // step 3: tagging - selenium.click("ui=epCollectDialog::taginput()"); - for (int i = 0; i < 3; i++) { - selenium.typeKeys("ui=epCollectDialog::taginput()", "test" + i); - sleepThread(3000); - if (selenium.isElementPresent("ui=epCollectDialog::taginputFeed()")) { - selenium.click("ui=epCollectDialog::taginputFeed()"); - } - } - selenium.click("ui=commons::flexiForm_wizzard_next()"); - selenium.waitForPageToLoad("30000"); - } - - private void filloutStep4() { - // step 4: check the copyright checkbox - selenium.check("ui=epCollectDialog::copyrightCheckbox()"); - selenium.click("ui=commons::flexiForm_wizzard_next()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * @param description represents the reflexion - */ - private void filloutStep5(String description) { - // step 5: reflexion and proceed with finishing wizard - selenium.type("ui=epCollectDialog::description()", "reflexion: " + description); - selenium.click("ui=commons::flexiForm_wizzard_finish()"); - selenium.waitForPageToLoad("30000"); - } - - - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPExtensions.java b/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPExtensions.java deleted file mode 100644 index f7c7e9b6e3b..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPExtensions.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ - -package org.olat.test.util.selenium.olatapi.portfolio; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * API wrapper for ePortfolio Extensions - * also providing some helper methods. - * - * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com - */ -public class EPExtensions extends OLATSeleniumWrapper { - - public EPExtensions(Selenium selenium) { - super(selenium); - } - - public int getArtefactAmount(){ - // check the string containing amount of artefacts, if not present, or no artefact, return 0 - int amount = 0; - if (selenium.isElementPresent("ui=epArtefacts::artefactCount()")) { - String artCount = selenium.getText("ui=epArtefacts::artefactCount()"); - try { - amount = Integer.parseInt(artCount.split(":")[1].trim()); - } catch (Exception e) { - return amount; - } - } - return amount; - } - - public int getTotalArtefactAmount(){ - selenium.click("ui=epMenu::ePortfolioArtefacts()"); - selenium.waitForPageToLoad("30000"); - return getArtefactAmount(); - } - - - public EPCollectWizard createTextArtefactAndOpenWizard(){ - selenium.click("ui=epMenu::ePortfolioArtefacts()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=epArtefacts::addArtefactLink()"); - sleepThread(3000); - selenium.click("ui=epArtefacts::createTextArtefactLink()"); - selenium.waitForPageToLoad("30000"); - return new EPCollectWizard(selenium); - } - - public EPArtefactSearch getArtefactSearch(){ - selenium.click("ui=epArtefacts::artefactSearch()"); - selenium.waitForPageToLoad("30000"); - return new EPArtefactSearch(selenium); - } - - public EPMapEditor getMapEditor(){ - selenium.click("ui=epMenu::ePortfolioMyMaps()"); - selenium.waitForPageToLoad("30000"); - return new EPMapEditor(selenium); - } - - public void deleteFirstArtefact(){ - if (selenium.isElementPresent("ui=epArtefactSearch::deleteFirstArtefactLink()")){ - selenium.click("ui=epArtefactSearch::deleteFirstArtefactLink()"); - selenium.waitForPageToLoad("30000"); - sleepThread(6000); - selenium.click("ui=dialog::Yes()"); - sleepThread(1000); - } - } - - public boolean hasArtefact() { - return selenium.isElementPresent("ui=epArtefactSearch::deleteFirstArtefactLink()"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPMapEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPMapEditor.java deleted file mode 100644 index e6ae31efd32..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/portfolio/EPMapEditor.java +++ /dev/null @@ -1,121 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ - -package org.olat.test.util.selenium.olatapi.portfolio; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com - * - */ -public class EPMapEditor extends OLATSeleniumWrapper { - - public EPMapEditor(Selenium selenium) { - super(selenium); - } - - public void createDefaultMap(String title, String description){ - selenium.click("ui=epMap::addMapLink()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=epMap::createDefaultMap()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=epMap::createMapTitle()", title); - selenium.type("ui=epMap::createMapDescription()", description); - selenium.click("ui=epMap::createMapSaveButton()"); - } - - public void openMapByTitle(String title){ - selenium.click("ui=epMap::openMap(titleOfMap=" + title + ")"); - selenium.waitForPageToLoad("30000"); - } - - public void openFirstPage(){ - if (selenium.isElementPresent("ui=epMap::firstPageLink()")){ - selenium.click("ui=epMap::firstPageLink()"); - selenium.waitForPageToLoad("30000"); - } - } - - public void addPages(int amount){ - for (int i = 0; i < amount; i++) { - selenium.click("ui=epMap::addPageLink()"); - selenium.waitForPageToLoad("30000"); - toggleEditMode(false); - } - } - - public void addStructures(int amount){ - for (int i = 0; i < amount; i++) { - selenium.click("ui=epMap::addStructLink()"); - selenium.waitForPageToLoad("30000"); - } - } - - public void toggleEditMode(boolean onOff){ - if (onOff){ - if (selenium.isElementPresent("ui=epMap::openEditor()")) - selenium.click("ui=epMap::openEditor()"); - } else { - if (selenium.isElementPresent("ui=epMap::closeEditor()")) - selenium.click("ui=epMap::closeEditor()"); - } - selenium.waitForPageToLoad("30000"); - } - - public void openShareDialogForMapByTitle(String title){ - selenium.click("ui=epMap::shareMap(titleOfMap=" + title + ")"); - selenium.waitForPageToLoad("30000"); - } - - public void shareToOtherUserWithName(String username){ - // add a rule - selenium.click("ui=epShare::createRule()"); - selenium.waitForPageToLoad("30000"); - // choose user - selenium.click("ui=epShare::nameInput()"); - selenium.typeKeys("ui=epShare::nameInput()", username); - sleepThread(3000); - if (selenium.isElementPresent("ui=epShare::nameInputSelect()")) { - selenium.click("ui=epShare::nameInputSelect()"); - } - // persist - selenium.click("ui=epShare::saveShare()"); - } - - public void changeElementTitleDescription(String title, String description){ - selenium.type("ui=epMapEditor::elTitle()", title); - selenium.type("ui=epMapEditor::elDescription()", description); - selenium.click("ui=epMapEditor::saveEditor()"); - selenium.waitForPageToLoad("30000"); - } - - public boolean deleteActiveTOCElement(){ - if (selenium.isElementPresent("ui=epMapEditor::deleteButton()")) { - selenium.click("ui=epMapEditor::deleteButton()"); - selenium.waitForPageToLoad("30000"); - return true; - } - return false; - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/qti/EssayQuestionEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/qti/EssayQuestionEditor.java deleted file mode 100644 index 2088e9c457f..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/qti/EssayQuestionEditor.java +++ /dev/null @@ -1,51 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.qti; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is an Text/Essay QuestionEditor, used only for Questionnaire. - * - * @author Lavinia Dumitrescu - * - */ -public class EssayQuestionEditor extends QuestionEditor { - - public EssayQuestionEditor(Selenium selenium) { - super(selenium); - // TODO Auto-generated constructor stub - } - - /** - * Set essay's answer lettersPerLine and numberOfLines, save. - * - * @param lettersPerLine - * @param numberOfLines - */ - public void setAnswerSize(int lettersPerLine, int numberOfLines) { - selectQuestionAndAnswersTab(); - selenium.type("ui=testEditor::content_questionAnswers_essayLettersPerLine()", String.valueOf(lettersPerLine)); - selenium.type("ui=testEditor::content_questionAnswers_essayNumberOfLines()", String.valueOf(numberOfLines)); - selenium.click("ui=commons::saveInput()"); - selenium.waitForPageToLoad("30000"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/qti/FIBQuestionEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/qti/FIBQuestionEditor.java deleted file mode 100644 index 41f920f4153..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/qti/FIBQuestionEditor.java +++ /dev/null @@ -1,105 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.qti; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is a Gap-text or FILL-in-BLANK QuestionEditor with 2 modes: Test and Questionnaire. - * (The class might be splitted later in specific types.) - * <p> - * Used for tests/questionnaires editing. - * The Questionnaire functionality is a subset of the Test mode. - * - * @author Lavinia Dumitrescu - * - */ -public class FIBQuestionEditor extends QuestionEditor { - - /** - * @param selenium - */ - public FIBQuestionEditor(Selenium selenium) { - super(selenium); - } - - /** - * Adds new blank in the Question/answer tab of the selected GAP_TEXT question. - * - */ - public void addNewBlank() { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_addNewBlank()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Only for tests! - * Inserts the solution text in the blank field of the selected GAP_TEXT question. - * @param newText - * @param indexOfElement - */ - public void setBlankSolution(String newText, int indexOfElement) { - //TODO: implement parameter indexOfElement - selenium.type("ui=testEditor::content_questionAnswers_blankField(indexOfElement=" + String.valueOf(indexOfElement) + ")", newText); - selenium.click("ui=testEditor::content_questionAnswers_save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Add new text fragment in the Question/answer tab of the selected GAP_TEXT question. - * - */ - public void addNewTextFragment() { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_addNewTextFragment()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Edit text element with the given index for the GAP_TEXT question type, while in Question/answers tab. - * @param index - * @param text - */ - public void editTextFragment(int index, String text) { - selenium.click("ui=testEditor::content_questionAnswers_editAnswerRest(indexOfAnswer=" + index + ")"); - selenium.waitForPageToLoad("30000"); - editRichText(text); - } - - /** - * Only for tests! - * Question/answer tab of the GAP_TEXT question type. - * - * @param elemIndex - */ - public void changeCapitalization(int elemIndex) { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_capitalization(indexOfElement=" + String.valueOf(elemIndex) + ")"); - selenium.click("ui=testEditor::content_questionAnswers_save()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/qti/KPrimQuestionEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/qti/KPrimQuestionEditor.java deleted file mode 100644 index 8356ba91581..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/qti/KPrimQuestionEditor.java +++ /dev/null @@ -1,96 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.qti; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is a KPrim QuestionEditor used only for tests editing. - * (The class might be splitted later in specific types.) - * - * @author Lavinia Dumitrescu - * - */ -public class KPrimQuestionEditor extends QuestionEditor { - - - /** - * @param selenium - */ - public KPrimQuestionEditor(Selenium selenium) { - super(selenium); - } - - - /** - * Edits the answer with the answerIndex for the selected KPRIM, - * while in Question/answers tab of the current selected question. - * The answerIndex must be greater that 0. - * @param newText - * @param answerIndex - */ - public void editAnswer(String newText, int answerIndex) { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_editAnswerKprim(indexOfAnswer=" + String.valueOf(answerIndex) + ")"); - selenium.waitForPageToLoad("30000"); - editRichText(newText); - } - - /** - * Chooses the correct solution for the current selected KPRIM question. - * - * @param firstCorrect - * @param secondCorrect - * @param thirdCorrect - * @param forthCorrect - */ - public void setCorrectKprimSolution(boolean firstCorrect, boolean secondCorrect, boolean thirdCorrect, boolean forthCorrect) { - selectQuestionAndAnswersTab(); - if(firstCorrect) { - selenium.click("ui=testEditor::content_questionAnswers_setCorrectKprim(indexOfAnswer=1)"); - }else { - selenium.click("ui=testEditor::content_questionAnswers_setIncorrectKprim(indexOfAnswer=1)"); - } - if(secondCorrect) { - selenium.click("ui=testEditor::content_questionAnswers_setCorrectKprim(indexOfAnswer=2)"); - }else { - selenium.click("ui=testEditor::content_questionAnswers_setIncorrectKprim(indexOfAnswer=2)"); - } - if(thirdCorrect) { - selenium.click("ui=testEditor::content_questionAnswers_setCorrectKprim(indexOfAnswer=3)"); - }else { - selenium.click("ui=testEditor::content_questionAnswers_setIncorrectKprim(indexOfAnswer=3)"); - } - if(forthCorrect) { - selenium.click("ui=testEditor::content_questionAnswers_setCorrectKprim(indexOfAnswer=4)"); - }else { - selenium.click("ui=testEditor::content_questionAnswers_setIncorrectKprim(indexOfAnswer=4)"); - } - selenium.click("ui=testEditor::content_questionAnswers_save()"); - selenium.waitForPageToLoad("30000"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/qti/MCQuestionEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/qti/MCQuestionEditor.java deleted file mode 100644 index 382d45f8750..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/qti/MCQuestionEditor.java +++ /dev/null @@ -1,87 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.qti; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is a Multiple choice QuestionEditor with 2 modes: Test and Questionnaire. - * (The class might be splitted later in specific types.) - * <p> - * Used for tests/questionnaires editing. - * The Questionnaire functionality is a subset of the Test mode. - * - * @author Lavinia Dumitrescu - * - */ -public class MCQuestionEditor extends QuestionEditor { - - - /** - * @param selenium - */ - public MCQuestionEditor(Selenium selenium) { - super(selenium); - } - - /** - * Adds new answer, while in Question/answers tab of the current selected question. - * - */ - public void addNewAnswer() { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_addNewAnswer()"); - selenium.waitForPageToLoad("30000"); - } - - - /** - * Edits the answer with the answerIndex for the MULTIPLE_CHOICE, - * while in Question/answers tab of the current selected question. - * The answerIndex must be greater that 0. - * @param newText - * @param answerIndex - */ - public void editAnswer(String newText, int answerIndex) { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_editAnswerMc(indexOfAnswer=" + String.valueOf(answerIndex) + ")"); - selenium.waitForPageToLoad("30000"); - editRichText(newText); - } - - /** - * Only for tests! - * Selects the correct answer for the current selected MULTIPLE_CHOICE question. - * @param answerIndex - */ - public void setMultipleChoiceSolution(int answerIndex) { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_setCorrectMc(indexOfAnswer=" + answerIndex + ")"); - selenium.click("ui=testEditor::content_questionAnswers_save()"); - selenium.waitForPageToLoad("30000"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/qti/QuestionEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/qti/QuestionEditor.java deleted file mode 100644 index 3b150573fcd..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/qti/QuestionEditor.java +++ /dev/null @@ -1,98 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.qti; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is a QuestionEditor. The class might be splitted later in specific types. - * - * @author Lavinia Dumitrescu - * - */ -public class QuestionEditor extends OLATSeleniumWrapper { - - //supported question types - public enum QUESTION_TYPES {SINGLE_CHOICE, MULTIPLE_CHOICE, KPRIM, GAP_TEXT, ESSAY} - - /** - * @param selenium - */ - public QuestionEditor(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isTextPresent("Meta data")) { - throw new IllegalStateException("This is not the - Question Editor- page"); - } - } - - /** - * Change question title to newTitle, in Meta data tab. - * @param currentTitle - * @param newTitle - */ - public void setQuestionTitle(String newTitle) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", newTitle); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - - /** - * Select question with the given title and then the Question/answers tab. - * @param title - */ - public void selectQuestionAndAnswersTab() { - if(selenium.isElementPresent("ui=testEditor::content_questionAnswers_tabQuestionAnswers()")) { - selenium.click("ui=testEditor::content_questionAnswers_tabQuestionAnswers()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Edit question, while in Question/answers tab of the current selected question of the types: - * SINGLE_CHOICE, MULTIPLE_CHOICE or KPRIM. - * - * @param newText - */ - public void editQuestion(String newText) { - selenium.click("ui=testEditor::content_questionAnswers_editQuestion()"); - selenium.waitForPageToLoad("30000"); - - editRichText(newText); - } - - protected void editRichText(String text) { - // the description shows up in an iframe - typeInRichText(text); - selenium.click("ui=commons::flexiForm_saveButtonVertical()"); - selenium.waitForPageToLoad("30000"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/qti/QuestionnaireEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/qti/QuestionnaireEditor.java deleted file mode 100644 index c5989bb3b13..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/qti/QuestionnaireEditor.java +++ /dev/null @@ -1,94 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.selenium.olatapi.qti; - -import org.olat.test.util.selenium.olatapi.qti.QuestionEditor.QUESTION_TYPES; - -import com.thoughtworks.selenium.Selenium; - -/** - * Subclass of the TestEditor. - * It allows to add section nodes or question nodes of the type: SINGLE_CHOICE, MULTIPLE_CHOICE, GAP_TEXT, and ESSAY. - * It offers an EssayQuestionEditor more than the TestEditor. - * - * @author Lavinia Dumitrescu - * - */ -public class QuestionnaireEditor extends TestEditor { - - public QuestionnaireEditor(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=testEditor::toolbox_add_addText()")) { - //it must have an add Text link - throw new IllegalStateException("This is not the - QuestionnaireEditor - page"); - } - } - - /** - * QUESTION_TYPES: SINGLE_CHOICE, MULTIPLE_CHOICE, GAP_TEXT, and ESSAY. - */ - protected void clickAddQuestion(QUESTION_TYPES type) { - if(QUESTION_TYPES.SINGLE_CHOICE.equals(type)) { - selenium.click("ui=testEditor::toolbox_add_addSingleChoice()"); - } else if(QUESTION_TYPES.MULTIPLE_CHOICE.equals(type)) { - selenium.click("ui=testEditor::toolbox_add_addMultipleChoice()"); - } else if(QUESTION_TYPES.GAP_TEXT.equals(type)) { - selenium.click("ui=testEditor::toolbox_add_addGapText()"); - } else if(QUESTION_TYPES.ESSAY.equals(type)) { - selenium.click("ui=testEditor::toolbox_add_addText()"); - } - } - - /** - * QUESTION_TYPES: SINGLE_CHOICE, MULTIPLE_CHOICE, GAP_TEXT, and ESSAY. - */ - protected QuestionEditor returnQuestionEditor(QUESTION_TYPES type) { - if(QUESTION_TYPES.SINGLE_CHOICE.equals(type)) { - return new SCQuestionEditor(selenium); - } else if(QUESTION_TYPES.MULTIPLE_CHOICE.equals(type)) { - return new MCQuestionEditor(selenium); - } else if(QUESTION_TYPES.GAP_TEXT.equals(type)) { - return new FIBQuestionEditor(selenium); - } else if(QUESTION_TYPES.ESSAY.equals(type)) { - return new EssayQuestionEditor(selenium); - } - return new QuestionEditor(selenium); - } - - /** - * Checks the question type. - * QUESTION_TYPES: SINGLE_CHOICE, MULTIPLE_CHOICE, GAP_TEXT, and ESSAY. - * @return Returns null if no question type identified. - */ - protected QuestionEditor getCurrentQuestion() { - if(selenium.isElementPresent("ui=testEditor::content_metadata_scType()")) { - return new SCQuestionEditor(selenium); - } else if(selenium.isElementPresent("ui=testEditor::content_metadata_mcType()")) { - return new MCQuestionEditor(selenium); - } else if(selenium.isElementPresent("ui=testEditor::content_metadata_gapType()")) { - return new FIBQuestionEditor(selenium); - } else if(selenium.isElementPresent("ui=testEditor::content_metadata_essayType()")) { - return new EssayQuestionEditor(selenium); - } - throw new IllegalStateException("This is not a - QuestionEditor - page!"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/qti/SCQuestionEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/qti/SCQuestionEditor.java deleted file mode 100644 index b0a651a22e6..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/qti/SCQuestionEditor.java +++ /dev/null @@ -1,86 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.qti; - -import com.thoughtworks.selenium.Selenium; - -/** - * This is a Single choice QuestionEditor with 2 modes: Test and Questionnaire. - * (The class might be splitted later in specific types.) - * <p> - * Used for tests/questionnaires editing. - * The Questionnaire functionality is a subset of the Test mode. - * - * @author Lavinia Dumitrescu - * - */ -public class SCQuestionEditor extends QuestionEditor { - - /** - * @param selenium - */ - public SCQuestionEditor(Selenium selenium) { - super(selenium); - } - - /** - * Adds new answer, while in Question/answers tab of the current SINGLE_CHOICE question. - * - */ - public void addNewAnswer() { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_addNewAnswer()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Edits the answer with the answerIndex for the selected SINGLE_CHOICE - * while in Question/answers tab of the current selected question. - * The answerIndex must be greater that 0. - * @param newText - * @param answerIndex - */ - public void editAnswer(String newText, int answerIndex) { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_editAnswerRest(indexOfAnswer=" + String.valueOf(answerIndex) + ")"); - selenium.waitForPageToLoad("30000"); - editRichText(newText); - } - - - /** - * Only for tests! This SHOULD NOT be called for a questionnaire editor.! - * Selects the correct answer for the current selected SINGLE_CHOICE question. - * - * @param answerIndex - */ - public void setSingleChoiceSolution(int answerIndex) { - selectQuestionAndAnswersTab(); - selenium.click("ui=testEditor::content_questionAnswers_setCorrectSc(indexOfAnswer=" + String.valueOf(answerIndex) + ")"); - selenium.click("ui=testEditor::content_questionAnswers_save()"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/qti/SectionEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/qti/SectionEditor.java deleted file mode 100644 index c58114e9a22..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/qti/SectionEditor.java +++ /dev/null @@ -1,62 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.qti; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * @author Lavinia Dumitrescu - * - */ -public class SectionEditor extends OLATSeleniumWrapper { - - /** - * @param selenium - */ - public SectionEditor(Selenium selenium) { - super(selenium); - - // Check that we're on the right place - if(!selenium.isElementPresent("ui=testEditor::content_section_orderOfQuestions()")) { - throw new IllegalStateException("This is not the - Test Section - page"); - } - } - - /** - * Selects section with the currentTitle and change title to newTitle. - * @param currentTitle - * @param newTitle - */ - public void setSectionTitle(String currentTitle, String newTitle) { - selenium.click("ui=testEditor::content_section_title()"); - selenium.type("ui=testEditor::content_section_title()", newTitle); - selenium.click("ui=testEditor::content_section_save()"); - selenium.waitForPageToLoad("30000"); - } - -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/qti/TestEditor.java b/src/test/java/org/olat/test/util/selenium/olatapi/qti/TestEditor.java deleted file mode 100644 index 8ae1ab57515..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/qti/TestEditor.java +++ /dev/null @@ -1,242 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.qti; - -import com.thoughtworks.selenium.Selenium; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.olatapi.lr.LRDetailedView; -import org.olat.test.util.selenium.olatapi.qti.QuestionEditor.QUESTION_TYPES; - -/** - * This is the TestEditor abstraction. <p> - * It allows to add section nodes or question nodes of the type: SINGLE_CHOICE, MULTIPLE_CHOICE, KPRIM, GAP_TEXT. - * - * @author Lavinia Dumitrescu - * - */ -public class TestEditor extends OLATSeleniumWrapper { - - - - /** - * @param selenium - */ - public TestEditor(Selenium selenium) { - super(selenium); - - //Check that we're on the right place - if(!selenium.isElementPresent("ui=testEditor::toolbox_add_addSection()")) { - //it must have an Add Section link. - throw new IllegalStateException("This is not the - Test editor - page"); - } - } - - /** - * Close editor and save changes. - * @return - */ - public LRDetailedView close() { - selenium.click("ui=testEditor::toolbox_editorTools_closeEditor()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=testEditor::dialog_clickSave()"); - selenium.waitForPageToLoad("30000"); - - return new LRDetailedView(selenium); - } - - /** - * Sets the passing score for the curent test. - * @param score - */ - public void setNecessaryPassingScore(double score) { - selenium.type("ui=testEditor::content_test_necessaryPassingScore()", String.valueOf(score)); - selenium.click("ui=testEditor::content_test_save()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Adds question of the specified type with the given title. - * @param type - * @param title - */ - public QuestionEditor addQuestion(QUESTION_TYPES type, String title) { - clickAddQuestion(type); - - selenium.waitForPageToLoad("30000"); - selenium.click("ui=testEditor::toolbox_add_insertAsRootsFirstChild()"); - selenium.click("ui=testEditor::toolbox_add_save()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", title); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - - return returnQuestionEditor(type); - } - - /** - * QUESTION_TYPES: SINGLE_CHOICE, MULTIPLE_CHOICE, KPRIM, GAP_TEXT - * @param type - */ - protected void clickAddQuestion(QUESTION_TYPES type) { - if(QUESTION_TYPES.SINGLE_CHOICE.equals(type)) { - selenium.click("ui=testEditor::toolbox_add_addSingleChoice()"); - } else if(QUESTION_TYPES.MULTIPLE_CHOICE.equals(type)) { - selenium.click("ui=testEditor::toolbox_add_addMultipleChoice()"); - } else if(QUESTION_TYPES.KPRIM.equals(type)) { - selenium.click("ui=testEditor::toolbox_add_addKprim()"); - } else if(QUESTION_TYPES.GAP_TEXT.equals(type)) { - selenium.click("ui=testEditor::toolbox_add_addGapText()"); - } - } - - /** - * - * @param type - * @return Returns a SCQuestionEditor, MCQuestionEditor, KPrimQuestionEditor or a FIBQuestionEditor. - */ - protected QuestionEditor returnQuestionEditor(QUESTION_TYPES type) { - if(QUESTION_TYPES.SINGLE_CHOICE.equals(type)) { - return new SCQuestionEditor(selenium); - } else if(QUESTION_TYPES.MULTIPLE_CHOICE.equals(type)) { - return new MCQuestionEditor(selenium); - } else if(QUESTION_TYPES.KPRIM.equals(type)) { - return new KPrimQuestionEditor(selenium); - } else if(QUESTION_TYPES.GAP_TEXT.equals(type)) { - return new FIBQuestionEditor(selenium); - } - return new QuestionEditor(selenium); - } - - /** - * Adds new section with the specified title. - * @param title - */ - public SectionEditor addSection(String title) { - selenium.click("ui=testEditor::toolbox_add_addSection()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()"); - selenium.click("ui=testEditor::toolbox_add_save()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=testEditor::content_section_title()"); - selenium.type("ui=testEditor::content_section_title()", title); - selenium.click("ui=testEditor::content_section_save()"); - selenium.waitForPageToLoad("30000"); - return new SectionEditor(selenium); - } - - /** - * Select question with the given title. - * @param title - */ - public QuestionEditor selectQuestion(String title) { - selenium.click("ui=testEditor::menu_link(link=" + title + ")"); - selenium.waitForPageToLoad("30000"); - - return getCurrentQuestion(); - } - - /** - * Checks the question type. - * QUESTION_TYPES: SINGLE_CHOICE, MULTIPLE_CHOICE, KPRIM, GAP_TEXT - * @return Returns null if no question type identified. - */ - protected QuestionEditor getCurrentQuestion() { - if(selenium.isElementPresent("ui=testEditor::content_metadata_scType()")) { - return new SCQuestionEditor(selenium); - } else if(selenium.isElementPresent("ui=testEditor::content_metadata_mcType()")) { - return new MCQuestionEditor(selenium); - } else if(selenium.isElementPresent("ui=testEditor::content_metadata_gapType()")) { - return new FIBQuestionEditor(selenium); - } else if(selenium.isElementPresent("ui=testEditor::content_metadata_kprimType()")) { - return new KPrimQuestionEditor(selenium); - } - throw new IllegalStateException("This is not a - QuestionEditor - page!"); - } - - public SectionEditor selectSection(String title) { - selenium.click("ui=testEditor::menu_link(link=" + title + ")"); - selenium.waitForPageToLoad("30000"); - return new SectionEditor(selenium); - } - - /** - * Deletes the current selected node. - * - */ - public void deleteCurrentNode(boolean confirmDeletion) { - selenium.click("ui=testEditor::toolbox_Change_changeDelete()"); - selenium.waitForPageToLoad("30000"); - if(confirmDeletion) { - selenium.click("ui=testEditor::dialog_clickYes()"); - selenium.waitForPageToLoad("30000"); - } - } - - /** - * Try to delete the current selected section/question node but not possible. - * A Test must contain at least a section node. - * @throws Exception - */ - public void deleteUndeleteable(boolean isSection) throws Exception { - String cannotBeDeteledMsg = "Section cannot be deleted."; - if(!isSection) { - cannotBeDeteledMsg = "Question cannot be deleted."; - } - selenium.click("ui=testEditor::toolbox_Change_changeDelete()"); - selenium.waitForPageToLoad("30000"); - for (int second = 0;; second++) { - if (second >= 60) fail("timeout"); - try { if (selenium.isTextPresent(cannotBeDeteledMsg)) break; } catch (Exception e) {} - Thread.sleep(1000); - } - selenium.click("ui=testEditor::dialog_clickOk()"); - } - - /** - * Copy the current selected node and sets the newTitle as title. - * @param newTitle - */ - public QuestionEditor copyCurrentQuestion(String newTitle) { - selenium.click("ui=testEditor::toolbox_Change_changeCopy()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=courseEditor::toolbox_insertCourseElements_insertAsRootsFirstChild()"); - selenium.click("ui=testEditor::toolbox_add_save()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Title)", newTitle); - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - return new QuestionEditor(selenium); - } - - /** - * Clicks OK on a dialog. - * - */ - public void dialogOK() { - selenium.click("ui=testEditor::dialog_clickOk()"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/user/UserManagement.java b/src/test/java/org/olat/test/util/selenium/olatapi/user/UserManagement.java deleted file mode 100644 index d3ce592f256..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/user/UserManagement.java +++ /dev/null @@ -1,263 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.user; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; -import org.olat.test.util.selenium.SeleniumHelper; - -import com.thoughtworks.selenium.Selenium; - -/** - * UserManagement abstraction. - * - * @author Lavinia Dumitrescu - * - */ -public class UserManagement extends OLATSeleniumWrapper { - - public UserManagement(Selenium selenium) { - super(selenium); - try { //loads slower since 29.01.2010 - Thread.sleep(5000); - } catch (Exception e) { - // nothing to do - } - // Check that we're on the right place - if(!selenium.isElementPresent("ui=userManagement::menu_userSearch()")) { - throw new IllegalStateException("This is not the - UserManagement - page"); - } - } - - /** - * - * @param username - * @return Returns false if none found, else true if at least one found. - */ - public boolean searchUser(String username) { - selectUserSearch(); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", username); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - if(selenium.isTextPresent("No user was found with these attributes")) { - return false; - } else if (selenium.isElementPresent("ui=commons::usertable_userlist_selectAll()")) { - return true; - } - throw new IllegalStateException("The searchUser could not decide whether it find or not any user!"); - } - - /** - * Search and selects user - * @param username - * @return - */ - public UserSettings selectUser(String username) { - boolean userFound = searchUser(username); - if(userFound) { - selenium.click("ui=commons::usertable_userlist_selectUserName(nameOfUser=" + username + ")"); - selenium.waitForPageToLoad("30000"); - - return new UserSettings(selenium); - } - throw new IllegalStateException("selectUser could not find any user!"); - } - - /** - * Checks that one cannot edit admin users. - * @param username - * @return Returns true if cannotEditUser message shows up - */ - public boolean cannotEditUser(String username) throws Exception { - boolean userFound = searchUser(username); - if(userFound) { - selenium.click("ui=commons::usertable_userlist_selectUserName(nameOfUser=" + username + ")"); - selenium.waitForPageToLoad("30000"); - return SeleniumHelper.isTextPresent(selenium, "You do not have enough rights to edit this user.", 20); - } - throw new IllegalStateException("cannotEditUser could not find any user!"); - } - - /** - * Select the search user menu item. - */ - private void selectUserSearch() { - selenium.click("ui=userManagement::menu_userSearch()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Creates user without check whether already exists. - * Language: EN. - * Should this check if user exists? - * @param username - * @param firstname - * @param lastname - * @param email - * @param password - */ - public UserSettings createUser(String username, String firstname, String lastname, String email, String password) { - selenium.click("ui=userManagement::menu_createUser()"); - selenium.waitForPageToLoad("30000"); - - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", username); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=First name)", firstname); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=Last name)", lastname); - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=E-mail)", email); - selenium.type("ui=commons::flexiForm_labeledPasswordInput(formElementLabel=Password)", password); - //select EN - selenium.select("ui=userManagement::content_createUser_language()", "value=en"); - selenium.type("ui=commons::flexiForm_labeledPasswordInput(formElementLabel=Verify password)", password); - selenium.click("ui=userManagement::content_createUser_save()"); - selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(5000); - } catch (Exception e) { - // nothing to do - } - assertTrue(selenium.isTextPresent("Manage user settings")); - return new UserSettings(selenium); - } - - /** - * Imports users, the parameter is a excel like string, see the GUI example. - * Imports only the new users. If at least one imported (new) returns true, else false. - * - * @param rowsFromExcelString - * @return Returns true if all users could be imported. - */ - public boolean importAllUsers(String rowsFromExcelString) { - startImportUsersWizard(rowsFromExcelString); - - //if at least one new user, the finish button is active - if(selenium.isElementPresent("ui=userManagement::content_importUsers_finish()") && !selenium.isElementPresent("ui=userManagement::content_importUsers_importWarnIcon()")) { - selenium.click("ui=userManagement::content_importUsers_finish()"); - selenium.waitForPageToLoad("30000"); - //TODO:LD: add assert if user created: "New users successfully created!" ??? here? - //SeleniumHelper.waitUntilTextPresent(selenium, "New users successfully created!", 60); - return true; - } - return false; - } - - private void startImportUsersWizard(String rowsFromExcelString) { - selenium.click("ui=userManagement::menu_importUsers()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=userManagement::content_importUsers_startUserImport()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=userManagement::content_importUsers_fillTextArea()", rowsFromExcelString); - selenium.click("ui=userManagement::content_importUsers_next()"); - selenium.waitForPageToLoad("30000"); - assertTrue(selenium.isTextPresent("Preview of user data")); - } - - /** - * Imports only the new users from the rowsFromExcelString. - * It checks that there are already existing users in the input data set. - * - * @param rowsFromExcelString - * @return Returns true if at least one user could be imported. - */ - public boolean importOnlyNewUsers(String rowsFromExcelString) { - startImportUsersWizard(rowsFromExcelString); - - if(selenium.isElementPresent("ui=userManagement::content_importUsers_finish()") && selenium.isElementPresent("ui=userManagement::content_importUsers_importWarnIcon()")) { - selenium.click("ui=userManagement::content_importUsers_finish()"); - selenium.waitForPageToLoad("30000"); - //TODO:LD: add assert if user created: "New users successfully created!" ??? here? - return true; - } - return false; - } - - /** - * Tries to import but no new users found. - * @param rowsFromExcelString - * @return Returns true if no new user found for import. - */ - public boolean importUsersExpectingError(String rowsFromExcelString) { - startImportUsersWizard(rowsFromExcelString); - - if(!selenium.isElementPresent("ui=userManagement::content_importUsers_finish()")) { - assertTrue(selenium.isTextPresent("There are no new users in this table.")); - selenium.click("ui=userManagement::content_importUsers_cancel()"); - selenium.waitForPageToLoad("30000"); - return true; - } - return false; - } - - public void deleteUser(String username) { - selenium.click("ui=userManagement::menu_deleteUser()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_checkUsernameToRemove(nameOfUser=" + username + ")"); - selenium.click("ui=commons::usertable_sendUserDeletionEmail()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=commons::usertable_adduser_finish()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Deletes user if the user deletion workflow is not locked and if a user is found. - * It assumes that a user identified by username exists, so call searchUser beforehand. - * @param username - * @return Returns true only if the user was deleted. - */ - public boolean deleteUserImmediately(String username) { - selenium.click("ui=userManagement::menu_deleteUserImmediately()"); - selenium.waitForPageToLoad("30000"); - if(selenium.isTextPresent("The workflow regarding the deletion of users is being edited by")) { - //workflow locked, cannot delete user - return false; - } else if(selenium.isElementPresent("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)")) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=User name)", username); - selenium.click("ui=commons::flexiForm_genericLink(buttonLabel=Search)"); - selenium.waitForPageToLoad("30000"); - try { - Thread.sleep(1000); - } catch (Exception e) { - // nothing to do - } - if(selenium.isTextPresent("No user was found with these attributes. Please try again.")) { - throw new IllegalStateException("deleteUserImmediately could not find any user!"); - } - selenium.click("ui=commons::usertable_adduser_checkUsername(nameOfUser=" + username + ")"); - selenium.click("ui=commons::usertable_adduser_choose()"); - selenium.waitForPageToLoad("30000"); - selenium.click("ui=dialog::Okay()"); - selenium.waitForPageToLoad("90000");// looks like sometimes user delete takes rather long. increasing timeout to 90sec from 30sec - return true; - } - throw new IllegalStateException("deleteUserImmediately found a strange state: delete workflow is not locked but it doesn't find the delete form either!"); - } - - public void setUsersReplayURL(String usersNamesInSeparateLines) { - selenium.click("ui=userManagement::menu_usersReplayURL()"); - selenium.waitForPageToLoad("30000"); - selenium.type("ui=userManagement::content_usersReplayURL_userReplayTextArea()", usersNamesInSeparateLines); - selenium.click("ui=commons::saveInput()"); - selenium.waitForPageToLoad("30000"); - } -} diff --git a/src/test/java/org/olat/test/util/selenium/olatapi/user/UserSettings.java b/src/test/java/org/olat/test/util/selenium/olatapi/user/UserSettings.java deleted file mode 100644 index a4027739a6c..00000000000 --- a/src/test/java/org/olat/test/util/selenium/olatapi/user/UserSettings.java +++ /dev/null @@ -1,169 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -* <p> -*/ -package org.olat.test.util.selenium.olatapi.user; - -import org.olat.test.util.selenium.olatapi.OLATSeleniumWrapper; - -import com.thoughtworks.selenium.Selenium; - -/** - * UserManagement/UserSettings abstraction. - * - * @author Lavinia Dumitrescu - * - */ -public class UserSettings extends OLATSeleniumWrapper { - - public UserSettings(Selenium selenium) { - super(selenium); - - if(!selenium.isElementPresent("ui=userManagement::content_userdetail_roles()")) { - throw new IllegalStateException("This is not the - UserSettings - page"); - } - } - - /** - * Sets the first name and/or the visibility of it. - * @param firstname, could be null if the change is not desired. - * @param showOnVisitingCard, could be null if the change is not desired. - */ - public void setFirstName(String firstname, Boolean showOnVisitingCard) { - selectUserProfileTab(); - setTextInput("First name", firstname, showOnVisitingCard); - } - - private void setTextInput(String inputLabel, String text, Boolean showOnVisitingCard) { - if(text!=null) { - selenium.type("ui=commons::flexiForm_labeledTextInput(formElementLabel=" + inputLabel + ")", text); - } - if(showOnVisitingCard!=null) { - if(showOnVisitingCard) { - selenium.check("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + inputLabel + ")"); - } else { - selenium.uncheck("ui=commons::flexiForm_labeledCheckbox(formElementLabel=" + inputLabel + ")"); - } - } - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - public void setLastName(String lastname, Boolean showOnVisitingCard) { - selectUserProfileTab(); - setTextInput("Last name", lastname, showOnVisitingCard); - } - - public void setEmail(String email, Boolean showOnVisitingCard) { - selectUserProfileTab(); - setTextInput("E-mail address", email, showOnVisitingCard); - } - - public String getEmail() { - selectUserProfileTab(); - return selenium.getValue("ui=commons::flexiForm_labeledTextInput(formElementLabel=E-mail)"); - } - - public void setPassword(String newPassword) { - selectChangePasswordTab(); - selenium.type("ui=userManagement::content_userdetail_changePasswordTab_newPassword()", newPassword); - selenium.type("ui=userManagement::content_userdetail_changePasswordTab_confirmPassword()", newPassword); - - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - private void selectChangePasswordTab() { - selenium.click("ui=userManagement::content_userdetail_changePassword()"); - selenium.waitForPageToLoad("30000"); - } - - /** - * Sets users roles. - * If a parameter is null, the role state doesn't change. - * - * @param isUserManager, if null, no change, else on/off accordingly with the boolean value. - * @param isGroupManager - * @param isAuthor - * @param isSysAdmin - * @param isLearningResourceAdmin - */ - public void setRoles(Boolean isUserManager, Boolean isGroupManager, Boolean isAuthor, - Boolean isSysAdmin, Boolean isLearningResourceAdmin) { - - selectRolesTab(); - if (isUserManager != null) { - if (isUserManager) { - selenium.check("ui=userManagement::content_userdetail_roles_isUsermanager()"); - } else { - selenium.uncheck("ui=userManagement::content_userdetail_roles_isUsermanager()"); - } - } - if (isGroupManager != null) { - if (isGroupManager) { - selenium.check("ui=userManagement::content_userdetail_roles_isGroupmanager()"); - } else { - selenium.uncheck("ui=userManagement::content_userdetail_roles_isGroupmanager()"); - } - } - if (isAuthor != null) { - if (isAuthor) { - selenium.check("ui=userManagement::content_userdetail_roles_isAuthor()"); - } else { - selenium.uncheck("ui=userManagement::content_userdetail_roles_isAuthor()"); - } - } - if (isSysAdmin != null) { - if (isSysAdmin) { - selenium.check("ui=userManagement::content_userdetail_roles_isAdmin()"); - } else { - selenium.uncheck("ui=userManagement::content_userdetail_roles_isAdmin()"); - } - } - if (isLearningResourceAdmin != null) { - if (isLearningResourceAdmin) { - selenium.check("ui=userManagement::content_userdetail_roles_isLearningResourceManager()"); - } else { - selenium.uncheck("ui=userManagement::content_userdetail_roles_isLearningResourceManager()"); - } - } - - selenium.click("ui=commons::flexiForm_saveButton()"); - selenium.waitForPageToLoad("30000"); - } - - private void selectRolesTab() { - if(selenium.isElementPresent("ui=userManagement::content_userdetail_roles()")) { - selenium.click("ui=userManagement::content_userdetail_roles()"); - selenium.waitForPageToLoad("30000"); - } - } - - private void selectUserProfileTab() { - if(selenium.isElementPresent("ui=userManagement::content_userdetail_userProfile()")) { - selenium.click("ui=userManagement::content_userdetail_roles()"); - selenium.waitForPageToLoad("30000"); - } - } -} diff --git a/src/test/java/org/olat/test/util/setup/OlatLoginInfos.java b/src/test/java/org/olat/test/util/setup/OlatLoginInfos.java deleted file mode 100644 index 1310d76621c..00000000000 --- a/src/test/java/org/olat/test/util/setup/OlatLoginInfos.java +++ /dev/null @@ -1,95 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.setup; - -import java.net.MalformedURLException; -import java.net.URL; - -/** - * Simple wrapper object around login information - * to log into OLAT. - * <p> - * The information provided here should be sufficient to - * create a selenium session with it and log into OLAT. - * Hence we need the hostname of the selenium server - * and the hostname + login details of the OLAT server. - * @author Stefan - * - */ -public class OlatLoginInfos { - - private final String seleniumHostname_; - private final String seleniumBrowserId_; - private final URL fullOlatServerUrl_; - private final String username_; - private final String password_; - - public OlatLoginInfos(String seleniumHostname, String seleniumBrowserId, - String fullOlatServerUrl, String username, String password) throws MalformedURLException { - if (isNullOrEmpty(seleniumHostname)) { - throw new IllegalArgumentException("seleniumHostname is null or empty"); - } - if (isNullOrEmpty(seleniumBrowserId)) { - throw new IllegalArgumentException("seleniumBrowserId is null or empty"); - } - if (isNullOrEmpty(fullOlatServerUrl)) { - throw new IllegalArgumentException("fullOlatServerUrl is null or empty"); - } - if (isNullOrEmpty(username)) { - throw new IllegalArgumentException("username is null or empty"); - } - if (isNullOrEmpty(password)) { - throw new IllegalArgumentException("password is null or empty"); - } - seleniumHostname_ = seleniumHostname; - seleniumBrowserId_ = seleniumBrowserId; - fullOlatServerUrl_ = new URL(fullOlatServerUrl); - username_ = username; - password_ = password; - } - - private boolean isNullOrEmpty(String param) { - return param==null || param.length()==0; - } - - public String getSeleniumHostname() { - return seleniumHostname_; - } - - public String getSeleniumBrowserId() { - return seleniumBrowserId_; - } - - public String getFullOlatServerUrl() { - return fullOlatServerUrl_.toExternalForm(); - } - - public String getUsername() { - return username_; - } - - public String getPassword() { - return password_; - } - - public String getLanguage() { - return "English"; - } -} diff --git a/src/test/java/org/olat/test/util/setup/SetupType.java b/src/test/java/org/olat/test/util/setup/SetupType.java deleted file mode 100644 index cd54fb52fb7..00000000000 --- a/src/test/java/org/olat/test/util/setup/SetupType.java +++ /dev/null @@ -1,51 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.setup; - -/** - * Originally the test author could choose from a list of possible - * setups, but later there was only one setup type used: TWO_NODE_CLUSTER. <br/> - * It was decided that it would be wiser to run all tests with the same setup. - * - * @author lavinia - * - */ -public enum SetupType { - - /** @deprecated not supported anymore */ - CLEAN_AND_RESTARTED_SINGLE_VM, - /** @deprecated not supported anymore */ - CLEAN_AND_RESTARTED_TWO_NODE_CLUSTER, - /** @deprecated not supported anymore */ - RESTARTED_SINGLE_VM, - /** @deprecated not supported anymore */ - RESTARTED_TWO_NODE_CLUSTER, - /** @deprecated not supported anymore */ - SINGLE_VM, - TWO_NODE_CLUSTER; - - /** @deprecated not supported anymore */ - public boolean isSingleVm() { - if (this==CLEAN_AND_RESTARTED_SINGLE_VM) return true; - if (this==RESTARTED_SINGLE_VM) return true; - if (this==SINGLE_VM) return true; - return false; - } -} diff --git a/src/test/java/org/olat/test/util/setup/context/Context.java b/src/test/java/org/olat/test/util/setup/context/Context.java deleted file mode 100644 index 0911bbccff3..00000000000 --- a/src/test/java/org/olat/test/util/setup/context/Context.java +++ /dev/null @@ -1,535 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.setup.context; - -import java.io.File; -import java.net.MalformedURLException; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import junit.framework.AssertionFailedError; - -import org.olat.test.util.selenium.OlatLoginHelper; -import org.olat.test.util.selenium.SeleniumManager; -import org.olat.test.util.selenium.olatapi.OLATWorkflowHelper; -import org.olat.test.util.selenium.olatapi.WorkflowHelper; -import org.olat.test.util.setup.OlatLoginInfos; -import org.olat.test.util.setup.SetupType; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointRef; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.thoughtworks.selenium.Selenium; - -/** - * Setups the context for running selenium tests. <br/> - * Configurable via customcontext.xml if any available, else via defaultcontext.xml - * - * @author eglis - * - */ -public abstract class Context { - - public static InheritableThreadLocal<Context> currentContext=new InheritableThreadLocal<Context>(); - - private static Map<SetupType,Context> contexts_; - protected final static String log4JConfigFilenameKey = "log4jConfigFilename"; - protected boolean cleanupBeforeTest = true; //should be read from context? - public static String FILE_RESOURCES_PATH = "org/olat/test/file_resources/"; - public static String DEMO_COURSE_NAME_1 = "OLAT: Demo course"; - public static String DEMO_COURSE_NAME_2 = "OLAT: Demo course"; - public static String DEMO_COURSE_NAME_3 = "OLAT: Demokurs Einschreibung"; - - - static { - System.out.println(new Date()); - System.out.println("INITIALIZING SPRING WITH contexts.xml FOR SELENIUMTESTS' CONTEXT..."); - contexts_ = new HashMap<SetupType,Context>(); - new ClassPathXmlApplicationContext( - new String[] { - "classpath*:customcontext.xml" - }); - if (contexts_.size()==0) { - new ClassPathXmlApplicationContext( - new String[] { - "classpath*:defaultcontext.xml" - }); - } - System.out.println("DONE."); - } - - /** - * The SeleniumManager is used for creating and closing Selenium instances. - * The abstract Context base class sets up this instance before the Context - * is used for creating selenium instances the first time. - */ - protected SeleniumManager seleniumManager_; - - private List<CodepointClient> codepointClients_ = new LinkedList<CodepointClient>();; - - private Map<String,String> config_ = new HashMap<String,String>(); - - private SetupType setupType_; - - protected void initContext() { - SetupType[] setupTypes = SetupType.values(); - for (int i = 0; i < setupTypes.length; i++) { - SetupType setupType = setupTypes[i]; - if (supportsSetupType(setupType)) { - if (contexts_.containsKey(setupType)) { - throw new IllegalArgumentException("There is already a Context defined for SetupType "+setupType.name()); - } - contexts_.put(setupType, this); - } - } - setConfigProperty("browserId", "*chrome"); - } - - protected abstract boolean supportsSetupType(SetupType setupType); - - private static Context getContext(SetupType setupType) { - Context c = contexts_.get(setupType); - if (c==null) { - throw new IllegalStateException("No Context found for SetupType "+setupType.name()); - } - return c; - } - - public SetupType getSetupType() { - return setupType_; - } - - public boolean isSingleVMSetupType() { - return getSetupType().isSingleVm(); - } - - public void setConfig(Map<String, String> config) { - Iterator<Map.Entry<String, String>> it = config.entrySet().iterator(); - while(it.hasNext()) { - Entry<String, String> entry = it.next(); - config_.put(entry.getKey(), entry.getValue()); - } - } - - public String getConfigProperty(String key) { - if (config_==null) { - throw new IllegalStateException("config_ must not be null."); - } - return config_.get(key); - } - - public void setConfigProperty(String key, String value) { - if (config_==null) { - throw new IllegalStateException("config_ must not be null."); - } - config_.put(key, value); - } - - public static Context setupContext(String testName, SetupType setupType) { - if (currentContext.get()!=null) { - throw new IllegalStateException("Context is already setup. You must do a context.tearDown() first before doing another Context.setupContext Mate!"); - } - Context c = getContext(setupType); - if (c==null) { - throw new IllegalStateException("Context not configured. contexts.xml in classpath and configured correctly?"); - } - currentContext.set(c); - System.out.println("============================"); - System.out.println("Context.setupContext START("+testName+","+setupType.name()+")"); - System.out.println("seleniumHost = "+c.getConfigProperty("seleniumHost")); - System.out.println("browserId = "+c.getConfigProperty("browserId")); - System.out.println("withCodepoints = "+c.getConfigProperty("withCodepoints")); - System.out.println("jmsBrokerUrl = "+c.getConfigProperty("jmsBrokerUrl")); - System.out.println("instanceId = "+c.getConfigProperty("instanceId")); - - if (setupType.isSingleVm()) { - // then we have exactly 1 url - System.out.println("singleVmOlatUrl = "+c.getConfigProperty("singleVmOlatUrl")); - } else { - // then we have multiple. unclear how many, so lets just loop - int nodeId = 1; - while(c.getConfigProperty("multiVmOlatUrl"+nodeId)!=null) { - System.out.println("multiVmOlatUrl"+nodeId+" = "+c.getConfigProperty("multiVmOlatUrl"+nodeId)); - nodeId++; - } - } - System.out.println("admin = "+c.getConfigProperty("adminUsername")+"/"+c.getConfigProperty("adminPassword")); - System.out.println("author = "+c.getConfigProperty("authorUsername")+"/"+c.getConfigProperty("authorPassword")); - System.out.println("student = "+c.getConfigProperty("studentUsername")+"/"+c.getConfigProperty("studentPassword")); - System.out.println("guest = "+c.getConfigProperty("guestUsername")+"/"+c.getConfigProperty("guestPassword")); - //............ - System.out.println("log4JConfigFilename = "+c.getConfigProperty(log4JConfigFilenameKey)); - - - c.seleniumManager_ = new SeleniumManager(testName); - c.setupType_ = setupType; - c.doSetupContext(setupType); - - System.out.println("Context.setupContext END("+testName+","+setupType.name()+")"); - System.out.println("============================"); - // and return the context itself - return c; - } - - public static Context getContext() { - Context c = currentContext.get(); - if (c==null) { - throw new IllegalStateException("Context not configured. contexts.xml in classpath and configured correctly? And, did you call Context.setupContext() ?"); - } - return c; - } - - /** - * Try to find out if it is a KnownIssueException somewhere in the olat.log - - * and if so, don't report it as the original failure but as a known issue so we immediately - * know from the test result that it is a known issue. - * <br/> - * Returns by default false, that is "Do not mask the test failure if ERROR encountered in olat.log". - * <br/> - * It never returns true, but it throws a AssertionFailedError if a "Known Issue" encountered. - * - * @param th - * @return - * @throws Exception - */ - public static boolean maskTestFailureOrError(Throwable th) throws Exception { - Context c = currentContext.get(); - if (c==null) { - throw new IllegalStateException("Context not configured. contexts.xml in classpath and configured correctly? And, did you call Context.setupContext() ?"); - } - if (c.doMaskTestFailureOrError(th)) { - return true; - } - if (th.getMessage().contains("INST-MSG-author")) { - throw new AssertionFailedError("Known Issue 3841 encountered."); - } - if (c.seleniumManager_.anySeleniumBrowserHasKnownIssue3857()) { - throw new AssertionFailedError("Known Issue 3857 encountered. (\"Please do not use the `Reload` or `Back` button of your browser.\" encountered in one of the browsers)"); - } - return false; - } - - protected boolean doMaskTestFailureOrError(Throwable th) throws Exception { - return false; - } - - public static void tearDown() { - System.out.println("======== TEARDOWNSTART ====="); - try{ - staticDoTearDown(); - } catch(Error er) { - er.printStackTrace(System.out); - throw er; - } catch(RuntimeException re) { - re.printStackTrace(System.out); - throw re; - } finally { - System.out.println("======= TEARDOWNFINALLY ===="); - } - } - - private final static void staticDoTearDown() { - Context c = currentContext.get(); - if (c==null) { - throw new IllegalStateException("Context not configured. contexts.xml in classpath and configured correctly? And, did you call Context.setupContext() ?"); - } - System.out.println("============================"); - System.out.println("Context.tearDown() START"); - - c.doTearDown(); - - System.out.println("----------------------------"); - System.out.println("Closing CodepointClients...."); - int cnt = 0; - for (Iterator<CodepointClient> it = c.codepointClients_.iterator(); it.hasNext();) { - System.out.println("CodepointClient["+cnt+"] START"); - CodepointClient codepointClient = it.next(); - try{ - System.out.println("CodepointClient["+cnt+"] fetching all codepoints for debug..."); - List<CodepointRef> codepoints = codepointClient.listAllCodepoints(); - System.out.println("CodepointClient["+cnt+"] going through all codepoints now..."); - for (Iterator<CodepointRef> it2 = codepoints.iterator(); it2.hasNext();) { - CodepointRef codepointRef = it2.next(); - System.out.println("[Codepoint-"+codepointClient+"]: "+codepointRef.getId()+", hitCount="+codepointRef.getHitCount()); - } - System.out.println("CodepointClient["+cnt+"] done with going through all codepoints."); - } catch(AssertionError ae) { - // ok, be silent here - } catch(Exception e) { - System.out.println("Exception in list codepoint: "+e); - e.printStackTrace(System.out); - } - System.out.println("CodepointClient["+cnt+"] closing codepointclient now..."); - codepointClient.close(); - System.out.println("CodepointClient["+cnt+"] END"); - cnt++; - } - System.out.println("Closed CodepointClients."); - System.out.println("----------------------------"); - - currentContext.set(null); - - System.out.println("Context.tearDown() END"); - System.out.println("============================"); - } - - protected abstract void doSetupContext(SetupType setupType); - - protected abstract void doTearDown(); - - /** - public void deleteAllLearningResourcesFromMyAuthors() { - WorkflowHelper.deleteAllLearningResourcesFromAuthor(getStandardAdminOlatLoginInfos(1).getUsername()); - WorkflowHelper.deleteAllLearningResourcesFromAuthor(getStandardAuthorOlatLoginInfos(1).getUsername()); - WorkflowHelper.deleteAllLearningResourcesFromAuthor(getStandardStudentOlatLoginInfos(1).getUsername()); - WorkflowHelper.deleteAllLearningResourcesFromAuthor(getStandardGuestOlatLoginInfos(1).getUsername()); - }**/ - - public Selenium createSelenium() { - return createSelenium(getStandardAdminOlatLoginInfos(1)); - } - - public Selenium createSelenium(int nodeId) { - return createSelenium(getStandardAdminOlatLoginInfos(nodeId)); - } - - public Selenium createSelenium(OlatLoginInfos loginInfos) { - Selenium selenium = seleniumManager_.createSelenium(loginInfos); - return selenium; - } - - public Selenium createSeleniumAndLogin() { - return createSeleniumAndLogin(getStandardAdminOlatLoginInfos(1)); - } - - public Selenium createSeleniumAndLogin(OlatLoginInfos loginInfos) { - Selenium selenium = seleniumManager_.createSelenium(loginInfos); - - OlatLoginHelper.olatLogin(selenium, loginInfos); - - // make sure the login worked - if (!"OLAT - Home".equals(selenium.getTitle())) { - throw new AssertionError("createSeleniumAndLogin failed - expected to be logged in now and seeing 'OLAT - Home' - but instead I'm on this page: "+selenium.getTitle()); - } - return selenium; - } - - /** - * Creates selenium, login and return an OLAT abstraction instance. - * @param loginInfos - * @return THE OLAT ABSTRACTION entry point - */ - public OLATWorkflowHelper getOLATWorkflowHelper(OlatLoginInfos loginInfos) { - Selenium selenium = seleniumManager_.createSelenium(loginInfos); - - OlatLoginHelper.olatLogin(selenium, loginInfos); - - // make sure the login worked - if (!"OLAT - Home".equals(selenium.getTitle())) { - throw new AssertionError("createSeleniumAndLogin failed - expected to be logged in now and seeing 'OLAT - Home' - but instead I'm on this page: "+selenium.getTitle()); - } - return new OLATWorkflowHelper(selenium); - } - - /** - * Create user - * @param nodeId - * @param username - * @param password - * @param isSystemUser - * @param userManagementRole - * @param groupManagementRole - * @param authorRole - * @param systemAdminRole - * @return - */ - public OlatLoginInfos createuserIfNotExists(int nodeId, - String username, String password, - boolean isSystemUser, - boolean userManagementRole, boolean groupManagementRole, boolean authorRole, boolean systemAdminRole) { - - try { - return WorkflowHelper.createUserIfNotExists(getStandardAdminOlatLoginInfos(nodeId), - username, password, - isSystemUser, - userManagementRole, groupManagementRole, authorRole, systemAdminRole); - } catch (InterruptedException e) { - e.printStackTrace(System.out); - throw new RuntimeException(e); - } - } - - /** - * Create user by login as admin with the given name and the standard password. - * @param nodeId - * @param username - * @param isSystemUser - * @param userManagementRole - * @param groupManagementRole - * @param authorRole - * @param systemAdminRole - * @return - */ - public OlatLoginInfos createuserIfNotExists( - int nodeId, - String username, - boolean isSystemUser, - boolean userManagementRole, boolean groupManagementRole, boolean authorRole, boolean systemAdminRole) { - return createuserIfNotExists(nodeId, username, getStandardPassword(), isSystemUser, userManagementRole, groupManagementRole, authorRole, systemAdminRole); - } - - public CodepointClient createCodepointClient(int nodeId) { - CodepointClient codepointClient; - try { - codepointClient = doCreateCodepointClient(nodeId); - } catch (Exception e) { - e.printStackTrace(System.out); - throw new RuntimeException(e); - } - codepointClients_.add(codepointClient); - return codepointClient; - } - - /** - * Creates a codepoint client for the server node with the given id. - * - * @param nodeId - * @return - * @throws Exception - */ - protected abstract CodepointClient doCreateCodepointClient(int nodeId) throws Exception; - - public OlatLoginInfos getStandardAdminOlatLoginInfos() { - if (!isSingleVMSetupType()) { - throw new IllegalStateException("In Cluster mode you need to specify the nodeId of this login"); - } - return getStandardAdminOlatLoginInfos(1); - } - - public OlatLoginInfos getStandardAuthorOlatLoginInfos() { - if (!isSingleVMSetupType()) { - throw new IllegalStateException("In Cluster mode you need to specify the nodeId of this login"); - } - return getStandardAuthorOlatLoginInfos(1); - } - - public OlatLoginInfos getStandardStudentOlatLoginInfos() { - return getStandardStudentOlatLoginInfos(1); - } - - public OlatLoginInfos getStandardGuestOlatLoginInfos() { - return getStandardGuestOlatLoginInfos(1); - } - - public OlatLoginInfos getStandardAdminOlatLoginInfos(int nodeId) { - return createLoginInfos(nodeId, getConfigProperty("adminUsername"), getConfigProperty("adminPassword")); - } - - public OlatLoginInfos getStandardAuthorOlatLoginInfos(int nodeId) { - return createLoginInfos(nodeId, getConfigProperty("authorUsername"), getConfigProperty("authorPassword")); - } - - public OlatLoginInfos getStandardStudentOlatLoginInfos(int nodeId) { - return createLoginInfos(nodeId, getConfigProperty("studentUsername"), getConfigProperty("studentPassword")); - } - - public OlatLoginInfos getStandardGuestOlatLoginInfos(int nodeId) { - return createLoginInfos(nodeId, getConfigProperty("guestUsername"), getConfigProperty("guestPassword")); - } - - protected String getOlatUrl(int nodeId) { - if (isSingleVMSetupType()) { - if (nodeId!=1) { - throw new IllegalArgumentException("Cannot refer to nodeId other than 1 while having SetupType set to SINGLE VM"); - } - return getConfigProperty("singleVmOlatUrl"); - } else { - return getConfigProperty("multiVmOlatUrl"+nodeId); - } - } - - protected OlatLoginInfos createLoginInfos(int nodeId, String username, String password) { - String olatUrl = getOlatUrl(nodeId); - try{ - return new OlatLoginInfos( - getConfigProperty("seleniumHost"), - getConfigProperty("browserId"), - olatUrl, - username, - password); - } catch(MalformedURLException e) { - throw new RuntimeException("MalformedURLException ("+olatUrl+") when creating admin login infos: "+e); - } - } - - /** - * Beware: this does not check if the user data is valid!!! - * @param nodeId - * @param username - * @param password - * @return Returns an OlatLoginInfos for the username, password, and nodeId. - */ - public OlatLoginInfos getOlatLoginInfo(int nodeId, String username, String password) { - //TODO:LD: see is user data check needed (e.g. admin login and check if username exists and change password to the given one) - return createLoginInfos(nodeId, username, password); - } - - /** - * Creates a OlatLoginInfos object using the context info and the standard password. - * @param nodeId - * @param username - * @return - */ - public OlatLoginInfos getOlatLoginInfo(int nodeId, String username) { - //TODO:LD: see is user data check needed (e.g. admin login and check if username exists and change password to the given one) - return createLoginInfos(nodeId, username, getStandardStudentOlatLoginInfos(1).getPassword()); - } - - /** - * Convention: all test users could use a standard password, and we assume that this is the default student password. - * @return - */ - private String getStandardPassword() { - return getStandardStudentOlatLoginInfos(1).getPassword(); - } - - /** - * Copies the localFile to the seleniumHost location. - * - * @param localFile - * @return - */ - public abstract String provideFileRemotely(File localFile); - - /** - * Restarts Selenium RC server. - * - * @throws AssertionError - */ - protected abstract void restartSeleniumServer() throws AssertionError; - - - -} diff --git a/src/test/java/org/olat/test/util/setup/context/SeleniumLocallyContext.java b/src/test/java/org/olat/test/util/setup/context/SeleniumLocallyContext.java deleted file mode 100644 index e0922afe300..00000000000 --- a/src/test/java/org/olat/test/util/setup/context/SeleniumLocallyContext.java +++ /dev/null @@ -1,116 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.setup.context; - -import java.io.File; - -import org.olat.test.util.setup.SetupType; -import org.olat.testutils.codepoints.client.CodepointClient; -import org.olat.testutils.codepoints.client.CodepointClientFactory; -import org.olat.testutils.codepoints.client.CommunicationException; - -/** - * Context for running selenium tests in eclipse. <br/> - * - * - * @author eglis - * - */ -public class SeleniumLocallyContext extends Context { - - public SeleniumLocallyContext() { - initContext(); - } - - @Override - protected boolean supportsSetupType(SetupType setupType) { - return true; - } - - @Override - protected void doSetupContext(SetupType setupType) { - System.out.println("Test run assumes SetupType: "+setupType.name()); - - String withCodepoints = getConfigProperty("withCodepoints"); - if("true".equals(withCodepoints)) { - assertCodepointServerReady(1); - } - } - - @Override - protected void doTearDown() { - System.out.println("Closing seleniums..."); - seleniumManager_.closeSeleniums(); - System.out.println("Done closing seleniums."); - } - - @Override - public CodepointClient doCreateCodepointClient(int nodeId) throws Exception { - return CodepointClientFactory.createCodepointClient(getConfigProperty("jmsBrokerUrl"), getConfigProperty("instanceId")+"-"+nodeId); - } - - @Override - public String provideFileRemotely(File localFile) { - if (!localFile.exists()) { - throw new AssertionError("File not found: "+localFile); - } - return localFile.getAbsolutePath(); - } - - protected void assertCodepointServerReady(int nodeId) { - try{ - final long start = System.currentTimeMillis(); - String jmsBrokerUrl = getConfigProperty("jmsBrokerUrl"); - String[] ids = CodepointClientFactory.listCodepointServerNodeIds(jmsBrokerUrl); - for (int i = 0; i < ids.length; i++) { - System.out.println("[SeleniumLocallyContext] DISCOVERED NODE_ID: "+ids[i]); - } - System.out.println("[SeleniumLocallyContext] Discovery took "+(System.currentTimeMillis()-start)/1000+"s"); - } catch(Exception e) { - System.out.println("[SeleniumLocallyContext] Exception while doing listCodepointServerNodeIds: "+e); - e.printStackTrace(System.out); - } - System.out.println("[SeleniumLocallyContext] asserting that the CodepointServer with nodeId="+nodeId+" is ready..."); - CodepointClient codepointClient = createCodepointClient(nodeId); - try { - codepointClient.listAllCodepoints(); - } catch (CommunicationException e) { - e.printStackTrace(System.out); - throw new AssertionError("Got a CommunicationException while making sure the CodepointServer was running in nodeId="+nodeId+" (exception="+e+")"); - } - codepointClient.close(); - System.out.println("[SeleniumLocallyContext] asserting that the CodepointServer with nodeId="+nodeId+" succeeded!"); - } - - /*@BeforeClass*/ - public void restartSeleniumServer() throws AssertionError { - //nothing to implement - the selenium RC server is started manually when running tests using this context - /*try { - SeleniumServer server = new SeleniumServer(); - server.stop(); - server.start(); - Thread.sleep(15000); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - }*/ - } - -} diff --git a/src/test/java/org/olat/test/util/setup/context/SeleniumSuite.java b/src/test/java/org/olat/test/util/setup/context/SeleniumSuite.java deleted file mode 100644 index bf2d6b48bda..00000000000 --- a/src/test/java/org/olat/test/util/setup/context/SeleniumSuite.java +++ /dev/null @@ -1,74 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.setup.context; - -import java.util.List; - -import org.junit.BeforeClass; -import org.junit.runner.Runner; -import org.junit.runners.Suite; -import org.junit.runners.model.InitializationError; -import org.junit.runners.model.RunnerBuilder; -import org.olat.test.util.setup.SetupType; - -public class SeleniumSuite extends Suite { - - protected SeleniumSuite(Class<?> klass, Class<?>[] suiteClasses) - throws InitializationError { - super(klass, suiteClasses); - } - - - public SeleniumSuite(Class<?> klass, List<Runner> runners) - throws InitializationError { - super(klass, runners); - } - - public SeleniumSuite(Class<?> klass, RunnerBuilder builder) - throws InitializationError { - super(klass, builder); - } - - public SeleniumSuite(RunnerBuilder builder, Class<?> klass, - Class<?>[] suiteClasses) throws InitializationError { - super(builder, klass, suiteClasses); - } - - public SeleniumSuite(RunnerBuilder builder, Class<?>[] classes) - throws InitializationError { - super(builder, classes); - } - - - private static Context context; - - public void startSeleniumserver() throws Exception { - //context.restartSeleniumServer(); - } - - public void stopSeleniumServer() throws Exception { - //todo: implement this!!! - } - - @BeforeClass - public static void setupOnce() { - context = Context.setupContext(SeleniumSuite.class.getName(), SetupType.TWO_NODE_CLUSTER); - } -} diff --git a/src/test/java/org/olat/test/util/setup/steps/RuntimeExecHelper.java b/src/test/java/org/olat/test/util/setup/steps/RuntimeExecHelper.java deleted file mode 100644 index fc3a28c3a58..00000000000 --- a/src/test/java/org/olat/test/util/setup/steps/RuntimeExecHelper.java +++ /dev/null @@ -1,220 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.setup.steps; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.concurrent.TimeoutException; - -public class RuntimeExecHelper { - - private static final long DEFAULT_MAX_TIMEOUT_IN_MILLIS = 10*60*1000; // 10 min - - static class ReaderRunnable implements Runnable { - - private final BufferedReader reader_; - private final String prefix_; - private final Thread thread_; - private transient boolean stop_ = false; - - public ReaderRunnable(String prefix, InputStream in) { - if (prefix==null) { - throw new IllegalArgumentException("prefix must not be null"); - } - if (in==null) { - throw new IllegalArgumentException("in must not be null"); - } - reader_ = new BufferedReader(new InputStreamReader(in)); - prefix_ = prefix; - thread_ = new Thread(this); - thread_.setDaemon(true); - thread_.start(); - } - - public void run() { - try { - while(true) { - synchronized(this) { - if (stop_) { - return; - } - } - String line = reader_.readLine(); - if (line==null) { - return; - } - System.out.println(prefix_+line); - } - } catch (IOException e) { - e.printStackTrace(); - return; - } finally { - if (reader_!=null) { - try { - reader_.close(); - } catch (IOException e) { - // silence in the library - } - } - } - } - - public void close() { - synchronized(this) { - stop_ = true; - } - if (reader_!=null) { - try { - reader_.close(); - } catch (IOException e) { - // silence in the library - } - } - } - - } - - static class WaitForWithTimeout implements Runnable { - - private final Process p_; - private Thread thread_ = null; - private boolean success_ = false; - private int result_; - - public WaitForWithTimeout(Process p) { - if (p==null) { - throw new IllegalArgumentException("p must not be null"); - } - p_ = p; - } - - public int waitFor(long timeout) throws TimeoutException { - if (thread_!=null) { - throw new IllegalStateException("already called waitFor"); - } - thread_ = new Thread(this); - thread_.setDaemon(true); - thread_.start(); - final long end = System.currentTimeMillis() + timeout; - synchronized(this) { - while(!success_) { - long diff = end - System.currentTimeMillis(); - if (diff<=0) { - break; - } else { - try { - wait(diff); - } catch (InterruptedException e) { - // ignore - } - } - } - if (success_) { - return result_; - } else { - thread_.interrupt(); - throw new TimeoutException(); - } - } - } - - public void run() { - try { - int result = p_.waitFor(); - synchronized(this) { - result_ = result; - success_ = true; - notifyAll(); - } - } catch (InterruptedException e) { - // ignore - } - } - - } - - public static String execWithStdOut(String cmd) throws Exception { - System.out.println("Executing the following command: "+cmd); - Process process = Runtime.getRuntime().exec(cmd); - - ReaderRunnable outReader = new ReaderRunnable("[STDOUT:] ", process.getInputStream()); - ReaderRunnable errReader = new ReaderRunnable("[STDERR:] ", process.getErrorStream()); - try{ - int errorCode = new WaitForWithTimeout(process).waitFor(DEFAULT_MAX_TIMEOUT_IN_MILLIS); - - BufferedReader stdOutReader = new BufferedReader(new InputStreamReader(process.getInputStream())); - StringBuffer sb = new StringBuffer(); - while(true) { - String stdOutLine = stdOutReader.readLine(); - if (stdOutLine==null) { - break; - } - if (sb.length()!=0) { - sb.append(System.getProperty("line.separator")); - } - sb.append(stdOutLine); - System.out.println("[STDOUT:] "+stdOutLine); - } - BufferedReader stdErrReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); - while(true) { - String stdErrLine = stdErrReader.readLine(); - if (stdErrLine==null) { - break; - } - System.out.println("[STDERR:] "+stdErrLine); - } - - if (errorCode!=0) { - System.out.println("Exec of '"+cmd+"' returned errorcode: "+errorCode); - throw new AssertionError("cmd failed. errorcode="+errorCode+", cmd="+cmd); - } else { - return sb.toString(); - } - } finally { - outReader.close(); - errReader.close(); - System.out.println("Done with execution of command: "+cmd); - } - } - - public static void exec(String cmd, boolean failOnError) throws Exception { - int errorCode = exec(cmd); - System.out.println("Exec of '"+cmd+"' returned errorcode: "+errorCode); - if (errorCode!=0 && failOnError) { - throw new AssertionError("cmd failed. errorcode="+errorCode+", cmd="+cmd); - } - } - - public static int exec(String cmd) throws Exception { - System.out.println("Executing the following command: "+cmd); - Process process = Runtime.getRuntime().exec(cmd); - ReaderRunnable outReader = new ReaderRunnable("[STDOUT:] ", process.getInputStream()); - ReaderRunnable errReader = new ReaderRunnable("[STDERR:] ", process.getErrorStream()); - try{ - return new WaitForWithTimeout(process).waitFor(DEFAULT_MAX_TIMEOUT_IN_MILLIS); - } finally { - outReader.close(); - errReader.close(); - System.out.println("Done with execution of command: "+cmd); - } - } -} diff --git a/src/test/java/org/olat/test/util/testng/JUnitXMLReporter.java b/src/test/java/org/olat/test/util/testng/JUnitXMLReporter.java deleted file mode 100644 index 717b8c27d46..00000000000 --- a/src/test/java/org/olat/test/util/testng/JUnitXMLReporter.java +++ /dev/null @@ -1,410 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.testng; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintStream; -import java.lang.reflect.Method; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.regex.Pattern; - -import org.testng.ITestContext; -import org.testng.ITestResult; -import org.testng.TestListenerAdapter; -import org.testng.annotations.Test; - -/** - * Listener generating XML output suitable to be processed by JUnitReport. Copied from TestNG (www.testng.org) and - * modified - * @author Bela Ban - * @version $Id: JUnitXMLReporter.java,v 1.6 2008-08-12 08:22:59 eglis Exp $ - */ -public class JUnitXMLReporter extends TestListenerAdapter { - private String output_dir=null; - private String suffix=null; - - private static final String SUFFIX="test.suffix"; - private static final String XML_DEF="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"; - private static final String CDATA="![CDATA["; - private static final String LT="<"; - private static final String GT=">"; - private static final String SYSTEM_OUT="system-out"; - private static final String SYSTEM_ERR="system-err"; - - PrintStream old_stdout=System.out; - PrintStream old_stderr=System.err; - - - private final ConcurrentMap<Class, List<ITestResult>> classes=new ConcurrentHashMap<Class,List<ITestResult>>(); - - /** Map to keep systemout and systemerr associated with a class */ - final ConcurrentMap<Class,Tuple<ByteArrayOutputStream,ByteArrayOutputStream>> outputs=new ConcurrentHashMap<Class,Tuple<ByteArrayOutputStream,ByteArrayOutputStream>>(); - - ByteArrayOutputStream unsolicitedOut = new ByteArrayOutputStream(); - ByteArrayOutputStream unsolicitedErr = new ByteArrayOutputStream(); - - public static InheritableThreadLocal<Class> local=new InheritableThreadLocal<Class>(); - - - public JUnitXMLReporter() { - System.out.println("Start"); - } - - - public void onTestStart(ITestResult result) { - Class real_class=result.getTestClass().getRealClass(); - local.set(real_class); - print(old_stdout, "REAL CLASS: ", real_class.getName(), ""); - - List<ITestResult> results=classes.get(real_class); - if(results == null) { - results=new LinkedList<ITestResult>(); - classes.putIfAbsent(real_class, results); - } - - outputs.putIfAbsent(real_class, new Tuple<ByteArrayOutputStream,ByteArrayOutputStream>(new ByteArrayOutputStream(), new ByteArrayOutputStream())); - // old_stdout.println(Thread.currentThread() + " running " + real_class.getName() + "." + result.getName() + "()"); - } - - - - /** Invoked each time a test succeeds */ - public void onTestSuccess(ITestResult tr) { - Class real_class=tr.getTestClass().getRealClass(); - flushOtherOutput(real_class); - addTest(real_class, tr); - print(old_stdout, "OK: ", real_class.getName(), tr.getName()); - } - - public void onTestFailedButWithinSuccessPercentage(ITestResult tr) { - Class real_class=tr.getTestClass().getRealClass(); - flushOtherOutput(real_class); - addTest(tr.getTestClass().getRealClass(), tr); - print(old_stdout, "OK: ", real_class.getName(), tr.getName()); - } - - - - /** - * Invoked each time a test fails. - */ - public void onTestFailure(ITestResult tr) { - Class real_class=tr.getTestClass().getRealClass(); - flushOtherOutput(real_class); - addTest(tr.getTestClass().getRealClass(), tr); - print(old_stderr, "FAIL: ", real_class.getName(), tr.getName()); - } - - private void flushOtherOutput(Class real_class) { - if (unsolicitedOut.size()>0 || unsolicitedErr.size()>0) { - outputs.putIfAbsent(real_class, new Tuple<ByteArrayOutputStream,ByteArrayOutputStream>(unsolicitedOut, unsolicitedErr)); - unsolicitedOut = new ByteArrayOutputStream(); - unsolicitedErr = new ByteArrayOutputStream(); - } - } - - - /** - * Invoked each time a test is skipped. - */ - public void onTestSkipped(ITestResult tr) { - Class real_class=tr.getTestClass().getRealClass(); - flushOtherOutput(real_class); - addTest(tr.getTestClass().getRealClass(), tr); - print(old_stdout, "SKIP: ", real_class.getName(), tr.getName()); - } - - private static void print(PrintStream out, String msg, String classname, String method_name) { - out.println(msg + "[" + Thread.currentThread().getId() + "] " + classname + "." + method_name + "()"); - // out.println(msg + classname + "." + method_name + "()"); - } - - private void addTest(Class clazz, ITestResult result) { - List<ITestResult> results=classes.get(clazz); - if(results == null) { - results=new LinkedList<ITestResult>(); - classes.putIfAbsent(clazz, results); - } - - results=classes.get(clazz); - results.add(result); - } - - /** - * Invoked after the test class is instantiated and before any configuration method is called. - */ - public void onStart(ITestContext context) { - System.out.println("Changing System.out..."); - while (System.out instanceof SysOutPrintStream) { - System.setOut(((SysOutPrintStream)System.out).getOriginalSysOut()); - } - while (System.err instanceof SysOutPrintStream) { - System.setErr(((SysOutPrintStream)System.err).getOriginalSysOut()); - } - old_stdout=System.out; - old_stderr=System.err; - unsolicitedOut = new ByteArrayOutputStream(); - unsolicitedErr = new ByteArrayOutputStream(); - suffix=System.getProperty(SUFFIX); - if(suffix != null) - suffix=suffix.trim(); - output_dir=context.getOutputDirectory(); // + File.separator + context.getName() + suffix + ".xml"; - - System.setOut(new SysOutPrintStream(new JUnitXMLReporterOutputStream(this, 1), old_stdout)); - - System.setErr(new SysOutPrintStream(new JUnitXMLReporterOutputStream(this, 2), old_stderr)); - } - - /** - * Invoked after all the tests have run and all their - * Configuration methods have been called. - */ - public void onFinish(ITestContext context) { - System.out.println("Changing System.out back..."); - System.setOut(old_stdout); - System.setErr(old_stderr); - while (System.out instanceof SysOutPrintStream) { - System.setOut(((SysOutPrintStream)System.out).getOriginalSysOut()); - } - while (System.err instanceof SysOutPrintStream) { - System.setErr(((SysOutPrintStream)System.err).getOriginalSysOut()); - } - - try { - generateReport(); - } - catch(IOException e) { - e.printStackTrace(); - } - } - - /** - * generate the XML report given what we know from all the test results - */ - protected void generateReport() throws IOException { - for(Map.Entry<Class,List<ITestResult>> entry: classes.entrySet()) { - Class clazz=entry.getKey(); - List<ITestResult> results=entry.getValue(); - - int num_failures=getFailures(results); - int num_skips=getSkips(results); - int num_errors=getErrors(results); - long total_time=getTotalTime(results); - - String file_name=output_dir + File.separator + "TEST-" + clazz.getName(); - if(suffix != null) - file_name=file_name + "-" + suffix; - file_name=file_name + ".xml"; - FileWriter out=new FileWriter(file_name, false); // don't append, overwrite - try { - out.write(XML_DEF + "\n"); - - out.write("\n<testsuite " + - " failures=\"" + num_failures + - "\" errors=\"" + num_errors + - "\" skips=\"" + num_skips + - "\" name=\"" + clazz.getName()); - if(suffix != null) - out.write(" (" + suffix + ")"); - out.write("\" tests=\"" + results.size() + "\" time=\"" + (total_time / 1000.0) + "\">"); - - out.write("\n<properties>"); - Properties props=System.getProperties(); - - for(Map.Entry<Object,Object> tmp: props.entrySet()) { - out.write("\n <property name=\"" + tmp.getKey() + "\"" + - " value=\"" + tmp.getValue() + "\"/>"); - } - out.write("\n</properties>\n"); - - - for(ITestResult result: results) { - if(result == null) - continue; - long time=result.getEndMillis() - result.getStartMillis(); - out.write("\n <testcase classname=\"" + clazz.getName()); - if(suffix != null) - out.write(" (" + suffix + ")"); - out.write("\" name=\"" + result.getMethod().getMethodName() + - "\" time=\"" + (time/1000.0) + "\">"); - - Throwable ex=result.getThrowable(); - - switch(result.getStatus()) { - case ITestResult.SUCCESS: - case ITestResult.SUCCESS_PERCENTAGE_FAILURE: - break; - case ITestResult.FAILURE: - writeFailure("failure", result.getMethod().getMethod(), ex, "exception", out); - break; - case ITestResult.SKIP: - writeFailure("error", result.getMethod().getMethod(), ex, "SKIPPED", out); - break; - default: - writeFailure("error", result.getMethod().getMethod(), ex, "exception", out); - } - - out.write("\n</testcase>"); - } - - Tuple<ByteArrayOutputStream, ByteArrayOutputStream> stdout=outputs.get(clazz); - if(stdout != null) { - ByteArrayOutputStream system_out=stdout.getVal1(); - ByteArrayOutputStream system_err=stdout.getVal2(); - writeOutput(out, system_out.toString(), 1); - out.write("\n"); - writeOutput(out, system_err.toString(), 2); - } - - out.write("\n</testsuite>\n"); - } - finally { - out.close(); - } - } - - } - - private static String encode(String s) { - if (s==null) { - return null; - } - s = s.replaceAll(Pattern.quote("<"), "<"); - s = s.replaceAll(Pattern.quote(">"), ">"); - s = s.replaceAll(Pattern.quote("&"), "&"); - s = s.replaceAll(Pattern.quote("\""), """); - s = s.replaceAll(Pattern.quote("'"), "'"); - return s; - } - - private static void writeOutput(FileWriter out, String s, int type) throws IOException { - if(s != null && s.length() > 0) { - out.write("\n<" + (type == 2? SYSTEM_ERR : SYSTEM_OUT) + "><" + CDATA + "\n"); - out.write(encode(s)); - out.write("\n]]>"); - out.write("\n</" + (type == 2? SYSTEM_ERR : SYSTEM_OUT) + ">"); - } - } - - - private static void writeFailure(String type, Method method, Throwable ex, String msg, FileWriter out) throws IOException { - Test annotation=method.getAnnotation(Test.class); - if(annotation != null && ex != null) { - Class[] expected_exceptions=annotation.expectedExceptions(); - for(int i=0; i < expected_exceptions.length; i++) { - Class expected_exception=expected_exceptions[i]; - if(expected_exception.equals(ex.getClass())) { - return; - } - } - } - - out.write("\n<" + type + " type=\""); - if(ex != null) { - out.write(ex.getClass().getName() + "\" message=\"" + escape(ex.getMessage()) + "\">"); - printException(ex, out); - } - else - out.write("exception\" message=\"" + msg + "\">"); - out.write("\n</" + type + ">"); - } - - private static void printException(Throwable ex, FileWriter out) throws IOException { - if(ex == null) return; - StackTraceElement[] stack_trace=ex.getStackTrace(); - out.write("\n<" + CDATA + "\n"); - out.write(ex.getClass().getName() + " \n"); - for(int i=0; i < stack_trace.length; i++) { - StackTraceElement frame=stack_trace[i]; - try { - out.write("at " + frame.toString() + " \n"); - } - catch(IOException e) { - } - } - out.write("\n]]>"); - } - - private static String escape(String message) { - return encode(message); -// return message != null? message.replaceAll("<", LT).replaceAll(">", GT) : message; - } - - private static long getTotalTime(List<ITestResult> results) { - long start=0, stop=0; - for(ITestResult result: results) { - if(result == null) continue; - long tmp_start=result.getStartMillis(), tmp_stop=result.getEndMillis(); - if(start == 0) - start=tmp_start; - else { - start=Math.min(start, tmp_start); - } - - if(stop == 0) - stop=tmp_stop; - else { - stop=Math.max(stop, tmp_stop); - } - } - return stop-start; - } - - private static int getFailures(List<ITestResult> results) { - int retval=0; - for(ITestResult result: results) { - if(result != null && result.getStatus() == ITestResult.FAILURE) - retval++; - } - return retval; - } - - private static int getErrors(List<ITestResult> results) { - int retval=0; - for(ITestResult result: results) { - if(result != null - && result.getStatus() != ITestResult.SUCCESS - && result.getStatus() != ITestResult.SUCCESS_PERCENTAGE_FAILURE - && result.getStatus() != ITestResult.FAILURE) - retval++; - } - return retval; - } - - private static int getSkips(List<ITestResult> results) { - int retval=0; - for(ITestResult result: results) { - if(result != null && result.getStatus() == ITestResult.SKIP) - retval++; - } - return retval; - } - - - -} diff --git a/src/test/java/org/olat/test/util/testng/JUnitXMLReporterOutputStream.java b/src/test/java/org/olat/test/util/testng/JUnitXMLReporterOutputStream.java deleted file mode 100644 index c3654c0ebc8..00000000000 --- a/src/test/java/org/olat/test/util/testng/JUnitXMLReporterOutputStream.java +++ /dev/null @@ -1,66 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.testng; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; - - -public class JUnitXMLReporterOutputStream extends OutputStream { - - private final JUnitXMLReporter reporter_; - - final int type_; // 1 == stdout, 2 == stderr - - public JUnitXMLReporterOutputStream(JUnitXMLReporter reporter, int type) { - reporter_ = reporter; - type_ = type; - if(type != 1 && type != 2) - throw new IllegalArgumentException("index has to be 1 or 2"); - } - - @Override - public void write(int b) throws IOException { - try{ - Class clazz=JUnitXMLReporter.local.get(); - if(clazz != null) { - Tuple<ByteArrayOutputStream,ByteArrayOutputStream> tuple=reporter_.outputs.get(clazz); - if(tuple != null) { - ByteArrayOutputStream sb=type_ == 1? tuple.getVal1() : tuple.getVal2(); - sb.write(b); - return; - } - } - if (type_==1) { - reporter_.unsolicitedOut.write(b); - } else { - reporter_.unsolicitedErr.write(b); - } - } finally { - if (type_==1) { - reporter_.old_stdout.write(b); - } else { - reporter_.old_stderr.write(b); - } - } - } - -} diff --git a/src/test/java/org/olat/test/util/testng/SysOutPrintStream.java b/src/test/java/org/olat/test/util/testng/SysOutPrintStream.java deleted file mode 100644 index f1a6ffd4f2d..00000000000 --- a/src/test/java/org/olat/test/util/testng/SysOutPrintStream.java +++ /dev/null @@ -1,42 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.testng; - -import java.io.OutputStream; -import java.io.PrintStream; - -public class SysOutPrintStream extends PrintStream { - - private final PrintStream originalSysout_; - - public SysOutPrintStream(OutputStream out, PrintStream originalSysout) { - super(out); - originalSysout_ = originalSysout; - } - - protected PrintStream getOriginalSysOut() { - return originalSysout_; - } - - @Override - public String toString() { - return "a SysOutPrintStream[origSysOut="+originalSysout_+"]"; - } -} diff --git a/src/test/java/org/olat/test/util/testng/Tuple.java b/src/test/java/org/olat/test/util/testng/Tuple.java deleted file mode 100644 index 2e3315cae01..00000000000 --- a/src/test/java/org/olat/test/util/testng/Tuple.java +++ /dev/null @@ -1,56 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -*/ -package org.olat.test.util.testng; - -/** - * Holds 2 values, useful when we have a map with a key, but more than 1 value and we don't want to create a separate - * holder object for the values, and don't want to pass the values as a list or array. - * @author Bela Ban - * @version $Id: Tuple.java,v 1.1 2008-07-22 14:50:18 eglis Exp $ - */ -public class Tuple<V1,V2> { - private V1 val1; - private V2 val2; - - public Tuple(V1 val1, V2 val2) { - this.val1=val1; - this.val2=val2; - } - - public V1 getVal1() { - return val1; - } - - public void setVal1(V1 val1) { - this.val1=val1; - } - - public V2 getVal2() { - return val2; - } - - public void setVal2(V2 val2) { - this.val2=val2; - } - - public String toString() { - return val1 + " : " + val2; - } -} diff --git a/src/test/profile/cluster/activemq/activemq.xml b/src/test/profile/cluster/activemq/activemq.xml deleted file mode 100644 index 52774c48b17..00000000000 --- a/src/test/profile/cluster/activemq/activemq.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0"?> -<beans xmlns="http://www.springframework.org/schema/beans" - xmlns:amq="http://activemq.apache.org/schema/core" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans-2.0.xsd - http://activemq.apache.org/schema/core - http://activemq.apache.org/schema/core/activemq-core-5.3.2.xsd"> - - <amq:broker brokerName="localhost" dataDirectory="./target/activemq/data"> - <!-- The transport connectors ActiveMQ will listen to --> - <amq:transportConnectors> - <amq:transportConnector name="openwire" uri="tcp://0.0.0.0:${test.env.jms.broker.port}"/> - </amq:transportConnectors> - </amq:broker> -</beans> diff --git a/src/test/profile/cluster/tomcat-one/conf/server.xml b/src/test/profile/cluster/tomcat-one/conf/server.xml deleted file mode 100644 index 8f6362967af..00000000000 --- a/src/test/profile/cluster/tomcat-one/conf/server.xml +++ /dev/null @@ -1,151 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- MVN CONFIGURED FOR ${container.tomcat.one.port} --> - -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<!-- Note: A "Server" is not itself a "Container", so you may not - define subcomponents such as "Valves" at this level. - Documentation at /docs/config/server.html - --> -<Server port="${container.tomcat.one.port.part}05" shutdown="SHUTDOWN"> - - <!--APR library loader. Documentation at /docs/apr.html --> - <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> - <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> - <Listener className="org.apache.catalina.core.JasperListener" /> - <!-- Prevent memory leaks due to use of particular java/javax APIs--> - <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> - <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --> - <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> - <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> - - <!-- Global JNDI resources - Documentation at /docs/jndi-resources-howto.html - --> - <GlobalNamingResources> - <!-- Editable user database that can also be used by - UserDatabaseRealm to authenticate users - --> - <Resource name="UserDatabase" auth="Container" - type="org.apache.catalina.UserDatabase" - description="User database that can be updated and saved" - factory="org.apache.catalina.users.MemoryUserDatabaseFactory" - pathname="conf/tomcat-users.xml" /> - </GlobalNamingResources> - - <!-- A "Service" is a collection of one or more "Connectors" that share - a single "Container" Note: A "Service" is not itself a "Container", - so you may not define subcomponents such as "Valves" at this level. - Documentation at /docs/config/service.html - --> - <Service name="Catalina"> - - <!--The connectors can use a shared executor, you can define one or more named thread pools--> - <!-- - <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" - maxThreads="150" minSpareThreads="4"/> - --> - - - <!-- A "Connector" represents an endpoint by which requests are received - and responses are returned. Documentation at : - Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) - Java AJP Connector: /docs/config/ajp.html - APR (HTTP/AJP) Connector: /docs/apr.html - Define a non-SSL HTTP/1.1 Connector on port 8181 - --> - <Connector port="${container.tomcat.one.port}" protocol="HTTP/1.1" - connectionTimeout="20000" - redirectPort="8443" /> - <!-- A "Connector" using the shared thread pool--> - <!-- - <Connector executor="tomcatThreadPool" - port="8181" protocol="HTTP/1.1" - connectionTimeout="20000" - redirectPort="8443" /> - --> - <!-- Define a SSL HTTP/1.1 Connector on port 8443 - This connector uses the JSSE configuration, when using APR, the - connector should be using the OpenSSL style configuration - described in the APR documentation --> - <!-- - <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" - maxThreads="150" scheme="https" secure="true" - clientAuth="false" sslProtocol="TLS" /> - --> - - <!-- Define an AJP 1.3 Connector on port 8109 --> - <Connector port="${container.tomcat.one.port.part}09" protocol="AJP/1.3" redirectPort="8443" /> - - - <!-- An Engine represents the entry point (within Catalina) that processes - every request. The Engine implementation for Tomcat stand alone - analyzes the HTTP headers included with the request, and passes them - on to the appropriate Host (virtual host). - Documentation at /docs/config/engine.html --> - - <!-- You should set jvmRoute to support load-balancing via AJP ie : - <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> - --> - <Engine name="Catalina" defaultHost="localhost"> - - <!--For clustering, please take a look at documentation at: - /docs/cluster-howto.html (simple how to) - /docs/config/cluster.html (reference documentation) --> - <!-- - <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> - --> - - <!-- The request dumper valve dumps useful debugging information about - the request and response data received and sent by Tomcat. - Documentation at: /docs/config/valve.html --> - <!-- - <Valve className="org.apache.catalina.valves.RequestDumperValve"/> - --> - - <!-- This Realm uses the UserDatabase configured in the global JNDI - resources under the key "UserDatabase". Any edits - that are performed against this UserDatabase are immediately - available for use by the Realm. --> - <Realm className="org.apache.catalina.realm.UserDatabaseRealm" - resourceName="UserDatabase"/> - - <!-- Define the default virtual host - Note: XML Schema validation will not work with Xerces 2.2. - --> - <Host name="localhost" appBase="webapps" - unpackWARs="true" autoDeploy="true" - xmlValidation="false" xmlNamespaceAware="false"> - - <!-- SingleSignOn valve, share authentication between web applications - Documentation at: /docs/config/valve.html --> - <!-- - <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> - --> - - <!-- Access log processes all example. - Documentation at: /docs/config/valve.html --> - <!-- - <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" - prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> - --> - - </Host> - </Engine> - </Service> -</Server> diff --git a/src/test/profile/cluster/tomcat-one/lib/olat.local.properties b/src/test/profile/cluster/tomcat-one/lib/olat.local.properties deleted file mode 100644 index 5e4cac61cb8..00000000000 --- a/src/test/profile/cluster/tomcat-one/lib/olat.local.properties +++ /dev/null @@ -1,82 +0,0 @@ -######################### -# -# This olat.local.properties file is only used when running junit tests! (Unit tests run in its own classpath environment) -# Use this file to set properties that affect or are a prerequisite for your tests. -# -######################### -tomcat.id=1 - -userdata.dir=${basedir}/target/olatdata -archive.dir=${userdata.dir}/deleted_archive -log.dir=${userdata.dir}/logs -folder.root=${userdata.dir}/bcroot - - -defaultlang=de -db.show_sql=false - -instance.id=${test.env.instance.id} - -history.back.enabled=false -history.resume.enabled=false -history.resume.enabled.default=none - -generate.index.at.startup=false - -# for UserTest -keepUserEmailAfterDeletion=true -keepUserLoginAfterDeletion=true - -######################################################################## -# Clustering settings -######################################################################## - -# set to Cluster to enable, otherwise use SingleVM to disable cluster features -cluster.mode=Cluster -# each node requires a unique ID (1-64) starting at "1" -node.id=1 -server.port=${container.tomcat.one.port} -# certain servies (e.g., notifications, course logger etc. are not -# cluster capable and can only run on a single node - set this to -# enabled on that node -cluster.singleton.services = disabled -search.service=disabled -jmx.rmi.port=${test.env.jmx.rmi.port.1} -# JMS broker url's where the path (localhost:61700) - defines teh local adress and local port : -# SingleVM jms.broker.url -# jms.broker.url=vm://embedded?broker.persistent=false -# search.broker.url=vm://embedded?broker.persistent=false -# codepoint.jms.broker.url=vm://embedded?broker.persistent=false -# Cluster (remote) jms.broker.url -jms.broker.url=failover:(tcp://localhost:${test.env.jms.broker.port}?wireFormat.maxInactivityDuration=0) -search.broker.url=failover:(tcp://localhost:${test.env.jms.broker.port}?wireFormat.maxInactivityDuration=0) -codepoint.jms.broker.url=failover:(tcp://localhost:${test.env.jms.broker.port}?wireFormat.maxInactivityDuration=0) - - -# enable/disable codepoint/breakpoint framework -codepoint_server.enabled=true -smtp.host=testing - -#hibernate.caching.singlevm.class=net.sf.ehcache.hibernate.EhCacheProvider -hibernate.caching.singlevm.class= -#org.hibernate.cache.jbc2.SharedJBossCacheRegionFactory -#hibernate.caching.cluster.class=org.hibernate.cache.NoCacheProvider -hibernate.caching.cluster.class= -hibernate.caching.use.query.cache=false -hibernate.use.second.level.cache=false - -# -# if you like to run your tests against mysql just uncomment the following. Please do not commit it! -# - -db.vendor=mysql -# -# -db.name=${test.env.db.name} -db.user=${test.env.db.user} -db.pass=${test.env.db.pass} -db.host.port=${test.env.db.host.port} -# -db.database.dialect=org.hibernate.dialect.MySQL5InnoDBDialect -# -db.hibernate.ddl.auto= diff --git a/src/test/profile/cluster/tomcat-one/lib/treecache.xml b/src/test/profile/cluster/tomcat-one/lib/treecache.xml deleted file mode 100644 index 1078a6bd2cf..00000000000 --- a/src/test/profile/cluster/tomcat-one/lib/treecache.xml +++ /dev/null @@ -1,228 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0"> - - - <!-- - isolation levels supported: READ_COMMITTED and REPEATABLE_READ - nodeLockingSchemes: mvcc, pessimistic (deprecated), optimistic (deprecated) - --> - <locking - isolationLevel="READ_COMMITTED" - lockParentForChildInsertRemove="false" - lockAcquisitionTimeout="20000" - nodeLockingScheme="mvcc" - writeSkewCheck="false" - concurrencyLevel="500"/> - - <!-- - Used to register a transaction manager and participate in ongoing transactions. - - <transaction - transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup" - syncRollbackPhase="false" - syncCommitPhase="false"/> - --> - - <!-- - Used to register JMX statistics in any available MBean server - --> - <jmxStatistics - enabled="true"/> - - <!-- - If region based marshalling is used, defines whether new regions are inactive on startup. - --> - <startup - regionsInactiveOnStartup="true"/> - - <!-- - Used to register JVM shutdown hooks. - hookBehavior: DEFAULT, REGISTER, DONT_REGISTER - --> - <shutdown - hookBehavior="DEFAULT"/> - - <!-- - Used to define async listener notification thread pool size - --> - <listeners - asyncPoolSize="1" - asyncQueueSize="1000000"/> - - <!-- - Used to enable invocation batching and allow the use of Cache.startBatch()/endBatch() methods. - --> - <invocationBatching - enabled="false"/> - - <!-- - serialization related configuration, used for replication and cache loading - --> -<!-- <serialization - objectInputStreamPoolSize="12" - objectOutputStreamPoolSize="14" - version="3.0.0" - marshallerClass="org.jboss.cache.marshall.VersionAwareMarshaller" - useLazyDeserialization="false" - useRegionBasedMarshalling="false"/> ---> - - <!-- - This element specifies that the cache is clustered. - modes supported: replication (r) or invalidation (i). - --> - <clustering mode="replication" clusterName="JBossCache-cluster"> - - <!-- - Defines whether to retrieve state on startup - --> - <stateRetrieval timeout="20000" fetchInMemoryState="false"/> - - <!-- - Network calls are synchronous. - --> - <sync replTimeout="20000"/> - <!-- - Uncomment this for async replication. - --> - <!--<async useReplQueue="true" replQueueInterval="10000" replQueueMaxElements="500" serializationExecutorPoolSize="20" serializationExecutorQueueSize="5000000"/>--> - - <!-- Uncomment to use Buddy Replication --> - <!-- - <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000"> - <dataGravitation auto="true" removeOnFind="true" searchBackupTrees="true"/> - <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator"> - <properties> - numBuddies = 1 - ignoreColocatedBuddies = true - </properties> - </locator> - </buddy> - --> - - <!-- - Configures the JGroups channel. Looks up a JGroups config file on the classpath or filesystem. udp.xml - ships with jgroups.jar and will be picked up by the class loader. - --> - <jgroupsConfig> - - <UDP discard_incompatible_packets="true" enable_bundling="false" enable_diagnostics="false" ip_ttl="2" - loopback="false" max_bundle_size="64000" max_bundle_timeout="30" mcast_addr="224.0.0.0" - mcast_port="45566" mcast_recv_buf_size="25000000" mcast_send_buf_size="640000" - oob_thread_pool.enabled="true" oob_thread_pool.keep_alive_time="10000" oob_thread_pool.max_threads="4" - oob_thread_pool.min_threads="1" oob_thread_pool.queue_enabled="true" oob_thread_pool.queue_max_size="10" - oob_thread_pool.rejection_policy="Run" thread_naming_pattern="pl" thread_pool.enabled="true" - thread_pool.keep_alive_time="30000" thread_pool.max_threads="25" thread_pool.min_threads="1" - thread_pool.queue_enabled="true" thread_pool.queue_max_size="10" thread_pool.rejection_policy="Run" - tos="8" ucast_recv_buf_size="20000000" ucast_send_buf_size="640000" use_concurrent_stack="true" - use_incoming_packet_handler="true"/> - <PING num_initial_members="3" timeout="2000"/> - <MERGE2 max_interval="30000" min_interval="10000"/> - <FD_SOCK/> - <FD max_tries="5" shun="true" timeout="10000"/> - <VERIFY_SUSPECT timeout="1500"/> - <pbcast.NAKACK discard_delivered_msgs="true" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800" - use_mcast_xmit="false"/> - <UNICAST timeout="300,600,1200,2400,3600"/> - <pbcast.STABLE desired_avg_gossip="50000" max_bytes="400000" stability_delay="1000"/> - <pbcast.GMS join_timeout="5000" print_local_addr="true" shun="false" view_ack_collection_timeout="5000" - view_bundling="true"/> - <FRAG2 frag_size="60000"/> - <pbcast.STREAMING_STATE_TRANSFER/> - <pbcast.FLUSH timeout="0"/> - - </jgroupsConfig> - </clustering> - - <!-- - Eviction configuration. WakeupInterval defines how often the eviction thread runs, in milliseconds. 0 means - the eviction thread will never run. - --> - <eviction wakeUpInterval="500"> - <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000"> - <property name="maxNodes" value="5000"/> - <property name="timeToLive" value="1000"/> - </default> - <!-- Example - <region name="/org/jboss/data1"> - <property name="timeToLive" value="2000"/> - </region> - --> - <!-- TIMESTAMP-CACHE FOR QUERY CACHE --> - <region name="/TS" algorithmClass="org.jboss.cache.eviction.NullEvictionAlgorithm" /> - </eviction> - - <!-- - Cache loaders. - - If passivation is enabled, state is offloaded to the cache loaders ONLY when evicted. Similarly, when the state - is accessed again, it is removed from the cache loader and loaded into memory. - - Otherwise, state is always maintained in the cache loader as well as in memory. - - Set 'shared' to true if all instances in the cluster use the same cache loader instance, e.g., are talking to the - same database. - --> - <loaders passivation="false" shared="false"> - <preload> - <node fqn="/org/jboss"/> - <node fqn="/org/tempdata"/> - </preload> - - <!-- - we can have multiple cache loaders, which get chained - --> - <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="true" fetchPersistentState="true" - ignoreModifications="true" purgeOnStartup="true"> - - <properties> - cache.jdbc.table.name=jbosscache - cache.jdbc.table.create=true - cache.jdbc.table.drop=true - cache.jdbc.table.primarykey=jbosscache_pk - cache.jdbc.fqn.column=fqn - cache.jdbc.fqn.type=varchar(255) - cache.jdbc.node.column=node - cache.jdbc.node.type=blob - cache.jdbc.parent.column=parent - cache.jdbc.sql-concat=1 || 2 - cache.jdbc.driver = org.apache.derby.jdbc.EmbeddedDriver - cache.jdbc.url=jdbc:derby:jbossdbtomcatone;create=true - cache.jdbc.user=user1 - cache.jdbc.password=user1 - </properties> - <!-- alternatively use a connection from a datasorce, as per the code sample below--> - <!--<properties>--> - <!--cache.jdbc.datasource=AllSampleDS--> - <!--cache.jdbc.table.name=jbosscache--> - <!--cache.jdbc.table.create=true--> - <!--cache.jdbc.table.drop=true--> - <!--</properties>--> - <singletonStore enabled="true" class="org.jboss.cache.loader.SingletonStoreCacheLoader"> - <properties> - pushStateWhenCoordinator=true - pushStateWhenCoordinatorTimeout=20000 - </properties> - </singletonStore> - </loader> - </loaders> - - <!-- - Define custom interceptors. All custom interceptors need to extend org.jboss.cache.interceptors.base.CommandInterceptor - --> - <!-- - <customInterceptors> - <interceptor position="first" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"> - <property name="attrOne" value="value1" /> - <property name="attrTwo" value="value2" /> - </interceptor> - <interceptor position="last" class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/> - <interceptor index="3" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/> - <interceptor before="org.jboss.cache.interceptors.CallInterceptor" - class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/> - <interceptor after="org.jboss.cache.interceptors.CallInterceptor" - class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/> - </customInterceptors> - --> -</jbosscache> diff --git a/src/test/profile/cluster/tomcat-two/conf/server.xml b/src/test/profile/cluster/tomcat-two/conf/server.xml deleted file mode 100644 index 3cfca529802..00000000000 --- a/src/test/profile/cluster/tomcat-two/conf/server.xml +++ /dev/null @@ -1,151 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- MVN CONFIGURED FOR ${container.tomcat.two.port} --> - -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<!-- Note: A "Server" is not itself a "Container", so you may not - define subcomponents such as "Valves" at this level. - Documentation at /docs/config/server.html - --> -<Server port="${container.tomcat.two.port.part}05" shutdown="SHUTDOWN"> - - <!--APR library loader. Documentation at /docs/apr.html --> - <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> - <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> - <Listener className="org.apache.catalina.core.JasperListener" /> - <!-- Prevent memory leaks due to use of particular java/javax APIs--> - <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> - <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --> - <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> - <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> - - <!-- Global JNDI resources - Documentation at /docs/jndi-resources-howto.html - --> - <GlobalNamingResources> - <!-- Editable user database that can also be used by - UserDatabaseRealm to authenticate users - --> - <Resource name="UserDatabase" auth="Container" - type="org.apache.catalina.UserDatabase" - description="User database that can be updated and saved" - factory="org.apache.catalina.users.MemoryUserDatabaseFactory" - pathname="conf/tomcat-users.xml" /> - </GlobalNamingResources> - - <!-- A "Service" is a collection of one or more "Connectors" that share - a single "Container" Note: A "Service" is not itself a "Container", - so you may not define subcomponents such as "Valves" at this level. - Documentation at /docs/config/service.html - --> - <Service name="Catalina"> - - <!--The connectors can use a shared executor, you can define one or more named thread pools--> - <!-- - <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" - maxThreads="150" minSpareThreads="4"/> - --> - - - <!-- A "Connector" represents an endpoint by which requests are received - and responses are returned. Documentation at : - Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) - Java AJP Connector: /docs/config/ajp.html - APR (HTTP/AJP) Connector: /docs/apr.html - Define a non-SSL HTTP/1.1 Connector on port 8181 - --> - <Connector port="${container.tomcat.two.port}" protocol="HTTP/1.1" - connectionTimeout="20000" - redirectPort="8443" /> - <!-- A "Connector" using the shared thread pool--> - <!-- - <Connector executor="tomcatThreadPool" - port="8181" protocol="HTTP/1.1" - connectionTimeout="20000" - redirectPort="8443" /> - --> - <!-- Define a SSL HTTP/1.1 Connector on port 8443 - This connector uses the JSSE configuration, when using APR, the - connector should be using the OpenSSL style configuration - described in the APR documentation --> - <!-- - <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" - maxThreads="150" scheme="https" secure="true" - clientAuth="false" sslProtocol="TLS" /> - --> - - <!-- Define an AJP 1.3 Connector on port 8109 --> - <Connector port="${container.tomcat.two.port.part}09" protocol="AJP/1.3" redirectPort="8443" /> - - - <!-- An Engine represents the entry point (within Catalina) that processes - every request. The Engine implementation for Tomcat stand alone - analyzes the HTTP headers included with the request, and passes them - on to the appropriate Host (virtual host). - Documentation at /docs/config/engine.html --> - - <!-- You should set jvmRoute to support load-balancing via AJP ie : - <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> - --> - <Engine name="Catalina" defaultHost="localhost"> - - <!--For clustering, please take a look at documentation at: - /docs/cluster-howto.html (simple how to) - /docs/config/cluster.html (reference documentation) --> - <!-- - <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> - --> - - <!-- The request dumper valve dumps useful debugging information about - the request and response data received and sent by Tomcat. - Documentation at: /docs/config/valve.html --> - <!-- - <Valve className="org.apache.catalina.valves.RequestDumperValve"/> - --> - - <!-- This Realm uses the UserDatabase configured in the global JNDI - resources under the key "UserDatabase". Any edits - that are performed against this UserDatabase are immediately - available for use by the Realm. --> - <Realm className="org.apache.catalina.realm.UserDatabaseRealm" - resourceName="UserDatabase"/> - - <!-- Define the default virtual host - Note: XML Schema validation will not work with Xerces 2.2. - --> - <Host name="localhost" appBase="webapps" - unpackWARs="true" autoDeploy="true" - xmlValidation="false" xmlNamespaceAware="false"> - - <!-- SingleSignOn valve, share authentication between web applications - Documentation at: /docs/config/valve.html --> - <!-- - <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> - --> - - <!-- Access log processes all example. - Documentation at: /docs/config/valve.html --> - <!-- - <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" - prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> - --> - - </Host> - </Engine> - </Service> -</Server> diff --git a/src/test/profile/cluster/tomcat-two/lib/olat.local.properties b/src/test/profile/cluster/tomcat-two/lib/olat.local.properties deleted file mode 100644 index a99922700e7..00000000000 --- a/src/test/profile/cluster/tomcat-two/lib/olat.local.properties +++ /dev/null @@ -1,81 +0,0 @@ -######################### -# -# This olat.local.properties file is only used when running junit tests! (Unit tests run in its own classpath environment) -# Use this file to set properties that affect or are a prerequisite for your tests. -# -######################### -tomcat.id=2 - -userdata.dir=${basedir}/target/olatdata -archive.dir=${userdata.dir}/deleted_archive -log.dir=${userdata.dir}/logs -folder.root=${userdata.dir}/bcroot - -defaultlang=de -db.show_sql=false - -instance.id=${test.env.instance.id} - -history.back.enabled=false -history.resume.enabled=false -history.resume.enabled.default=none - -generate.index.at.startup=false - -# for UserTest -keepUserEmailAfterDeletion=true -keepUserLoginAfterDeletion=true - -######################################################################## -# Clustering settings -######################################################################## - -# set to Cluster to enable, otherwise use SingleVM to disable cluster features -cluster.mode=Cluster -# each node requires a unique ID (1-64) starting at "1" -node.id=2 -server.port=${container.tomcat.two.port} -# certain servies (e.g., notifications, course logger etc. are not -# cluster capable and can only run on a single node - set this to -# enabled on that node -cluster.singleton.services = enabled -search.service=enabled -jmx.rmi.port=${test.env.jmx.rmi.port.2} -# JMS broker url's where the path (localhost:61700) - defines teh local adress and local port : -# SingleVM jms.broker.url -# jms.broker.url=vm://embedded?broker.persistent=false -# search.broker.url=vm://embedded?broker.persistent=false -# codepoint.jms.broker.url=vm://embedded?broker.persistent=false -# Cluster (remote) jms.broker.url -jms.broker.url=failover:(tcp://localhost:${test.env.jms.broker.port}?wireFormat.maxInactivityDuration=0) -search.broker.url=failover:(tcp://localhost:${test.env.jms.broker.port}?wireFormat.maxInactivityDuration=0) -codepoint.jms.broker.url=failover:(tcp://localhost:${test.env.jms.broker.port}?wireFormat.maxInactivityDuration=0) - - -# enable/disable codepoint/breakpoint framework -codepoint_server.enabled=true -smtp.host=testing - -#hibernate.caching.singlevm.class=net.sf.ehcache.hibernate.EhCacheProvider -hibernate.caching.singlevm.class= -#org.hibernate.cache.jbc2.SharedJBossCacheRegionFactory -#hibernate.caching.cluster.class=org.hibernate.cache.NoCacheProvider -hibernate.caching.cluster.class= -hibernate.use.second.level.cache=false -hibernate.caching.use.query.cache=false - -# -# if you like to run your tests against mysql just uncomment the following. Please do not commit it! -# - -db.vendor=mysql -# -# -db.name=${test.env.db.name} -db.user=${test.env.db.user} -db.pass=${test.env.db.pass} -db.host.port=${test.env.db.host.port} -# -db.database.dialect=org.hibernate.dialect.MySQL5InnoDBDialect -# -db.hibernate.ddl.auto= diff --git a/src/test/profile/cluster/tomcat-two/lib/treecache.xml b/src/test/profile/cluster/tomcat-two/lib/treecache.xml deleted file mode 100644 index cf62fae8811..00000000000 --- a/src/test/profile/cluster/tomcat-two/lib/treecache.xml +++ /dev/null @@ -1,228 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:jbosscache-core:config:3.0"> - - - <!-- - isolation levels supported: READ_COMMITTED and REPEATABLE_READ - nodeLockingSchemes: mvcc, pessimistic (deprecated), optimistic (deprecated) - --> - <locking - isolationLevel="READ_COMMITTED" - lockParentForChildInsertRemove="false" - lockAcquisitionTimeout="20000" - nodeLockingScheme="mvcc" - writeSkewCheck="false" - concurrencyLevel="500"/> - - <!-- - Used to register a transaction manager and participate in ongoing transactions. - - <transaction - transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup" - syncRollbackPhase="false" - syncCommitPhase="false"/> - --> - - <!-- - Used to register JMX statistics in any available MBean server - --> - <jmxStatistics - enabled="true"/> - - <!-- - If region based marshalling is used, defines whether new regions are inactive on startup. - --> - <startup - regionsInactiveOnStartup="true"/> - - <!-- - Used to register JVM shutdown hooks. - hookBehavior: DEFAULT, REGISTER, DONT_REGISTER - --> - <shutdown - hookBehavior="DEFAULT"/> - - <!-- - Used to define async listener notification thread pool size - --> - <listeners - asyncPoolSize="1" - asyncQueueSize="1000000"/> - - <!-- - Used to enable invocation batching and allow the use of Cache.startBatch()/endBatch() methods. - --> - <invocationBatching - enabled="false"/> - - <!-- - serialization related configuration, used for replication and cache loading - --> -<!-- <serialization - objectInputStreamPoolSize="12" - objectOutputStreamPoolSize="14" - version="3.0.0" - marshallerClass="org.jboss.cache.marshall.VersionAwareMarshaller" - useLazyDeserialization="false" - useRegionBasedMarshalling="false"/> ---> - - <!-- - This element specifies that the cache is clustered. - modes supported: replication (r) or invalidation (i). - --> - <clustering mode="replication" clusterName="JBossCache-cluster"> - - <!-- - Defines whether to retrieve state on startup - --> - <stateRetrieval timeout="20000" fetchInMemoryState="false"/> - - <!-- - Network calls are synchronous. - --> - <sync replTimeout="20000"/> - <!-- - Uncomment this for async replication. - --> - <!--<async useReplQueue="true" replQueueInterval="10000" replQueueMaxElements="500" serializationExecutorPoolSize="20" serializationExecutorQueueSize="5000000"/>--> - - <!-- Uncomment to use Buddy Replication --> - <!-- - <buddy enabled="true" poolName="myBuddyPoolReplicationGroup" communicationTimeout="2000"> - <dataGravitation auto="true" removeOnFind="true" searchBackupTrees="true"/> - <locator class="org.jboss.cache.buddyreplication.NextMemberBuddyLocator"> - <properties> - numBuddies = 1 - ignoreColocatedBuddies = true - </properties> - </locator> - </buddy> - --> - - <!-- - Configures the JGroups channel. Looks up a JGroups config file on the classpath or filesystem. udp.xml - ships with jgroups.jar and will be picked up by the class loader. - --> - <jgroupsConfig> - - <UDP discard_incompatible_packets="true" enable_bundling="false" enable_diagnostics="false" ip_ttl="2" - loopback="false" max_bundle_size="64000" max_bundle_timeout="30" mcast_addr="224.0.0.0" - mcast_port="45566" mcast_recv_buf_size="25000000" mcast_send_buf_size="640000" - oob_thread_pool.enabled="true" oob_thread_pool.keep_alive_time="10000" oob_thread_pool.max_threads="4" - oob_thread_pool.min_threads="1" oob_thread_pool.queue_enabled="true" oob_thread_pool.queue_max_size="10" - oob_thread_pool.rejection_policy="Run" thread_naming_pattern="pl" thread_pool.enabled="true" - thread_pool.keep_alive_time="30000" thread_pool.max_threads="25" thread_pool.min_threads="1" - thread_pool.queue_enabled="true" thread_pool.queue_max_size="10" thread_pool.rejection_policy="Run" - tos="8" ucast_recv_buf_size="20000000" ucast_send_buf_size="640000" use_concurrent_stack="true" - use_incoming_packet_handler="true"/> - <PING num_initial_members="3" timeout="2000"/> - <MERGE2 max_interval="30000" min_interval="10000"/> - <FD_SOCK/> - <FD max_tries="5" shun="true" timeout="10000"/> - <VERIFY_SUSPECT timeout="1500"/> - <pbcast.NAKACK discard_delivered_msgs="true" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800" - use_mcast_xmit="false"/> - <UNICAST timeout="300,600,1200,2400,3600"/> - <pbcast.STABLE desired_avg_gossip="50000" max_bytes="400000" stability_delay="1000"/> - <pbcast.GMS join_timeout="5000" print_local_addr="true" shun="false" view_ack_collection_timeout="5000" - view_bundling="true"/> - <FRAG2 frag_size="60000"/> - <pbcast.STREAMING_STATE_TRANSFER/> - <pbcast.FLUSH timeout="0"/> - - </jgroupsConfig> - </clustering> - - <!-- - Eviction configuration. WakeupInterval defines how often the eviction thread runs, in milliseconds. 0 means - the eviction thread will never run. - --> - <eviction wakeUpInterval="500"> - <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" eventQueueSize="200000"> - <property name="maxNodes" value="5000"/> - <property name="timeToLive" value="1000"/> - </default> - <!-- Example - <region name="/org/jboss/data1"> - <property name="timeToLive" value="2000"/> - </region> - --> - <!-- TIMESTAMP-CACHE FOR QUERY CACHE --> - <region name="/TS" algorithmClass="org.jboss.cache.eviction.NullEvictionAlgorithm" /> - </eviction> - - <!-- - Cache loaders. - - If passivation is enabled, state is offloaded to the cache loaders ONLY when evicted. Similarly, when the state - is accessed again, it is removed from the cache loader and loaded into memory. - - Otherwise, state is always maintained in the cache loader as well as in memory. - - Set 'shared' to true if all instances in the cluster use the same cache loader instance, e.g., are talking to the - same database. - --> - <loaders passivation="false" shared="false"> - <preload> - <node fqn="/org/jboss"/> - <node fqn="/org/tempdata"/> - </preload> - - <!-- - we can have multiple cache loaders, which get chained - --> - <loader class="org.jboss.cache.loader.JDBCCacheLoader" async="true" fetchPersistentState="true" - ignoreModifications="true" purgeOnStartup="true"> - - <properties> - cache.jdbc.table.name=jbosscache - cache.jdbc.table.create=true - cache.jdbc.table.drop=true - cache.jdbc.table.primarykey=jbosscache_pk - cache.jdbc.fqn.column=fqn - cache.jdbc.fqn.type=varchar(255) - cache.jdbc.node.column=node - cache.jdbc.node.type=blob - cache.jdbc.parent.column=parent - cache.jdbc.sql-concat=1 || 2 - cache.jdbc.driver = org.apache.derby.jdbc.EmbeddedDriver - cache.jdbc.url=jdbc:derby:jbossdbtomcattwo;create=true - cache.jdbc.user=user1 - cache.jdbc.password=user1 - </properties> - <!-- alternatively use a connection from a datasorce, as per the code sample below--> - <!--<properties>--> - <!--cache.jdbc.datasource=AllSampleDS--> - <!--cache.jdbc.table.name=jbosscache--> - <!--cache.jdbc.table.create=true--> - <!--cache.jdbc.table.drop=true--> - <!--</properties>--> - <singletonStore enabled="true" class="org.jboss.cache.loader.SingletonStoreCacheLoader"> - <properties> - pushStateWhenCoordinator=true - pushStateWhenCoordinatorTimeout=20000 - </properties> - </singletonStore> - </loader> - </loaders> - - <!-- - Define custom interceptors. All custom interceptors need to extend org.jboss.cache.interceptors.base.CommandInterceptor - --> - <!-- - <customInterceptors> - <interceptor position="first" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"> - <property name="attrOne" value="value1" /> - <property name="attrTwo" value="value2" /> - </interceptor> - <interceptor position="last" class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/> - <interceptor index="3" class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/> - <interceptor before="org.jboss.cache.interceptors.CallInterceptor" - class="org.jboss.cache.config.parsing.custominterceptors.BbbCustomInterceptor"/> - <interceptor after="org.jboss.cache.interceptors.CallInterceptor" - class="org.jboss.cache.config.parsing.custominterceptors.AaaCustomInterceptor"/> - </customInterceptors> - --> -</jbosscache> diff --git a/src/test/profile/mysql/olat.arquillian.properties b/src/test/profile/mysql/olat.arquillian.properties new file mode 100644 index 00000000000..a2f15b7e8c4 --- /dev/null +++ b/src/test/profile/mysql/olat.arquillian.properties @@ -0,0 +1,53 @@ +######################### +# +# This olat.local.properties file is only used when running junit tests! (Unit tests run in its own classpath environment) +# Use this file to set properties that affect or are a prerequisite for your tests. +# +######################### +tomcat.id=2 + +defaultlang=de +db.show_sql=false +#force use of java.io.tmpDir for unit tests +archive.dir= +log.dir= +folder.root= + +instance.id=2 + +generate.index.at.startup=false + +#disable debugging +olat.debug=false +localization.cache=true +is.translation.server=disabled +deploy.course.exports=false + +# for UserTest +keepUserEmailAfterDeletion=true +keepUserLoginAfterDeletion=true + +# do not run upgrades and scheduled jobs and such +cluster.singleton.services = disabled +jmx.rmi.port=1009 + +# SingleVM jms.broker.url +jms.broker.url=vm://embedded?broker.persistent=false +search.broker.url=vm://embedded?broker.persistent=false +codepoint.jms.broker.url=vm://embedded?broker.persistent=false + +# enable/disable codepoint/breakpoint framework +codepoint_server.enabled=false +smtp.host=testing + +# +# if you like to run your tests against mysql just uncomment the following. Please do not commit it! +# +db.vendor=mysql +db.name=olattest +db.user=olat +db.pass=olat +db.host.port=3306 +db.database.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +db.hibernate.ddl.auto= +auto.upgrade.database=false diff --git a/src/test/profile/selenium/config/additionalUserContext.xml b/src/test/profile/selenium/config/additionalUserContext.xml deleted file mode 100644 index 4cca58d560b..00000000000 --- a/src/test/profile/selenium/config/additionalUserContext.xml +++ /dev/null @@ -1,115 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<beans xmlns="http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:context="http://www.springframework.org/schema/context" - xsi:schemaLocation=" - http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd - http://www.springframework.org/schema/context - http://www.springframework.org/schema/context/spring-context-3.0.xsd"> - -<context:property-placeholder location="classpath:serviceconfig/olat.properties, classpath:olat.local.properties" /> - -<!-- EXAMPLE SPRING CONFIG FILE FOR ADDITIONAL TEST USERS --> -<!-- Copy this file to the top of your web-app CLASSPATH e.g. webapp/WEB-INF/classes and add your test-users to additionalTestUsers-list --> -<!-- Delete this two line which contains 'REMOVE THIS LINE TO ENABLE' below --> - - -<bean class="org.olat.user.TestUserAdder"> - <constructor-arg ref="userModule"></constructor-arg> - - <property name="additionalTestUsers"> - <list> - <bean class="org.olat.user.DefaultUser"> - <!-- constructor arg is userName --> - <constructor-arg type="java.lang.String" value="author2" /> - <property name="firstName" value="Aurich2" /> - <property name="lastName" value="Thorw2" /> - <property name="email" value="author2@olat-newinstallation.org" /> - <property name="password" value="test2011" /> - <property name="language" value="${defaultlang}" /> - <property name="guest" value="false" /> - <property name="author" value="true" /> - <property name="admin" value="false" /> - - </bean> - <bean class="org.olat.user.DefaultUser"> - <!-- constructor arg is userName --> - <constructor-arg type="java.lang.String" value="learner2" /> - <property name="firstName" value="Leisa2" /> - <property name="lastName" value="Arnerich2" /> - <property name="email" value="learner2@olat-newinstallation.org" /> - <property name="password" value="test2011" /> - <property name="language" value="${defaultlang}" /> - <property name="guest" value="false" /> - <property name="author" value="false" /> - <property name="admin" value="false" /> - </bean> - <bean class="org.olat.user.DefaultUser"> - <!-- constructor arg is userName --> - <constructor-arg type="java.lang.String" value="usermgr2" /> - <property name="firstName" value="Marc2" /> - <property name="lastName" value="Bond2" /> - <property name="email" value="usermgr2@olat-newinstallation.org" /> - <property name="password" value="test2011" /> - <property name="language" value="${defaultlang}" /> - <property name="guest" value="false" /> - <property name="author" value="false" /> - <property name="admin" value="false" /> - <property name="userManager" value="true" /> - </bean> - <bean class="org.olat.user.DefaultUser"> - <!-- constructor arg is userName --> - <constructor-arg type="java.lang.String" value="groupmgr2" /> - <property name="firstName" value="Alexandra2" /> - <property name="lastName" value="Jeunet2" /> - <property name="email" value="groupmgr2@olat-newinstallation.org" /> - <property name="password" value="test2011" /> - <property name="language" value="${defaultlang}" /> - <property name="guest" value="false" /> - <property name="author" value="false" /> - <property name="admin" value="false" /> - <property name="groupManager" value="true" /> - </bean> - <bean class="org.olat.user.DefaultUser"> - <!-- constructor arg is userName --> - <constructor-arg type="java.lang.String" value="test21" /> - <property name="firstName" value="Thomas21" /> - <property name="lastName" value="Est21" /> - <property name="email" value="test21@olat-newinstallation.org" /> - <property name="password" value="test2011" /> - <property name="language" value="${defaultlang}" /> - <property name="guest" value="false" /> - <property name="author" value="false" /> - <property name="admin" value="false" /> - </bean> - <bean class="org.olat.user.DefaultUser"> - <!-- constructor arg is userName --> - <constructor-arg type="java.lang.String" value="test22" /> - <property name="firstName" value="Till22" /> - <property name="lastName" value="Estobesto22" /> - <property name="email" value="test22@olat-newinstallation.org" /> - <property name="password" value="test2011" /> - <property name="language" value="${defaultlang}" /> - <property name="guest" value="false" /> - <property name="author" value="false" /> - <property name="admin" value="false" /> - </bean> - <bean class="org.olat.user.DefaultUser"> - <!-- constructor arg is userName --> - <constructor-arg type="java.lang.String" value="test23" /> - <property name="firstName" value="Tanja23" /> - <property name="lastName" value="Estelle23" /> - <property name="email" value="test23@olat-newinstallation.org" /> - <property name="password" value="test2011" /> - <property name="language" value="${defaultlang}" /> - <property name="guest" value="false" /> - <property name="author" value="false" /> - <property name="admin" value="false" /> - </bean> - </list> - </property> -</bean> - - -</beans> diff --git a/src/test/profile/selenium/config/defaultcontext.xml b/src/test/profile/selenium/config/defaultcontext.xml deleted file mode 100644 index e64792568a6..00000000000 --- a/src/test/profile/selenium/config/defaultcontext.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<beans xmlns="http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:context="http://www.springframework.org/schema/context" - xsi:schemaLocation=" - http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd - http://www.springframework.org/schema/context - http://www.springframework.org/schema/context/spring-context-3.0.xsd" -> - - - <bean class="org.olat.test.util.setup.context.SeleniumLocallyContext" id="seleniumcontext"> - <property name="config"> - <map> - <entry key="seleniumHost" value="localhost"/> - - <!-- enable codepoints tests --> - <entry key="withCodepoints" value="true"/> - <entry key="instanceId" value="${test.env.instance.id}"/> - <entry key="jmsBrokerUrl" value="tcp://localhost:${test.env.jms.broker.port}"/> - - <!-- default test users (in the olat instance use the additionaUserContext.xml to add these users) --> - <entry key="adminUsername" value="administrator"/> - <entry key="adminPassword" value="olat"/> - <entry key="authorUsername" value="author2"/> - <entry key="authorPassword" value="test2011"/> - <entry key="studentUsername" value="learner2"/> - <entry key="studentPassword" value="test2011"/> - <entry key="guestUsername" value="guest"/> - <entry key="guestPassword" value="guest"/> - - <!-- olat tested instances--> - <entry key="multiVmOlatUrl1" value="http://localhost:${container.tomcat.one.port}/olat/dmz/"/> - <entry key="multiVmOlatUrl2" value="http://localhost:${container.tomcat.two.port}/olat/dmz/"/> - <entry key="singleVmOlatUrl" value="http://localhost:${container.tomcat.one.port}/olat/dmz/"/> - - <entry key="browserId" value="*firefox /Applications/FirefoxEnglish.app/Contents/MacOS/firefox-bin"/> - <!-- <entry key="browserId" value="*firefox /usr/bin/firefox-bin"/> --> - - <entry key="log4jConfigFilename" value="log4j.remote.properties"/> - </map> - </property> - </bean> - -</beans> diff --git a/src/test/profile/selenium/config/testng.xml b/src/test/profile/selenium/config/testng.xml deleted file mode 100644 index 456d3edd69c..00000000000 --- a/src/test/profile/selenium/config/testng.xml +++ /dev/null @@ -1,132 +0,0 @@ -<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > - -<suite name="SeleniumTesting72x" verbose="1" > - - <test name="fragilePackage" junit="true"> - <classes> - <class name="org.olat.test.functional.portfolio.CreateFillAndShareMapTest" /> - <class name="org.olat.test.functional.codepoints.cluster.CopyCourseTest" /> - <class name="org.olat.test.functional.course.run.EditInfoMessageTest" /> - <class name="org.olat.test.functional.course.run.UploadFilesInCourseTest" /> - </classes> - </test> - - <test name="loadPackage" junit="true"> - <classes> - <class name="org.olat.test.load.LoginLoadTest" /> - <class name="org.olat.test.load.MultiBrowserClusterEnrolmentLoadManualtest" /> - <class name="org.olat.test.load.OpenAllCoursesOnFirstPageTest" /> - <class name="org.olat.test.load.OpenAllCoursesTest" /> - </classes> - </test> - - <test name="Nopackage" junit="true"> - <classes> - <class name="org.olat.test.functional.courseeditor.courseEditor_concurrenciesEditTest" /> - <class name="org.olat.test.functional.courseeditor.CourseEditor_EditCoursePreviewRunTest" /> - <class name="org.olat.test.functional.courseeditor.CourseEditor_concurrencyEditAndExportTest" /> - <class name="org.olat.test.functional.courseeditor.CoursePublishInvalidateClusterTest" /> - <class name="org.olat.test.functional.courseeditor.CreateBlogTest" /> - <class name="org.olat.test.functional.courseeditor.courseEditor_insertElementsAMTest" /> - <class name="org.olat.test.functional.courseeditor.CreatePodcastTest" /> - <class name="org.olat.test.functional.courseeditor.CoursePublishInvalidateSingleVMTest" /> - <class name="org.olat.test.functional.courseeditor.OpenEditSessionTest" /> - <class name="org.olat.test.functional.courseeditor.CourseRenameTest" /> - <class name="org.olat.test.functional.courseeditor.MoveDeleteElementsTest" /> - <class name="org.olat.test.functional.courseeditor.DeletePublishIncompleteElementsTest" /> - <class name="org.olat.test.functional.courseeditor.EnrolmentCreateGroupsWithCSVTest" /> - <class name="org.olat.test.functional.courseeditor.courseEditor_consistencyPublishTest" /> - <class name="org.olat.test.functional.usermanagement.ImportUserTest" /> - <class name="org.olat.test.functional.usermanagement.UserSettingsTest" /> - <class name="org.olat.test.functional.usermanagement.UserRolesTest" /> - <class name="org.olat.test.functional.usermanagement.DeleteUserTest" /> - <class name="org.olat.test.functional.groups.GroupConcurrenciesTest" /> - <class name="org.olat.test.functional.groups.CreateProjectGroupAddUsersTest" /> - <class name="org.olat.test.functional.groups.CreateProjectGroupTest" /> - <class name="org.olat.test.functional.groups.CreateProjectGroupConfigureToolsTest" /> - <class name="org.olat.test.functional.lr.TestBlogAndPodcastLinks" /> - <class name="org.olat.test.functional.lr.lr_createCourseAMTest" /> - <class name="org.olat.test.functional.lr.lr_createCourseTest" /> - <class name="org.olat.test.functional.lr.lr_createTestTest" /> - <class name="org.olat.test.functional.lr.lr_createResourcefolderTest" /> - <class name="org.olat.test.functional.lr.lr_createQuestionnaireTest" /> - <class name="org.olat.test.functional.lr.lr_createGlossaryTest" /> - <class name="org.olat.test.functional.lr.DeleteAllCoursesTest" /> - <class name="org.olat.test.functional.lr.lr_createWikiTest" /> - <class name="org.olat.test.functional.lr.CPTest" /> - <class name="org.olat.test.functional.lr.ClusterWikiTest" /> - <class name="org.olat.test.functional.lr.lr_RemoveOwnerTest" /> - <class name="org.olat.test.functional.lr.lr_concurrenciesDelete" /> - <class name="org.olat.test.functional.home.FolderTest" /> - <class name="org.olat.test.functional.home.HomeSettingsTest" /> - <class name="org.olat.test.functional.administration.InfoMessageClusterTest" /> - <class name="org.olat.test.functional.administration.ASetupFNTestCase" /> - <class name="org.olat.test.functional.test.CombiQuestionnaireTest" /> - <class name="org.olat.test.functional.test.TestEditorCombiTest" /> - <class name="org.olat.test.functional.test.CheckTestAttempts" /> - <class name="org.olat.test.functional.codepoints.cluster.CourseEditingTest" /> - <class name="org.olat.test.functional.codepoints.cluster.NewLearningGroupTest" /> - <class name="org.olat.test.functional.codepoints.cluster.ConcurrentEnrolmentWithCheckpointsTest" /> - <class name="org.olat.test.functional.codepoints.cluster.ClusteredCourseExportTest" /> - <class name="org.olat.test.functional.codepoints.cluster.OpenNewFoTopicTest" /> - <class name="org.olat.test.functional.codepoints.cluster.Open2NewFoTopicsTest" /> - <class name="org.olat.test.functional.codepoints.cluster.AssessmentWithCodepointsTest" /> - <class name="org.olat.test.functional.portfolio.CollectOrCreateArtefactTest" /> - <class name="org.olat.test.functional.group.management.ConcurrentEnrolmentTest" /> - <class name="org.olat.test.functional.group.management.GroupManagementCombiTest" /> - <class name="org.olat.test.functional.group.management.EnrolmentWaitinglistTest" /> - <class name="org.olat.test.functional.group.management.ConcurrentVisibilityTest" /> - <class name="org.olat.test.functional.group.management.EnrollmentWithSizeLimitationTest" /> - <class name="org.olat.test.functional.course.CopyCourseTest2" /> - <class name="org.olat.test.functional.course.CourseCloseTest" /> - <class name="org.olat.test.functional.course.run.AccessVisibilityTest" /> - <class name="org.olat.test.functional.course.run.EditAndConfigurePodcastTest" /> - <class name="org.olat.test.functional.course.run.ConcurrentForumRepliesTest" /> - <class name="org.olat.test.functional.course.run.UseLTITest" /> - <class name="org.olat.test.functional.course.run.EditAndConfigureBlogTest" /> - <class name="org.olat.test.functional.course.run.AssessmentToolRemoveTutorTest" /> - <class name="org.olat.test.functional.course.run.ConcurrentEditCourseNodeTest" /> - <class name="org.olat.test.functional.course.run.CourseImportWithAllBBTest" /> - <class name="org.olat.test.functional.course.assessment.AssessmentFormTest" /> - <class name="org.olat.test.functional.course.assessment.BulkAssessmentTest" /> - <class name="org.olat.test.functional.course.assessment.AssessmentTest" /> - <class name="org.olat.test.functional.course.assessment.GroupDependentAssessmentTest" /> - <class name="org.olat.test.functional.course.assessment.AssessmentElementTest" /> - <class name="org.olat.test.functional.course.CourseWizardVisibiltyTest" /> - <class name="org.olat.test.functional.course.topic.TopicAssignmentSuite" /> - </classes> - </test> -</suite> - -<!-- TODO KI <class name="org.olat.test.functional.lr.CreateLearningRessourcesTest" /> --> -<!-- from suite CombiQuestionnaireTest <class name="org.olat.test.functional.test.CreateQuestionnaireWithAllQuestionTypes" /> --> -<!-- from suite TestEditorCombiTest <class name="org.olat.test.functional.test.CreateTstInEditor" /> --> -<!-- from suite TestEditorCombiTest <class name="org.olat.test.functional.test.TstRun" /> --> -<!-- from suite CombiQuestionnaireTest <class name="org.olat.test.functional.test.IntegrateQuestionnaireAndCheckAttempts" /> --> -<!-- from suite TestEditorCombiTest <class name="org.olat.test.functional.test.IntegrateTstInCourse" /> --> -<!-- from suite TestEditorCombiTest <class name="org.olat.test.functional.test.ChangeTstInEditor" /> --> -<!-- <class name="org.olat.test.functional.codepoints.cluster.MultiBrowserClusterNewLearningAreaTstDisabled3440" /> --> -<!-- <class name="org.olat.test.functional.codepoints.cluster.MultiBrowserClusterDeleteProjectGroupTstDISABLED3654" /> --> -<!-- <class name="org.olat.test.functional.codepoints.cluster.CourseGroupChatClusterTest" /> --> -<!-- from suite GroupManagementCombiTest <class name="org.olat.test.functional.group.management.ConfigureToolsLearningGroup" /> --> -<!-- from suite GroupManagementCombiTest <class name="org.olat.test.functional.group.management.EnrolmentLearningGroup" /> --> -<!-- from suite GroupManagementCombiTest <class name="org.olat.test.functional.group.management.CreateLearningGroupLearningArea" /> --> -<!-- <class name="org.olat.test.functional.group.management.MultiBrowserClusterUpdateLearningAreaTstDisabled3444" /> --> -<!-- <class name="org.olat.test.functional.group.management.CollaborationToolsTest" /> only one test which needs chat --> -<!-- <class name="org.olat.test.functional.course.chat.CourseGroupChatAndPollingTest" /> --> -<!-- <class name="org.olat.test.functional.course.chat.ChatTest" /> --> -<!-- from suite TopicAssignmentSuite <class name="org.olat.test.functional.course.topic.CreateAndConfigureTopicAssignmentTest" /> --> -<!-- from suite TopicAssignmentSuite <class name="org.olat.test.functional.course.topic.CreateTopicInTopicAssignmentTest" /> --> -<!-- from suite TopicAssignmentSuite <class name="org.olat.test.functional.course.topic.UploadInTopicsTest" /> --> -<!-- from suite TopicAssignmentSuite <class name="org.olat.test.functional.course.topic.SelectTopicsAndAcceptCandidatesTest" /> --> -<!-- <class name="org.olat.test.functional.search.MultiUserSearchTest" /> --> - - -<!-- - - find org/olat/test/functional/ -name "*.java" | awk 'BEGIN{FS=".";}{gsub(/\//,".");gsub(".java","");print "<class name=\"" $0 "\" />";}' - - <excludes> - <exclude>**/lr_concurrenciesDelete.java</exclude> - </excludes> ---> diff --git a/src/test/profile/selenium/firefoxprofile/.parentlock b/src/test/profile/selenium/firefoxprofile/.parentlock deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/test/profile/selenium/firefoxprofile/Cache/_CACHE_001_ b/src/test/profile/selenium/firefoxprofile/Cache/_CACHE_001_ deleted file mode 100644 index 08e7df176454f3ee5eeda13efa0adaa54828dfd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 diff --git a/src/test/profile/selenium/firefoxprofile/Cache/_CACHE_002_ b/src/test/profile/selenium/firefoxprofile/Cache/_CACHE_002_ deleted file mode 100644 index 08e7df176454f3ee5eeda13efa0adaa54828dfd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 diff --git a/src/test/profile/selenium/firefoxprofile/Cache/_CACHE_003_ b/src/test/profile/selenium/firefoxprofile/Cache/_CACHE_003_ deleted file mode 100644 index 08e7df176454f3ee5eeda13efa0adaa54828dfd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 diff --git a/src/test/profile/selenium/firefoxprofile/Cache/_CACHE_MAP_ b/src/test/profile/selenium/firefoxprofile/Cache/_CACHE_MAP_ deleted file mode 100644 index 68543d98a3e4b60a927b0d7eb441a8906f27a528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8468 zcmeIup$z~42n4YQ&HnSE8G)qd&Nh|Fsm~b#1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ Q009C72oNAZfWSwA1rZeh5C8xG diff --git a/src/test/profile/selenium/firefoxprofile/XPC.mfasl b/src/test/profile/selenium/firefoxprofile/XPC.mfasl deleted file mode 100644 index c01c211393da8d0e90c2cf6356237bfde94634fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2430754 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�tQb{CF)soHj& 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%0A)Ah~;W!oeQdL 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�z* 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	c4FXz&%oSa|hhcGH&XRmfidT_mQ$&FyJ05 zyM+Vp@iOk}17&ydfct0}clDnryGsY$PnO-H0k=yH*j;v)>9d16eWL6x*XfW>_mtfg zIvv*ONZDPf(@~v1S$4fT-K*1&mEBc3eM+bM%I<2NK3#U#47mMeqBkEXyXywrGi72p zf4uB&7;p#6?#2N(R>l+kP}$u);GQiL$N9N3Zs^aKojlM#QFcoP+zVy5bijSG>~0%y zFP7cy1MX90cgKMHblEK%aEHro`GEUO*{v9G<+58j;C`y?Rt>n%mff8L?x)Lc^?-Xx z9_n`~+OvE^ZaAuF&x?;9zvK9-<7<u{?>~Bc<MI2BZ`RFi#~(R*eBk&`9v?iu=lJOH zj~##dZN-GXq2jYHjW|SwUTh(u?@&nSRXWzJDom^@oancojXJ$g$7X-YgKat<v4;aX z{Yf2zI`-%o)$uVMPwO}UZ$EKRUh#(}pZm%uBR};a+~SAloRk~8j?e4((i>$rq2I6Q zcvHtWb^Yf$zN6y@C(DJUI{J0oujA)*{Hl&G>G-aW|9-MuoT+26j*sb3nZ;k%@kcuT z)5&t_avk^T*go+_x%3nK8RgH%`ST)wUgFQs@#lAxO;sqptK)|{RCL?LI@ajeqvK!c z_+=gAI!@~Nx{m*-<G-FPw|D5cM8~Z<?$Pm}j@>%;>-eeBa^ckz<@TSSEVuvC%Xb|a z4@3`M**tyUKX%{X{yqDK4{jem_}t#1;W!rd-6{u?YI@tepM|!Y3=;dgua9_El1>L6 z08h>Oz{F(?dERY&53N5hZuPT14>Cd4x8Lev{;Wa2%G$!v>(~28HtY|$OMKO0RTJfA zQzSc}6X7>)>n<%aFLgx6Prl3AvxhaS^sw$etTK~jz<-gr(4#1a_o?$k%Dc;Rf0JW+ zb?-?*1iP@s{zj|ejU}GT!Q;?euplpqIN(xW%3{e#d!&n9<I6_&%I?K<pDZZs#`K`H zqHVslJEODvRo{pFdkghmdi^RZ)!BWKIS}-sozZU`ix<7h+7Y0)OHg=B7XOX<inR-V z9iB4tVNkR+5A!PTXCX+Gq4nC!ZKK|e%aTarXA^9F0#d*}`S@;6K-bEp->hDEv_Ggg zh8rtzPx=MX7vO>A1!_s}_ZT+FX}~5aIU5wLjo^cou}OUoly~X)h+wf%_qXdFP~PtA z!1u!XwT(VT1riKv1sEk(e`Gi-FWqyyDwt*8rC!Xj#J$8^3syCI9+$ISaG=lWpNI8# zgG$=&ZNR{QJ|Zq7Ix<o1HmEkNg60|XHPv;on$W&&dJ2pmRKEv!ChLT>Z{wU*4;CkF zL8Z(`R10dgU2hXTp8lqG$-Ts^E%ZG$9rnI>LBEvwv~uF_93q|a{TL^y)uXB#B@?wi zZZEb7>Vkcgvif~%<L_8|!-`VcNF1yUz7%5L^Br*4VvI04tZn^*JZsL)#t^LK*}mAK z9)RZDFF$s}6^p2E`6w5QJ```SEbxrJdgaFWYxUhBC=y+sUSaG|SNhjH51=pc9`!tf zK8E%Z<?B9ObDx8mxUeoY#wFX?2TY>3wx|ufw=sGLoMaWiUfrXIEItOkWo1$q`yM^N zO;~xqM!MCLy3oUM<am3B{<3#y5p{f6y<yLwuSTDtm!>Di->}su%;57DZQ|L1#LA~F zi8f;Yw(mf}4ZGRXF4Pa)+M`|r4`aLzKAdrVY`u*62k_17beL@|Uf*!8`#aF@X$rkP z1v$P8-01hb^<4C4`u$$vWHsy=cg?Ivg6F2!YOo$-ndTOj>-{0W8iUB`BbrAhRyw~U zIvbRO@^XpztkoFwXIw2)5AlSfeysEx_1)UG4#Pxd-LRC?x}_P4nK$zu@B|J6^<ri? z85bTLs-?s73|nDx9dB3*huy&JB5BCy!JYnXw7v~FVwXmmSxn-w!d^tN#bJXm)}B!& zG2np;_(<CxR2$7AYO)Eub63ReX!!xr3*Z4B5GQqi#DN13vsr$;XzhL4NS$niq}$o= zzYEQ^`t<s|VfGN3&X^g_Q1x^fd2$GjY`Z+B!wtr!{675K;273JKBQVapDD+9Gc*eN z5$IH)Ym7A@nvQK{?PRPOy!K_r98?5ry5*xkV<^}?=o@^-W>&2Z+yhP_t||QkpQaD+ zZZa8blkdH!MKPJ_NlF>yM^4=3OQDys<HP-fuLdK9FYFQZ1M_2<58h3z0cPWfKcD7Q z*}k$iz|*R~mCkEC&hlTBn}3u4Ch>W)?HN=47)K2XA$N#%nWXd9h8WWITWw_{A6t}F z!_n$@((R!>)$i1YR@{cTZs}4DO5_8llJ)6VZ{*1{@T^_>m&VzHqV><IXRU4Uy;?c= zmeB;L0&%<SP3|)m(s!*q#sc3Ax>NF7R#y56Wrcdi{L19}<hxeS{2Y{F^bkx#AF{e| zKiuKm=onPcXgl-DMynt3cpmm6Gx*lal`J19*w`%j?{Srch2dnplG&cYE7-3hIcftB zO+E`$B0Mv^viBO{VR*;Jdw8cF9vY5?_iU^f^?+|6jiPVdo2qs2{IGUazq3ubfu*fH zx7F2wPT4yK??F*<^O4$<p_FNOJ}Hh2CqRm~SV#1&;hnWH`wY1>hBe*^mM@fR&!Ot@ zMDuWf@9&HH(Qwb6(;7VbfCnDDeB1iVp6}3mp?sbhJj|;t`!2eN@sdDg4IVLl4phGJ zoAI{{K8@e7Z^1iudAVpT)As7x@eRwL<VtCXW!rE04c^-ma5FqezZ<t9S$?)9$uC$N zjD8$cZv=Q%=P}tNnWwsa-~$QURwEhPXFLVoed&AjKZ$u4-i1eJ)0zHB?||s%FYzCW zGPJ@bcTi=u>&vlCu5dBsXJte_Ngn9%eWK;i=~#l){ZrPSyY!qyduYoI{wn?Fj6ATI zNKz1b+f^aHF0H#ulOFMPn_Wl2>19JcGCmFjPVeqMQFi}2I+bTt`pmx93i$lAiXz%s z44<N3uhxk7K^JV~vhv<Ws`(Na-Z8d~BbiJ@G);EoMXCeS(z`X;JK$BLnDgLjwp?~N z$Scq2UbW1xB7A#kW9aK_E{_YR$Z7J*RBV9Y{Ui3O@Pu6xEY=&kAV)}NUV4{33!FR+ zE_zE#nm+3ag_q^U{=WuK_MJ|<6BOomx_JsK@0W;Zq!fjMdgBsvX)p9E(@Ncm-Vq9E z|Cwcuh`_InKmMCq3?h`$|JlbC2Kb0}G60h-Uhuf)`F)0{Lao53&#SET{AN*Jjn4Jz zKpMbu0*|`TbsG9V_zKf!P+d~3`#if!$K{+T@lK$9;Tjr30?)C0qeWt)fr^KSf5gOv zX4lq6jSk&PK}y8pL*8V(Wm8@M8g0OHm#v_Xm#Fsf!fhlI(mIsa3cUD|3QN<O!Vka; z;1t#lT&MHeHj5<0mZso`r9Tb9sjt6>7n=>@BeIJ>s5;f|AL<Pq3Y;5XFXTA1$vr8{ zfzdVi#HjM1YnbF@cmxd%^vCSz!LpzSN`dDrwM)-);9JPK*_7ltcR4L(udpC_mM1Ue zNag)^Ap@f`JT<8NM1{7Zzb8~ydd*mYExo-jZ9Scev5}NSvfPC-e$>20Rq%9Ro_<6B z)wclgM%<ss7^M0#(ORhbo1)xLFh)qN=$EgkoJ?#1wgUIEIx>%GXx2W)L}*_l%N4Ov z!B==4_>Olnwi2vbw0BS?C1+%yjaj=8k^#K)F+C%}JE3ih{gu@zI(27uAY!p>#Te*^ z&WMAG6-w;#_rgX%Yh1~8*^^hD{3+yCsOQ?yVcPn@Y5hy0g|6%Ulk3_&|AZFGO|5sM z59n_J{7XaKnxr3@Hsk2ynhO6TvYaftcS3zy(KmcMLnGgzZ|d35fRE83Y;#kK?QXQ! z=B42|c{bRj{fT}xzjdfsJSS&b)#gaDtBw<$<eAi${PEnJZX^<U!6OoRO{NU<fX4f7 z^G^*ws1rJJHhG=GHmcNiU5omB2%8_eqTD<E>IwC_kU)Ps<aYVK_}^gR>+*NJ81KXf zC{(Exefmw6(=BR2yP|jy-Y1}*PR@8ihu$yrMn+(s0z82B+dK@jrm@W2$ac-QcSZRx z)^B<qahFDB{dsV`5~X-OjLH9I58f%PU?x1w{W6BHirxr%679{Vnti0PEj7u;;$Y#M z>X${~-B$F;pR2GL={`9Fd>h$1F4TTu94E&N`jN%EGFzrp)y$YP>tS*=G<~)~`AEo= z=tkH2tMs2HWy;mA)6?57xng?~tmW)Qzatj1=6H^<IX*s8I_d>bZJq*_wr2c&N9CmZ zx}%G}Hri+YG*|1ow%i$@368_DTC+ACImhVjmP&8&g%ClCIx=RAwkLba#yv6+&se+7 zTJbbZ-R?(ZC~JxGQXXXOAyJm6y(VscK+sP6#(I@w^V0B<tetS7@=Zkt=6k%8Zeu*F z#;OFQ<?W(v%(F04#ycEAOVp{So3u5SL-tpqbLP)R8QkiP2V{4AR)X)*SY>`E4QKi& znJ@HIu<F8}lFzY`)q3Y4@jP@rlZEg%I4C-7+A#OPGMkUKu}NPg%Vs>L`#99b*7JM^ zBCj;jGfjT*&V5fufG77!O^#hZa9LvUSmANcEsI-q7Ok;(pw!`hRU16Dy@j~dRtZ(% zH`<!vH`>zHT5Pm6bL&gKBrRNM^CUpa@kIh=J}O^dznr0TptqCN3?*IZ19$4KR#<Sg ziYMBZ%b)9R^fX**dn+y8Z@<%GW3YqOtjPLt+Lg3x)6nKM1cRCt7M9HRimqS7$o^FC zs`{O8xuS0rYcV?f3JMV{+nTF;tE?<@^jR+`&eesg(!Ex-*9Wx)n6hh!u<mb*uFU7= zw?!-$*a{BSuyYk4dR*V=dW)sJs>s4gcaev{#l9jv`ee_yg$b9elxK2ue(6egDc{u& zU}~FIa})&vRbu9()BavPG83}tS3#}&?aj(|xm8cMXz=ZuGc<KPTFHTbXE!1Z$2gln zeQ~)vW>2*r)oCn4LnXo>D`cPYobEdM_U>t4)*evWplYOJbmo^8(qPZ@(K(M3Sfpd% zMeY5h7h+2RMSg3!J6SHw@?x^~uhOrql_Q<=W;<<@IokCaUl?X}=n6d<>6q6!V08$k z=<ey=T@xI7@$KEyyTt}Zr@x~B&o@%gJL87FEs@85pt3Gb@&3*m87CifesH<k&^$jF zOHseTAD}UT7d$DN%nG(Z>wpo7U*u5Mf$dYCL(x6RPbg<9Jmp;Y19iDWM{VAX6iqvl zelDgZ!E4PsjkT?T_A(cT?_{uN$2*+!txI)SeK(3jV(kfKK#P;!muddXyZB-lY_oaq zOKC%4PBVBZ;1kFD@B?a|^mhQx!Q&vm6zebQO^a-oq+~tQZ*5SX*lW=AJNo)L)i61q zh%nxqFJ8KQ_#<t(QODH!?0MDf3H8g9DOlkp#k}ZL)?*<HTOU5^%S_kMv|Z|mE@0TR zL;0%x^~eMMz|%QLrfAl`2VFZkqnp;4lVdDc$xRNz9?gEY$c0D_COHv}09-U0M%ig7 zB_%#9Co5a%6)$JmZ@Z_3;99sJz6<QK{ho&3n17f0#bYX9bS%p;%bv!ybScb#hP|vq z9iY!xgRmQ=+ZQYpv|lzT5u$G?Pp8iJ>3l%v+`nJHU(^9Ue_Y3q4ia=LX@^bwgODS= z-Wq@TWPEtaqnB*QYwNopzoJvEq6np+2SW$4Nw%!Qy`p3#{hK3fx=gjaK};U&7Bf9M z#i*szSvrm8e@a@P_W3*9yEZjAan#QcR(|{^TA?d16@b$7r$vwN;6gKgZ^*V-6)n;M zRMPzBz>!-1co&L&7k+4ZN7hm~?D3}SlrkvM#xzcvOwL*m5_U}5i(H;fHDq%2vz8i* zvdJ(h>wUOVq&Sv5%gU+s&#qkt!_>Tum!4$OmkcFa<q+eX)CxT47apW-lkK-b_mXlG z_Tt)f9p4YL2Tz4wTlr?Agx?wM-t1{!SUDS8nr-}%Z&!-Krs+%IL+EPB^(tXKMsl4B zK9I>g*%cYdy!3H3rs$>;bcV7FpXzgMXcxFuQhsnSYda4V)%eK6k&P5dhjEtnAHuI4 z&mnLjoa4j9HCi|G@my0kXf_f6at&u$UnBC-Mx=qPPaV2&ct7~2L94^Pq-G6W{1O0B zVjt<N_4_p)w3j0!=;8*~1v&Rte&`?s(3=Mf8U`8-gn-jMDP9G|Rn!fsP17w}`Toj% zhE1otNbl*EjK0dst(6L|s2kIDWXdcOHCVT$kBZ!C=6wbkXI5t{MH#gsU-N9rIE#$L z$)VPB_%jQS59z>BH5Kb%uCLA_WmH|FYi;~9&u@9{o?GMQuW$<{owkI&XoWMK(T6LT zbeHtGOT7-+fpRTHREBM-hmN2H_V%69%cT%^Rvuqod9=_x2D;Xhv!XEjn0acgYPix} zL38|PuhhoOOQa;LlDz_$3PG)%kLs)}lkO_N-*#cEw9o&tS%rxdxg%fG-Zq1UJ<{1m z<}7n3%7rZzea^eEh%U`Ix(D(!)T5^Zab86w&|5<@eYQjaqf#L&_m90gJV&p6+<!%d z%)1y3Qzzd@E2WY0E7JJY-7|^0_u9D5N2b~7|5hA$@z>-Q@p`%N5<!d#pBpK4t5zeO z3py7pFZykl)flB#(9QdW=RF$zpu5@sJN^Q?$q~jQ=Zuxu56{MI@HI4E88ox7?$64w zXK<ftzd!hr%@?HCdl^lQ_qAX)ft6XT=XqEMt7KTW$Lb*7WbIaev?_<XLN~44vtJvQ zY*W_On1n^3bpaO8_CQl&I+gUsHn?CxuJ*0oQbpmCZ_>7f{=HaJYeWxu$Mm5r?KHU* z9hr3m!HY4?iL9>ka_gGT8KhjkhkP_uU-NU-+2A$S=e5_5Aq%5FGB-G^bLwii_QAEY zU!peP2OUSPT;lOBsYPe?(j`&b(JKs-@?*U+j^LwM5f<wkX`8|l4?p_4cAmwa<HtI? z!Tch<Q_Z8-=?lU8F2*fnfKlbAuc&X3ufnR|<T?z>tsYZhMM1EMP(oO>Y2`9z)B0|9 zrGm*v!QTp63I32GF~L*N?ER1*+zeiZ)wS@&NUkWl&#M67NxDMkw1+bL^oKD>;u^YX za$4-C#uH>Rp4XGfkZraq4+)(QI(Lh|O8@b5pW>uqtOy2$_%sqlytokGRUmht_g&X+ z;UUGJXUWM&!6Q%waGiDHXrG5&iU(Ky5ubYnK8M@S5W<>LEBM>b2_PANzY{TyLK;S6 zhBj`~QQz0y=voZ(`qbKR%jk8zcVb+JUr@K|ck225$9@jYtSdo&4PG=c{WJZA@7nm< zCP{jehX`KTSZ~5yP|^>a_o1nqy!DM}o0h;q@G9u0u~iUy+Z>)6t&Z(1S^Xf5$3<U{ z>-0^&%@L9!WGQgDFc@(;!eXReiOm_=Ji1$Y)LSwnj3TEN*KrvMqbdrO)*WGsL^)(2 zlbzl@PxBIkg>USh9f@z|(Hg$r3LO4bHE6n8MY~K!YugR%lX6JVs)8JnlwY#zS9mum z+s)VYRMrvX$!*jv&^yipeblMf<(6@x#IqPT7<a+%-}LupXxLnpQ7vPo#}RPI*CFeT zCEgnI<FCFQF}X%z%zr1qlM;YWxK7SbgnP6<oFhM?6=Tf=r*{J&rHP&{Pyfet&MoAW zkUVY9LuUnD^{Qr|+HHB63R^YzN^n&@lnqC^CN><VPdnT)^HNhNRq3C~)Fs7Gn_PD( zsJZC5rWq9!csf&qL^o$xNUf9>s=QtAzh&P>727IJPI=MDu3@54PiE>fDobCI0*skZ z8nLdtg7zO!&~%I2RYNrBrP7@}Cz>5+(j6vi#bp%yTyv3RAuyiiUj3Y?IS>=|uJgV3 z6-G~4^gwf?o$FPPt?#l4teUnUVpa2{(t1{PM7GN0*cP)&-Vv*M&5wC$cKYr8Q1HUT zMTEJ*)4ON9Q7*iWh3jOw@CR@^z4OPXdpfU`{uZg6+|@3u*)J*MpV+;jS^gtKZ6kao z(ivy@sYhk{%M7z@1)ag>F<00Iz8RfqzZP0y{Ag-A$5iN#%}pd}LH_!lEX~X6UdV^B zj*8s+|Ficl&~_E+eP^9>?n`e83B;QNh&Pe|ApsHsE<y;pB|wPxA+5)~k`OHf))lYr zhCc4lPA7I8kK1;7Ofsuud&cqDJ##^~L2cB61luhzxSPgfXDxU4BooDx)hqFM);Mu8 zlNILwt8dq>+WYKt?zz$dgPkqyd-kqfyQ+58_pYzLvNi{M8gicL2%Td&Ab!}Jd7nko z6^vIR8y9(HacvpxC1M_&k!$)S>XP?LgS}Pj>!S?%h@{Xl#b&S-DEV2J@C_z|Krg~f z8*)opb4r`6>`r_llo#cosn-eeE$P}!`hA01VS8nzZL#|4&q(L)lq?*-nbrpmkpJRg zm1p^iGD|Py6kt5?EBc^&daukn()WSi&hNt&>_E={hAx+6_mqR2Z?cj>-94F2G|aJ< z=?tkH1uSkCEHRT@w$6Gg{i95_dOm9(zIMP*%D=Nm1s`Xz60a#}n+yp`BCvyQ5p;g? z9#g0?t#|X4+~+w@zt6TpvX+v>AH<AEf;)+SXlo5cHI=m#{<BXB!6jM`Cg&DJ8xhAm zRh?zT_0{p+Slwp5;uGcXF;7%;;^9}vVWv8IK`Vc#fy>KeRqqQ8E->GQCmFNC`(>R6 ztC5Gm8<VwC{6#{rxq5Ws6nn{!tYb85>KH{<w!u&;r!!x<-+M~LdMMjyv{9W%m#m#- zGG2Vg>L|XWBK<d}_B-a`TJ3j4XTfSmOq%sMT%wL38&MtyID&o1aHLhkpGps-gdkT! zi?(}e6lNAo?t&(9pc6BOOZ{E`Ptb`K`A|Tr#gl?g$u&6eOVRBY2y6JVIkCdi!T1yz zsPJ@#bY?4MriW_}w*c+PKnB^RH^~%QPhk2#tE2O4VrqV0$CQ^B$2{`X&atX&T=$C` znm<B0FD=UOX5HakXi&RYSI}?6k>1Cp0;jC()C>K@;%H%?v6xu5sW-yj<-vk#@P4ZD z1b7d#ad!!i)A&;P-XfNF-WQ+<=kTfRUBvzf`H;xk&$gLd*qQI8)Xe6bzpgfLFz3ve zZuEEd&DkY<Ma*M?X4gDMRc{u?c-G>v%QSbq4IVRXMYBDc+mg28*^BL7_Jp*I8FD@x z_~1|8SHBEo`i^`k^}3V<zlp?prrfIaTbK`%8l&xkd8jwDs+H=iRypEmnho=M&fk|W z<Dq7C(JU{DXZR^DG+uuyC<41`a}GXm*+Co%5%a}?-j$Q#t{LVy_<FN?n&}4B^Zh6H zf*;KhLgoF)`@P>FygzT-L`J|Xh$uovuRm^bb0;}@q1xQa0rHp-FbTSWY;z)Of{;CJ zPNx&@nSS1_90)%<9+^|Gd0vS88)ySKYJOH038<_m(C7mHGk7S=Wil!_`G_DUu79%L z#5VD3G+YO`d%Avq+us%D#Dyu~s&PX2<e-x|0Qru&+L}jUl06!Fj0IJ1@}iyLuHSYr z+g=Fkn@W^qxJnV1vBOm^n=G9*8-wmsGB!+>Oj1S&3dPO}#o{)d7CXnxdw)1ttR}=& z>_4~3Wos}=g<|{u`^ie>za2!@P-*fMU+IkClssMFpRy}JUwrEO;iS;ug@pz$vL2Cp zz{z%1Tjfr%D@~Cv*5~wT(b!G+=S(*7G*z?8ok}jPZ$V%-iFx52^I!2c2+7MM3q+`9 zAAE>N{F(3btGfo?4mmf>pOmNDXKK3FT|Qfo!Tme!Z_+B+nce??TXgm_FKg<Z*3F;D z#P^=aI!i?_^XuLQZh~HPl8KQWgZ&_lxrmG#><&Q-D~n&%Nscmk$mSt0ReA0Gl*)XD z@gTNnaK*X4<MBbYwwRp*{ln}WacxW)^$0Q=nho<P_<RQcC!R$)v2z^Ci>LkV-TB@! zM)n;i=2r`SG#F@&gUR^Xv(|W*@x9jAmdJzlUU~e=OZ0qt@GvSLP$bMw&|thDo@M<) zyg}Y68(qr_{G-XnRbZA5k42&&=4cwr6JOO3nJ<mw1`nDl9w#u9`Y&VS2)KvNSd5nn zYYO%p`nn7bmF)Rv$cNn1&WAe98|VUa(WXJi*rCV=^oxCKh`eg@K(SwFV_6?k7YEPb ztL=Dupe?QTApDvmkEf39>Y?bRV?HsaN0eEJ#=Kpk{qt5ievj(lz&-@rU*YfU8?sAx z%uh5F!~xjofV<H|_lmg-XZ9Xbf}dE=+9l2CDFTR$_L_8%=soCD#0YKDLGLlEJoLe9 zo}sBig_KD}@!O&({_0yplGMFTzN#qm*yO8E`6l*4?tWCna)$bzu``=_^#{PqR5JB+ z>^h96SzOxNqroY|W1G9pTa^q?nNuz5?@IDE8`_-Os-f4&ft~EpDb696cLzVpm>s;& zdja0<8v~RVIVi9dVVrM4m&J4G5na>%P(QNjS9Q;UtO|Wa&xEgWhNF#dvs@Deaf-y? zr_uZk;THy3GVJ;XT;n@3QGH25r#8V99HuLXkt^->S*@>Yp`r6)uHQ17Wr5XfVmbS{ zNyZ=VFRiUJ*^AJ;0!<v7b<oE|lJ5B5;Ub}J5k}@`ZiC*HTF-rkU(dV;6_>+*W-nm; zZ@0jB-<k9`eHmio;D^+nM}?7DE^9}SRALMqX!~^b>SH{MGD(0M+QoBdHFnh^6!F}2 z!Z?FM8aReuM2wVaFa>=#xU_p{-2?h+_y%@IzUCICg)*#Np*5CHeW?zf;thQWui_w` z12|99Ny8pg*GV2hS#JJ-X90&gd77lYgefl3U+sLjX*+!xtfk=ANm)a|E##`7*I7I| z%u#<|d28|_#%Q|I4Lt2G4cCKDyF0@5kanyL*E61Wzx0gzs<atxG$sS<EN#8x<J4(h z*(ac%p>^6F`j~jk&rRl^Tg=Zw+Lrv=CiBnhoZr_r;I5dgFkf70W3(K`<y=O_f3fNQ z@0lLm*UWycS^X_olfQa-^6Id^s)=F!`u55@+vdocBuyy$dl1E}t3;K4IMd?tC1iuv z3mWk&0@yqsto=DSfh-nuBjx}D9PtcX3eTqUQ861#(IS~bwBZ_fvrZ68`Op=^$Gl7% z+7a5<&aMn>!vljYg!fGTvz3{9v$aCxGkb35Jr2OLc6MLdVlsoRge>FVQHPqItsU9G zY-VAmHI?VA-xev4$=BW4xu<J$SMi>9!6&+*RrwLa#uRz~^ypQ74EJm9=N7dAdY_K% ze%(Xcn)>CKm|yd-d$Zl<{&t{kA_+B}732O;IvKjW>4@vTOwb*47bp|XH{KrYNs(qh zMcE``$T)^8&Y8+FWN8_(VqpjpFtLE5dy2Q-1V6O#m6943o|i2<INYrMu_qCl`Hc84 zZ<g$9dV%-9D}>A2o%{SeXs_`86ty+bh}L<&Jd`l9;L(ZtyMxcEFJ-<Kvxia-a7ex~ z&j+4UPO7usnyq0d?n%-Oexj%6ak$(^M%g;zStl#@nBGnI6rT>Bouqg3F(J!(ZOq%f zJLO9$6YVh?PE`N$^1#{KCgqVnU;Zy=eZUxmqXW+RI2+z~foUGe93EqlAhMusa(a_j zg2XOwrk!+eK0}7*_tjzA=al77!sY&T*P@^5zwkQD7ab8TuuaT;8Q}I_X}@xk(3}(H z%7M<8Y1^B7e>XOI^;Tbbw;f_TRhp&pMH=c_kES$DS&4qoRB|jxb7XC~P))H)Y~Jc; z74Ac=B*Mtma?0z|Yv|U#V3nh&zw(U>cfm_<ku`*6RDa-?QKhs;^yS}6O);Zx8jeoB zX|HJRYxm$$8F2rvOy~Yj-mE;r7O(Xu3A!;dFfv1$&PlR5XR~CUSm6V1QVzn60&;x2 zS^a;ljM_~3(5>`7bd!P)*?Sy=<Np**%kR}bcsa1tE1EWyZ6NabkH$|8IV{=*j?XXc zMAz@ohO)J(^gA?Qsy$Vr{iBRdn2dv-6nRM}N@z4b@DpU6;2({@TI%7}N`<YiZh456 z{ZYo4N89Y)cd%Q&0|^dxRq*7IL~h<MZy(}daAc%fzh;*y%V!dr<)utydU#R0yp%ar zouO@=%26?rGplZ{3S7yJ4$4k#R8hY!hcm1qLvK)y?Tt~?t0QEYykGv@WYK?^brwEJ z!0xZ>EFP>uJ_Hr7tn_oLP;r~H?EAhN5694&S^3rJ`G6dqM<$<ZovhMut;>l2Off3y z))`B&JE_^8!PuQRRB{*eTzh6pcSTMVR@r=2_IT1bzXAAU<+Es<<~}{wu>x4}OzV%Y zV)qY1#V4ua=aY)Hn%S7U|GYU=tQl2bv31mJk`yT`Nt#R2$+@I?B*{O#ZHs-!4X}gz z;(fL^Ga*_1%8<j&+C{r+i?+=XuX<-2jBjC15f2P+Qn`Osp5%-6&XL_(3^FUEi#I;+ zif?FHiZx;KZ&Js2rU>*x4>(HzKcpT4WV1CY^=@f5_#JfiZs_<_dNTYXmAi{`MYM}E zonJzJE!q^zFr4?$9Ygu)JTNq<Y~Cr<7iNdJ??&d2azN)fQ+TJfr_;P+>wG2cwfCk! zCkcPE{yMSw)Q{`@<05?@F@8R)6HnfKu3q3jb=iV!hD}*L+yg_cwvA!gyz|j0PQ>=Q zhRSqcd&Nh0vA@gz>7eUCfKBMf9?>t)8_lu}xB+=oL)t{QQrp7z$}0yq4ZO1r;Z8>{ z=)?xmiM*Y#@>}2ouoz^sV4n-}*L3WJQ_%+S&S1X%I&u2+c-ANL9r$7eA6Mq6()H%L zoji~c&|Q~gDIxw6_)t8Kz2}_NzSD<|%WDXwrpb6N#<oh5v7XAOXZAsFOBMrAti**G zW$(?H-J>zf`vqI9e4}CQqU9TnHQH`|E$8UN+RqW?BU|m4??T?!AkG&7D>f&yMf5g$ zBhddTFNrk$PI)4P(s(2PUfSQEq;dI7>$rS{K7cM*to%5e75m1<;sWJqKNfMm&Su1H z_Xt)IJgbsJPsZqjHrCyaOXTr3gGT(H{lXk}GsNbT9-pM~c%*ea9--fjewFX5m*NL{ zM*A@dd+$vj50Hn9SBD5ve?8!Te`|lgL4OCj^n{=)je`;5J{57{s*e3$=5L3Tm(B!r zAEUEd965b*%+?p`GMr(JkwpWY{#YWr6^|}?%&3%?9E<6NOz?%)aeRU?f`3BC(tROQ zd?8+4dwj9CmS=C5aTDt3c03}@GXI+Py)OFuMmcZ)xb^#&Tl&5F0DVF`>386Z8P9fm zZKh*!p5B>yELuxkDrpJIPfVT=cdy$qK}I*aW@EChLwl9gANpiJKHTuFfzv^wi3(F3 zSLDf%C$A6M82^Nxb1+|s>=xv6pP2p0aBKJQN^CV+{52`RX=c!Ewh0Bz_IasJ)|g7> zYA##ITEEiX&k#uBvl#+eNmP=ehihIyvkaOEz)>j`234=*!AU<MT!}ECd&JcZOHoEx zi!ySu?j-SRjX6mRM;6O3+#1~ry#85rcHYOj`d{dC&ajsc*WLQwknditk7l2C^KMLK zOq=s3kHJLV2PcKqbCst(tmdOBE%#7SMm?sMd9XEFTW(jpvOHw*-N>gV#};XN9@0Xe z1vum$o<5aL{1oNM_eFR01d2;N*rzv0E<2#PRebHX>pS8OsyAo;T%T1h#W+pzyRchq z)Eh{6BU+&hKYna-rLv0ldNchL^k(ai)ElI`d4F^%cqRwB6m5r&6c5=;!BJtN%!FE6 zT$MxLpd3&8-xSWs=r-sMzM7#xPxRg25Dws*8|`A1QQBtkXfO+nv2hCWS<ry(I~eOU z#%IiRhx+nP|E=_Snx|bHP-XLNfuH63Jnt`@+Of@lEslx#UWWWe2dSTfzUSLGi^nk$ z6?MOMJ(79$$F9%!d6uac^yb^@>w;~ekG|$aietYbt{Dr>yZVFc*1ib+A7&z=P5+b9 z7w@(9g`dML_62-zb-}Wg_D$-q6KPeab)lc!KKpS?pH+Pf;bNab6IY9(<#hm?+1V>f zn8s5~`w}x+9_Ko*=uPK}Qkx<4qTRevr}-^t<o~R9IfCzIsk|a&L@@EBQgcLAkxK3R zA;e|E#8$hXaRxaC+~-3kCYLVKjePZOvPl97%gwY;%lB2^jPSyz!V5F?!ga|DTDq6L zpvfT#4r`s}YQ*TW-x)u416iG#VwtCK5VCq@e*dD|r_RyNAd+!zIm*<@lF6x)cW%-q zB1%~`IW_VlQhF-q{Aa<<oE(ksn+?n`7J=?Oq7e&zg!?l(l=1-Rr}2QP*I7Y>q93)< zG<aRNa}OfXSzVoN_ua@Ce5b9zvUUKQrZL~6_O$LxfQ)S4IrVxY_)J*I1RhZr^4*w9 zj#fWQhmO~El862&u18v=wCUROQ@`poQedYDIjR3tkymh^`VL^HGaE&)fIXYV5{t2m z$P?xn@Cjx989aVp=^PXD`~2FSZT>F*C+xYZXcNLSVegN95NHrr3WP9Kd|1LzpTbyZ z6Eq1z15!nVg{U7{hVbfOcvZ@WCXIb$XjbJ)15qq3mad*^={RV|bTVt<?d<n(WyBLw z85ddFoXIpPKyz2RdD3LoxCJYTKCKq`1^RMGin-)3C4~3d%6EOxJ$XKk^u2xCz+2-Z zr%R9FE_>jgyt{3I=|H;h%UxMDF(;@+L~_pSMB0fcTVdJ@S%gj8=jLg`WL)J`z6M`R zzAk!}7%T(NfrfAmoMR*9x*NF=*(S^lTFlg~lEEI-+J*I!%dH&jj+Un=HEva&b>dm; zrFF&p2FLlmA4LMC)7kE<w9RCC)(^FM$ncyp(kG-b-`UyfVC|*PZdb{z`o2AfMr;zj z{jBH&S{FJx<r}><`#1YswATTH?WomW5o{Fn{dCr>@NGu-+Sw|sjkFW#({?Vh@oq<l zfEZdxYsaJsa22F-_QV)^!`^2sit<8`aLecmV-sjjn1c)VJlmu81wVfH7Bp-si4dCg zXUfYlF~8sY)I4stxxa<EOHT{@3c{+UE}>USK`c<j5ARkjVxmpnaHaNHi5n%tCTD5_ z4EU&j{S{WiODwT8Tuela<fJkqE5|%K%8K_-lv(zg{E`#B&Bkz<H%JnaFgDHmaq3;| zEjNGdq^pY-sHiacU3!m8<d@8Un`nQBn|;Ii>DMIq-`s;QL$P+v$UHf4=#F0CVI_#% zB2~)$?Vedz_kzBy5ug@io}U4Bk&U+s8h~}^)=ptLa*xrt0G)x88O(Q@-$kwo^TOfn z0F%@g;F4?3>Cjf_1bATaH)C8nXr{^De8;FLU%QwoNFoPh;YcHRSv$ZhqpA7W_UZQo z91PzRX?6R#X=I{wPML28zdQM%M?aEuZ3l7m!|ou~=2Lt*-D`Q&O&<o{k@~_Y*^dXZ zW_ZrJ?J^&D^1|1kB|$&hE~<i5ME~clVPl#Xi269NQ>1P1N9fdcafq-RK^dJhnR%b! z6lsyYUu-`szKOU@#W*<u)_9(m=gkHZ>_*TxzI%tx;^FC=%pVzH^OQ+9(zjR^{dbOu zGL@}~mfSQj@WH<lk?Ln9v;;NW<ziS7J^URJ6{w&0>61gp42g9JWit;stvs#W<n#Bb z5(Kc>eyyAcm_)5U6g@>>)%!Oq6Yk@(EvrpKAB?fqL;;Mj8T&2A$Lme^bJ>ju&ErHm zy7;wb-+}Fw-}gH?&OUhY!EwbGA^+l&S%@;yw|kZkA_6hP?|b)5z4-_kjx_tem~~Ju zXcC6CyuG>h3@~~;G%3nudF&6e7cgL$(tb@gGD6DpixM7fOKD&9!8Y9CSxn3OWw)a* zq?gqLZUs3q%p?bR9urf=GRs^kZK90gY&GeNb=o%vOKzaZM&rXwCEpzO+U7l@Pp0Xl z^Oo%X%yZ~Yq&n%0Z65Ojz2qHeWlAIRqh$RD-2+cMtzlOdPkT&WWuKAY=^cCC@7wl< zWDezJOi~@rJoC(#x2Vg7XV9Yb9s0MJ7x_p!nLmiBz&BzqDjq?nGf60?${9`Zs+*>T zaP#s~QB_)#<O~qeM-t9mNF%ZudVzm`SB=iwU#s2@!naI^FBf$Q`rO8mowP<|@n+7@ z4){hob_Pdr?C|GC4*oF5&gA8&von^DX6<8MkoI4Z-KRg(9ZPB2icarCqlzE+2v6Fb z2~RMY(q?$RAW_$n21C-2@(BP+#@}nnZ*L>a^!RK^mqe6)CHw1}*$bHXB@KRlePH!^ z;Gq{Vu|XXAfHa=i^Hy$ZSL>DrM~KPOS<oY;;bpQOGFg1zcb%sx)E(p*gUht7V}i^N zA2xx-Rn{cwT}D?*_jr_0AR(aAEnNW?r+_P8YcF7ET)>i#wOje~UceCYUn>m3;f*Jx z<5wo>*F;sIEyx1L!xw;?rv$xW@7iwoL>aBQRpoF%Yv`Br{ayY~ceF+jAX6c#a~3c& z<04*l#yz-<j!ZHX5ftg4R&OuH{fIuMKs$zxXWZjB=dqWvcouZ06g&9}cndN_z+r=d zqI3msIWaf@c9>ZY@#?1|H%tW&@Vyg)2T_Cs9<-n|Gw+(a_(uv4@3z20<(=b&hfZS- z2<OK<4;g8k-Q&Yq;)St$dA?j|^@FOLgZVk=!^QqC|0ls^uSr%1-Bm`uvGXg*1chMb zXVOlI8aY3dsDS8&!gV%n(i0`?jXu9ela~`D6)s$Ex|_)dptx-7iX*_44C=l?y}<E* zr2)*-_NtFt3*4sm<aRP3<Il5JI&QK6<FhW)*5SeACoQ!->(=9XYG>_sMdrs1_dmtQ z=m@;vBD>A~P2eXpLrgONM29eGU=sH=4Lqq-h#drgQJkqs`rmqy0~gIe$#%78@6OfB zmoI;EZ2$7Tdv+|}wP*j%U5`Jrbj7k&%dT9teB|-Ro_KuU&V2{QmhT(8ZTr5_y*u}B z*}4CzJtI4pJql<34;sL{j$d8Gm~x(oj?oS#(m8vqnIVEokqe~o6m;K@8*JRJKH~VW zVIyM=t_#?BXB&nx9ld~!0TIlCyr9|96Ne4-^?RiSU`ap*V66fN@<B>7Oh=s>GCpo_ z@lnzYuQPnaG~+bEMS*7Y1TM_(092G=zrhDKvmi?teB@=&vNul@K6<5Bq;Nr*C&Wuq zy<#PyPZZB26D8p#e-&_Xc?(=rjvWuZK!-5-BR{s3Rg`0<3p4oiglG-<((|%oYD>U& zU9>L-ouUXEWwuCoVXBW5ZIhHS9UFp%K9MVI=n+RX*}$-u=@4FU2*$}?@P-@J=z?u> z(l>NEa>I1Sn!Zi#me{X3;2SAjKrTHXPlf1LZFBkg@dlQny{Ok?%$TP(YQ}s6jn#p? z!1L+ok!52Jx|?d^ZJ3$OvfmphJKHB`$uQ}g(i1shqhO&RC-mH|P{jMFqom_(vI)<k z{V>`e`QoCCk<x>rq>)mDZs`Gar??*I#PQGt=-pW~x^Q%-Z<u<KqYEXfMUF72o?g&~ zZ9Sq5#WC-M|A@UoE=cu?bPQ8`XPi>}4CB;^4is^^+cDjyx;O&f_hRlsw0_WCE<IDj zoN@j@3M>&P9nptiX>3Oi#1q)%O^$zl;({yb5EH(=y?}*%t+e5Z<B<u9u)z4GydcbB zQ8v%o*)JHgcDlzRJu8EuR+*ByhUgF04wj1W0<X)<5w=1b-tbjD<6usKHs0y)^6NfI z@jkO6c*6rO4<pCE;|E?~;oTs-gQ+qZJYZ+goEJg!E>lK<2jYXzC<iMKO$5#q)MPGI zKK7pS$UQ>-3*Yr2@Z`>5xBoEnAI;B$j@S2wXz>BCsuT6A(=>tD>&^bJjL2u<twYWJ zFLQCE+5a>4(Y=7XpA_8X{i&+;Uceplrp=mel>WLyk_Ia+4f-g5P^ZZsc|V3I=cE+L z_8KpPNy_SGz8!uRVtP?`%6qWy@VtypDcL`>UwOdjB7K*14&H|*vge@T6#J=;YQ`9U z9uCb8zF~4X_2WN@m-;64!hYRTcUWf^)~x~W_)l=Kz6sps-Qqz!c}<~dQQ42Y!0UCI zk(wNfEoU#_<QD}e`Tgu2ZZCcw;{kc~uG83V62%B>YI(*y7GuoHM)PvosXVb)LY~_M zA^2O-Q{^!-21IBpx6mKIq%!G)iTS5{KZR>_%|ZW%<Jfb~ebJq!UYT6@DzvZSa{gdN zac3GV6;Y27LSGLWez|LdXqa>4j`U#dA)h$!!P*UEpWko`*1D4#ZsA(DsNqh2=;0e< z@+m%fu}^-e;ZA*MmFw3;xXL+QudBj`DeOge8b<EJYhJ4yx(FQJHT&=-UvuBO?Ayy; z!L{-g|M$p>-yeVFt?{Gdue`f$bmGvOk=pOWYwX}VySHIJvG>W{d-iSE`=qyC(l_Vn z<Tu-2`JOO#_%Z{Bthi>R4hTzmrs4M94z@x%+O$~%OKxmY<hwv8azrX4tai)w54hf` zUo4ja55{y~1})39U(1+sT0Owc6M}{(RmL8*>1O|zh#;)>wD!SEj7Q+v6FiFSeds~@ zeqHp3cVh{b4_RnL^<YUE(>hbW0^jOAdK);VPxwaW^@FeE5?x>Eu5zpNZ-p>+h2Cbb zqZLZMQdd_i{R*8+wZrlXmAFG!J9NLpU8m<)D0NhIjOf`aU$)VL&<1L;wsnp%kbWKI z=f5uaibG3-Cpq{xqOS_y!LzcF;Cp#i#M{k!lV^<0RO^4CS=+M`4(R(?JMyf@Zmu6u zub_8Enr`dXcIpk_>RDe8_RaJwp^c0n6rwKM#155L99P;0+!`EHlJ(`a`W;cdwhDNs z^nc(Jxcr>jiN7as8G6dzUY@I+=V@zL;~iR)ht6dx2WSdyN$1%~V_joflEE-vgN?u4 zm)Un**YoeV%lApBz5Gk8Zf4%Ls^6dR{q&fw^P?7G=<to5_#n?0>MX)nd%kIOYbu(c zB0YbFM}V&!@JtTqUhz04dK``up{<wrLeh2Cq0|Mxqnf`)dwx$zG-YD`62E`OLs^!T zmmkx{*U!6}=UnGMhofypQs#?7Hh<OkqGVBj)vr|sK5Ck0XhX1~nGL^8puwiVk~y_< zQC_rSYpiQhuw^l#UuK)%g%988e;0Y4B$m~5mCrZaDK|CTVx6bzJWc26I?vE~rp~jP zuG(;CH(jma&S|>7hO0MSf5V-tXXlC6&8T`VH}vpBFS_$LJN4<eE<AXo>ArHLa_GX5 z+KP(&aaU9hUy|{>%f$1RetWsGJMlcNoIJX%w)3<jt6slh!XJlkJ#zPvok#Yoj2Cu( zQER2fkIJd{YXdKhXMF}Pch3j+jct5fjPUk-yB^mx9&m8EPJS~!==}tNmvw??U=!Nc zjwj}6wZ)9$9edx_)bl>HA-`W&qz5tTh~X9T<VV3%!AbndSmkM4^>*E}n#S7EiJ$VU z-Fw~g&<j;Y`*lyODz#QE6%|ApH2$$)bT>W=E$)WDF(!f6QTOM?dv}R%!?CY+*J!kt ziXZRP^)6jqt*3BhxHc<_Ms;<KIQCVZ<80UU6>8D7k|%e%=RBO`VIlJE<K?S}>gMm) z+S9-o{ak#$Nv%N_3H?I8Zum3uk#@P!o3_?r)O|`?3$g0Lu6YI%=p^i{2melEmg1)Z z<m}g2ZIP6=L%*y<!8Wu}&u9lQ^N7+8s1EFfc$)?Jj&f~35@I84SGxH}nEqwb*weoJ zQC}AI74yS^(J4pujQYq!oKtvjc(<5`eBdT+<(e@B+74*skxI}5Ne3s3d-oz&AS;@j zZ28E$TP@q8R&dQXBSqxpX(j4_=5)eApXm+Cm_GkH5t?|JuQ<oQe#R$de}=L)@qHYD zr-EO_<Jhp`L1u|3(xz1^gBC?PUHM0`u0ikn$odWXn>9Fj2sIqoo~=tPgHUjk_lnSI z<=rbdK*|h|8R}urw-mZUJ;nSH>cB<YD=vL6K4+{~D-Q?#3Ot_b@A7|+4d3IWF37J+ z6I!cSBrVUWRYa}6$JJIzFwn1d;FV$O9@j4gl;43>ZUCM0Teppm_D!_>_Z6JT7~QH8 z^6_P=eqQUZ6U~UD5a++34cilL$QbVt6(CwK`fd?Q7~_$wAjX*YnS(1H#OnG!i3@LW zr@m)vO)I+A680+TRc%Sxf3r3Rtkktn<$JD1V$BlYbA4-F|HAd|R1&jm<>~XcmS<hR zY>@Aazca2~DS!Kc@9EFOf8?)s=oK9&0t<KReb)UZ`1&>IMLSsNHE)=T7x8`Zi1z5> zSTa@*Wf=oLqN@~-bgXVm#_IaXvAV@wF*!uHxFwTA;m5Y0Vd=NA9pIYnMm4q!k&O}K z6vhexO~;9h&rZEx7$5I%&~AJ_iTvGnlKudL@GOoZ&t`n@wMU}2wuj((*?s!cW`9oE z`!zlAo*Q`24Jtgudv3;iZsvP#)_ZIUIA{yNrGZJ)(hdbaq|AG6-YPebCk(Cau^EHm zy)*vGt}_mQP6j|??e7{mEalH1Co<OiRYJj@|2=RKejRk23w7OVSsXezowx*3$-A^U zmDT<_!7ATIe@$ga>sIEcyda0_(&IoU8;pmBH{yIkkXfgii$HJSfHv0j3;iq}aV|nQ z0MEg`on<-^xc<8;qcH#QFyGxt-=dF;cBbO|18oc6A8p`D^vA5fP;YL7ZhT$$jK{?M z0e6;u*X!h<AHtE@aGrPl!sO>z5ZA_rGw`B>H2*Z)$X9*E^u){uD@_bH#Gq<;JB~Nv z$fm;#gtzHvr>sSX+{wYFb4q5@S)AE)PSpcULZ``&vrcxLhaT3f#F?_x%&NLKWt%zp z)}hogW9FGlGxN;lGS4jg=8;=d`^+~-WS@EEkG3@?4&Cv!>bLF+--<1AI(C?Q_CI^i z<LmZ5K9>1YL#G*^C^Pi=`J|LiF}5F;Eyn8EKdA@W90s#>Sf)+CgMa*0*=zXrdn8dl ztG|z{7tlP>OMrP`w%yzZIz&FAy?x6`N@tINVtI9G@Mt?viQ0~2<pby4%!{0-eC_#2 zu&kq5@72HMS^c&WJABXa*>adsVLoN0{_T?Wh8dV^Wrr|Z&PvΜ5&)TwE{pc}JE1 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Ξd@yh@~UqgfR&WGHN!y>E@Vbee0d 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𝔚*-dI>vav#$1;fqV|BRYRn$8SY$e93(*a;+uz z@yJamxlcrHV#)n><R+EeCnGnx<aR}FO3D3B<ffL~Baxd{a{ZB;UUHv`++ij6X?Y;| zO(gq8{q8e9FY+sgh3<E6EJW_Kl6y3Ar<dICMedA}`)uUSEV<7`ZcfR4K5}zQ?mtBC ztdjeJCAQH0zAx<;Rl@(M<4a3R?ho4CmrL#|y8A;Ne-ycM9w@ni$esHRo%G}}9gpkS ztz%Hf6FQ!Z+<A)iROIF<)>C@2Cvx-k<mt#Q(37W^l-wUH?Y(-lPsdkvJfq`T9s70s zN#xE~?5{=c0>#$p!jgL~atllDPa}6x$^BX6+Dq=wBPWPHAGu3P?uE$dyB8z3xa3}n zoYH?ea?0VA$So_muSafq$$cYoD@yL0k-N0yz7@I4O77Ljt@MDn+ymkY0U~l&mfW`^ zx2oj66S=EO?z@q@T4niO<gQU!bXu*uzlhu#o&KN5t<^)F*6Hs1k-Ju>A4Kjto&Hkg zIS{$)b@{`{-JsKtB6p)s8dBY)(|?LwNvEGg?q;3-Dsper>8Fu<yH0-{x%E07j9iCK ze-pV*o&Iy=Hh64yc|3NP+<%GOMo&aNdi}G2!v6~1Z_$&VM{cuD|8L}ORjly(Z*MHf z_NwImPUZW1!Rfz6ZcEAiL*%xW+&@NcTgm<R$lYFY|DWFfQ{?U_xqpt_ohA1#k=tH! z|08lcO70ht+gWn|Gjey8+`mTd?vndok-Mkl{w;F%mfZi2+<hhYe<F8($-Nf22TBFC zh<B6<Dpqf)&=9%4QlS{R2TO&<$VH_>Q{>)RDl|v#U8O=x<lbE>jEUTPN`<kJ`we|O zE^-g)G(K|gRU$e)Tq?9i?tP`ggvh<WRG1jK4}|(r^$(T`lOy+=rNWfReW+BJ8o3Xb z3ezI@ky2s$P5p&QtJ@2Q_ZJRZ?TGwaKJv#(g(D;P@ls(%<UUa<9HnSS&@=5R%xW(j zEdi{*psu5EY=1$0M&Y>rLfdLS{_RrXctxG<Z$4QnoEW)XrNT*(`<+tZ<j6fzDx9L% zCnzWJ_QGl6FNITAFYPa!&VHfA-Mja;?A|+Wx5C~j{&xnK$L`)c+uxm{n=^LrJ!|*g z^Y$*-yKry&-bH(t>|L?<^1WB?-h1`#z1Qw7?S0$sy&a0Saqn$=x9+`j?~c89>FxnO z9~jV;U=?5LUU$26Jo-%Jp40KY@9&8U{jbR??xelZgui?y8hg>+XyR%gUl;42i6%z7 z2c9YHDRvdTD~0%HUyJvxuy5Sig~4-@|9w;Z<Jj@SxrKc*Qt$U2Yv0Vy#W{t6x}IfD z`_9PTo@L*jcTQp70;Ri9=XRYJ{ot&^z9qU?q2qELS6aNQ?R4$#mj|AlR~Xz=(yO=G zvkre!5%+D}{ldU2`a7?%?>60T)p4he9XjqRM|vP!QK^A}aJNrT4cDp1{!;ID?f&M# zw+6m(iX26V={>5_M(*=$06Q=s`&r$5Ib1v*F7||rXY|E$DnsO6*wrLn`E}iY?_8(* zzuMKJ6m<LdyT;hX|JgP6>8Q}4&1J{wJa*uTLBhZ@QQ>$Ur|MX!V}*_@b*$ELosOHI z9C&im%_>>p&RvJ=yL)uix9bR9J*2A-?K)CdABQkh{9QA2^LgETY1dJ@`u4!CnL7Os zJ^0_dW<4D>jM)=4Oy701u8!5!NxP2G)f`>T-*v36+I6*TSDUV`)YZCO$LZ=OU3Kr8 zt*cvgwPV-uy86G=y$O_E$9dm*U+)0Av2P@}Jb?QGfE$_wA(CifBP0MM*x*hR-FWB* zA%Y-{21U}coVJH!dwgO?UNoU?*<lhLFLNxP2GJxzn<9~Las-H?B#_C(V?`QUfyc2< zX5y3MGx7KwNAv&HcfYQ>_r2F>@X@yB0=M72Rds9q>f7q8uYOifpMUxCWBU2cm#+wI zYx}L2uT;$MDd;ONU!|u%(bHeNe6^nbQirE>ynKyL+r50^H8r;VI^8$ue&F>9UZ2zb z`2#oTn3aE_loK!CsFdHFP*M%gWca6adU$8N{rkHAi-m>1Z%j<QGv3jysE)b17lkkK zk3s?kUZeY#x5qnvME8&C{zcutru*N#J>EI0`}cKgDs}$V+v8oTRo7j*x9Pr5_s_gN z-u)Hb-+Oz!r&srFx(9WS>Hge1<30a_?*B>m&+Gmr-M_B;pXvS`-IJ<S&$o5|U#exO zXwQGs+kby&d{(FKS-SglU!c3HnY>Q-!@5<?S^G~7jaS}&Ykby|g20y#0Ee$xCI>E5 z=#LZnltN#7Jv3Nf{0rUx@7v?EZ`HkRQhy%T{YBl!b^q<#<8%6SZ`b{V?vrni_b$_Y zrEayjS0DA>sryCUpVR%*x_?#oZ|nZw-X8Dk);;f?@jg|x?-JepdRJBZRMozH2gb8+ zzct=>aAM+Bz5Wy3!d88+>;A^AngxA-#4ObBpS(Pt{o<SBeSdBV{~sk#z2;s`qPh3t zxn*=#GDTm#RUgfLTrE|$bDz}xwC?9_Wmc>8<Jqqt)6|+feu@JEZX}N{DDaDKj?evO z#`Ou^qX!R-+`e}0+ULfOtUYva-`dfGM@B}Ud13X<Yx>vR*uS>+%+t?4b9m(N(Xq9M z#|B4+kJO$V969otgSC-0pB}5|`@8gqU$a-dzS^PZHr;NcgU;fk=rb%2^BK~uJn)Z) zr$+V=jp;p>b0j>IhV@mna`>(CG?b4W@%{3=G$`%MR#}hi&^zDHE5&VA9H-Q5lD+Z0 zdU{0hq(djNQz4rbw^!kt^}I{DG>(5rDW;3x6v`L~HqDLlA5eX%@vdO4Px<I}V)>l> z@ql7CNt1(JwB>P;e$9K-!}@xYYJjJyO~Ka`ZQ{(2y^5i3oAf>ydc#^w8Laz0tQfqX zm~Xb)RQXG%^0vC|)wf$z`u$3Ok8-tK_Nqs=E5^<iq0WQKi=9FDX+)lrHsAI_Z&o_1 zbA7%Kgq-hJo{dWIzQ9}Ok-FT`pjy5QW>jBG3w)I8Nluh?VO>74e%6x?O?xFw-!Rn^ zeA}tp`f+rsAJIJ(+vWWk$6;YznsP}o?V`H0obA%cVm@taI&z;3qey-0^8#kJX+(Ev ztoLeE?^S!YYs4+DOZ1DkQO=KGPP)GqG**nc?M=5aAJH4WB(S%@meTjsGyb~;p?F5y ztC|4!z>q<<+4`p?Q%^LsuK#UjXGuEzT^9Sg*dFEtbLv6;ZdO{pVSKQ`jkN}&xEBnw z2RT<i4JbG8gy-2?mnW7MwsU?a^<;((gpr7O*4H!j{AcxCta7Jo{|>dCx{@pPV7?aH z?p82ykN>&)w1{n*^=U2O7<!f!n#O$)cYiQOj}}^D`GUKB&BXks(g$0T(Tn9zmmB2+ zhsC~%UjX$$P8!cQls|ncE5Cjm;#Y$jTPPD_u_^o1)HpOx5!;^D2Mi1?7|<+wSWxZw zRchk880yX(YW6)8h5a_9gC@kBJ;v$)Tw7U@raI=~+jiYAXzm=+FYn;wa(nB)w6uH+ zhOgz{(uY`#KPrlAl!3Fa>;$<-RbSe_C8T&Hl(k&x!6D2YVv8rv(Nm6Fir+B@((k|x z_p8>H+Umyq2SY*OW546kafjZ))tqvN$45(lfqs204Nq%Ni;KZ#X{~w(d-|I2;^AzA za4Fo)NY*beYS-uA(vJE*i>24^j2aB>r@z+(EM`8x?fuy>H+Z)9Piy_>KzN2$t;u*F zQHaGe_F(>p)GBZ?&x3iK@goCjBYo?AK|e7X_C2_Q-rcHkz}_DW53Z+28AZcu^zIhL z**DN)IEZ`IGq>sAI%z9c=jTfsKatX|yOkR}65O19zgE9s0jLt^Nty4u1A;*;P_f@% z8=kQhz$4n)(Bn?Aif?Pw8>xp{sMc6s4zPc>+5ukPthS^zp>MBgSP%Ej4HbmOl<N}X zrz@Me+XyG^RbAk3ZxkOw9WK{h^x-$G-dq#l?P-<0I<($SbXu$a;R$>iap_v+wMMzE z4f&nBTssH+<0|*Yyj<X@S$hYB>wwDp!d#E=2^_T6cIfk%`s#?rDxTJAJwnYQy#3vk zL(f||;J?OwV3Y$)xJ!LNZ!q@OXEvgP$%x|Fx4u<Y#yovjPis@CvUJxeU9rtG^9|Xr z))e{0;(YVAf?pfeqrRn9ALe4(##GjzFX%hN&M8%WK%DKi06XBNPX?T`EA$<Ft=SBf z?R^bnBVQiSKYG$Ffyc7zggvoUJRI_%4fSQFxa%I_yhx|PwXDdq2W)NV-AFf)2g-Rh zf(6=oh3;l`Z#2UjL-}<Dx=r2Sl<!lG!Q05bE(5?feImOnPhTzV1-K(ym1B@qN^_^I zv8W@u0`v|%!=F_1ufaWh;b~UoX^_3sG`FjlEv4mwo?xwV=R5ixynL^y7IdXvj&%BL z-vaYRm|Ua0BL-Zfc=83tqU2{(%_w5zoj+Una*uL3A{sQ7eJ;tv;Cip>w>9txn?&uH zyWSViNIF73s_BM8d7Jz@BtJh<2$~c57~2s;dT1y-#nZywocnG&kDd#8fx|s7a3&NC zEkT@HhCkrd8m05{q57MZhVp>VMrj+h(eM&fDlNTP&szS=l>fbIb@3Z||Gv-z@SNyE z(9RILEw2}CsQ(Twk~9zKm-%mHz-QH`y*K3FtQ6YbxIN`Ej62<$mj(P^n?IwoIp1<U zH_GqS4HRq*{F1e0MZ-L&>o3pIzDKsKuM_<Xw`FpH(WCO10GYrP7?tvvCl61-aDAR> zdf*|B2QXEiKGwl&Odl}+@jlFR<8e&OiS<hJU`%e*O&*QmEzQI0>N(hVjo}SU?X#4b zZfPUj(5HjySu`JL9Fei$DC7JX%)fyym1VXfcTFxPt+~uYZud*W;W&o*zgPdj`?jZb zM7@s31hbSRjy^z_dO-ErC;T-itnPAHR|wxO>|&v$1&1F{$;k7gNjP}ufaYc7#_v}O zlQ-zAVq3sK+d{j`@)NlC+VHQcZz68KT~vYckrnN0>s!*h=EA*Dz}bS2Ne?|U&K|o( zKXuQ(C2p@;3+_Fn*5lXcDTR4EiNkZm;gFx<XWB`)@A0ISzL$o6WN&xWC|O<>4*x)} zae}3VGxxB^qpmM%4wWrfsRwENq!+UeqeL`f#*vT)S;^Bt_lqg4ENCBTHmiIr{0216 z!=gKA+09?HrDLo}$4JJOlOu8r^~ZmtrKRs}KThMilUHiHx=CNNQ_J+ER%+T8X<GEv zNP0)~4_`L4lfI{J<=UiimN)(?>7Tgw%ln7cKbMEwxLCVVxHldsj-v5n)@I<}G<x^x z7q6I4hq}=hd-Ir`s^yQVm1#U<WPOFr?>>EnuWsK568qE7gQ1O#jq{v7&e0Eq+s->T zYkAn5hpR!B0kRLOE+fJ;&lLDxcqhC$H%hlfU!eyDl6|bf1zYs)x>D*x7;UBuv>Aj! zqrf-@WmYGfXCAgku#T*f#xYv->b)xAkm4;)KS|#<=3Xfi*e=dHTATWtv3#t)cKQG< zjP(UO5@P9qTOS9<bo3Lo+^>0RIvh)DFvK1?)AAn9^RRx1yMAL?MH~cNn2j(cyqM2B z{4s*3)ArkFx%R?5JQ?i4GdGU4@2xI-1$V%Ng;5_5;TgC#yvFWpX1e8V?PJD_h<2g< zx9_cw3>wYy8yvbrDeCu3+W6ot)?fgiy^ia^LWlA^4Y#K0Z01ov@F1mG-=||6(^xr; zU>ZFf{cCl1IIvck{@nV=LoA(*4cZ%amu%Jd@Y!4S7GcHaeK`$v+8*G`=40ddL5=re zwTSjvS%x93MfYkPigU&K+<L&rXdu8{Iy0^AHf~@&#)P?L;Wo|&T@J~y{Bk{=TG+Q% zemTv~0I8HvKj)uSn8C8O$@1|&;lzUU?4h(3)XCsF=CNJ9?<buRZ}o}s1A<b+y@Sfv zXNr{xkIDWtuMcVO4S48qfzKdct6wqgpy(kG1g`;?Ksxy1y$Tr?hJ7*QQjc>TT4KJ9 z;PaU&s3M(>9oWX#qO1+TXvDS_MjtiCj1~{9r`XB!k248KwX_BsX^hFLhQF=lks{eQ z<Od(=KDXh|?9JkRtdaNOI~rjL^6;|90&a-wlm-LP%I$(>+e5NhrTJX;`DgJ){h1q% z-wmhO=@==jQKsc>zQIzAGNw4<xgCT1yJK(O$(zx1NK0`t^)fE49;@>$u!C+1zcKJP zSTI2I$HKd5W_|XP9^Cf4(wV*oI%ITzpEOY^Pez>@aTw&m*rYUoKBsg>#%DU|z(wf{ z;yIqOVf|v`1&81qfzf}%)9A)%6ZK4IwWYCn1CLHTw3-r*YCduv3}rdhO?e8(J667p z9r_N&dcWwVdnL7ag9~65%v4_otEclF@#}QHdKthxlE5C7mC_MpN6w%3_?Qc@YLtz6 zQJyn~x2RXKX4Vr&L*I=kZ^i=I5ggN~9Zr#Ax%Q3mcGG{8&Y@!Zm}`{f414>$FgnXD zJFFJiTrKu+T6a#QVTb!*XjeT<xYTCfpkt&@eO%A=6@6szWOUK|lN?oPMSPu(tM$Lv zzns#kqSeRJI_KUDsx2*Z&r%k9gF2Fr#XYEggYP%_r<gL9X=$6&$8;>}%e-6kXqWmO zXtg}S!;RAo2)ZKwPG8nTrpp@C2Q1E<v$+Xvs84TYG6z#CmbR5Xp}(BMmE(YWz6CeY z>m$?f3f>psE$~M?%`nZ?>O`8NMM8ZV=r1dX;CAqy_o4A<)>_k+csx8#>}T6a=Pj#G z>GOId!JcI<su9lRJI8`NQ%@Vy0re8v1*-$$)cvUFWf~67E{59}0vq%jG?V$6_DD(> zY<)Ui*C^_s8fkT?=OW#WbUM{Q{|rB}dRtXGPoMTpN}C(?3%nicT+I0W%9D2N(#`rx z`Yn0G4?%UkR1Zsa4}{TIPl>9y6(SmN!qGqa^Obu3Y<6pQv$Top^~)OeuynJdDto;` zS8Hv5zu<_c^$NXNe_83iQFl%6H|Td%X>QWWcfVE+$e%fpmg}>aIB?_L8s%t%Rn(E$ zTcp%{0}UfTBmp1<DtR=t!20?M#W&yUTU;$EuHZE~t<CbZzT29Y#q51Cv<;fe8Y>(V za0Zn$t`I56<Z**(xOg8)%hPcQ+y>t;^MD2X%hOKsX6=LAr%Pk=C5|hz(>W;e0iV@W zzr%tYJ2jp8ZgpUupyMv;ZU?nawo~JBuOzL(P#5yB)%gL1*vizNJP+!5K%9h)#7NM1 zAd4_B;h4D4Pt#sn`ap;o4NwiGglh^ZPFlK7y$!2mk72(k_2go2G<gB@=|$MtSMbHD zifG<ds=@cbDD~!Q)lT?J%A@4}<t%;6&B!r+l=VdRxSp@gu9o$}kL&cnYZOM^(yQkr zV^Z`>OMASHY1*>`f@a*5R@{Yyd^E_P7T!=g-wkKWaO!3kTaV|}z)G#R^>>s<ao=&} z1=?wFY`8zwErLJ%Y{X0T+<fjmQ=mX@Zy9GdJM67bBi~WPj?}}-JHIo*^x4$)!`}bD zubP(nKlo||Mh*zWq-z&x->+1B^S)=69hJNV?s`h=&3Nl+j_+pL|IBGH-gf<Cz00@< z<Zb43ynfjGd{R{{_4!d?4ZPoIZ7A*cRZ7#m-=7Wm8~O<zH>xn!u;(dnru`1zX8rDR zB~%m~56@7%e%Sl|4^-V!-~VOo3s!AROF0s>3AX;0_P;RXH2qJ1`1fl=@A#YfvUSP| zML&Q1gA8QjP+w1@>f~z|bbvXG{fSvDY!huz=*g7s?Gco~<r)1q2@u@_9AI&NK|^j= zIxc)iLVw_=%GcTTY<8}QE^1eJ+xN2yXGCicWxMwIpU67R)3t&g5~X<%653-VltZ46 zof%pX_5cO~6a4plY&7+hD$1Fh^h@q5{7Z~GH=GjQJ$R;%XS&u(Ud$oBOJU?<y*Hnu z#a=ePB|WkC{Af}N6Y!{wN6+$v=A+f%JXUyFc%B2|y=<k=HN#4jUp|*<8yEZ#7ws-z zXElC)waWkeyO2>jR@q+@M7i*5tkPq(bU%Ug{7KWz!80JS!wq_C7$0yUx<d9j!O0`5 z0naNH$3?psLwNo21w7xK12o=4b#R3|Q3+<{y;SdqY4)-Af*<wMLl7ukt+xM9l}FKU zr}0G0xn_Lv`M@oGLO%fWzzmcE{V9Dw8C!%CpsCT4Q-QkZf6`#1%&xFj`W`&WHLd?4 z^?i;V*o2+6S+{S-Nj~^ws{cp3gf_l8)LujD(R%;?-^!yzBYux|x9d)ACq7C)l8@mE zTa#a`cN^0P)nyBO_WIl}dk-$g064Wh7U&hRUU?{_*hK<rd6N3uShB8cIL24PE$)2g z$+cvw%jXIFK>1>xXn4X*0q3{j_q^JjE%FH?lF*h9*s=HJg{@aeerm?FK4$-26)Me{ zFFHK`L(dt|f@_mqTg#k-OH0QK{%=?_GqoIH9EUZ=ah<@&6|HsA?gpH;O6j?#9jgJ2 zjbysr1K;JhvRm(x@pM{+#;9M;c!boB=@2;oZ#lL;MjZm);@Meky^Im<Ze%M2|AH?2 z#muB$($XJATLr^O;4Shf_lbh1=FFgGi|xSl(bz3KW+|X`j^8+U3mp~x`Q;FA{R!OP zlfS1w@|TS+K(H^lS-j2W?DI)TdkFc7Bt(cyX$~bJ2-%ynN0X4Q5OPlvB3IT*)1QRk zK5=t)c@i=!ge*)#<np>AM~VaDyynP@qR}hPAE@=dKJy=TQpYdm9G}30V(5ZaY25;K zdQsQW9$<p8H#;px)M%68O_RmJfyN87T9>W@8a$xWwD|k;d`xdr)+Pf}k%uzA2>sgA zK_@g8AkSwiY0-K_9z0rjMW3C6fv<W>=|~Snvh--{Oz-9%7K=4QR<>_q8F#BDtj(Ej ztBgBts!LzC`YL~6`NPIpo$gVMj;i<SYfs%5Po=YU;b;}sIDJajXm>qb+ZCh{tV+$+ z5>A5M)pjxeSR1RKr;H1$#7C!iKISVBXgIUjla5DCXKNA;bNL#j=K?o^FBtdo1s%I1 zt9+pFwjjDl9flT6r;%+4XZL76<tQ>c_VuCOI)#`%Y;{gtrj97`A8milc+lRI|ETKS zF<E(}Sq+H2W}JRCaKh2{(QQJ>J6)$Y91HBjIY)a-8(*`xq3q@|&b}}Q7_k?_6DN<s zVa6PhekpgZ?sMt1(|I3Z^6sPz=9ZN~n`5mFr&C5_m@;e6`tude4Nu^o;k<{<BGM%b zTmPpHv8U1Hn@z=jeFrT5lzzF8rK#Ty;jQ?m4i?4shBF%>GSysyu5QWtgzq<Go$Io$ zXS=gLK)2gtH)lO(vYtD2$ihVduptn;2To+OH=g12sWzR%uz=SyS#KV|Syg@E7=$^2 z4*<qN|Fdq%Cf^@w?>+vtiHY~-Uy$ig$Vr`gaG>W6{XIQ2+YT=X4QLhquMzwgdAasa zd{p>ngr5zNazHbpI4aHHe>%P%9spenRHvqYCT+&Cr=BUiGPXrrTjcLZ4?Zr|EauLN z95?BxS2NpbbPm(uf@1zvt@=cWT&Zu#zZnljTr<9_5s%i0pHmirzk;^a&qeI;>+PwL z_Ipld8G8Pi;(2&&__s#*z<6ow0!M>PbW~}nKRmbFqcb-(Q^EzEAiip^g}?DELnh<y zfdN}G(T`Zc4(<C;sQw48x>xi=AuBlQO{{e$FFV8GG*$VX*{6s6Xw}8F<&&p24l@d^ z(~u3CL&Y=LD&gGtX1E<VMNVXGvr*px1C7R-uv*X}z<VDJaKsz|-r!xZq=4%gPzXBX z7Zo=hEGs&|$wK|s!wJ4%m<_2VeLNe-aPqyH2k=a(6lF5=u=tJ<txA;R3<jc~bYOtF z#sv(hD}&xC1SEgX4g|R=3wTneW_wht_;0HUEXqk)SpS=DUIF*@{k2zGgYAlmKH;fk zD&H_xT;5LlqI@OiRdxpWl@DUzh^y7M?oeBc{J))_4m|D_j)n7Ww6}w@85eM8Y&ZBA zF46eaxI-es2;+*56dP2Bc23lz-S8*CFjmZ@GoI5{yy5DBV_?Gvnm*$K-<Pkm_@mDQ zTkWIWYG~<9vcDp0+RymK_Lup8Qk}c)=v3)9)+&zZ`G=|P57xK+f2CD+wFUYR<$&VM zHhj={&NGfaZa$9mXZbn{z~@)1<M?<eprF_OOV1mu2(3f@nJKM<QVi#?9%VDLeW(xL zskAQy`2G8C_Y?K){!gv6+vqr)zRy;J*&;s<#X0Z~(%!vw?X5gXdkF@w)kK@HIetp? z$ZQM;#iL?bG@@8R^GV~k3=WFBiGUC6RcxQgp{X2F`f6$F^G?$M|67$87w``bFztB= zn))N%R;9W*>y~Cv+T1>qj^TJDb8N}3R;={$h#aW7zWswmTe8JUnuoyzDXdd-=-7Kb zNDR_B>CoBJ5-9ZJg|s@aepDS>q#<n`;An1NtKj(#-ErR-8rAAK`m!1@BB`e9O}J?= zXZ0K-OC5k+q;a_V7o-gt)jQ$LW%zf~V0vj52W>yBI+)JhAqCw(wB6u}vBT#d*66I= z4l8G@qma9sO2#McTgo3+PhnF5T->U6F5rSV{JH_V+<u|++z`%Yk<7XBCB13PwLrYP z(kYSht0JC1m1U>0iq5oVT|jGQMCx3<QHhY@pq9x;|7AAu+m**YdrZ(!gZ^^03JX7> zN_MKI)HPq{{l~Ncoaa6kqkiq&{lvG_&8(e~{GJSb!hDJSZGH0tUEWX3WWSh?++4&1 z1MI|s1Bs)k8lE&AkIj3t83!|fD=f_Do9}L8tgcdCT#OZMgm3mb5YBb>C5@DwGOqc` z0Xy|$w6RlTqjAvzIgd|`i+$emnEZk&RFvl{hrD0QHb(R{`qt<3o}n$?ue6U@;}`FX z^B2<bt#NB^oge#@@`mLzY((57>EMCQ!qRxU9SY;3AK`!S3sAm*`63e3;+6s~I>eE` zWebO=rCkY&UsyP(-@~${4gi-5rcJzIZ&0A<uV6peJG_xDVYb}oUsQ(_b%-4s=>zT* zCsy^I_F2@Cn2a@+f&HolnG0O^qQZdR7qgWiPhgsTt9;eWUhfK}X|6M5hGBQIwn16G z)Apm=Nx&zY9>!z?W)+e`>Zb}m()z;si8k3czWYG|y41A+?wajSiaS8e)*xV`lQy@( z8>Vl70vO#ze&%gV@673cLIJwa4X)DfuY|YapR-!J%Qb*HFCx1QW14SwNpo#am&y1h zJU!f|L$%uTN1aU2kw13oq}2RTUv=e=-8wNff7GF^J^ACTJF;2!*l~eQ=(5L7k<&T( zql)OwA5}zO{-|Rs=H`zbI;kUnRKfG}M-{xl9=nv;!u;_Do#T-|-grm0IDg!zV?FG# zr+P=WG=EguW%;8LEVsv5N^n8`7&Dut%r4ABV`j5e^%WL6TUEa(e^k{k&L36ZOTwdO z@vS<*R{hLV=lbl@JF@DAY-O0v*)jPUKG6N@siB^5%f<Jr{}A`YXxA(umRIpH9ss6Q zdiuWz7K^yMa|j#)^M*%0=vYm^X6MFwn9ZGXyvZjc!WkCNd`!Pb>c&>oD6FLc4>$8~ z*EsH`fQuT($zVkJHICEa>`mitohI(KY2wz0IB3mwX~A}CuL8abDF=S;d9@TS(DowW zwU1p4R{!Sl=C`GJysfD;kH7gG<)5p5)`!jWw|<0IL5H$hurVg+IH-TLo4(klzPKsu z_^`Hu4}pUNTIYAzAl(+x|4j=2l(<~J1)dxh@LzM2{;k&Dx%(8}Jbsh-_UYou-Qv?S z$(1~52Xz}!Yk+Yqnh9rSvFpvw^~E0=HH-OtN}Tj|jrZ!j?tH^))d7t#&%oe4^8L6v z^v3E!e~A6aX;75$%mc;#AnCI^i#!(V27-=?X0B1~&~`dsxF%2&H2h}sMtbA}JPbkm zXX0N{$pf8(S9Z!=<UY$(j`TtnCudIQK0_h8pmXT>uM2O*KW9bUMAbyjM8-tEM7Bh( zM5aWZM3zL3M219uM0P}OL}o-@L{>yjL`FnDL^eb&L?%QYL>5E?gz$yvh2VwQznfi} z6H#!w7R!X)@4U4Wc~$3TOn3F;G=8+})DWGkt5rPvp}MYWJ($Zaoj*&~z<r7*%XoG= zSmgT@?ot@{dBt3QSdh3gti-R@U%Z^%E%@CO;H(^vhgf{Z;px=tmwvx3#BI^MwfTU) zBaPpr-9E^zJM_=X0Or#)z$sps@X@#})X026l=H$b8Gh;?P-*ulH|o<UjqR{CKemnP zj3w!I)oUQHGqfqK&)upIUeNFhg~Z(`4}5v;RP2sCzT9uvJM2(RsWab~%lMSO-xXTS zT9}oA%$U}LF~VCKHRX3_lXQcs$1e2<sqpf-B~Mo_6Q6kWUz!GZOUtBZN#S@B+?B@f z3FTPdm-DBN_ljG>YoFuc`tjMKG*~xUszzf7Oj3tkNg80eOiRk;Q!-=6*m(K%eTrw| zZK?xf8`G8RNiM(`9?BeU!KrCqV9A1I3p0qGr+2YaX575|GORzS+{oMgkuqBJLAjph zyEvVlN~B9@BfwI$lJi~gZr@FsC<oJT!|D~cscWoPK(~SQjPC|VRx;V-0sV6M9)PR$ zOdYuWI%|p{DTLfkw*r=3A5ga>;b2$uQedRDK-wMm0SF0y2X=Z&gH*{iNN6X7lhG6T z-hi*k<Y3}hu>3te)IMC+TC|Ff|5gnu^1bc1F)r#!VMeooxn9rB<yoiB?D~wJaot-O zdo9gV2$ElYZ~HtrAKMsg08CyTY)~TmF=L6F8jLSxA_J#3M%U=QIc#A;QLH<yMz0G0 z=g&p%gl`PLAzv5cEF9jZn5**|4!2R0tzl}aAG%U;_yOc19r>ca1DZ|O`cyI#m^WBa zp?w<DI5(d&;C5vAl;@&98OcU%0%zKOX<MQ2nTf0qz2KUh-xm17RrXr=Yqr&x6WBDW zXr5^HXr|cV*%j%a7Of8)k{PQhMw3dKd2H77nReN1K<`wM-bqZ0cGe&t>ZkX(=1#5m zt?{-?F!8DNj-o&0YIXiBR`(U{58A@M&hz0Xfk$w9bNDlOAziA|x=HUd9cQ4Cv4d0I zud%;M9CaC{t5Y>V7v^>hruR}a_5G26v%&54HjiF2sDa^jWFGv~91^r0)id>nk89>X z9-M7FxY>`A9vDPcZoI$Q;GH~8pA}^ZbWYScJ85ZvO`8kY*^W%f7?hcY1FNeQ#s#cW z2gb5|!LR2~8bDMaTLBikvu^#B6*AjrET%Kybm>h3M9w)bh8iHW99xCIE7iy%{;vEH zbzZKUK4F$)kAn0BuCh0aIjXR<?R+;=xeR*RXb&fRm5qht4c|+t2wmW(nUvwQ96Uo; z**Y&$VO%pZn!Z_WiZUSM>H1Ih*)yK&6vhQD2PQAjO+C2%%4s=6s#S!1?~@@P3A6Q- zTIAivHJlbGimg2!wRv?*3N7Q8{<`sPyPR>d`DprvrF!=^V~;c{{O&7kE>oMms8K4u zZ#I7LV?KVibBfvWg77dfgq=#nMULy~$7X96%wOuq<zsL5SM_ytNO77p-PkkE!%3~m z;|_fX^Ni^i7!WB57jqhTx>EN!U|?Nb>X1Ui$WoZ&8vFjNON$=ewyjfOqB*bSCag@q z8kPjxa)$0*L5602;OJ_z;OQ2M90hLf>qArEVpVGyRyGSLihDoXp8Pmq1>6bkXta;c z_yG5QV!D0Gyi9j<p7B}XB;a&)f`1%Ru}*T%A?_VUPB|BkNVyJ^=YnyAL2p$(jGqgp z-FA|65$D~lUSe0VL$V?h{tDbPd=C5ttX{)sx@Nf63BS{oU0{GG5v%gDfbUlw0F@8x zoujkBO>aE@B^IJX?yd7adjxMqdxXmGOxN$z_0x3y4X%S`aFH(357xEK>!w4GuV7(U zn4Prrjr!eneNIiNw}&wXJN3>5zM$R>*GUBg!Yk^3Y3@WczOStm#uK!QKUHwf6KFqp zpd<l#Ol`2x3h9PS+m-?gYqVsv>wO)`7}x|xOq)GfH62|z8LHAUe%N1!AKG`&ZgBKi zsVCEZq0iUo_O#QT?*tw;`eAF+d;|XXy@_}<-z#p;yxlZE&yRfEhau|+UUrHDOwzN} zN#cPMw|xLFmDe;$1MILn2Tcpwi}b81KM90%;JilXLn=7H;B<Y4T?Vj69m=rBdz1x@ zw_$DR1=R&^?SQb~lS)G!+!ls*VS~Xq9MlbbzN25R$@!f@cK8u{4QY5Jt@Ehg{se$1 zNR@4btWzEeAcyVJE9jhMup;>iC{z%7X92E&^m_rYPoRJ%Bu^m;?304!@7#6KLn3!~ zN;fK+xAv^QRj7$y+GQaj>;&5`L>AjG*2ns<iP5%O>I4<j@$H_)JwNz{zWI*G=F;wL zaVWa?&Ok)HE}9XnHR{M^amzY2In!(qk0t8?lizAfj!)E9yfM+MpLWIGn5|fQ-MZIC zHD#DI2Nu;X+Vqw2wsFaPKdIw%$4~3eOSSes(clBK-<Y6}xLW1E$22(e)Z6s8+2NSX zaE0Dk7uu(hLtY-$$g-01X|4Vo5+%it*t6O>!&(Mwf}hEr7Yw|Z{g~E#SR=bxYiM}; z!dn=$26zAu;pGm_>3QXOM9|L4(?}i<yg^std)&&7@2DFx4bQ+|Ste6Zh-1!`<uAVZ zw912X<e4-MzXPfbVca`aB9O~7WuU)D_p?8b=R5PI!djsDjD`=xUjZKUBF$HzF7lz~ zJ>%B5%mKW3k++xcyq(MP&`a7%S$^@(b@r!$&m3L5tsbys(JjNli>hFkFi?bp%6!_u zn9z5?fZM^*BGOfL(=IOFBkzr0v(z(u%1<cew=6w8ymL~HufYw-H(d0G*TF*KU*sL3 z15qtu0HFqGm!_#^UC=*%YbY0bTb&=DR|AVYY2_vA)J*<}JVL$v$ahrhe9rO#7R*C4 zc7;$e>pSpw>dS9HP!&A~sM04*N67e<_oV}a$R5nVeR`(PZ_qCneNNkGNBK(kxrJUA z-_Y^>fL<j`u=P>{A*n(v9KyuA$Nv4$GGRRl3YJr=WAU46R&Ne_xy|5zrcaTTQe7zf zMWK<bD{R#&47#IqXFl(%l!kA)olfx#-CU(cRHypKQWGc0o%)V`ZFH6hO-;w8ypNeV zPhP-5(SMDtU9lpBr-<}iS|tr-BSXZ!7WZik!AMw}n!af|UL80}<xR%?Ix^Pf^Njq< zSFokif~&@Kqjo1IhQ$LK?0ykN{Ysp~8Nsoy2isxou#roGJfl{}{I@jbMIOC9*d&s_ zYwUPN<|x|?`?$Jwuz4y*2T&EAFiYU+`g5i7ByVodi)ZFf%u6r2fDPa-jtYANjWVD; z#J(5rYKN7k9f&<?xRrT^Zpg<n)l)FX(L}RD>qwv)d%~RM{H<p5I;|JuiKU-YC%g@N zE%2K_ot+=Mlowr-^V<Wz`;&SmC=Vto0~U}EgnD7fq-VmYTx&-{10Y`lr!)xdxd8Wp zNJM9Mc30r9&~vZP<PX7=;<;-nh0b!`DF%rPW9KUc`nSCSvlN1~jkYbDTS_<2%Giuv zeSRr!!G>&MDG2+6JV+cNdu^{0M=0{5&zFd|yY<dn^M|``&C}JCOfd@nj(EX;tJI=A z$Hc}>=$5!D^W43XSA*U3o8xV#VB1jP&lCS=T%i8GGv4-1e|>LguA*die|l(1c<6lt zH7jW+bjJOPt1esn8n0dZdbF6fuV;9<zW!q|hyOu*;UAB-i&gwT!XW8St8?xvnsakB z@{GOV*^WN}?!j4pCYqm_#)^EiGu!^YXym!zoVtV8@z-BIi-9=iQX{@oq;RUe@#L!d zbLHT{OlFKa!4ZX#H#oujEX~9F@1veM2X63u|Dn&Mqb|*CY`qWIvyh(uMK7}2UOuyq zwfb|XEuK-vT0#9c=RW7|qL1*Mm)yKvjn76?Q2`!e`(}1V8gsCjZW{PpM#j2G2k(*U z7Y2pxk!sR2j$Ahl&je3^-{xANONRp=HKvg~q;T2?-FR9z^CLZz!EFp&hlq}eG!1o3 zq8UMML5McuQ7L(?ozgOO35_b15bG2lKg#N7YEBTAo+ee8u2%8fUkK0j6!2X8!?b%Q z{YW}}E(z9b46fF5bA2&A3BTcIWb<AenboBp{-}O87y~@A|CsPH;~z`qtytzmp+@*! zKoYPq2TvmJ!Ly|2YAHCt7`QIwrCBZAp|F&vG5Nwz^)UQ8ENlgz`lM>KU+KwbSX?f! zY4SdBYA|UWt)--&{VWoAC4=Vp1?6v7IQ;Af`sIR$VV>O|-im*6es-=ni6-0S;Aw)E zDKnK58=?$ErEKcZ#<|%7Qz?}eIX8?8sNDksT5M$WE3UXFciA;7|DC;i;E~Fs{n;ED z*NBNx{+bJcgQy0R0Oi-WA)C7{n<xHa_lJV4`P;Mv+9s0QCv%9tf#C3KfjAS{4=C}% zm{<buu@8*zp3*Y~b<@O|gd5L&gu$AdVL@(DFgfvstF!kfPK>u-s;J{KH;|b@KD}C= zUmZd+McKI{;1$L+<=xlnz0AA&m|ve&6&E4LdHFINM2@~5I#()x$~5?~6VnXli~1*z zZ>FCDXL6dSP})>G@R80bn&f|z?qXe$+|94wezk+ySd>I<_RvDswy|i~r?w)US~;uq zY;wvf$p}`Goh6*k3!cH{Y1tk|4NOWj-&};l>$tBj=Aq$>G^Mo<oQ`fc-T%h-*Xg#s zUyWLWyj(vza9&k?#o3fq<;khatjKb1Of^{GZPyMZE7$Pq`PpjF{xRWVtcK_Z>Iwf@ zt_k7S>ptK5o9zK@06V62PfImh6Uy+j#CZlE`aAMJS4H<i-O(q2*&(9Qx05%bObDgv zISG!nywWu|+Fh3GQ~ep=0N3Tq{i4VmN#HDOcz?i3=Jy1zCtn|$RfFNz)heC6N|h+u z7*%edU#NQub%b%V57zf@!rM<LqboY}<x>4N>Pzp<vPP1x=u^glGKV$0I3WQ#;ye|4 z5&91}Dqql%P5r9dncNAP-fu$(A~Y&Dvmtq_{dS!SZ&wYeqsd{W`=CDMIZGR+o6E$z z4nvP2Pukh2&rFsv{YAvfrn~4)U=hCmeDo9aCA){<FX1zMtsBn7SIlYaLEX%m2pjgE z>Ne<u@|j-L2Q2D&S-$2OjdATKb6u13wHH*sKNa4Jf6#GiNNr9?iwVoBO${&rxo%+h z*)v#1wcW}Jl2U)DG3rRtvqV%;{GD1E(!K{RZEG7u8>zaqp+VMFQkk}`(0Wou>q&tJ z7?7m~YJ}h2_>epg$q$$|Oi0&ui&zOQMrq%K*oANZVBwZb46+Qg<|<r)VX0P+3JZ^2 z*^}YZUVZw+hOBR0Hupp}PYRHA*@D1tbg5$G(4Q@o3P<saJYL!l@gtpzml8MMhXEs^ zcft5_3%@{LE1jBr;reWa3f7Af2yb-0D;`At$8OHv8gE}`YgxN@KKj~d*NxfaH-_e- z7CCiK*MHdfmGSm|CAnSfMnBG!^nQnuEW2^`akD9t0&(kWTTe~Q3-8g0SOzCz{Nn~( zsYT#uSpSeUnzSOL@a$Zz&bb=|r1J}Nt|Qnh%~ZF?JZnaGs2}l-@E-7<!Z+yv*DH1N z%<c2n<7C1&m0y|mGuKjH1zKKS$MJmb%JbpfxeT6D`Q{3}Z_Kd{`+r%XTN8Mb1NpfT z*iXl~w>p$&9t}8Af*6~L=VudRbuc@z#j1nbO~;b9E3Dpg0`=#19K-X~x|_EFjvze? z1I$OSPTvypg^pXj*jd63h~{+yM;m>=C-evFYDW}CKHx7bdd&YQe^-k#+bP1tuheZe z1@KMg$IEoeYqd6q1j#?nWrAmXT2F>;S(it~r>y<TgS^lkSUrj*rmOg*18&ULXtUBI zLE87=??x2DzbW&LN*>@Dxy)$JUiFjlznrUyjrN!%HaJttaa}oI^?b{|CGX)p4fvck za6zYm6XqRPj^@L&^EuxO_)2!w=Fu(0wTdeq&?GCaO=Q7#m3pQ;Ht+bd0-CsZ5AFKA z(RS)f%yjJ|4LHItZzFujPX`r?#MFhI?;a4A^faxu@4?W%bWOPJaq2jooaDVv{g&!( zG}hoD^b3C4UOd^m%;$bG^xI+O100suF@b^qQ{h~|0KDQe;m!EA{4qQG0Z)>&J1d<7 zJc|TYc7Ih{2%+v>+3RP&YD}DHX(qB>kpwRL-R|rqep%fRNnI}<S%y&R<?d|xfYt_x z>*kM^GgvcNQV7I*gaU8LbC|6huKsG)wmzFf2;QDi08D)%et{3PW}={85osuGInTa4 zNlmp@O*QiCWXdAO;ck8Ru4wSw<F87(pPaa*ZN+%@`gr#0c=oSOO=z$Cjct=l#<QQy zj-Q_2k3;ub*P<oa@!`t*T6K_*Lw-*8ysm^dw@nUL-eb`L-*H-c2$AoMw?84e{j})z z6BwtQ(gTB{t5q0#STI)95wza}i~+=v|7$F}GT)o=!KTw>^(*2M@@1cb*|Yer+f-i= zabu&kf;1(0QGQugBb+;>)!=;S6)TSq>WkD489a*hH}ZHI>-o5S1n=-T#+#R=nP^`@ zI_O9<xrcc0NXlz4S6#=<GyFG~;~20M-^B3<(IK8R*t(bVv=o-dg?ecuXSlbJRL{6a zGuZJ#!09I~C+hv_92>xkF}}uyJR5qh+#|@@;D^WUbKwW!7Cm2+zkAzwJ^OPs<&nyn zEPE_)|Bq#rM?no|!s;f9K20~h^lOTq2{vX^VIA5^zZ<+ECcaD7W}3PKnx@!SE3ot3 zH^<w@#pZtI)z@zo7c9nB^E3RJcsV;Z0TX;+PHn;DL|(0y=hJg_^QrQA`i{0Y(uELL zrd6(cBMudSQE9g>EZaQZBSf?_=zvMjyge5$+GuX8+WHRe#xBNZrsEu->{|wF<ejdk z0|N{5Je^NS>1ZC6NvO*LY0&O+%vgd<BZTPjt>U?HHITIz+LhbcouI$K4P_h#>=MWA zctnrk+h#I5*aNxObZS4QH)aw(>7a#?u9D}l*8bUFVfc$QafOI+a2cJtf(y!XpFZs- zQWv^*VB{Z#x8fgo6RrKoOh5v#CIwSUlR_JdL{c@6AZPyGc?Q}V-@DErZHhv!%eueQ zon7qddI&fX914g;l0rlrQh6vX%?t;Ea2-mM(`-%Q%B?zC!3tr6jQkKx1!F;Ab(t3` zjc<aGKdVuy@w`Bwk=VoXlq%5&;r#`R^iO115D0f*74%71&5}+itmB7;ECko^mj8tt zWn0Ao{f^GAEuCbo|Im}qg|&VO)JpdCp|0WX+M>dfY(!_(7Ak0Tmgw@!x_?6?`Q==u z{$~o032aPSh2PH$Fp9QU?ZHnmG$~zkEJ71j(~+jKGK!T`(eBACt8dKx%maT92$F$Y zU=><s^2dPimq~qQ$6`8O(xmvR5&oGe?xSqOg>n9+wxfW2RX1faC+^csGTnMi@AH*3 zjqqHVPLd9OI<*zYau6ANzru-!uTA@SkLD|<!R^v4hL<4?b)T);RrSj|b%nR!;+eXn z{7d-ar190@pkZNf+jAB9CB_#09+t4!A8|Id$$&1Edfm5cjF8>nhVB*4IwYyp=<oab z<pTGjm);THihs@yXu|XhIp|lEQ;TWgyqmV&AmsM$Y+d*@Hhg|y;Ja|qtvw@oM7Ox> zK9A^8#E)x6%BW~vHd|f~=PFyR$??H{51*s(ZG7FkP0In@A~h=|#;+7ATdDQ7mDv*A zOLZ^HR@&F(s<k(qmu$%9tqW#FQ$fpP(7Vbrp2;(@<fcCH+<iEa6Nk;;(e}l2`i^TM zj;GDp@h^NL`_qa13QKUZ0jgp26MjQSwK{hv1RO;lbL|tr2;+_~xbm3BIA%j}Oo;=A z_vTb0rB&%XWX}116y`~4TfKKGCeEdlAEgZ78K{H)@Xl>znl1?5(DzD!BTWC|Fnmbs zi{_<{?|^-ax7A_~OIL0Pqh0ZIFDp|LR?y~H{nFK{YT$><t9!JQ6+G8d(SOXHCkwN$ zsu1)%rWeC&k*(BQnbtO2|5~i_4MWD7H9L3A+mNm`5ytIdJkz(MDiL1G;~fh8-N%l1 z#u7+ChvArjaQc;&nXeneLpLcb#WPjmf+Ak2YGiCJa70hmU-)Dl*6pK4|Jk}Hp*Cu) zgvK+hRm{}YbJB2);}&oY`U2z*u8RGHzwmimApEc;GDLZ{D*Pf<K;jpYU=i}1TTx1w z`2kULp(x*)rcmjUzCP66$29GdP&`kf^Jtf}(vMGV&S-Vsey?ucR=(u@j?OF{qw|>$ zme%Z6z{wkP4zymc>m{t68pT8EsT=hT^(fONw4Ok;oj7ao0Q}loJANjJ9Z{;Iq9ni* zRPCVR4f+`;mqW?lOV?v^#dSO2ue|o@G!GacKk_MGX9og7u=4<NOXXI_>iZfixO>Vp z{yqzP38`Z`R%u-vZb`%Cb!L3Z7jWD8u4qdh(Q1AFM)jq(vA&hiSKw0W3(w`4YipQ` zPbXEHehhBNQ_>#VwlMjUN6I|=N{|gS5SnUJG#W;JnR&>Ne6T{InC;%uUIKXCMRT&_ zBAgTNPt=rkxLWOpzpbBRzX!~41FJwR&(rk_@ybTL&AnQ4v2U-?Z{uFXK7yH2rYJiU zzCYknv&h0O!mZRTPouleVOkh{>olhpurrvN8CDIyoMg<(1~~kQDJn3Q-9^7EEWI2a zug(J*KiY=Qtb8@XqYDPsXYGPh<qS6$AU5F0;|IEG@&e>}v^r)zs#KAm$^M#pTK_ng zV0BONBCuHI1E3R))+(&7)5G~c6t0=8#+Go+*BiCp+F*ZuY**%iKDG^QLo{+Ci^~Sg zz<<E@SXQf3gQ`5_7kR%nB96?Tv<zDvQx;i^wwRS$Xp`elv%j%@w5%Zk;||+9^#;{( z9%fMQM>N0u#Ch^zoK1J?a-_irah|sx^K1HXcRN?_Lx%(Zn%^lJ6Z<gWy0A|sEM04h zK>k6ieRoY=-?eZ2xcjasgE#Iw@JU?XyGQuX_B5eOw-q1v59NHG%~@cR3moe-9}GFD zQ8fwV=^(4v&P$WJsm~Fm2k#PI)9+l}>4|pbJirgpN0IT2i*h8$KIF?3{|may7r0Kw zqH_l%4A>TA&5k-pPIhFv?ID)n897L8B~}I-vR)Zo+<m*$#b>g)pOM7)JR$R+&$hmh z{Y?0Hfq#r139Xh?RwuGW;ykrMg~Hbb;|ygH){Za}UEZH96U`h7-(TS0Ul_h`*Y`Sy zE;rS%my1G>_B4Z}+5IfORw``r(7|(;+>u?X%E@2y_cL4o=sc_`z1T{9!+O;!ex=ho zH6)c)t$WIjbjmyfYmZv{`$O|5Cw_T6`*O#z4PAdY-mz^%``hCkccrPM2h;LWt>buY zDc^{BW-D|w`Y`JbbXm17vDX<E9}~wXzDc4bW)C8bIyvM6*6KV0;S~2mcLg1n(G`bG zgMIK4S{UPL<N8!;*LuCuIHXraWxz8=m;F1l_cSVx)M%$lu)1&F*_zE8vokc>W^y7r z*m^mUJqCCrMDMmq8sRPCyHmP26WjH&U4-|;x$PpDkEz~@`A83>@<B?U;bn|Id#~|D zbK4H@9mXFz#(o%llJ1o*YO|hqi6eVN;lzWZ8~H;ZZaO^(I<TU?62G5#s@$u7jq4up zqs`LM?+@!6%37tnxxDp)pu~K+fcdb9SR1e#Hu7-ehV^`J0Ql1Si`MSU^^ul_vZ#Cf z&T(&wRjqG;?*~-Bt+E)oP0xIr>TftxixmYAhc8C|h}8-8CEVtSQ(()3@(njXr*y`Z z7WKoHuBvp+`y|EajJUxAaOAYX`(v^4vHrlDE_|||N!A#KfKQ`q&EX6hZRIpSBhU1w z@bgH}?m05{ZPeUY7&14Wb`AuLP~_9Af-CPu*RrPjl_6KakoS3dwh3X>x1Qc^R;|o- zN6~@rr?1jAS$1O8e`lH(Xl&0({n14k=zN&Nz#r{pELeYKwH@q$l@ag*9wUyChg!34 z^t%e@V%>;+TLa;(_$Rl))ZTs>Mm{UOuN|7op7Qnh^I#3ABKI?LDlIxCLMC&@IWn7& z-DaR_h#q}9ZdHUc<S|#u-qj+wC$jm92rE0mpi|^EIPVZq#|yPyMV=``4n4AgGue{+ zvHuL~LR$Xm&z9O+&@#Pjgf70TY9G^%iAgLfv~<HF&gr2=kfyM2X+ruTtSw%zv63@K zPvZF|C*%=TuOfGN^6-|oO1pkU1JkFG1wKsw&>8F~z>Bu#!dQYEA5x#+FWhKj$#}ZN z#B-Z&*Q+*?myiv2PEj)80N=AwNB6v7gYmAXWzC?gby@~|rm{D6Y*rd`iPg{NRYx?F zNDbf$e4(Z?1+us4HEs6MH{AFh!4ItW)hby*@=RZq&&XMzFd)BtlBHu}n_ZSKxN>iy z2CUycpwbK*j3}ORz*&al?$OLbhs$aavyqYv7k`}c5j2@|+r1V(-&wOx=R0+S1{yxS zUv;q^q0Il((vfuZ%XalI-pq@+tQJmUH0*>m(i)DjaoSPBC&VMy?Nu&^1p$`I`iVZU z-6n>UQfo<e{a`z?Prsb*=4%*+$H%mGMGfu^BYjx;a8-1JuV#uf2lHI0V<X%NyreXY z_eiUc6yzH4W-ew6Z+2w(50)@lcTI~oF;I~-0s0h@l!bXfsuEK`czEVFq{;%<6jC*e z=}1*b@dT^lVK<z1(FX(a#R0=E33xYOZ(k}zDo6f7cv-IGa_1jJmiFBPSi$Rf-3t*U zE((G~ia%Mt9-WOs{elL_6wyF<lOOOc0s)KTdL3P^=V162rGZxQ>5ppQ<`(g(dfxcV zj}xCFBYeF0)FH2Ryb28;(@X%P!@q6U8+`z*me+l*Rai5e>otlr0S*BSYim5r)5F3B zX`W6|C=a|+FWb1JWps^n=R*g)PGEP(96t<nfOg<n3tGgp(PN`G@O{ns<nxmqpd;s! z&HgUsi|Ke~;O^s=F=omaFICy~IDT)gI|SC?G)9Gg%`P8~3;Yg!Kn7w@v&C50L4|?8 z`}NC(4`0Ugittwab2hg}UWvj<*jDCB72$aqH=sZwptC0BiynllgW>Q0zOhqG=rP$0 zt-SbJ?Y9~3#<uVe#yfuLt?`auIiX)O3F`Q#UQ(-g@fQV@MVt5b`+!rE|5zP1pS6T> zyG;P)(?`fYv402Es!hThwi=G?z`lh6VTb+VRilR2<aei|%=0l(Z|F8KYIM|Q@7>~7 z@K%NtO&r!NoV_z5EX!&Rej?EW0}t>oZ~{nT#aQ<N0Oo^3*rzlv)TLn#!9OAy;#r4P zO!yEaKzK368S7MdaI;ym6!8Re<6jKJ+DX^@l@^|+*dqo*ophkC$@#N`zx=1{weT0e zXo1id&vX#X$aq~^!a%5V&0@|An200Z0D<aEHb=nKEBm(ZW^LbY3p?Q2cWYx>hu8#6 zUvzHI3W-T=s6YdWS1z`{ENpxW9ERyHJ8={gm;|ef?K10<alH)N`Lpz5{x0Ls@{3pS zbAfiUb?<(pa`$7|g|fiy5v+GfgSk->mlT%|VqV+1QEwd&!o|$0K9tQ;>Ibt~k7XBq zD4FxZ$FhqbWl9v!pvdJh7t7dd_Bs>e)DWD5cA#m;CW6}Ntl)IVgtwH@cyHqC6aC^b zf(>s?0-vr|kJnb*qA=_JR_E2PX|gOY@EfyEF@Jy|_c2k`b94L;`~&I5eOSPq&j;6& zAawd3&vd0EmRI)6J*b?0S7kcG1_kGFrG@XAb17X(Qxng;E9%Mc9<)m`87HwA&Okoc zrksx|Wh~dFrd^s}a3hh=w>g;Ni%nrBIzHJmg#+vxbRWihu<|#3DbyKR;#_5rkMCLH z8^ediwOYbcS(|sfT!6oL22a?y)cav39v$!b_zpy-gtyux7~nJnc#5MXyz2SZx9<Vf zYeXZ1th`50X#A}Img%=X{lGMs(7wA$-!+F{cuer-{($??c&^oLGB_3@>>^B|E!v^L zADT?eJ_z&k&8ViSY3EYi=Bo<tdb>0hcnI7RAP<`=JQU%}0goc+!}tbxE`DP>B=^eC zsrOwmKFxEJXxT3HKW9o=A2iR;&IANDi}}U!-1m^53`hCES=n|D-l|AHwrKRM{Q9`K zClJ2g)<SL6^%`h4a1?2_ujv(KZhVJApP|j<lb&4!JuC0sB8(ii1js}VFx>_)>g&2? z4ajsdGI$c|Zup0sefGzh2_N=833W}*?+Uu^8$?qftMsK`+7H4d)=NaL_m5aB<GgGU z!HP^$m0H`!Ww9zAOq7;Dy|AlGDne{lwPj4pdmUkUuk-orZn;Kov^JPa%X3tW{(naj zcus6XZtdCJ{;W^Sa@Xrs@%D0QUYYfQ4r?E}Xm2j9S2|x(N@+5wtUlA0wxd6lb%m57 z)Lr2)CvS_Jv2p6Rh`5^hsZhnm+WsBvW|sy&A$U7Jku9T5lH{c=y`0Ajy0iJp$<F9Q z5gH1SJYP{S<p~BtWmsrrV|hq$$%leg4rAqa<@bY!aWMl5Q~BDO7uv0u{%lp~MOcg_ z3S6IE<`tlWRp0K)oDJFKC$cLPdq;NV`s}Lv;cu>1Y3MT;i)*^Gf35v?JYM^d?Dxn) z4;*5pPP%SGc713e97fL;%=>#zWUKGU)`V6LeKl)`omk74p&?Tr%+d$5s++U<`kDGd z6<rycctfb@9odaOD0K9xto>I%ln|iYy4m5U!4M~-9YmLeZ*FSvO}pIRw-bJIbxYPm zBW~`_v@;=q+0Fgg&D82{@2Fc;eqX5OItG7z)~}Zh8NLdGj{42<j<5YjroaCYCTH?h z912e2k+9Y!en*>Jw2b<N=kkTx{}vW%|7*(quwkKn|9r7Zq&@B{wUgf*nnz}KE_`s$ z9}fFc5s%`g|IP7E89o;?IyE$B&T*MU4{6`NG~j<Q-g%K#M47)g@!rtVN$p`&DQ}H; zUN!gldqX|7xswxff;WKEtowG=X4RG}@}|Dm*R@URf8gobCRM@FS#w?|jkveA$*=L= zd;InHh89dd`q-q{H}+ng;q9IA&U?PmbKDBqxxYiX-9I-}Q%?_lT<7ur8zGd%8aHr@ z>Eq|T1df@ho|kl~&$a#euDH|!*71L|1dTYpeig~$43}>SYXF<1nT4jbvYrV#b^dgf zo}1J6k6%AwWgD*w-ar4fP`J}k{ex4m{`tGmJwOxF^$Gf^sIx{3b^a@Yj6d*2emtK` z$3dE^?)tK~iawjYJbF2#RIIekW~aC=vQjJQ<a34Y=3~82{b?sA)3Zn<(VDb5A2*#` z0?+AdyJ_BVd2Xj#<oF`I8&93e2b@n=lp|=9bL%_<2W7nk;TP(rP1NCtQtTH5;f>Dy zF^niI<ze=Us~r<Z)971zI9h?0zl)j+zP&osC*`?-nflU;qh&f)lK}Cg#)=2yY`PNi zMb;{}(>VFGzpO78H>^XE({$^8@}7>@WWM5MJLNaiZ_B(W`N1<HKLJh7p%M=N@A51w zVYcTRi-rAD_BW(Mj!VY|ozG0{1}X2Tu%zujv%WZ=bur4e6?n6uK+a>1VRNxboOP6O zEpOt{rH@GtIjnNA2i~lA$5G4^`XR2$nO>4|3<p?m)N3na-7PNe>20((kNg;?X5Kl7 z=ca!S35)XV_%rqDNcfGq>+w!~8>*Twv^<_l39JGqv9;i+bQ}%J*+XLWp$=6+I$FCU z>RsS~I$W=NCUszU3U(`1m2Cd%OizHGZlyvWNa|8micy7m+Zi{T5%lo(5Y9Z<tD1nR z(*1FK1MD{22ftN$p}8cT(Kl+tdghCQis<j3c;;qNuVQkV`;&+M3<!$M0?g#bMl#qe z$#L09i7<JY$Zd}8Qb?sf=(=6In#S?1>t}&wr~&iR^rWthGW-zZB0eT>V9N1&szU<4 z4Wp(d#&6+oBIazI2AMggF_`i72DM&%*Yg3_lx0@r$3Im(*W~<J+8hWziB~0mJo_e+ zp|TKzFZra+US-Q7Qx+Etq>Jq|j{zI99@(-4X(ZnsZJy7AWErFt4owg7!4xH&Pow?H zif_k5Y1kw&4+X8b{_ry2e0j<CQ=UZZ@Eg1l=zT#@omzz!Mg?!TG_|UY{DF0c+L)#` z$VL(fW$Pl5NvpbuEiO}NKZe+HvE8*Uc`TP0kn;J)g|j~Es?_j%T8Be%=fP6Kj<&zP zZyAfX>DRUP{oS?MGNkdIZB@7WHBFF3f@{Xdc=4`r=FCia@iPC$e2)0YXlYep<jI}# z5zI00Q{=BK4RGdsb5+mHc`5S$;n(XjXVFcf@7gSkh7QZMy7bBU=yX|EiFjc!=t#li zKFi5(CVFJnno?e^Xzx?zw+yS?q;JT-%;!!2ZNw&g3obq%{j$*qN=U6#tR7b>uja7P zNN4)Ia56X+{u`fQ=)Y`*>4-Qk=rDDRI#awbdHRP6sY%CJ7&oy?efhj>OrwUCz9kL# zlyx-TkLnqzm$~M9`G9rw$6OxHoPv+Ri_3mdF5@7KD<QqnJ4#Hct;LfE@%C+fyrM!m z<O3z69J9kJmP0zO6S{#XF7l>t>h+yaq@$wfM%_DvPkwfz={w;!hNohzj?|B^vCw0j zpJk8;FGAbXz0Hgc^buN_@-^r`sWE*@8I9~I|C7SGunS^e$|K>;+L1p7-zHl!j^&Y} zNQyR5CDDyYaXgfxls?o)9HJ)o8*)~eAMQh7&$jHJYqXb%i(anNy)MvwVRrL?78d)p z2)90)t=&Sn-Pk>#a{7Y~@<-2Py~_JQ*wELP=d7)_%6Z<@u|e|#RkGStc7HCDpPhx9 zvyK5)CD(@~MlJqr$QB1%Otv&gf7afgE#WCprFPLLTy3@M%<PG;^#m7KkQAM)_Ugnp zM530-$@RD@|L-Pne|?~veFV}dkwEKu;fNw5Q-3(#`OjJ53$85PKvP=|ydPVoL!+7~ zCEt>N$@~E~I*;w1oFcS1#M!)so|N~ikw=+ET@>;x!YmS_!4vq(cNiEv!(p>_kMC*n z<4$cI!2_!l>oz+noTlHTw2%3h+DDG%c!<?I@&~3H@yj;%oAbKJantd-=(X%@iMZck zIvyN*I^)6P{HCv(*@-%bPnuQwmbSo4H0z%<T_vQmZ;)~SK5RzmPp4mvY$(BZ-liSG zIY=pG8%f$oznetVx=khdahqM~aCqiD^-};{@%OPjJ#aoMjQFg6xkxjU`Uk6<jW$o9 z2XTFBKyZ(I@}d}a!ncH(!TcD}JLQe3JY;Y9|6kNE7j`_%+grn1@y}T__sU1ibdGU_ zZmXL!mU_M;dr3J4)(J&O1H!>tGFcxiGlE~Eo{dVgYs&wCP^mDh5UbEE3pk)!GVk4z z&EmID=+!j;5(v=zvqoTN9w7~=d@%95s-AG8oa??S<8vJ$Db2g|_Ux-V&{ta|WcmKk z?Am;(zyGNe<FMkBLYuRM0j*uF;=PwNNb?H(cSks9<9zVmbo3Osfqru$>cg7J+XcP0 zzB{PrM>P@#Yh@g{Ug770d*-gs9k5^I<I$&?{i5%`_PnZr>q3iwmIploR?|lUAGI>C z3w7QX;tlrc>Qq`Ko;JG``li4maAGDF(}q8RefJ0ZqMrGt8BT3RHx}ue*k8UDU_1=x z^{{7Pt5Q6i=TDi9*BkzB^&97l^HohIVZd4Syd1L|&4t^Pn09WMk94t)&0PN=yfN3a z;4l1O{+|BiHrJB!&4UQ*k8)+E1>ml*0Nnk2_K#o4ep?5UX?Kd2R=>;N+4`%5T23|7 zYwb!2%d-Qruj<d{VjZnx%UH(U=^ri#A8K)T>Z?V`SBvwnWQWaHa-py^>~vYSBGgK2 zw{S>Wqm-fd1<7|8=HIDwZSLIIFLWeiacm;2wapU`^~>Ygq%90~evO5}&ey*_F}iTk zN*!Js*80Rsu>tc9EwI(*En1nCgD2h}YOiT0XdVs&MtY%|f4dL%AY85Dm){pq7Wa;K z{R(pdei|*<pk#<fdtVHeodVhXfu2MA4rf;hKF~<}DhOd!&Ae!zz&r<vo>Vw=5v?K8 z*08jMlurXUY2Ne9Jgc{1ZoWU$_!ZAD+LV&l$GwIJZ)XxBHi#}|4~oXJKf-Vg^|$lJ zikugEMXX$Q=(_=>*rIe^$42R`4{nt8Ok<pUg~Fp9IoNl5J_3vcyL8wy@?(LIb^Tyf zHN~f@*^PjuO-8NeWlSeu8w^A%Rq9@kYoeaKzD?E+qh)ai$AGwo`kGqW#VVtbzCArz z&U@4A(>T4S8Wg4;&^T;SzgQVp>Ua8n^!+VJ1n2Ha>akRJar9%qG^!upEDZH1_DiFZ zNz3h4{XAcy+t-9#6OTWrxMo&WFE^{b?aP8Ute<yYis1#yx?K14{e>P1sm$~=PpKZw zppN_)<7Ry|DEWjvp*D9u71~Wb_l6l~yL^G4a*0YZ1DfWmS}9HI3N#Hr|G;~CehmCV zS$6?1GAwvP-@xup<Gsoro6OqLcxEf}TxWYhQy*8}T+meT&b8sK_$Q~S)dEo+kTU{# z-L?&&+DpBMqbI`V&jGQ_Fvj|A>(6x5)*ciDbD*Le7`iDaB~GA17b`42_zhTG(Ig1b zH-~!Jxhb+_|A#9FWDP@1UZqxP(;utDi~g;<_K^3vXw!7^Dmu!PMxixiKU+0{VCQVg z&;ZX09b+Cj$3_Sq8;jJfo`%hIE*Va(-wVJlY(LkB_N9`Rah!$&i1YQBwLt=8m$}7R z-mYbcVf27OtAzoxtj-s`j2X<*|Hda5^&^DaJS4o{o35|NDOs3@;QV^tGU7UK6TXVz zDJx2E^KFZ28-4Clu2Uf99{Lfu3OIez(--M_DsqhVuH|`9@AQk6jCHiVr*@&ty+?D7 zi}P<TSDIO>5P5NPQNP@a?j2KGsWrKz9}NzCD`9m>TcWXev`{2iG<7dYhLwyOv~z8_ zs;(=$_N%J=PjTcg%0%h$wE0jAVCI>VX(?+sOb|nE>_Jp+-PsjV@Ol1(oZx(46*upd zptQsiQX6GDc6U{NNs_jPOp99b+TR&$2^Z*aJZ+fS{8Cu&lHsF}hHB4>mOryu(HP<t zW+bWlE!Boa1$%|MDmP=8sLYmg?9LgPJXTg}0Zd9q%MTAL+bVO#;$14yb7l5F3)#R# zce74rNw9~+eo%fxJxJz|A*fN^g16%kaS1ybVznP*JG#B{y>>YGD<x>-gPgXoT|zG^ z>$4h(swY^fFx6U(r6MyfmCqi_)ZRiR?#NcgViw4@l99~^P})~*QBw&*%Ub%JFW<=j zeN-5G)rssf6-(8SD||gLtPdtDffIImP%t4h_b%8E3RUyLoa4cnac^y2ZQ<zh+9kn7 z@_6N!#w))tUippJWXC6K#?$i$79J;meGrmg5;BvGAvp#6zd6VArN>_$*TB6m{V!;K z(V|S`V06~ktS}wD9I{xVMaomy5NbE7|2gmp)W*j`{K6&)53Hu#-=_9|INsIy)_B*o zC-jS|<tyV|t0{35^;5W7r7eG@Nxx9DmU)}+`Tr|$3AoSJY}{t$pmYuFP%>UV#Wy^c zaSmbNg!KHNMtF#H)8TRAozvo(^|+MBG5iRRpXybrswc7(T1YHCB26F+tqQcuaVz<z za@I^~6n(_1%b56_Mt-GfKlIV*4&~Up?SX}UQ&04z&nq388FCv@IBCJh=+B`_NAoZS z9ytrEj{V|FO_O8!(T~PiLdjePi+SCr+*4oEMn~wO7(=<-P941-DIFk;wx#xn*Xh0S zxICaT;VbBeNUy4S&oL745=dq#PoB~t%A>9(3l-~1f53A$I+L6Ju$2jR>9Jk`mtyTR z8eRWg%1=-(d7!yH-*Y#NcQE*CRBv>Ra27!AbLyE!duou;Z4Q=m@D(0w3-x?fbtE^Q zfg9T+RNP1Dyi-N-)2*u#&wMDaw-U|`d~yK;kE`byd%ym*5{%|Ar}cY9{(PH$k^Q*H zgLz!f_cR*GbVRI7_#iI&xY&o@FLwug<okJcsHAiCcTuir54`m?%HP{ed0gy`l>avK zD<hh8B6yb3!$Xn`LTDGfjrf$^Vjq;04U%GML_cMr1Dn&8iSWVFwC9BH45tCNEtD@{ z2uDps>UeF56za8h{Sm!Uuw4Gv=IwQ=U^Qv|+?*SPw2N{@+ex2m2d37X2Q@Ek?>Mqn zJVz6q3e@08fMM717#=lyYSQ}{7<3MX^zK!WvY3Yk<H&|_Hr%az!3^L!(xE##pM7h< zTCr@ftVucMi3*E>Xf;V0alWA;H*T3Z@Stjvp0@+fUWB_;qvx12&P~_AQ3kiC0Ja*< zLj?yrL*@t<>1cobd@(Eu#n`U;+OA~#f;qx>hU1H}0<iumlIcQ*2FEQAZ^b{z&|>1@ zk6G5w&CUW_&GNp0{*J6myzL?nl4Vy2k}rJmvOVF$AUey}ANwYZN#gH39UOIfX!c|% zuvH%Bt~xlbyhT5kY1B%Er8Fw`ndu0<2jLzV_oJf6Pz>JqOR81MgS?G)H%evk^u4DA zPff>5fv?d5?^hX5>Y4nRM>k3(!85!SdZUBNg|$q=7}xT8vw~&>D+9vWMp5`ed7T6X zzWiNhDuD^=k6xyHoz=jqBh2r0qU30G47aI~ohp@bjSp@6&$M%)?sUwkdn4T+_2gU9 zPd88O`@sMkw3`b!!Pcp!U-CGpn=y%emi5mkiPVMPvCH-Q>$(ZbgY_i(aE9G#S_ly> zU@0U&S?15reyGTH5duk>b~<~<w(Na%`$8QjwMYZKSirVK4v&`V7@TF<FKa@+A|m<a z?85A%T;8;0`EeD$<}ckMBtQQW(@exe^G>gq=5%F!*o7~dDJ%$0iC24-Sc|}UV!U>W zBy~x_rQxKiUD+L;IhzJ=@RzxIxolv4Ha}EDMfGR%6g1!CIa0noKh#DfFF%NO!I^A@ z)~jbrg1hKDcS@X=v(t<3$S&ECUAiu-B0H-(D>vW^lm%{!y)4GQD_Jj?;7F;)fi~mW zpO0t%aXkC4xwQ6$adqEcXayRVpW%;=WgP7`kxlDLCjA{3h>mtE#ePXo+V|BrDUs^g z_|0kU4(qiH6!D;Bt<Or<dN7x@J{KI6&e2vgk!3A9jk>E+M!I$Sd!Jx_j-UtlF_`b| z0Oo<cxcAEN0sPC}+#ePm2{#E7z|DjET{ggWi}T%CbHzU!Ybkcl!+nx<_UM_FEY`I* zi(Z(wKCHR7>O0D9MYh;GMb#{?bKythkD;Pi^tcEAs9S?3rSm?O)tIlT?6J0#wi%9S zCM8BH>M~(9nfrVd+mzNR(vKLAJcl)*omWtl=jfBh{@i2#H`|i|Z&Hkl{Flj1mIrhp zw#U*iw(w$b*Cr3u+dGnmKCicwjctQNs~;_kXG~1evv**)+&{oDH8M|{@b%ON*^E^= z`wkd{OZ3&GtxADE7q4Hj=17+I9qmiw%Duz)R(_)%i20Dt`7@qvF4pUzQ=P>1N|(aL zbnu77UY#l-+JBUHtQfq1bp82a)oDzUC6H)4SjL1A7(d?Oj5*yco(l|rX=TRsxZ>JV z@r=IJ=iO%KsiHRCRu8Bp@-JMM)n}#huIO&Y8$Y8s#+!?D@UG{g`Q>#m<PN9*z?|`C zKwjJv!+fyt2(@Dh1J;pyj_4PdVm*R)U)94t4$CjnT6~1(VhP5tq-Wyn(RXm3<=H`d zv1gAvB8xfEhGCUhQ`rY4DZQvXr~x=9hNluwz0MBY!B^=z0lX)zu{k>y+Fo8aNaqam zCDj!LS%VJKH93ENuyuPzgT}a#)~~Za#}kKWR(?+04(zWO7_`B<IaR)k^#K|7N|KhW z-M;&eLV~cSAkB2g)VmbLK~udx>-bPu!?v!3W9hrIn=J=r7!sX3ldkLyZR3}$K3{B1 zMN5a{!QPHd_#3kBb!_;bwNX1-WNl}jh7^$RyisDgYj0B7MwRP7|H_GJDjp`5^Lp!9 zby%prljnCacV-tvZ!Fo2FA52B_+}8#i8sZLY<XCdxd0dL;az8@%w3N&B)N$U>EvsX zmrMJzOLmJ9RL9B?D8y8W5qpRmf$(%ie|EVRQ980KL#9`mM+JN=5qOQ4e{JZP*&4Nq z>GmJeVr!`Obr0f)cdFWQn9-}zms_c;#6$j;*lBpv&z)7O2eZCg?-V;dSMlNHF1^gt zOCRj!x(9JWe}SGBJjj?_FSk&$_34FryCYj2V%I!~5qU=*bGdyXrwW#4ZCx6<{33f5 z$H9$1u|B&&ZW>fMWf|71dX@ikp|Urr+~EfCdHrvjw*GU2Tddv_+0CkfstB`OEc)H9 ztS^k?E$T<kw_JB3>whqSn-)pl9Pj#qRto;?E92cy==TdR6Y^&-SKie7%We8QdPBCM z;}iP#+A+?Q8=4hvt%AG}_G8(rg3&llgae#eatJCZ%ss<{4v*{|T{!ijEI{$d;F)PD zBrwhS8Vt`}`?X&F&7m%xIVt1#$<sKEs4d1sUP<A?;o^CdBdyw8mGO<CE(Cy4{!V3} zb()D~<JrHQ{fFb-zbUccb1#l(|D(Lt?PCQe|5<X=?BmPkX2-Xlnwa=t<0(09_+X>@ z;y2$K@BZx*`W<c8+wZCps^zjLWN)U&H<Z_Hw`?rsgui9!-t^(`>wZ-q|NdyZPOk1& zI$PrRm6%rL-=7hpy%_8##AmX=>~J29(eWaEiP(LQ=s~15kza9*lkrC2aOl1BRHQ?; zFVYiB+l+riu1@KcQ*$&UDHliHl!xaWs5*4f!&2%)7&3s{S-Cv3Ni9MuARhWqwoN6h zye0yj=8S@e#D(n$l1;Q>q71bB4}=~V4ZMc;n3qxZt$wM#p&sxh`_(?P;-f|Eabm@y zDt!%H)l(r1i!yWtWqAxD=C*tA8#A#XD$6#j^j(>^Eb}r*C~yNlzSYpy$j96+$&R)f zeP=&V@eDrtv@E}oKIMbqV|Ip~jJv8mex>3_PhU@GF99#oSmLwq6&>=StaHh_lx5zb zk%o)CPhFTdG2WqzSr9FDQ&^+Sn7$0vR<D`JZ|OYq{d?4Brt%x<;M#2l!;Lccv8g2F zMUAZ01%9t64;uGQS<JsQ55nLd&n5qnXZoE>i=Jm{Q$iT9ny&BCKhw#-)C+4+Ux_0R z+FORJG>ya7g-SP*d607I4)?&y1A=<yx%)q}J?+{grnri3?ArYKj^z2u{23erPwsxj zQhfw*jt`@BWBHM%d0(@$JD7vEDp*{{q#vkzx(1r|xA%k1)p~i<*Y=c6Xb)rANT%t9 zwLWQMXXD}6a4cUd0F%TqqP#-^%b7ewTgTK|a1AFm@cWd)peM|l{Ye;gU=En?5U{^} zRm{W7H(BYhQkxIIBhpiiCe+Q^bucfBc@}GFeeLx$`7Ew|I-a5}W!YpANLttA{N8{w z<^T-IMPB(j$R3vSSO^i%6<BHopz0Mvtkn=%35w+xw;i@TYGY2%{Rjn>-LH_UZTH;> zEiTT84aBJDOJW1tyR-YGiIpHB-KoSJdEAoy((QUu;)`q-KH+(+<O`*~BW#nrP5FgS zy0h+)a5nK1UD*!lm`j<h-(+Q%v(Z`&yDiB^i<SslAvbAbm0gEePV9Xs7;g8Wuoxs~ z0BWo_;LhClnqp;JrBD~D=nwS)Czls{>ye7Qv38>nr|HMk^iY~@Q<##T5L|+65S*l$ zAYe(XcVXhiVTY_q=%3F~=xphmWg#|44e091KBXu1)+;PY(ai9i_gs)o<{)!~L~N9> z7j<s;Gx}aFQcilCb6cq&KB<^at!D+Jp8bm^ojKKZ2OPn|v5FIg!G6uu)?XUWUK!7R z@3locu@XA1li2&_Xw#^ePPtk>Jv6^|0sE-BW*wjGc^w0yJjH8if;W_4_VKsIyI#@# zx-`_Uz{7T(I4#zhBizNKzTp*`P!)o{{FqM88qeMgE}d&|@5(%EQe}6Rbm74oO2LHk zLW=i#j$bWB_<JEsEkutl*EyL=j*qt<82mpN?|MgdIHNke6YB7xO_o;q-!BLmEfa2H z`WgS*u^il4=7-iO?A&zV_J+96_@p8)T}`l?(+kQipV<yBBOIKG9_@gr!3(0(gn?I{ z2$m4nX7mGLP79ma_RubDC$7!YgNC3je9H|z0nhRbZe{%(OCZ}#VQCZ`;;++hYklIF z+3axO(Ow9vot8hm|7>xu5i?@}jK><sxMLwTb)|otKX;pe)h*XA#r4HfeO#>1SVu5j zF=OKOII3sjfi0))7LOg(sCwCWV;he<^KrR6z@ClmV_M6-D*F+o<65lSL+qQ!^bP;k zD$QNlow_aj@{pcClnvc$q)!Y`f6~&FX)<GP-?)vL^>M0`L&tWn(s51B*HWQ=uMTfE zfAYu7bZpsoL3R~G)0I8BdPtte^>`v{9}gO~r$w;>9@n`^ZGqV7_e9qDJzG8$jS&u% zR^e~(3E6!ss3Yv<!mv@eBKP4qI!jXXW1;v~@xz~~QTP=~@WU4w(=vXb$7enlirgZn zIMA=mJjVr$e}r;_Bl@>2-<}_gm&-M)aFdqt?$8*<fd!K(wgf!zq~5vclSXjTo%4Fc z(GK=wxc@PG_x2iWnpd<V$r_D)cWA0#to_4zF2J)tNAAwn5hI@!W0<SRSnSFl5kKx& zhxvrp=A)9TNAwSmzNEwIW+3pCyQjVa)_<M`>%s<oseWJKCAol$v#&UFh6#&6Tbg3A zXu*sHoiJOQWxEv!e{PCyFTpviAbq{to3AidE-)o<aP8mzfs}jV*)&_kv!RdPk~3wq z6>(vhHqu90S;1~uieTlZDu{7Xu$T+j$lQH}cqN&=!^p@HZ%~FRa=~|`lnlnup)?th z#YD0qP*ufS2Ca68zcgfk#y7A;i(a7^^oE^X+0hUu`|l|ht!wuyIm3x7e>ozq`&#U4 z_*zVzDr$8(lr8aU<~4X)9yB&&OF|9iDq3Co9l}D_QlKKK!@C*}8DigDnVfk2n{xC7 zmos$^kMSkn8tMxtc+QntZw?H}`{FhxM(0f`arh>DBsOQX{iaO*UEyW)rjM6il<AwQ zF)?x@^~QwMb60yT!6@<IaPTq3j`i1d!!S+El~wp_mQjG7R&mtd2r(=YMglx@9wyM8 zGLC}g&m2ejoP~SY7G_EGyy3HtIP<xI9%Gf>3{ONnVksgWM6bj=ITxP-u1j?qd_!27 z2ZDcr<`GZ(k<)nQPI(#dPQ(osf3w0qT7PVvk}j*l5Y!V7evvlfY1DDt?FD<R>GT0I z@%+g3iF^C2YBy`Wsot<`B@UITuOB*sRf>rtZ)2<A(4XLQ+Gu<lQnH29@6O-YxIHJl z3KwZQSiWn-M}o&$h4r-LeIU=1y2SB917h~{SBKI5@thC3LwwIQQzH=L?o@r?oZyV$ zkFHa?AD8XaH33F|1z={4xZun6%w=#i7@ix&hlube?uP=#oJK<*(4}y>9UFa-Ui8!1 zSHR!w8WIXbo&!hZiCV=28`RM<iAwN5TR7h)oeR*yC^JNerEXlLC5N8zw!q`0ZA6!h z)dXW1bs$j7?HV6jsb$<8JM7XEx}=m|KNzShR_%>>2l_15YE0jL`Mdv0VO-e1p;Ox( z-s}(KMji9LU!tqBl71zS-5`7GStLoeXKfGYL(v~JCxM2tPb-k2b$ZZ83QQBq<KR?^ z1xg{0Co9OJ3oleZ!@E>3%0L-bc8B*ae}{$5&98M<T_CzT>@!e*y@+@CX~-_5TCehC zs9Lz66BCgoT-TPI9=b#vt%#S=5);vT-x=@TMZltbok=phq+`*e{I8_<CE>WvuMasm z2H9}*;GvP**REar+}M$|hYs#rJ9_ZQ$mlaKtiE|o|C$^7*VdkS`q^g=j~qTaw)XJY z;K=Zi+LMDLM?Q0~HnQf^V;com^NMg4_JPvxX31=_kCHW<=L!yEWa*=P2`pBVS<alj zK{x5RU4O=NBm7;aZ|5hYN0>D!a$DdJQ!EaabQlJUQx9Mn92wy_;&<kd(>Kz(Zj{wE zBnbNF35`aCZ=+ej@SQm(0=}P+6lMD=J|nD!T!3YU;V$Nv_lwDTVlx%S#V>sVHNr+D zgq*Z+>f`=UnNv%N)&;I2j(p2k)IZ7<N1N;`1?^!k+}B{Fzy__`B0ix`L0+Kl#=BJZ zQy=cs)@i14j<vn9#>MQ@z)97-k624%l&w6*;e6K3sB<%0Aw}tmw1TvUb<_9oK3w!Y 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 Fe*k_&53B$H diff --git a/src/test/profile/selenium/firefoxprofile/XUL.mfasl b/src/test/profile/selenium/firefoxprofile/XUL.mfasl deleted file mode 100644 index fc03f92cb530ac481a6ff9303ae06dfdecbeb0dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2839668 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℞gbMMq#AZqrsR=gq|z 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%0AuYPy=D$k!rzO&u9Iq$Dl@FcL1 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𝔏?NBras1a?5xWm(G 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%0DZoH4n@9k_NB8?ASjpSd0A!jKf~dSaw1@X)x$J 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%0DiRL;g1>3UJ<rWb)0)q5Tl2NH#}2LHff9VKHl8UU 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 U5G6YRB34$$UYosmF=Z_OKk(RmCjbBd diff --git a/src/test/profile/selenium/firefoxprofile/bookmarkbackups/bookmarks-2011-04-29.json b/src/test/profile/selenium/firefoxprofile/bookmarkbackups/bookmarks-2011-04-29.json deleted file mode 100644 index 22d6a1801ba..00000000000 --- a/src/test/profile/selenium/firefoxprofile/bookmarkbackups/bookmarks-2011-04-29.json +++ /dev/null @@ -1 +0,0 @@ -{"title":"","id":1,"dateAdded":1304093457830074,"lastModified":1304093457830493,"type":"text/x-moz-place-container","root":"placesRoot","children":[{"title":"Bookmarks Menu","id":2,"parent":1,"dateAdded":1304093457830267,"lastModified":1304093458064020,"type":"text/x-moz-place-container","root":"bookmarksMenuFolder","children":[{"title":"Recently Bookmarked","id":7,"parent":2,"annos":[{"name":"Places/SmartBookmark","flags":0,"expires":4,"mimeType":null,"type":3,"value":"RecentlyBookmarked"}],"type":"text/x-moz-place","uri":"place:folder=BOOKMARKS_MENU&folder=UNFILED_BOOKMARKS&folder=TOOLBAR&sort=12&excludeQueries=1&excludeItemIfParentHasAnnotation=livemark%2FfeedURI&maxResults=10&queryType=1"},{"index":1,"title":"Recent Tags","id":8,"parent":2,"annos":[{"name":"Places/SmartBookmark","flags":0,"expires":4,"mimeType":null,"type":3,"value":"RecentTags"}],"type":"text/x-moz-place","uri":"place:sort=14&type=6&maxResults=10&queryType=1"},{"index":2,"title":"","id":9,"parent":2,"dateAdded":1304093457979095,"lastModified":1304093457979095,"type":"text/x-moz-place-separator"},{"index":3,"title":"Get Bookmark Add-ons","id":10,"parent":2,"dateAdded":1304093458053322,"lastModified":1304093458056185,"type":"text/x-moz-place","uri":"https://addons.mozilla.org/en-US/firefox/bookmarks/"},{"index":4,"title":"","id":13,"parent":2,"dateAdded":1304093458058082,"lastModified":1304093458058082,"type":"text/x-moz-place-separator"},{"index":5,"title":"Ubuntu and Free Software links","id":14,"parent":2,"dateAdded":1181129907000000,"lastModified":1180687506000000,"annos":[{"name":"bookmarkProperties/description","flags":0,"expires":4,"mimeType":null,"type":3,"value":"Information and resources about Ubuntu, Debian and Free Software in general"}],"type":"text/x-moz-place-container","children":[{"title":"Ubuntu","id":15,"parent":14,"dateAdded":1181129907000000,"lastModified":1181129907000000,"type":"text/x-moz-place","uri":"http://www.ubuntulinux.org/"},{"index":1,"title":"Ubuntu Wiki (community-edited website)","id":16,"parent":14,"dateAdded":1181129907000000,"lastModified":1181129907000000,"type":"text/x-moz-place","uri":"http://wiki.ubuntu.com/"},{"index":2,"title":"Make a Support Request to the Ubuntu Community","id":17,"parent":14,"dateAdded":1181129907000000,"lastModified":1181129907000000,"type":"text/x-moz-place","uri":"https://answers.launchpad.net/ubuntu/+addquestion"},{"index":3,"title":"Debian (Ubuntu is based on Debian)","id":18,"parent":14,"dateAdded":1181129907000000,"lastModified":1181129907000000,"type":"text/x-moz-place","uri":"http://www.debian.org/"},{"index":4,"title":"Ubuntu One - The personal cloud that brings your digital life together","id":19,"parent":14,"dateAdded":1304093458063232,"lastModified":1181129907000000,"type":"text/x-moz-place","uri":"https://one.ubuntu.com/"}]},{"index":6,"title":"Mozilla Firefox","id":20,"parent":2,"dateAdded":1304093458064020,"lastModified":1180687506000000,"type":"text/x-moz-place-container","children":[{"title":"Help and Tutorials","id":21,"parent":20,"dateAdded":1304093458064259,"lastModified":1304093458064952,"type":"text/x-moz-place","uri":"http://www.mozilla.com/en-US/firefox/help/"},{"index":1,"title":"Customize Firefox","id":22,"parent":20,"dateAdded":1304093458065128,"lastModified":1304093458065763,"type":"text/x-moz-place","uri":"http://www.mozilla.com/en-US/firefox/customize/"},{"index":2,"title":"Get Involved","id":23,"parent":20,"dateAdded":1304093458065939,"lastModified":1304093458066566,"type":"text/x-moz-place","uri":"http://www.mozilla.com/en-US/firefox/community/"},{"index":3,"title":"About Us","id":24,"parent":20,"dateAdded":1304093458066740,"lastModified":1304093458067366,"type":"text/x-moz-place","uri":"http://www.mozilla.com/en-US/firefox/about/"}]}]},{"index":1,"title":"Bookmarks Toolbar","id":3,"parent":1,"dateAdded":1304093457830345,"lastModified":1304093458057409,"annos":[{"name":"bookmarkProperties/description","flags":0,"expires":4,"mimeType":null,"type":3,"value":"Add bookmarks to this folder to see them displayed on the Bookmarks Toolbar"}],"type":"text/x-moz-place-container","root":"toolbarFolder","children":[{"title":"Most Visited","id":6,"parent":3,"annos":[{"name":"Places/SmartBookmark","flags":0,"expires":4,"mimeType":null,"type":3,"value":"MostVisited"}],"type":"text/x-moz-place","uri":"place:sort=8&redirectsMode=2&maxResults=10"},{"index":1,"title":"Getting Started","id":11,"parent":3,"dateAdded":1304093458056989,"lastModified":1304093458057261,"type":"text/x-moz-place","uri":"http://www.mozilla.com/en-US/firefox/central/"},{"index":2,"title":"Latest Headlines","id":12,"parent":3,"dateAdded":1304093458057409,"lastModified":1304093467774535,"livemark":1,"annos":[{"name":"placesInternal/READ_ONLY","flags":0,"expires":4,"mimeType":null,"type":1,"value":1},{"name":"livemark/feedURI","flags":0,"expires":4,"mimeType":null,"type":3,"value":"http://fxfeeds.mozilla.com/en-US/firefox/headlines.xml"},{"name":"livemark/siteURI","flags":0,"expires":4,"mimeType":null,"type":3,"value":"http://fxfeeds.mozilla.com/en-US/firefox/livebookmarks/"},{"name":"livemark/expiration","flags":0,"expires":4,"mimeType":null,"type":2,"value":1304094067195},{"name":"livemark/loadfailed","flags":0,"expires":4,"mimeType":null,"type":1,"value":1}],"type":"text/x-moz-place-container","children":[]}]},{"index":2,"title":"Tags","id":4,"parent":1,"dateAdded":1304093457830419,"lastModified":1304093457830811,"type":"text/x-moz-place-container","root":"tagsFolder","children":[]},{"index":3,"title":"Unsorted Bookmarks","id":5,"parent":1,"dateAdded":1304093457830493,"lastModified":1304093457976994,"type":"text/x-moz-place-container","root":"unfiledBookmarksFolder","children":[]}]} \ No newline at end of file diff --git a/src/test/profile/selenium/firefoxprofile/cert8.db b/src/test/profile/selenium/firefoxprofile/cert8.db deleted file mode 100644 index ac40a3325724b598ba93a314d250bd03eb7f479f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 zcmeI)F$w}P5CFjS6uHXI_nfb=x3I9e1Fe0AAM*=#)`FF2lC!k)NHq&fmLz1uJYZwF z-bF+cvA9NTQW>j=Sz2;N`z_LW*_fBL9F3PQ{rQ&ma^yQXt4BNjr+Qxv2@oJafB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+z*GWFJiAACPx%%E2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+Kt+Kz4G-AvkEg@XPc=rs zI|K+2AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!Cs>0<Vg52ecwUfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7ehYj6JGXse diff --git a/src/test/profile/selenium/firefoxprofile/compatibility.ini b/src/test/profile/selenium/firefoxprofile/compatibility.ini deleted file mode 100644 index 2bc67ed2e86..00000000000 --- a/src/test/profile/selenium/firefoxprofile/compatibility.ini +++ /dev/null @@ -1,5 +0,0 @@ -[Compatibility] -LastVersion=3.6.16_20110323142937/20110323142937 -LastOSABI=Linux_x86-gcc3 -LastPlatformDir=/usr/lib/firefox-3.6.16 -LastAppDir=/usr/lib/firefox-3.6.16 diff --git a/src/test/profile/selenium/firefoxprofile/compreg.dat b/src/test/profile/selenium/firefoxprofile/compreg.dat deleted file mode 100644 index 81f477750a6..00000000000 --- a/src/test/profile/selenium/firefoxprofile/compreg.dat +++ /dev/null @@ -1,1957 +0,0 @@ -Generated File. Do not edit. - -[HEADER] -Version,0,5 - -[COMPONENTS] -rel:NetworkGeolocationProvider.js,1300895266000 -rel:nsUrlClassifierListManager.js,1300895266000 -rel:nsPlacesAutoComplete.js,1300895266000 -rel:nsHandlerService.js,1300895266000 -rel:libbrowsercomps.so,1300895506000 -rel:FeedProcessor.js,1300895266000 -rel:nsINIProcessor.js,1300895266000 -rel:nsBlocklistService.js,1300895266000 -rel:nsLoginInfo.js,1300895266000 -rel:nsWebHandlerApp.js,1300895266000 -rel:nsMicrosummaryService.js,1300895266000 -rel:nsSafebrowsingApplication.js,1300895266000 -rel:nsContentDispatchChooser.js,1300895266000 -rel:nsUrlClassifierLib.js,1300895266000 -rel:nsSearchService.js,1300895266000 -rel:txEXSLTRegExFunctions.js,1300895266000 -rel:nsBrowserContentHandler.js,1300895266000 -rel:pluginGlue.js,1300895266000 -rel:nsProxyAutoConfig.js,1300895266000 -rel:nsDefaultCLH.js,1300895266000 -rel:nsExtensionManager.js,1300895266000 -rel:GPSDGeolocationProvider.js,1300895266000 -rel:nsLoginManager.js,1300895266000 -rel:nsHelperAppDlg.js,1300895266000 -rel:nsBadCertHandler.js,1300895266000 -rel:nsPrivateBrowsingService.js,1300895266000 -rel:nsTaggingService.js,1300895266000 -rel:nsSidebar.js,1300895266000 -rel:libnkgnomevfs.so,1300895525000 -rel:nsAddonRepository.js,1300895266000 -abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-service.js,1273149890000 -rel:libmozgnome.so,1300895525000 -rel:libimgicon.so,1300895506000 -rel:nsPlacesTransactionsService.js,1300895266000 -rel:nsSetDefaultBrowser.js,1300895266000 -abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-http-observer.js,1273149890000 -rel:nsContentPrefService.js,1300895266000 -rel:libdbusservice.so,1300895506000 -rel:nsUpdateTimerManager.js,1300895266000 -abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-channel-listener.js,1273149890000 -rel:nsSessionStartup.js,1300895266000 -rel:nsFilePicker.js,1300895266000 -rel:nsTryToClose.js,1300895266000 -rel:nsSessionStore.js,1300895266000 -rel:nsLivemarkService.js,1300895266000 -rel:FeedConverter.js,1300895266000 -rel:nsSearchSuggestions.js,1300895266000 -abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ubufox@ubuntu.com/components/aboutHome.js,1288194175000 -rel:nsLoginManagerPrompter.js,1300895266000 -rel:libbrowserdirprovider.so,1300895506000 -rel:nsPlacesDBFlush.js,1300895266000 -abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-trace-service.js,1273149890000 -abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ubufox@ubuntu.com/components/pluginGlue.js,1288194175000 -rel:nsURLFormatter.js,1300895266000 -rel:WebContentConverter.js,1300895266000 -rel:nsFormAutoComplete.js,1300895266000 -rel:storage-mozStorage.js,1300895266000 -rel:FeedWriter.js,1300895266000 -rel:nsBrowserGlue.js,1300895266000 -rel:storage-Legacy.js,1300895266000 -rel:nsDownloadManagerUI.js,1300895266000 -rel:fuelApplication.js,1300895266000 -abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-annotations.js,1273149890000 -rel:jsconsole-clhandler.js,1300895266000 - -[CLASSIDS] -{bfc310d2-38a0-11d3-8cd3-0060b0fc14a3},,application/x-mozilla-static,,nsLayoutModule -{a7f800e0-4306-11d4-98d0-001083010e9b},@mozilla.org/uriloader/external-helper-app-service;1,application/x-mozilla-static,Netscape External Helper App Service,docshell_provider -{a47ef526-6e48-4574-9d60-3164e271f75e},,application/x-mozilla-static,,nsLayoutModule -{75656ad9-bd13-4c5d-939a-ec6351eea0cc},,application/x-mozilla-static,,nsComposerModule -{ba6151ad-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{6ec5f479-8e13-4403-b6ca-fe4c2dca14fd},,text/javascript,,rel:nsINIProcessor.js -{495eca42-0a5c-11d4-a135-005004832142},,application/x-mozilla-static,,nsUConvModule -{0cd233e0-7a86-11d3-915c-006008a6edf6},,application/x-mozilla-static,,nsI18nModule -{73bb7c12-dbab-4ae2-aecf-a0331dec916f},,application/x-mozilla-static,,nsUCvMathModule -{cb6593e0-f9b2-11d2-bdd6-000064657374},@mozilla.org/js/xpc/XPConnect;1,application/x-mozilla-static,,xpconnect -{e768ebef-70f9-4fe3-8835-4f4f3fd996e2},,application/x-mozilla-static,,nsUCvMathModule -{229fa115-9412-4d32-baf3-2fc407f76fb1},,text/javascript,,rel:FeedConverter.js -{4bfaa9f0-1dd2-11b2-afae-a82cbaa0b606},,application/x-mozilla-static,,PKI -{f1299dc2-1dd1-11b2-a347-ee6b7660e048},,application/x-mozilla-static,,JavaScript_Debugger -{c1751cfc-e8f1-4ade-b0bb-f74edfb8ef6a},,text/javascript,,rel:nsPlacesDBFlush.js -{5eb7c3c1-ec1f-4007-87cc-eefb37d68ce6},,application/x-mozilla-static,,nsToolkitCompsModule -{6394eeae-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{d4f2b600-b5c1-11d6-b483-cc97c63e567c},,application/x-mozilla-static,,nsLayoutModule -{748a1132-671a-409a-8d1d-f1cdf6b3a6b4},,application/x-mozilla-static,,nsI18nModule -{fcacef24-2b40-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{a496d0a2-dff7-4e23-bd65-1ca742fa178a},,application/x-mozilla-static,,NSS -{2d524fd3-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{8323fad0-2102-11d4-8142-000064657374},,application/x-mozilla-static,,nsParserModule -{16786594-0296-4471-8096-8f84497ca428},,application/x-mozilla-static,,NSS -{a5570462-1dd1-11b2-9d19-df30a27fbdc4},,application/x-mozilla-static,,nsFileViewModule -{c0773e90-5799-4eff-ad03-3ebcd85624ac},,application/x-mozilla-static,,RemoteServiceModule -{ba6151ba-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{f7fa4581-238e-11d5-a73c-ab64fb68f2bc},,application/x-mozilla-static,,embedcomponents -{8b1ae382-51a9-4972-b930-56977a57919d},,text/javascript,,rel:nsWebHandlerApp.js -{10f2f5f0-f103-4901-980f-ba11bd70d60d},,application/x-mozilla-static,,nsToolkitCompsModule -{9416bfb4-1f93-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{be9a53ae-c7e9-11d3-8cda-0060b0fc14a3},@mozilla.org/network/file-input-stream;1,application/x-mozilla-static,nsFileInputStream,necko -{a0f827e1-8ab6-11d5-a14b-005004832142},,application/x-mozilla-static,,nsUConvModule -{a6cf9124-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsLayoutModule -{d3f69889-e13a-4321-980c-a39332e21f34},,application/x-mozilla-static,,nsWidgetGtk2Module -{05bae29d-8aef-486d-84aa-53f48f146811},,application/x-mozilla-static,,xpconnect -{660d8ca8-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eebb-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{0c4f1ddc-1dd2-11b2-9d95-f2fdf113044b},,application/x-mozilla-static,,NSS -{7b8556ac-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{a15789aa-8903-462b-81e9-4aa2cff4d5cb},,application/x-mozilla-static,,NSS -{12663f3a-a311-4606-83eb-b6b9108dcc36},,text/javascript,,rel:pluginGlue.js -{bc0017e3-2438-47be-a567-41db58f17627},,application/x-mozilla-static,,docshell_provider -{ff41913b-546a-4bff-9201-dc9b2c032eba},@mozilla.org/network/url-parser;1?auth=maybe,application/x-mozilla-static,nsStdURLParser,necko -{7fa5237d-b0eb-438f-9e50-ca0166e63788},,application/x-mozilla-static,,necko -{3c1c0163-9bd0-11d3-9d09-0050040007b2},,application/x-mozilla-static,,nsUConvModule -{efc323e1-ec62-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{95c963b7-20b2-11db-92f6-001422106990},,text/javascript,,rel:FeedProcessor.js -{d25e0511-2bae-11d4-9d10-0050040007b2},,application/x-mozilla-static,,nsChardetModule -{b69155f4-a8bf-453d-8653-91d1456e1d3d},,text/javascript,,rel:nsTryToClose.js -{7c657d14-ec5e-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eea6-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{ba61519b-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{5d0ce354-df01-421a-83fb-7ead0990c24e},,text/javascript,,rel:nsBrowserContentHandler.js -{831f8f13-7aa8-485f-b02e-77c881cc5773},,application/x-mozilla-static,,necko -{660d8ca6-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{7294fe9c-14d8-11d5-9882-00c04fa02f40},,application/x-mozilla-static,,docshell_provider -{eab9012e-5f74-4cbc-b2b5-a590235513cc},,text/javascript,,rel:nsBrowserGlue.js -{ba6151a3-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{eaca2576-0d4a-11d3-9d7e-0060088f9ff7},,application/x-mozilla-static,,nsLayoutModule -{b88a4712-eb52-4c10-9b85-bf5894b510f0},,application/x-mozilla-static,,nsLayoutModule -{ba6151b2-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{0c351177-0159-4500-86b0-a219dfde4258},,application/x-mozilla-static,,nsLayoutModule -{495eca47-0a5c-11d4-a135-005004832142},,application/x-mozilla-static,,nsUConvModule -{7dfdf0d1-aff6-4a34-bad1-d0fe74601642},,text/javascript,,rel:nsDownloadManagerUI.js -{da5b130a-1dd1-11b2-ad47-f455b1814a78},,application/x-mozilla-static,,nsGfxModule -{3ff8fb9f-ee63-48df-89f0-dace0242fd82},,application/x-mozilla-static,,necko -{02bf7a2a-39d8-4a23-a50c-2cbb085ab7a5},,application/x-mozilla-static,,necko -{98d41c21-ccf3-11d2-b3b1-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{6803cac5-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{a62af1ba-79b3-4896-8aaf-b148bfce4280},,application/x-mozilla-static,,necko -{18c2f98d-b09f-11d2-bcde-00805f0e1353},,application/x-mozilla-static,,nsSoftwareUpdate -{fb0bbc5c-452e-4783-b32c-80124693d871},,application/x-mozilla-static,,NSS -{e3fa9d0a-1dd1-11b2-bdef-8c720b597445},,application/x-mozilla-static,,nsToolkitCompsModule -{660d8ca0-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eeb3-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{ba6151b7-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{019718e3-cdb5-11d2-8d3c-000000000000},,application/x-mozilla-static,,nsLayoutModule -{7b8556a4-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{9fe5d975-09bd-44aa-a01a-66402ea28657},,application/x-mozilla-static,,mozSpellCheckerModule -{ea06d4e2-2b3d-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{2d524fd8-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{c31f4883-839b-45f6-82ad-a6a9bc5ad599},,text/javascript,,rel:nsPrivateBrowsingService.js -{12bb8f17-2389-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsChardetModule -{6b8bdffc-3394-417d-be83-a81b7c0f63bf},,application/x-mozilla-static,,docshell_provider -{ea06d4e6-2b3d-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{de9472d0-8034-11d3-9399-00104ba0fd40},,application/x-mozilla-static,,necko -{c0844a84-5a12-4808-80a8-809cb002bb4f},,text/javascript,,rel:nsPlacesTransactionsService.js -{5060b803-340e-11d5-be5b-b3e063ec6a3c},,application/x-mozilla-static,,nsFindComponent -{a6cf9107-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsParserModule -{21dd6a02-413c-11d3-b3c3-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{c5de4da2-d667-42d2-b8c2-efdbcf3302ef},,application/x-mozilla-static,,nsUConvModule -{57cf9383-3405-11d5-be5b-aa20fa2cf37c},,application/x-mozilla-static,,embedcomponents -{9445791f-fa4c-4669-b174-df5032bb67b3},,application/x-mozilla-static,,necko -{ccd0e960-7947-4635-b70e-4c661b63d675},,application/x-mozilla-static,,necko -{a6cf9129-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsWidgetGtk2Module -{2f977d53-5485-11d4-87e2-0010a4e75ef2},,application/x-mozilla-static,,nsWidgetGtk2Module -{d4214e92-fb94-11d2-bdd8-00104bde6048},,application/x-mozilla-static,,nsRDFModule -{c401eb80-f9ea-11d3-bb6f-e732b73ebe7c},,application/x-mozilla-static,,nsWidgetGtk2Module -{aa892eb4-ffbf-477d-9f9a-06c995ae9f27},,text/javascript,,rel:nsSearchSuggestions.js -{24f92fae-f793-473b-8061-713408bd11d5},,application/x-mozilla-native,,rel:libbrowsercomps.so -{ba6151aa-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{ce02d538-0217-47a3-a589-b51790fdd8ce},,application/x-mozilla-static,,docshell_provider -{2587e382-1324-11d4-a652-eadbb2be3484},,application/x-mozilla-static,,application -{2b026890-5a2e-4981-ada2-a600358947b4},,application/x-mozilla-static,,nsUConvModule -{214c48a0-b57f-11d4-959c-0020183bf181},,application/x-mozilla-static,,docshell_provider -{74b7a390-3b41-11d4-8a80-006008c844c3},,application/x-mozilla-static,,NSS -{22117140-9c6e-11d3-aaf1-00805f8a4905},,text/javascript,,rel:nsSidebar.js -{9de95a0c-39a4-4d64-9a53-17940dd7cabb},,application/x-mozilla-static,,nsPlacesModule -{66856477-6596-40eb-bb87-59ca2dabb6f7},,application/x-mozilla-static,,nsLayoutModule -{dbded6ec-edbf-4054-a834-287b82c260f9},,text/javascript,,rel:nsBadCertHandler.js -{892ffeb0-3f80-11d3-a16c-0050041caf44},,application/x-mozilla-static,,necko -{929d9320-251e-11d4-8a7c-006008c844c3},,application/x-mozilla-static,,NSS -{1f4dbcf7-245c-4c8c-943d-8a1da0495e8a},,application/x-mozilla-static,,necko -{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980},,application/x-mozilla-native,,rel:libbrowsercomps.so -{6394eeab-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{ab1da296-6125-40ba-96d0-47a8282ae3db},,application/x-mozilla-static,,nsParserModule -{d0272978-beab-4adc-a3d4-04b76acfa4e7},,text/javascript,,rel:nsPlacesAutoComplete.js -{f30bc0a2-958b-4287-bf62-ce38ba0c811e},,application/x-mozilla-static,,docshell_provider -{66634f68-be19-42d0-a4ca-d1c21fa059b8},,application/x-mozilla-static,,nsUConvModule -{2d524fd0-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{ff8780a5-bbb1-4bc5-8ee7-057e7bc5c925},,application/x-mozilla-static,,nsUConvModule -{2002f784-3960-11d3-b3c3-00805f8a6670},,application/x-mozilla-static,,nsChardetModule -{2d96b3d0-c051-11d1-a827-0040959a28c9},,application/x-mozilla-static,,nsWidgetGtk2Module -{67ba681d-5485-4fff-952c-2ee337ffdcd6},,application/x-mozilla-static,,NSS -{26acb1f0-28fc-43bc-867a-a46aabc85dd4},,text/javascript,,rel:FeedProcessor.js -{ff8fe7ec-2f74-4408-b742-6b7a546029a8},,application/x-mozilla-static,,necko -{62db0002-dbb6-43f4-8fb7-9d2538bc5747},,application/x-mozilla-static,,nsComposerModule -{5b256c10-22d8-4109-af92-1253035e9fcb},,application/x-mozilla-static,,NSS -{b57f97c1-0d70-11d3-8aae-00600811a836},,application/x-mozilla-static,,nsUConvModule -{4e4aae11-8901-46cc-8217-dad7c5415873},,application/x-mozilla-static,,embedcomponents -{7b8556a9-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{439400d3-6f23-43db-8b06-8aafe1869bd8},,application/x-mozilla-static,,necko -{a578e0a4-f76b-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{9416bfb1-1f93-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{78804a84-8173-42b6-bb94-789f0816a810},@mozilla.org/network/url-parser;1?auth=no,application/x-mozilla-static,nsNoAuthURLParser,necko -{bfd1a792-ad9f-11d3-bdc7-0050040a9b44},,application/x-mozilla-static,,docshell_provider -{6803caca-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{a47e9526-6e48-4574-9d6c-3164e271f74e},,application/x-mozilla-static,,nsLayoutModule -{948a0023-e3a7-11d2-96cf-0060b0fb9956},,application/x-mozilla-static,,nsWidgetGtk2Module -{8dbe7246-1dd2-11b2-9b8f-b9a849e4403a},,application/x-mozilla-static,,necko -{8b5314ba-db01-11d2-96ce-0060b0fb9956},,application/x-mozilla-static,,nsWidgetGtk2Module -{cf7fd51f-aba2-44c1-9ff0-11f7508efcd4},,application/x-mozilla-static,,nsLayoutModule -{7d7008a0-c49a-11d3-9b22-0080c7cb1080},,application/x-mozilla-static,,necko -{77cfaaf1-1cf4-11d3-8aaf-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eeb8-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{0099907d-123c-4853-a46a-43098b5fb68c},@mozilla.org/appshell/appShellService;1,application/x-mozilla-static,AppShell Service,appshell -{cb60980e-18a5-4a77-9110-8146614ca7f0},,application/x-mozilla-static,,nsFileViewModule -{ba6151a2-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{379c2771-ec77-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{49b38f14-6193-11d3-b3c5-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{12bb8f1c-2389-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{e6fd9940-899d-11d2-8eae-00805f29f370},,application/x-mozilla-static,,nsLayoutModule -{9226888e-da08-11d3-8cda-0060b0fc14a3},@mozilla.org/network/buffered-input-stream;1,application/x-mozilla-static,nsBufferedInputStream,necko -{3a9cd622-264d-11d4-ba06-0060b0fc76dd},,application/x-mozilla-static,,nsLayoutModule -{3b581fd4-3497-426c-8f61-3658b971cb80},,application/x-mozilla-static,,nsLayoutModule -{36a1d3b3-d886-4317-96ff-87b0005cfef7},,application/x-mozilla-static,,NSS -{bf88b48c-fd8e-40b4-ba36-c7c3ad6d8ac9},,application/x-mozilla-static,,embedcomponents -{6a4d4c1e-a74a-4320-8124-16233a0183d6},,application/x-mozilla-static,,nsSoftwareUpdate -{920307b0-c6e8-11d2-8aa8-00600811a836},,application/x-mozilla-static,,nsUConvModule -{7c657d11-ec5e-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eea3-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{9416bfbe-1f93-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{2bf64764-997f-450d-af96-3028d1a902b0},,application/x-mozilla-static,,nsI18nModule -{fcacef23-2b40-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{0885d4f8-f7b8-4cda-902e-94ba38bc256e},,application/x-mozilla-static,,necko -{a380e9c0-cb39-11da-a94d-0800200c9a66},,text/javascript,,abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-service.js -{7c02eadc-0076-4d03-998d-80d779c48589},,application/x-mozilla-static,,nsSecurityManagerModule -{895db6c7-dbdf-40ea-9f64-b175033243dc},,application/x-mozilla-static,,satchel -{78481e4a-50e4-4489-b68a-ef82670ed63f},,application/x-mozilla-native,,rel:libbrowsercomps.so -{e12752f0-ee9a-11d1-a82a-0040959a28c9},,application/x-mozilla-static,,nsGfxModule -{47049e42-1d87-482a-984d-56ae185e367a},,application/x-mozilla-static,,nsChromeModule -{8df290ae-dcaa-4c11-98a5-2429a4dc97bb},,text/javascript,,rel:nsContentPrefService.js -{ba6151af-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{ffc08380-256c-11d5-9905-001083010e9b},,application/x-mozilla-native,,rel:libimgicon.so -{376ff2c1-9bf6-418a-b143-3340c00112f7},,application/x-mozilla-static,,nsImageLib2Module -{495eca44-0a5c-11d4-a135-005004832142},,application/x-mozilla-static,,nsUConvModule -{972d8d8f-f0da-11d4-9885-00c04fa0cf4b},,application/x-mozilla-static,,nsLayoutModule -{56388dad-287b-4240-a785-85c394012503},,application/x-mozilla-static,,necko -{0f78da56-8321-11d2-8eac-00805f29f370},,application/x-mozilla-static,,nsRDFModule -{e56f5e01-c7cc-4675-a9d7-b8f1e4127295},,application/x-mozilla-static,,docshell_provider -{6394eec0-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{0404d02a-01ca-aaab-4762-944b1bf2f7b5},,application/x-mozilla-static,,nsLayoutModule -{a35d1cd4-c505-4d2d-a0f9-aef00b7ce5a5},,application/x-mozilla-static,,nsLayoutModule -{0032d852-1dd2-11b2-95f7-e0a1910ed2da},,application/x-mozilla-static,,nsRDFModule -{0a3be523-0f2a-32cc-ccd8-1e5986d5a79d},,text/javascript,,rel:GPSDGeolocationProvider.js -{87ed1160-e2f2-11d3-b32f-004005a7a7e4},,application/x-mozilla-static,,nsUCvMathModule -{6394eeb0-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{7b8556a1-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{0cb0d9a0-f503-11d3-b32f-004005a7a7e4},,application/x-mozilla-static,,nsUCvMathModule -{a59da935-4091-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{3f6fe6a2-ac0a-11d2-b3ae-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{2d524fd5-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{6f8366c7-2195-42ce-a149-48e26aeb9c24},,application/x-mozilla-static,,nsLayoutModule -{e332db00-e076-11d3-b32f-004005a7a7e4},,application/x-mozilla-static,,nsUCvMathModule -{3decd6c8-30ef-11d3-8cd0-0060b0fc14a3},,application/x-mozilla-static,,necko -{e8b8bdb7-c96c-4d82-9c6f-2b3c585ec7ea},,application/x-mozilla-static,,nsPlacesModule -{f1eac762-87e9-11d3-af80-00a024ffc08c},,application/x-mozilla-static,,docshell_provider -{ba6151bc-ec62-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{e6a3f533-4ffa-4615-8eb4-d4e72d883fa7},,text/javascript,,rel:nsContentPrefService.js -{2e9b69dd-9087-438c-8b5d-f77b553abefb},,application/x-mozilla-static,,docshell_provider -{e64f152a-9f07-11d3-8cda-0060b0fc14a3},@mozilla.org/network/protocol;1?name=resource,application/x-mozilla-static,nsResProtocolHandler,necko -{26a4a019-2827-4a89-a85c-5931a678823a},,text/javascript,,rel:nsUrlClassifierLib.js -{4a6212db-accb-11d3-b765-0060b0b6cecb},,application/x-mozilla-static,,nsSecurityManagerModule -{bbbb1d61-438f-4436-92ed-8308e5830fb0},,application/x-mozilla-static,,mozStorageModule -{7319788a-fe93-4db3-9f39-818cf08f4256},,text/javascript,,rel:nsSearchService.js -{841387c8-72e6-484b-9296-bf6eea80d58a},,application/x-mozilla-static,,nsWidgetGtk2Module -{7fbd2146-5ff4-4674-b069-a7bbce66e773},,application/x-mozilla-static,,nsComposerModule -{d0f9db12-249c-11d5-9905-001083010e9b},,application/x-mozilla-native,,rel:libimgicon.so -{6803cacf-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{ed0244e0-c144-11d2-8f4c-006008159b0c},,application/x-mozilla-static,,nsLayoutModule -{14632191-ac21-4bdf-83e7-2363ad17e838},,application/x-mozilla-static,,nsLayoutModule -{a6cf9126-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsLayoutModule -{5f43022c-6194-4b37-b26d-e41024625264},,application/x-mozilla-native,,rel:libmozgnome.so -{4d977f60-fbe7-4583-8cb7-f5ed882293ef},,application/x-mozilla-static,,nsLayoutModule -{c2710d40-6f4d-4b7f-9778-76ae5166648c},,application/x-mozilla-static,,nsLayoutModule -{6394eebd-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{7b8556ae-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{379c2776-ec77-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{ea617873-3b73-4efd-a2c4-fc39bfab809d},,application/x-mozilla-static,,necko -{db340cc2-7f50-4ea3-8427-f529daf6dc87},,application/x-mozilla-static,,satchel -{f6d5ebbd-34f4-487d-9d10-3d34123e3eb9},,application/x-mozilla-static,,tkAutoCompleteModule -{6987230e-0098-4e78-bc5f-1493ee7519fa},,application/x-mozilla-static,,nsWidgetGtk2Module -{f01cb3e7-4ace-414e-a2b7-eaba03e9c86c},,application/x-mozilla-static,,nsUCvMathModule -{af7a9952-aa48-11d2-b3ae-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{8c2023b9-175c-477e-9761-44ae7b549756},,text/javascript,,rel:storage-mozStorage.js -{4ca6b67b-5cc7-4e71-a98a-97af1c134862},,application/x-mozilla-static,,nsPermissionsModule -{64f300a1-c88c-11d3-97fb-00400553eef0},,application/x-mozilla-static,,nsLayoutModule -{a4bd2161-7892-4389-8d5a-3111a6d17ec7},,application/x-mozilla-static,,PKI -{66230b2b-17fa-4bd3-abf4-07986151022d},,application/x-mozilla-static,,necko -{1dcc23b0-d4cb-11dc-9ad6-479d56d89593},,text/javascript,,rel:nsTaggingService.js -{5d0fcdd0-4daa-11d2-b328-00805f8a3859},,application/x-mozilla-static,,nsLayoutModule -{a431b276-f77d-4b83-9b37-872cf2fbcc2a},,application/x-mozilla-static,,nsUConvModule -{8f666a11-04a0-11d3-b3b9-00805f8a6670},,application/x-mozilla-static,,nsI18nModule -{1cd91b88-1dd2-11b2-92e1-ed22ed298000},@mozilla.org/preferences-service;1,application/x-mozilla-static,Preferences Server,nsPrefModule -{dab3a846-3a59-4fc2-9745-c6ff48776f00},,application/x-mozilla-static,,mozStorageModule -{6394eea8-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{0958b101-9ada-11d2-8ebc-00805f29f370},,application/x-mozilla-static,,nsRDFModule -{9158c470-86e4-11d4-9be2-00e09872a416},,application/x-mozilla-static,,necko -{b9507aec-1dd1-11b2-8cd5-c48ee0c50307},,application/x-mozilla-static,,NSS -{c64d0bcb-8270-4ca7-a0b3-3380c8ffecb5},,text/javascript,,rel:nsSafebrowsingApplication.js -{b6ed3030-6183-11d3-a178-0050041caf44},,application/x-mozilla-static,,necko -{c07e81e0-ef12-11d2-92b6-00105a1b0d64},@mozilla.org/network/socket-transport-service;1,application/x-mozilla-static,nsSocketTransportService,necko -{64d6174c-1496-4ffd-87f2-da2670f88934},,application/x-mozilla-static,,mozSpellCheckerModule -{fb5c1775-1bbd-4b9c-abb0-ae7acd29e87e},,application/x-mozilla-static,,nsLayoutModule -{2002f781-3960-11d3-b3c3-00805f8a6670},,application/x-mozilla-static,,nsChardetModule -{1f34bc80-1bc7-11d6-a384-d705dd0746fc},,application/x-mozilla-static,,nsLayoutModule -{ba61519a-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{8b042e22-6f87-11d3-b3c8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{4dc30689-929d-425e-a709-082c6294e542},,application/x-mozilla-static,,nsLayoutModule -{ba6151b4-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{660d8ca5-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{4f6b5e00-0c36-11d5-a535-0010a401eb10},,application/x-mozilla-static,,nsCookieModule -{495eca49-0a5c-11d4-a135-005004832142},,application/x-mozilla-static,,nsUConvModule -{a578e0a1-f76b-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{aeb8936f-219c-4d3c-8385-d9382daa551a},,application/x-mozilla-static,,mozSpellCheckerModule -{bacd8ad0-552f-11d3-a9f7-000064657374},,application/x-mozilla-static,,nsLayoutModule -{6803cac7-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{0bec75a8-1dd2-11b2-863a-f69f77c31371},,application/x-mozilla-static,,PKI -{d5eb483c-67c0-4286-a4a6-330e58a82300},,application/x-mozilla-static,,nsUCvMathModule -{9286e71a-621a-4b91-851e-9984c1a2e81a},,application/x-mozilla-static,,nsLayoutModule -{0704e7c0-a758-11d2-9119-006008a6edf6},,application/x-mozilla-static,,nsI18nModule -{4aef38b7-6364-4e23-a5e7-12f837fbbd9c},,application/x-mozilla-static,,nsLayoutModule -{660d8ca2-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eeb5-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{7b8556a6-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{ba61519f-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{5d5d92cd-6bf8-11d9-bf4a-000a95dc234c},,application/x-mozilla-static,,nsLayoutModule -{2d524fda-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{7baf62e0-8e61-11d2-8eb1-00805f29f370},,application/x-mozilla-static,,nsRDFModule -{136e2c4d-c5a4-477c-b131-d93d7d704f64},@mozilla.org/privatebrowsing-wrapper;1,application/x-mozilla-native,PrivateBrowsing Service C++ Wrapper,rel:libbrowsercomps.so -{0f2f347c-1e4f-40cc-8efd-792dea70a85e},,text/javascript,,rel:nsLoginInfo.js -{2ee83680-2af0-4bcb-bfa0-c9705f6554f1},,application/x-mozilla-static,,docshell_provider -{414af362-9ad8-4296-898e-62247f25a20e},,text/javascript,,rel:FeedProcessor.js -{2d524fdd-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{aaab6710-0f2c-11d5-a53b-0010a401eb10},,application/x-mozilla-static,,necko -{e9b301c0-e0e4-11d3-a1a8-0050041caf44},,application/x-mozilla-static,,necko -{23e8fd98-a625-4b08-be1a-f7cc18a5b106},,application/x-mozilla-static,,nsPluginModule -{77cfaaf2-1cf4-11d3-8aaf-00600811a836},,application/x-mozilla-static,,nsUConvModule -{d9b1f97e-cfa0-80b6-fb92-9972e48e3dcc},,application/x-mozilla-static,,nsUConvModule -{929814d6-1dd2-11b2-8e08-82fa0a339b00},,application/x-mozilla-static,,xpconnect -{ba5bc4c6-1dd1-11b2-bb89-b844c6ec0339},,application/x-mozilla-static,,nsAutoConfigModule -{e7caf8c0-3570-47fe-aa1b-da47539b5d07},,application/x-mozilla-static,,NSS -{ea06d4e5-2b3d-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{2f277c00-0eaf-4ddb-b936-41326ba48aae},,application/x-mozilla-static,,necko -{1423e739-782c-4081-b5d8-fe6fba68c0ef},,application/x-mozilla-static,,necko -{e042570c-62de-4bb6-a6e0-798e3c07b4df},,application/x-mozilla-static,,embedcomponents -{0ae53c0f-8ea2-4916-bedc-717443c3e185},,application/x-mozilla-static,,NSS -{0ddf4df8-4dbb-4133-8b79-9afb966514f5},,application/x-mozilla-static,,nsLayoutModule -{0de2fbfa-6b7f-11d7-bbba-0003938a9d96},,application/x-mozilla-static,,nsLayoutModule -{ba6151ac-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{cb3ede1a-0fa5-4e27-aafe-0f7801e5a1f1},,application/x-mozilla-static,,nsImageLib2Module -{5aaeb534-fa57-488d-9a73-20c258fc7bdb},,text/javascript,,abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-channel-listener.js -{c94f4a30-64d7-11d4-9960-00b0d02354a0},,application/x-mozilla-static,,NSS -{56ad2981-8a87-11d2-918c-0080c8e44db5},,application/x-mozilla-static,,nsLayoutModule -{822bcd11-6432-48be-9e9d-36f7804b7747},,application/x-mozilla-static,,nsCookieModule -{6ddb050c-0d04-11d4-986e-00c04fa0cf4a},,application/x-mozilla-static,,necko -{1691e1f4-ee41-11d4-9885-00c04fa0cf4b},,application/x-mozilla-static,,nsLayoutModule -{379c2774-ec77-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{a6cf90f5-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsLayoutModule -{49bb6593-3aff-4eb3-a068-2712c28bd58e},,text/javascript,,rel:FeedWriter.js -{e6156350-2be8-11db-a98b-0800200c9a66},,text/javascript,,rel:nsURLFormatter.js -{6394eead-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{42c52b81-a200-11d3-9d0b-0050040007b2},,application/x-mozilla-static,,nsXPIntlModule -{32314cc8-22f7-4f7f-a645-1a45453ba6a6},,text/javascript,,rel:nsHandlerService.js -{a59da932-4091-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{bfcb82c2-5611-4318-90d6-baf4a7864252},,application/x-mozilla-static,,nsLayoutModule -{9d3f70da-86e9-11d4-95ec-00b0d03e37b7},,application/x-mozilla-static,,nsLayoutModule -{2d524fd2-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{a2112d6a-0e28-421f-b46a-25c0b308cbd0},,application/x-mozilla-static,,embedcomponents -{2ce606b0-bee6-11d1-aad9-00805f8a3e14},,application/x-mozilla-static,,nsParserModule -{7526a738-9632-11d3-8cd9-0060b0fc14a3},,application/x-mozilla-static,,nsJarModule -{ff8c4d10-3194-11d3-9885-006008962422},@mozilla.org/js/xpc/ContextStack;1,application/x-mozilla-static,,xpconnect -{d2800356-c2d7-4e05-a884-79fe566af1cf},,application/x-mozilla-static,,nsUConvModule -{9868b4ce-da08-11d3-8cda-0060b0fc14a3},@mozilla.org/network/buffered-output-stream;1,application/x-mozilla-static,nsBufferedOutputStream,necko -{ba6151b9-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{d9b1f97f-cfa0-80b6-fb92-9972e48e3dcc},,application/x-mozilla-static,,nsUConvModule -{bc54f001-6eb0-4e32-9f49-7e064d8e70ef},,application/x-mozilla-static,,nsAuthModule -{26fb965c-9de6-11d3-bccc-0060b0fc76bd},,application/x-mozilla-static,,nsLayoutModule -{2d78bbf0-e26c-482b-92b3-78a7b2afc8f7},,application/x-mozilla-static,,nsLayoutModule -{62b778a6-bce3-456b-8c31-2865fbb68c91},@mozilla.org/network/idn-service;1,application/x-mozilla-static,nsIDNService,necko -{9416bfb3-1f93-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{6030f7ef-32ed-46a7-9a63-6a5d3f90445f},,application/x-mozilla-static,,nsLayoutModule -{e7c2aaf5-c11a-4954-9dbf-e28edec1fd91},,application/x-mozilla-static,,nsLayoutModule -{6803cacc-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{9f6d5d40-90e7-11d3-af80-00a024ffc08c},,application/x-mozilla-static,,docshell_provider -{8b5314bc-db01-11d2-96ce-0060b0fb9956},,application/x-mozilla-static,,nsWidgetGtk2Module -{660d8ca7-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{7b8556a2-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{bd1326a6-5a14-48de-97cc-95b5195f4fb9},,application/x-mozilla-static,,nsUCvMathModule -{ba6151a4-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{75c80fd0-accb-432c-af59-ec60668c3990},,application/x-mozilla-static,,nsAuthModule -{6deb193c-f87d-4078-bc78-5e64655b4d62},,application/x-mozilla-native,,rel:libbrowserdirprovider.so -{44588c1f-2ce8-4ad8-9b16-dfb9d9d513a7},,application/x-mozilla-static,,necko -{45c23a20-d71c-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{a6cf9112-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsParserModule -{f916ebfb-78ef-464b-94d0-a6f2ca3200ae},,application/x-mozilla-static,,nsWidgetGtk2Module -{2d92593e-14d0-48ce-b260-a9881bbf9c8b},,text/javascript,,abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-http-observer.js -{c6e8c44d-9f39-4af7-bcc0-76e38a8310f5},,text/javascript,,rel:nsBrowserGlue.js -{0e4e7d00-f71a-439f-9178-1a71ff11b55f},,application/x-mozilla-static,,nsLayoutModule -{7b8556b2-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{7c657d13-ec5e-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eea5-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{9416bfc0-1f93-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{2e363d60-872e-11d2-b531-000000000000},,application/x-mozilla-static,,nsLayoutModule -{d930e29b-6909-44e5-ab4b-af10d6923705},,application/x-mozilla-static,,nsWidgetGtk2Module -{a1b72850-a999-11d2-9119-006008a6edf6},,application/x-mozilla-static,,nsI18nModule -{3a0a0fc1-8349-11d3-be47-00104bde6048},,application/x-mozilla-static,,nsLayoutModule -{6049b263-c1e6-11d1-a827-0040959a28c9},,application/x-mozilla-static,,nsGfxModule -{670ee5da-6ad5-11d7-9950-000393636592},,application/x-mozilla-static,,embedcomponents -{ec693a6f-0832-49dd-877c-89f6552df5de},,application/x-mozilla-static,,NSS -{dccbe7e4-7750-466b-a557-5ea36c8ff24e},,application/x-mozilla-static,,necko -{1f59b001-02c9-11d5-ae76-cc92f7db9e03},,application/x-mozilla-static,,embedcomponents -{18a03189-067b-4978-b4f1-bafe35292ed6},,text/javascript,,rel:txEXSLTRegExFunctions.js -{ba6151b1-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{47433d1d-d9a7-4954-994f-f7a05cf87c2e},,application/x-mozilla-static,,nsUConvModule -{84e11f80-ca55-11dd-ad8b-0800200c9a66},,application/x-mozilla-native,,rel:libmozgnome.so -{495eca46-0a5c-11d4-a135-005004832142},,application/x-mozilla-static,,nsUConvModule -{0e6892c1-a9ad-11d2-b3ae-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{d4214e93-fb94-11d2-bdd8-00104bde6048},,application/x-mozilla-static,,nsRDFModule -{58f089ee-512a-42d2-a935-d0c874128930},,application/x-mozilla-static,,nsLayoutModule -{6316c6ce-12d3-479e-8f53-e289351412b8},@mozilla.org/intl/stringbundle/text-override;1,application/x-mozilla-static,String Textfile Overrides,nsI18nModule -{6803cac4-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{34587f4a-be18-43c0-9112-b782b08c0add},,application/x-mozilla-static,,BOOT -{5ba6d920-d4e9-11d3-a1a5-0050041caf44},,application/x-mozilla-static,,necko -{822cb9ae-6421-4484-b3c3-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{6803cac9-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{1b117e16-0cad-11d4-986e-00c04fa0cf4a},,application/x-mozilla-static,,nsJarModule -{4b664e54-72a2-4bbf-a5c2-66d4dc3066a0},,application/x-mozilla-static,,nsLayoutModule -{8e4444ff-8e99-4bdd-aa7f-fb3c1c77319f},,text/javascript,,rel:FeedProcessor.js -{6394eeb2-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{6803cacd-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{b992ddcd-3899-4320-9909-924b3e72c922},,text/javascript,,rel:FeedProcessor.js -{7b8556a3-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{471f4944-1dd2-11b2-87ac-90be0a51d609},,application/x-mozilla-static,,embedcomponents -{14c13684-1dd2-11b2-9463-bb10ba742554},,application/x-mozilla-static,,nsToolkitCompsModule -{9c7ec5d1-23f9-11d5-aea8-8fcc0793e97f},,application/x-mozilla-static,,necko -{2d524fd7-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{b148eed2-236d-11d3-b35c-00a0cc3c1cde},,application/x-mozilla-static,,nsWidgetGtk2Module -{12bb8f16-2389-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsChardetModule -{ed394ba0-5472-11d3-bbc8-0000861d1237},,application/x-mozilla-static,,necko -{e638d761-8687-11d2-b530-000000000000},,application/x-mozilla-static,,nsRDFModule -{762c4ae7-b923-422f-b97e-b9bfc1ef7bf0},,application/x-mozilla-static,,nsLayoutModule -{9e9b565a-8e52-4c1a-8805-b2b91655f874},,application/x-mozilla-static,,nsI18nModule -{057b04d0-0ccf-11d2-beba-00805f8a66dc},,application/x-mozilla-static,,docshell_provider -{0a698c44-3bff-11d4-9649-00c0ca135b4e},,application/x-mozilla-static,,nsUConvModule -{bfd1a791-ad9f-11d3-bdc7-0050040a9b44},,application/x-mozilla-static,,docshell_provider -{36102b6b-7b62-451a-a1c8-a0d456c92dc5},,application/x-mozilla-static,,nsSecurityManagerModule -{63c7b9f4-0cc8-43f8-b666-0a661655cb73},,application/x-mozilla-native,,rel:libbrowsercomps.so -{8aa66d77-1bbb-45a6-991e-b8f47751c291},,text/javascript,,rel:nsLoginManagerPrompter.js -{9eb760f0-4380-11d2-b328-00805f8a3859},,application/x-mozilla-static,,nsLayoutModule -{2e41ada0-62b7-4902-b9a6-e4542aa458ba},,application/x-mozilla-static,,embedcomponents -{320706d2-2e81-42c6-89c3-8d83b17d3fb4},,application/x-mozilla-static,,necko -{9589dc0d-9709-4578-883e-d393452b3611},,text/javascript,,abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-annotations.js -{1f5c1721-7dc3-11d3-bf87-00105a1b0627},,application/x-mozilla-static,,nsLayoutModule -{f1eac761-87e9-11d3-af80-00a024ffc08c},,application/x-mozilla-static,,Browser_Embedding_Module -{40b22006-5dd5-42f2-bfe7-7dbf0757ab8b},,application/x-mozilla-static,,nsLayoutModule -{9ef9fa14-1dd1-11b2-9d65-d72d6d1f025e},,application/x-mozilla-static,,necko -{5632bf70-51ec-11d3-9896-006008962422},@mozilla.org/js/xpc/Exception;1,application/x-mozilla-static,,xpconnect -{36b63ef3-e0fa-4c49-9fd4-e065e85568f4},,application/x-mozilla-static,,necko -{6394eebf-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{ba6151a9-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{379c2778-ec77-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{dc8e21a0-03e4-11da-8cd6-0800200c9a66},,application/x-mozilla-static,,nsAuthModule -{17491ba4-1dd2-11b2-aae3-de6b92dab620},,application/x-mozilla-static,,necko -{d6008c40-4dad-11d2-b328-00805f8a3859},,application/x-mozilla-static,,nsLayoutModule -{3a8a3a50-512c-11d4-9a54-000064657374},,application/x-mozilla-static,,nsLayoutModule -{4f91ef2e-57ba-472e-ab7a-b4999e42d6c0},,text/javascript,,rel:FeedConverter.js -{54ae32f8-1dd2-11b2-a209-df7c505370f8},,text/javascript,,rel:nsFilePicker.js -{9f6a0d2e-1dd1-11b2-a5b8-951f13c846f7},,application/x-mozilla-static,,nsImageLib2Module -{94f1de09-d0e5-4ca8-94c2-98b049316b7f},,application/x-mozilla-static,,nsSystemPrefModule -{a4557478-ae16-11d5-ba4b-00108303b117},,application/x-mozilla-static,,NSS -{adf42751-1cef-4ad2-aa8e-bcb849d8d31f},,application/x-mozilla-static,,nsI18nModule -{a39e0e9d-e567-41e3-b12c-5df67f18174d},,application/x-mozilla-static,,NSS -{fb8cbf4e-4701-4ba1-b1d6-5388e041fb67},,application/x-mozilla-static,,necko -{feca3c34-205e-4ae5-bd1c-03c686ff012b},,application/x-mozilla-static,,nsLayoutModule -{7c657d18-ec5e-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{f66bc334-1dd1-11b2-bab2-90e04fe15c19},,application/x-mozilla-static,,Browser_Embedding_Module -{a772eee4-0464-405d-a329-a29dfda3791a},,application/x-mozilla-static,,docshell_provider -{3a449110-66fd-11d4-9528-0020183bf181},,application/x-mozilla-static,,Browser_Embedding_Module -{6fb0c970-e1b1-11db-8314-0800200c9a66},,application/x-mozilla-native,,rel:libbrowsercomps.so -{b5e65b52-1dd1-11b2-ae8f-f0928ed88482},@mozilla.org/js/xpc/RuntimeService;1,application/x-mozilla-static,,xpconnect -{38d1592e-b81e-432b-86f8-471878bbfe07},,application/x-mozilla-static,,nsImageLib2Module -{01e1c3ff-094a-d048-44b4-62d29c7b4f39},,application/x-mozilla-static,,nsLayoutModule -{0fa3158c-d5a7-43de-9181-a285e74cf1d4},,application/x-mozilla-static,,nsUnixProxyModule -{2002f783-3960-11d3-b3c3-00805f8a6670},,application/x-mozilla-static,,nsChardetModule -{6ebc941a-f2ff-4d56-b3b6-f7d0b9d73344},,text/javascript,,rel:nsDefaultCLH.js -{1abdcc96-1dd2-11b2-b520-f8f59cdd67bc},,application/x-mozilla-static,,nsLayoutModule -{e09af32d-2a54-4d76-9ef0-3070e83f8be7},,application/x-mozilla-static,,nsLayoutModule -{a665e49a-f3e6-4fed-9f31-f7c568a29899},@mozilla.org/intl/unicodenormalizer;1,application/x-mozilla-static,Unicode Normlization,nsI18nModule -{ba6151b6-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{cf0f71fd-fafd-4e2b-9fdc-134d972e16e2},,application/x-mozilla-static,,necko -{5fb907e0-1dd2-11b2-a7c0-f14c416a62a1},,application/x-mozilla-static,,NSS -{0c797702-1c60-4051-9dd7-4d7405605642},,application/x-mozilla-static,,jsctypes -{13e50d8d-9cee-4ad1-a3a2-4a442fdf7dfa},,application/x-mozilla-static,,nsComposerModule -{a1fde867-e802-11d4-9885-00c04fa0cf4b},,application/x-mozilla-static,,nsLayoutModule -{a578e0a3-f76b-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{f96f5ec9-755b-447e-b1f3-717d1a84bb41},,application/x-mozilla-static,,nsLayoutModule -{776588a6-86d5-47e2-b6b3-992810078202},,application/x-mozilla-static,,nsUConvModule -{f6913e2e-1dd1-11b2-84be-f455dee342af},,application/x-mozilla-static,,necko -{a6cf9120-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsI18nModule -{06aa7c21-fe05-4cf2-b1c4-0c7126a4f713},,application/x-mozilla-static,,nsLayoutModule -{ba61519d-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{660d8ca4-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eeb7-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{69bb8313-2d4f-45ec-97e0-d39da58ecce9},,text/javascript,,rel:nsExtensionManager.js -{7b8556a8-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{ba6151a1-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{830b5f80-e2f2-11d3-b32f-004005a7a7e4},,application/x-mozilla-static,,nsUCvMathModule -{2d524fdc-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{cc10c750-9ec3-11d2-b3ae-00805f8a6670},,application/x-mozilla-static,,nsI18nModule -{12bb8f1b-2389-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{d9783472-8fe9-11d2-9d3c-0060088f9ff7},,application/x-mozilla-static,,nsLayoutModule -{09f689e0-b4da-11d2-a68b-00104bde6048},,application/x-mozilla-static,,nsLayoutModule -{eae599aa-ecef-49c6-a8af-6ddcc6feb484},,application/x-mozilla-static,,NSS -{fcca6f83-9f7d-44e4-a74b-b59433e6c8c3},,application/x-mozilla-static,,nsLayoutModule -{e09e4ca6-276b-4bb4-8b71-0635a3a2a007},,text/javascript,,rel:storage-Legacy.js -{218f2ac0-0a48-11d3-b3ba-00805f8a6670},,application/x-mozilla-static,,nsChardetModule -{51fa28c7-74c0-4b85-9c46-d03faa7b696b},,application/x-mozilla-static,,necko -{663ca4a8-d219-4000-925d-d8f66406b626},,application/x-mozilla-static,,nsAccessibilityModule -{6394eea2-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{bfd05264-834c-11d2-8eac-00805f29f370},,application/x-mozilla-static,,nsRDFModule -{ca200860-4696-40d7-88fa-4490d423a8ef},,application/x-mozilla-static,,embedcomponents -{2bc2ad62-ad5d-4b7b-a9db-f74ae203c527},,application/x-mozilla-static,,nsUConvModule -{1f1ce501-663a-11d3-b7a0-be426e4e69bc},,application/x-mozilla-static,,appshell -{3f429a14-dffe-417d-8cb8-fdf09bacd09e},,application/x-mozilla-static,,NSS -{a2059c0e-5a58-4c55-ab7c-26f0557546ef},,application/x-mozilla-static,,satchel -{a61e6398-2057-40fd-9c81-873b908d24e7},,application/x-mozilla-static,,nsWidgetGtk2Module -{8d995d4f-adcc-4159-b7f1-e94af72eeb88},,application/x-mozilla-static,,BOOT -{2ee3039b-2de4-43d9-93b0-649beacff39a},,application/x-mozilla-static,,tkAutoCompleteModule -{75a500a2-0030-40f7-86f8-63f225b940ae},,application/x-mozilla-native,,rel:libdbusservice.so -{67671792-8e25-4487-b1b7-5073cfa95fee},,application/x-mozilla-static,,nsUCvMathModule -{ba6151ae-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{1f13b201-39fa-11d6-a7f2-df501ff820dc},,application/x-mozilla-static,,nsLayoutModule -{ea06d4e1-2b3d-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{a3254cb0-8e20-11d2-8a98-00600811a836},,application/x-mozilla-static,,nsUConvModule -{9dcef3a4-a3bc-11d5-ba47-00108303b117},,application/x-mozilla-static,,NSS -{ac9e3e82-bfbd-4f26-941e-f58c8ee178c1},,application/x-mozilla-static,,nsLayoutModule -{9e3b6c90-2f75-11d3-8cd0-0060b0fc14a3},,application/x-mozilla-static,,necko -{7dd4d320-c84b-4624-8d45-7bb9b2356977},,application/x-mozilla-static,,nsToolkitCompsModule -{374e0cde-f605-4259-8c92-e639c6c2eeef},,application/x-mozilla-static,,nsUniversalCharDetModule -{2a898043-180f-4c8b-8e54-410c7a540f27},,application/x-mozilla-static,,nsWidgetGtk2Module -{2376201c-bbc6-472f-9b62-7548040a61c6},,text/javascript,,rel:FeedConverter.js -{e0da1d70-2f7b-11d3-8cd0-0060b0fc14a3},,application/x-mozilla-static,,necko -{a181af0d-68b8-4308-94db-d4f859058215},,application/x-mozilla-static,,necko -{461cd5dd-73c6-47a4-8cc3-603b37d84a61},,application/x-mozilla-static,,ZipWriterModule -{5534ddc0-dd96-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{84b0f182-c6c7-11d2-b3b0-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{6394eeaf-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{460a9792-b154-4f26-a922-0f653e2c8f91},,text/javascript,,rel:nsMicrosummaryService.js -{a2027ec6-ba0d-4c72-805d-148233f5f33c},,application/x-mozilla-static,,necko -{ba615199-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{495eca43-0a5c-11d4-a135-005004832142},,application/x-mozilla-static,,nsUConvModule -{3f6fe6a1-ac0a-11d2-b3ae-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{296d76aa-275b-4f3c-af8a-30a4026c18fc},,application/x-mozilla-static,,NSS -{2d524fd4-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{a6cf90e5-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsLayoutModule -{77c0e42a-1dd2-11b2-8ebf-edc6606f2f4b},,application/x-mozilla-static,,necko -{7bb40992-77eb-43db-9a4e-39d3bcc383ae},,application/x-mozilla-static,,nsParserModule -{8a0dce80-e2f2-11d3-b32f-004005a7a7e4},,application/x-mozilla-static,,nsUCvMathModule -{a4048e94-1dd1-11b2-a676-8a06c086cc7d},,application/x-mozilla-static,,nsRDFModule -{549abb24-7c9d-4aba-915e-7ce0b716b32f},,application/x-mozilla-static,,nsSystemPrefModule -{815e42e0-72cc-480f-934b-148e33c228a6},,application/x-mozilla-static,,nsAuthModule -{ba6151bb-ec62-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{95f46161-d177-11d2-bf86-00105a1b0627},,application/x-mozilla-static,,nsLayoutModule -{072a5c3d-30c6-4f07-b87f-9f63d51403f2},,text/javascript,,rel:FeedProcessor.js -{e1c61582-2a84-11d3-8cce-0060b0fc14a3},,application/x-mozilla-static,,necko -{a0f827e2-8ab6-11d5-a14b-005004832142},,application/x-mozilla-static,,nsUConvModule -{6803cace-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{1c31ed79-accd-4b94-b517-06e0c81999d5},,text/javascript,,rel:FeedConverter.js -{2f977d4f-5485-11d4-87e2-0010a4e75ef2},,application/x-mozilla-static,,nsPrefModule -{fe74cf80-aa2d-11db-abbd-0800200c9a66},,text/javascript,,rel:fuelApplication.js -{d2ac51bc-1622-4d4d-85cb-f8e8b5805cb9},,text/javascript,,abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components/firebug-trace-service.js -{660d8ca9-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eebc-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{7b8556ad-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{379c2775-ec77-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{a4e5888f-4fe4-4632-8e7e-745196ea7c70},,application/x-mozilla-static,,NSS -{541afcb2-a9a3-11d2-8ec5-00805f29f370},,application/x-mozilla-static,,nsLayoutModule -{bfd0526d-834c-11d2-8eac-00805f29f370},,application/x-mozilla-static,,nsRDFModule -{4f47e42e-4d23-4dd3-bfda-eb29255e9ea3},,application/x-mozilla-static,,necko -{64edb481-0c04-11d5-a73c-e964b968b0bc},,application/x-mozilla-static,,embedcomponents -{7e677795-c582-4cd1-9e8d-8271b3474d2a},,application/x-mozilla-static,,embedcomponents -{af7a9951-aa48-11d2-b3ae-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{797bec5a-1dd2-11b2-a7f8-ca397e0179c4},,application/x-mozilla-static,,nsImageLib2Module -{27aecc62-7777-428e-b34c-5973a47b8298},,application/x-mozilla-static,,nsLayoutModule -{d96d5985-a13a-4bdc-9386-ef348d7a97a1},,application/x-mozilla-native,,rel:libmozgnome.so -{efc323e2-ec62-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{fca3766a-434a-4ae7-83cf-0909e18a093a},,application/x-mozilla-static,,necko -{95d89e3e-a169-41a3-8e56-719978e15b12},@mozilla.org/xre/app-info;1,application/x-mozilla-static,nsXULAppInfo,Apprunner -{fcacef22-2b40-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{9ac9e770-18bc-11d3-9337-00104ba0fd40},@mozilla.org/network/io-service;1,application/x-mozilla-static,nsIOService,necko -{7c657d15-ec5e-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{edb0490e-1dd1-11b2-83b8-dbf8d85906a6},,application/x-mozilla-static,,nsToolkitCompsModule -{6394eea7-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{a21bfa01-f349-4394-a84c-8de5cf0737d0},,application/x-mozilla-static,,embedcomponents -{63ac8c66-1dd2-11b2-b070-84d00d3eaece},,text/javascript,,rel:nsProxyAutoConfig.js -{ba615191-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{fe4f7592-c1fc-4662-ac83-538841318803},,application/x-mozilla-static,,xpconnect -{fc2389b8-c650-4093-9e42-b05e5f0685b7},,application/x-mozilla-static,,nsWidgetGtk2Module -{58a1c31c-1dd2-11b2-a3f6-d36949d48268},,application/x-mozilla-static,,necko -{c7e410d4-85f2-11d3-9f63-006008a6efe9},,application/x-mozilla-static,,nsJarModule -{4ca3c946-5408-49f0-9eca-3a97d5c67750},,application/x-mozilla-native,,rel:libbrowsercomps.so -{7b8556b1-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{7ee2a4c0-4b93-17d3-ba18-0060b0f199a2},@mozilla.org/scriptsecuritymanager;1,application/x-mozilla-static,scriptsecuritymanager,nsSecurityManagerModule -{ba6151b3-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{ca168834-cc00-48f9-b83c-fd018e58cae3},,text/javascript,,rel:nsUrlClassifierListManager.js -{ec7a6c20-e081-11da-8ad9-0800200c9a66},,text/javascript,,rel:nsSessionStartup.js -{77221d5a-1dd2-11b2-8c69-c710f15d2ed5},,application/x-mozilla-static,,nsWidgetGtk2Module -{5280606b-2510-4fe0-97ef-9b5a22eafe6b},,text/javascript,,rel:nsSessionStore.js -{495eca48-0a5c-11d4-a135-005004832142},,application/x-mozilla-static,,nsUConvModule -{6049b262-c1e6-11d1-a827-0040959a28c9},,application/x-mozilla-static,,nsGfxModule -{b00ed78a-04e2-4f74-8e1c-d1af79dfd12f},,application/x-mozilla-static,,necko -{bfd05264-834c-11d2-8eac-00805f29f371},,application/x-mozilla-static,,nsLayoutModule -{e746a8b1-c97a-4fc5-baa4-66607521bd08},,application/x-mozilla-static,,necko -{a6cf9063-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsLayoutModule -{6803cac6-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{fcacef21-2b40-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{518e071f-1dd2-11b2-937e-c45f14def778},,application/x-mozilla-static,,PKI -{f24a14f0-4fa1-11d3-9894-006008962422},,application/x-mozilla-static,,xpconnect -{e35d5067-95bc-4029-8432-e8f1e431148d},,text/javascript,,rel:nsContentDispatchChooser.js -{660d8ca1-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eeb4-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{14c0e880-623e-11d3-a178-0050041caf44},,application/x-mozilla-static,,necko -{7a2a7a56-827f-4b38-bdac-31aa7ec2971d},,text/javascript,,abs:/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ubufox@ubuntu.com/components/aboutHome.js -{ba61519e-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{4f5e62b8-d659-4156-84fc-2f6099400369},,application/x-mozilla-static,,nsLayoutModule -{6c84aec9-29a5-4264-8fbc-bee8f922ea67},,application/x-mozilla-static,,necko -{2d524fd9-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{47cd0651-b1be-4a0f-b5c4-10e5a573ef71},,text/javascript,,rel:nsBrowserContentHandler.js -{e91f9440-e076-11d3-b32f-004005a7a7e4},,application/x-mozilla-static,,nsUCvMathModule -{06beec76-a183-4d9f-85dd-085f26da565a},,application/x-mozilla-static,,nsWidgetGtk2Module -{8a115faa-7dcb-4e8f-979b-5f53472f51cf},,text/javascript,,rel:nsExtensionManager.js -{fd9a9e8a-a77b-496a-b7bb-263df9715149},,application/x-mozilla-static,,nsImageLib2Module -{e7f70966-9a37-48d7-8aeb-35998f31090e},,application/x-mozilla-static,,nsToolkitCompsModule -{a0ccaaf8-09da-44d8-b250-9ac3e93c8117},,application/x-mozilla-static,,nsToolkitCompsModule -{21dd6a03-413c-11d3-b3c3-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{ecba5203-77da-465a-865e-78b7af10d8f7},,application/x-mozilla-static,,nsWidgetGtk2Module -{5551a1e0-5a66-11d3-806a-00600811a9c3},,application/x-mozilla-static,,application -{50e95301-17a8-11d4-9f7e-dd530d5f057c},,application/x-mozilla-static,,nsComposerModule -{6c3c274b-4cbf-4bb5-a635-05ad2cbb6535},,application/x-mozilla-static,,docshell_provider -{25029490-f132-11d2-9588-00805f369f95},,application/x-mozilla-static,,necko -{30dcd313-73e1-447d-8339-37744952154e},,application/x-mozilla-static,,nsUConvModule -{e638d760-8687-11d2-b530-000000000001},,application/x-mozilla-static,,nsRDFModule -{fc886801-e768-11d4-9885-00c04fa0cf4b},,application/x-mozilla-static,,nsLayoutModule -{ac2bb8fe-eeeb-4572-b40f-be03932b56e0},,application/x-mozilla-static,,nsImageLib2Module -{4ea60761-31d6-491d-9e34-4b53a26c416c},,application/x-mozilla-static,,NSS -{aa40253b-4c42-4056-8132-37bcd07862fd},,application/x-mozilla-static,,nsLayoutModule -{baa34652-f1f1-4185-b224-244ee82a413a},,application/x-mozilla-static,,nsLayoutModule -{fbc81170-1f69-11d3-9344-00104ba0fd40},@mozilla.org/network/protocol;1?name=file,application/x-mozilla-static,nsFileProtocolHandler,necko -{a0d6ad32-1dd1-11b2-aa55-a40187b54036},,application/x-mozilla-static,,necko -{984e3259-9266-49cf-b605-60b022a00756},,application/x-mozilla-static,,nsPlacesModule -{ba6151ab-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{7584ce90-5b25-11d3-a175-0050041caf44},,application/x-mozilla-static,,necko -{0a5cd734-eb65-4d14-88a0-9f0bb2aba206},,application/x-mozilla-static,,nsRDFModule -{749e62f4-60ae-4569-a8a2-de78b649660e},,text/javascript,,rel:nsLoginManagerPrompter.js -{9a28ffa7-e6ef-4b52-a127-6ad951de8e9b},,application/x-mozilla-native,,rel:libbrowsercomps.so -{77da64d3-7458-4920-9491-86cc9914f904},,text/javascript,,rel:NetworkGeolocationProvider.js -{2d96b3df-c051-11d1-a827-0040959a28c9},,application/x-mozilla-static,,nsWidgetGtk2Module -{a6cf9115-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsGfxModule -{5c337258-a580-472e-8615-f277ddc5bb06},,application/x-mozilla-static,,nsWidgetGtk2Module -{0e3afd3d-eb60-4c2b-963b-56d7c439f124},,application/x-mozilla-static,,nsLayoutModule -{8eaaf524-7d6d-4f7d-ae8b-9277b324008d},,text/javascript,,rel:nsAddonRepository.js -{6394eeac-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{36fa00c2-1dd2-11b2-be07-d16eeb4c50ed},,application/x-mozilla-static,,nsImageLib2Module -{275d800e-3f60-4896-adb7-d7f390ce0e42},@mozilla.org/network/url-parser;1?auth=yes,application/x-mozilla-static,nsAuthURLParser,necko -{a59da931-4091-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{0659cb83-faad-11d2-8e19-b206620a657c},,application/x-mozilla-static,,appshell -{f3294b1c-89f4-46f8-98a0-44e1eae92518},,text/javascript,,rel:nsExtensionManager.js -{2d524fd1-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{20557898-1dd2-11b2-8f65-9c462ee2bc95},,application/x-mozilla-static,,nsImageLib2Module -{2d96b3d1-c051-11d1-a827-0040959a28c9},,application/x-mozilla-static,,nsWidgetGtk2Module -{13111d00-ce81-11d6-8082-ecf3665af67c},,application/x-mozilla-static,,nsLayoutModule -{bc26ff01-f2bd-11d4-a73c-e5a4b5a8bdfc},,application/x-mozilla-static,,nsComposerModule -{a41661d5-1417-11d5-9882-00c04fa02f40},,application/x-mozilla-static,,docshell_provider -{ba6151b8-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{b57f97c2-0d70-11d3-8aae-00600811a836},,application/x-mozilla-static,,nsUConvModule -{c87a37fc-8109-4ce2-a322-8cdec925379f},,application/x-mozilla-static,,nsLayoutModule -{9416bfb2-1f93-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{e7ba1480-1dea-11d3-830f-00104bed045e},,application/x-mozilla-static,,nsLayoutModule -{6803cacb-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{f68578eb-6ec2-4169-ae19-8c6243f0abe1},,text/javascript,,rel:nsHelperAppDlg.js -{d92d57c5-ba1d-11d2-af0c-0060089fe59b},,application/x-mozilla-static,,nsI18nModule -{e036c738-1dd1-11b2-9392-9d94aa74b0c5},,application/x-mozilla-static,,nsAutoConfigModule -{8b5314bb-db01-11d2-96ce-0060b0fb9956},,application/x-mozilla-static,,nsWidgetGtk2Module -{e7509b46-2eb2-410a-9d7c-c3ce73284d01},,application/x-mozilla-static,,nsLayoutModule -{d673255d-1184-400a-b0b5-ee9d1295bd85},,application/x-mozilla-static,,nsUConvModule -{6394eeb9-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{d0a75e02-b5e7-11d5-a7f2-df109fb8a1fc},,application/x-mozilla-static,,nsLayoutModule -{a33982d3-1adf-4162-9941-f734bc45e4ed},,application/x-mozilla-static,,nsComposerModule -{7b8556aa-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{bd6390c8-fbea-11d4-98f6-001083010e9b},,application/x-mozilla-static,,docshell_provider -{c375fa80-150f-11d6-a618-0010a401eb10},,application/x-mozilla-static,,necko -{660d8ca3-f763-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{d750a964-2d14-484c-b3aa-8ed7823b5c7b},,application/x-mozilla-static,,nsLayoutModule -{f57899d0-4e2c-4ac6-9e29-50c736103b0c},,text/javascript,,rel:nsSetDefaultBrowser.js -{786e0a0e-e035-4600-8ee0-365a63a80b80},,application/x-mozilla-static,,nsToolkitCompsModule -{b0ff4572-dae4-4bef-a092-83c1b88f6be9},@mozilla.org/network/dns-service;1,application/x-mozilla-static,nsDNSService,necko -{bbc23860-2553-479d-8b78-94d9038334f7},,text/javascript,,rel:nsTaggingService.js -{064d9cee-1dd2-11b2-83e3-d25ab0193c26},,application/x-mozilla-static,,nsPrefModule -{6394eea4-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{6ee5301a-3981-49bd-85f8-1a2cc228cf3e},,application/x-mozilla-static,,nsUniversalCharDetModule -{9416bfbf-1f93-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{2bf64765-997f-450d-af96-3028d1a902b0},,application/x-mozilla-static,,nsI18nModule -{9c8f9601-801a-11d2-98ba-00805f297d89},,application/x-mozilla-static,,nsTransactionManagerModule -{6c392c62-1ab1-4de7-bfc6-ed4f9fc7749a},,application/x-mozilla-static,,nsLayoutModule -{2cd0c310-e127-44d0-88fc-4435c9ab4d4b},,text/javascript,,rel:jsconsole-clhandler.js -{b7b2ccec-7912-4ea6-a548-b038447004bd},,application/x-mozilla-static,,nsToolkitCompsModule -{06893e69-71d8-4b23-81eb-80314daf3e66},,application/x-mozilla-native,,rel:libbrowsercomps.so -{d899a152-9412-46b2-b651-2e71c5c2f05f},,application/x-mozilla-static,,nsLayoutModule -{217d014a-1dd2-11b2-999c-b0c4df79b324},,application/x-mozilla-static,,NSS -{80d7e247-d4b8-45d7-bb59-6f1dd56f384c},,application/x-mozilla-static,,nsLayoutModule -{ba6151b0-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{df71c6f0-ec53-11d2-bdca-000064657374},,application/x-mozilla-static,,nsRDFModule -{c2be6dc0-ef1e-4abd-86a2-4f864ddc57f6},,application/x-mozilla-static,,nsToolkitCompsModule -{792a7e82-06a0-437c-af63-b2d12e808acc},,text/javascript,,rel:WebContentConverter.js -{495eca45-0a5c-11d4-a135-005004832142},,application/x-mozilla-static,,nsUConvModule -{78c61626-4d1f-4843-9364-4652d98ff6e1},,application/x-mozilla-static,,nsImageLib2Module -{6356aa16-7916-4215-a825-cbc2692ca87a},,application/x-mozilla-static,,application -{e11a6080-4daa-11d2-b328-00805f8a3859},,application/x-mozilla-static,,nsLayoutModule -{7e6e57c0-e2f2-11d3-b32f-004005a7a7e4},,application/x-mozilla-static,,nsUCvMathModule -{ea06d4e3-2b3d-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{5d0cfa97-69dd-4e5e-ac84-f253162e8f9a},,text/javascript,,rel:FeedProcessor.js -{5871a422-1dd2-11b2-ab3f-e2e56be5da9c},,application/x-mozilla-static,,nsImageLib2Module -{15629ada-a41c-4a09-961f-6553cd60b1a2},,application/x-mozilla-static,,necko -{e197cc01-cfe1-11d4-8eb0-87ae406dfd3f},,application/x-mozilla-static,,nsLayoutModule -{2ea2e7d0-4095-11d3-9144-006008a6edf6},,application/x-mozilla-static,,nsI18nModule -{dd156d62-d26f-4441-9cdb-e8f09107c273},,application/x-mozilla-static,,nsSecurityManagerModule -{6394eeb1-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{c272fee0-c7e9-11d3-8cda-0060b0fc14a3},@mozilla.org/network/file-output-stream;1,application/x-mozilla-static,nsFileOutputStream,necko -{96ec4163-efc8-407a-8735-007fb26be4e8},,application/x-mozilla-static,,nsAuthModule -{e38e53b9-5bb0-456a-b553-579370cb1567},,application/x-mozilla-static,,xpconnect -{a6cf90e3-15b3-11d2-932e-00805f8add32},,application/x-mozilla-static,,nsLayoutModule -{d164e770-4157-11d4-9a42-000064657374},,application/x-mozilla-static,,nsLayoutModule -{2d524fd6-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{a277189c-1dd1-11b2-a8c9-e4e8bfb1338e},,application/x-mozilla-static,,NSS -{301dea42-6850-4cda-8945-81f7dbc2186b},,application/x-mozilla-static,,necko -{b322a5c0-a419-484e-96ba-d7182163899f},,text/javascript,,rel:nsUpdateTimerManager.js -{9c47c121-1c6e-4d8f-b904-3ac968116e88},,application/x-mozilla-static,,docshell_provider -{8b449142-1eab-4bfa-9830-fab6ebb09774},,application/x-mozilla-static,,nsLayoutModule -{6bd13476-1dd2-11b2-bbef-f0ccb5fa64b6},@mozilla.org/moz/jsloader;1,application/x-mozilla-static,JS component loader,xpconnect -{c8e518c1-47ae-11d3-91cd-00105aa3f7dc},,application/x-mozilla-static,,nsI18nModule -{2fd6b7f6-eb8c-4f32-ad26-113f2c02d0fe},,application/x-mozilla-static,,JavaScript_Debugger -{ff9fbcd7-9517-4334-b97a-ceed78909974},,application/x-mozilla-static,,NSS -{510a86bb-6019-4ed1-bb4f-965cffd23ece},,application/x-mozilla-static,,necko -{b084a2ce-1dd1-11b2-bf10-8324f8e065cc},,application/x-mozilla-static,,NSS -{3d262d00-8b5a-11d2-8eb0-00805f29f370},,application/x-mozilla-static,,nsLayoutModule -{dca61eb5-c7cd-4df1-b0fb-d0722baba251},,text/javascript,,rel:nsLivemarkService.js -{ea06d4e4-2b3d-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUniversalCharDetModule -{660a3226-915c-4ffb-bb20-8985a632df05},,application/x-mozilla-static,,NSS -{2ec62893-3b35-48fa-ab1d-5e68a9f45f08},,application/x-mozilla-static,,necko -{ce002b28-92b7-4701-8621-cc925866fb87},,application/x-mozilla-static,,nsCookieModule -{7ef52eaf-b7e1-462b-87e2-5d1dbaca9048},,application/x-mozilla-static,,mozSpellCheckerModule -{c95f1831-c376-11d1-b721-00600891d8c9},,application/x-mozilla-static,,nsLayoutModule -{cf3a0e06-1dd1-11b2-a904-ac1d6da77a02},,application/x-mozilla-static,,necko -{9b6dc177-a2e4-49e1-9c98-0a8384de7f6c},,application/x-mozilla-native,,rel:libnkgnomevfs.so -{56c778e4-1bee-45f3-a689-886692a97fe7},,application/x-mozilla-static,,mozSpellCheckerModule -{ec06f3fc-70db-4ecd-94e0-a6e91ca44d8a},,application/x-mozilla-static,,docshell_provider -{7bd05c78-6a26-11d7-b16f-0003938a9d96},,application/x-mozilla-static,,nsLayoutModule -{6394eebe-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{7b8556af-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{379c2777-ec77-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{de401c37-9a7f-4278-a6f8-3de2833989ef},,application/x-mozilla-static,,nsAccessibilityModule -{4ec832da-6ae7-4185-807b-daddcb5da37a},,application/x-mozilla-static,,nsLayoutModule -{f0acde16-1dd1-11b2-9e35-f5786fff5a66},,application/x-mozilla-static,,docshell_provider -{56e2ada8-4631-11d4-ba11-001083023c1e},,application/x-mozilla-static,,nsLayoutModule -{f34ff792-722e-4490-b195-47d242edca1c},,application/x-mozilla-native,,rel:libbrowsercomps.so -{61ba33c0-3031-11d3-8cd0-0060b0fc14a3},,application/x-mozilla-static,,nsChromeModule -{ad78bbf0-e261-482b-32b3-78a7b2afc8f7},,application/x-mozilla-static,,nsLayoutModule -{bbef8185-c628-4cc1-b53e-e61e74c2451a},,application/x-mozilla-static,,necko -{9416bfc1-1f93-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{aa13e4a0-a5ac-11d2-9119-006008a6edf6},,application/x-mozilla-static,,nsI18nModule -{7c657d17-ec5e-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{6394eea9-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{66354bc9-7ed1-4692-ae1d-8da97d6b205e},,text/javascript,,rel:nsBlocklistService.js -{171e72db-0f8a-412a-8461-e4c927a3a2ac},,application/x-mozilla-static,,nsComposerModule -{ef565d0a-ab9a-4a13-9160-0644cdfd859a},,application/x-mozilla-static,,nsCookieModule -{735959a1-af01-447e-b02d-56e968fa52b4},,application/x-mozilla-static,,NSS -{cb9e0de8-3598-4ed7-857b-827f011ad5d8},,text/javascript,,rel:nsLoginManager.js -{5e8d4751-1852-434b-a992-2c6d2a25fa46},,application/x-mozilla-static,,nsPlacesModule -{ecd55a01-2780-11d5-a73c-ca641a6813bc},,application/x-mozilla-static,,embedcomponents -{2002f782-3960-11d3-b3c3-00805f8a6670},,application/x-mozilla-static,,nsChardetModule -{c11c21b2-71c9-4f87-a0f8-5e13f50495fd},,text/javascript,,rel:nsFormAutoComplete.js -{8227f019-afc7-461e-b030-9f185d7a0e29},,application/x-mozilla-static,,mozSpellCheckerModule -{1d40026b-4c44-4f6f-b158-26bb5e9c65e9},,application/x-mozilla-static,,nsLayoutModule -{e28ab250-d66d-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{ba6151b5-1dfa-11d3-b3bf-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{4f76e100-d71c-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{88cecbb7-6c63-4b3b-8cd4-84f3b8228c69},,application/x-mozilla-static,,nsPlacesModule -{d85a17c1-aa7c-11d2-9b8c-00805f8a16d9},@mozilla.org/intl/stringbundle;1,application/x-mozilla-static,String Bundle,nsI18nModule -{a578e0a2-f76b-11d2-8aad-00600811a836},,application/x-mozilla-static,,nsUConvModule -{f7c9f5f4-4451-41c3-a28a-5ba2447fbace},,application/x-mozilla-static,,necko -{7b8556b0-ec79-11d2-8aac-00600811a836},,application/x-mozilla-static,,nsUConvModule -{1147d32c-215b-4014-b180-07fe7aedf915},,application/x-mozilla-static,,nsLayoutModule -{905f80f1-8a7b-11d2-918c-0080c8e44db5},,application/x-mozilla-static,,nsLayoutModule -{6803cac8-1e3b-11d5-a145-005004832142},,application/x-mozilla-static,,nsUConvModule -{758e4f20-e2f2-11d3-b32f-004005a7a7e4},,application/x-mozilla-static,,nsUCvMathModule -{6394eea1-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{6049b261-c1e6-11d1-a827-0040959a28c9},,application/x-mozilla-static,,nsGfxModule -{6394eeb6-fc3d-11d2-b3b8-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{bd57cee8-1dd1-11b2-9fe7-95cf4709aea3},,application/x-mozilla-static,,nsWidgetGtk2Module -{9c0ff6f4-deda-40e5-806c-b6cc449c21ce},,application/x-mozilla-static,,nsUConvModule -{49b38f12-6193-11d3-b3c5-00805f8a6670},,application/x-mozilla-static,,nsUConvModule -{2d524fdb-ae74-11d3-abf7-0004aceefa51},,application/x-mozilla-static,,nsUConvModule -{7f915b01-98fc-11d4-8eb0-a803f80ff1bc},,application/x-mozilla-static,,nsLayoutModule -{430d416c-a722-4ad1-be98-d9a445f85e3f},,application/x-mozilla-static,,ZipWriterModule -{245abae2-b947-4ded-a46d-9829d3cca462},,application/x-mozilla-static,,nsJarModule -{cb9abbae-66b6-4609-8594-5c4ff300888e},,application/x-mozilla-static,,necko -{82776710-5690-11d3-be36-00104bde6048},,application/x-mozilla-static,,application -{2c3837af-8b85-4a68-b0d8-0aed88985b32},,application/x-mozilla-static,,NSS -{23bcc750-dc20-460b-b2d4-74d8f58d3615},,application/x-mozilla-static,,CommandLineModule -{cc75499a-1dd1-11b2-8a82-ca410ac907b8},,application/x-mozilla-static,,BOOT -{dbfcbe4a-10f7-4d6f-a481-68e6d6b71d21},,application/x-mozilla-static,,NSS -{c744ca3d-840b-460a-8d70-7ce63c51c958},,application/x-mozilla-static,,nsWindowDataSourceModule -{be65e2b7-fe46-4e0f-88e0-4b385db4d68a},,application/x-mozilla-static,,NSS -{dca9d7c3-7b6a-4490-ad6d-2699a8d683cd},,application/x-mozilla-static,,nsLayoutModule -{dc26e0e0-ca94-11d1-a9a4-00805f8a7ac4},,application/x-mozilla-static,,nsPrefModule -{b7f44954-11d1-11b2-8c2e-c2feab4186bc},,application/x-mozilla-static,,nsLayoutModule -{9f1800ab-f428-4207-b40c-e832e77b01fc},,application/x-mozilla-static,,nsWidgetGtk2Module -{0320e073-79c7-4dae-8055-81bed8b8db96},,application/x-mozilla-static,,nsJarModule -{93ad72a6-02cd-4716-9626-d47d5ec275ec},,application/x-mozilla-static,,nsLayoutModule - -[CONTRACTIDS] -@mozilla.org/intl/unicode/encoder;1?charset=Big5,{efc323e2-ec62-11d2-8aac-00600811a836} -@mozilla.org/gfx/region/nsThebes;1,{e12752f0-ee9a-11d1-a82a-0040959a28c9} -@mozilla.org/image/tools;1,{fd9a9e8a-a77b-496a-b7bb-263df9715149} -@mozilla.org/network/effective-tld-service;1,{cb9abbae-66b6-4609-8594-5c4ff300888e} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-greek,{7b8556b1-ec79-11d2-8aac-00600811a836} -@mozilla.org/extensions/addon-repository;1,{8eaaf524-7d6d-4f7d-ae8b-9277b324008d} -@mozilla.org/inspector/dom-utils;1,{40b22006-5dd5-42f2-bfe7-7dbf0757ab8b} -@mozilla.org/xtf/xml-contentbuilder;1,{e09af32d-2a54-4d76-9ef0-3070e83f8be7} -@mozilla.org/intl/unicharcategory;1,{748a1132-671a-409a-8d1d-f1cdf6b3a6b4} -@mozilla.org/intl/unicode/decoder;1?charset=x-windows-949,{9416bfbf-1f93-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-6,{660d8ca8-f763-11d2-8aad-00600811a836} -@mozilla.org/intl/unicode/decoder;1?charset=UTF-32,{30dcd313-73e1-447d-8339-37744952154e} -@mozilla.org/content/post-content-iterator;1,{a6cf90e3-15b3-11d2-932e-00805f8add32} -@mozilla.org/intl/unicode/encoder;1?charset=x-t1-cmmi,{bd1326a6-5a14-48de-97cc-95b5195f4fb9} -@mozilla.org/network/mime-hdrparam;1,{1f4dbcf7-245c-4c8c-943d-8a1da0495e8a} -@mozilla.org/network/protocol/about;1?what=config,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/network/sync-stream-listener;1,{439400d3-6f23-43db-8b06-8aafe1869bd8} -@mozilla.org/intl/unicode/decoder;1?charset=x-viet-tcvn5712,{6394eead-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/download-manager-ui;1,{7dfdf0d1-aff6-4a34-bad1-d0fe74601642} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-arabic,{6803cac7-1e3b-11d5-a145-005004832142} -@mozilla.org/url-classifier/streamupdater;1,{c2be6dc0-ef1e-4abd-86a2-4f864ddc57f6} -@mozilla.org/xmlextras/domparser;1,{3a8a3a50-512c-11d4-9a54-000064657374} -@mozilla.org/streamconv;1?from=x-compress&to=uncompressed,{66230b2b-17fa-4bd3-abf4-07986151022d} -@mozilla.org/network/protocol-proxy-service;1,{e9b301c0-e0e4-11d3-a1a8-0050041caf44} -@mozilla.org/storage/service;1,{bbbb1d61-438f-4436-92ed-8308e5830fb0} -@mozilla.org/image/decoder;2?type=image/icon,{ffc08380-256c-11d5-9905-001083010e9b} -@mozilla.org/widget/clipboardhelper;1,{77221d5a-1dd2-11b2-8c69-c710f15d2ed5} -@mozilla.org/network/server-socket;1,{2ec62893-3b35-48fa-ab1d-5e68a9f45f08} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-14,{6394eeb1-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-turkish,{7b8556a4-ec79-11d2-8aac-00600811a836} -@mozilla.org/uriloader/web-handler-app;1,{8b1ae382-51a9-4972-b930-56977a57919d} -@mozilla.org/intl/saveascharset;1,{0cd233e0-7a86-11d3-915c-006008a6edf6} -@mozilla.org/network/http-authenticator;1?scheme=basic,{fca3766a-434a-4ae7-83cf-0909e18a093a} -@mozilla.org/sidebar;1,{22117140-9c6e-11d3-aaf1-00805f8a4905} -@mozilla.org/streamconv;1?from=text/plain&to=text/html,{9ef9fa14-1dd1-11b2-9d65-d72d6d1f025e} -@mozilla.org/webnavigation-info;1,{f30bc0a2-958b-4287-bf62-ce38ba0c811e} -@mozilla.org/intl/charsetdetect;1?type=ukprob,{2002f782-3960-11d3-b3c3-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=windows-1251,{a578e0a1-f76b-11d2-8aad-00600811a836} -@mozilla.org/storage/statement-wrapper;1,{dab3a846-3a59-4fc2-9745-c6ff48776f00} -@mozilla.org/layout/contentserializer;1?mimetype=application/xml,{4aef38b7-6364-4e23-a5e7-12f837fbbd9c} -@mozilla.org/system-proxy-settings;1,{0fa3158c-d5a7-43de-9181-a285e74cf1d4} -@mozilla.org/gfx/renderingcontext;1,{6049b261-c1e6-11d1-a827-0040959a28c9} -@mozilla.org/image/decoder;2?type=image/jpg,{5871a422-1dd2-11b2-ab3f-e2e56be5da9c} -@mozilla.org/security/crlmanager;1,{5b256c10-22d8-4109-af92-1253035e9fcb} -@mozilla.org/layout/contentserializer;1?mimetype=image/svg+xml,{4aef38b7-6364-4e23-a5e7-12f837fbbd9c} -@mozilla.org/network/mime-input-stream;1,{58a1c31c-1dd2-11b2-a3f6-d36949d48268} -@mozilla.org/intl/unicode/decoder;1?charset=UTF-8,{5534ddc0-dd96-11d2-8aac-00600811a836} -@mozilla.org/dom/storage;1,{8b449142-1eab-4bfa-9830-fab6ebb09774} -@mozilla.org/embedding/browser/nsCommandHandler;1,{3a449110-66fd-11d4-9528-0020183bf181} -@mozilla.org/intl/unicode/encoder;1?charset=IBM850,{2d524fd6-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/intl/unicode/encoder;1?charset=windows-1254,{7b8556ae-ec79-11d2-8aac-00600811a836} -@mozilla.org/sound;1,{b148eed2-236d-11d3-b35c-00a0cc3c1cde} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-devanagari,{6803cac5-1e3b-11d5-a145-005004832142} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-6,{660d8ca3-f763-11d2-8aad-00600811a836} -@mozilla.org/xpinstall/install-manager;1,{6a4d4c1e-a74a-4320-8124-16233a0183d6} -@mozilla.org/passwordmanager/authpromptfactory;1,{749e62f4-60ae-4569-a8a2-de78b649660e} -@mozilla.org/extensions/blocklist;1,{66354bc9-7ed1-4692-ae1d-8da97d6b205e} -@mozilla.org/widget/bidikeyboard;1,{9f1800ab-f428-4207-b40c-e832e77b01fc} -@mozilla.org/permissions/contentblocker;1,{4ca6b67b-5cc7-4e71-a98a-97af1c134862} -@mozilla.org/appshell/component/browser-status-filter;1,{6356aa16-7916-4215-a825-cbc2692ca87a} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-2022-CN,{ba615199-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/security/nsASN1Tree;1,{4bfaa9f0-1dd2-11b2-afae-a82cbaa0b606} -@mozilla.org/intl/texttransform;1?type=hankakutozenkaku,{8f666a11-04a0-11d3-b3b9-00805f8a6670} -@mozilla.org/intl/charsetdetect;1?type=ruprob,{2002f781-3960-11d3-b3c3-00805f8a6670} -@mozilla.org/uriloader/content-handler;1?type=text/css,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/widget/native-key-bindings;1?type=input,{5c337258-a580-472e-8615-f277ddc5bb06} -@mozilla.org/streamconv;1?from=text/gopher-dir&to=application/http-index-format,{ea617873-3b73-4efd-a2c4-fc39bfab809d} -@mozilla.org/editor/editorcontroller;1,{26fb965c-9de6-11d3-bccc-0060b0fc76bd} -@mozilla.org/layout/documentEncoder;1?type=application/xml,{e7ba1480-1dea-11d3-830f-00104bed045e} -@mozilla.org/image/decoder;2?type=image/gif,{797bec5a-1dd2-11b2-a7f8-ca397e0179c4} -@mozilla.org/intl/texttosuburi;1,{8b042e22-6f87-11d3-b3c8-00805f8a6670} -@mozilla.org/network/http-activity-distributor;1,{15629ada-a41c-4a09-961f-6553cd60b1a2} -@mozilla.org/network/protocol/about;1?what=buildconfig,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/widget/htmlformatconverter;1,{948a0023-e3a7-11d2-96cf-0060b0fb9956} -@mozilla.org/intl/unicode/encoder;1?charset=Shift_JIS,{e28ab250-d66d-11d2-8aac-00600811a836} -@mozilla.org/nsCertificateDialogs;1,{518e071f-1dd2-11b2-937e-c45f14def778} -@mozilla.org/streamconv;1?from=application/http-index-format&to=text/html,{cf0f71fd-fafd-4e2b-9fdc-134d972e16e2} -@mozilla.org/network/stream-transport-service;1,{0885d4f8-f7b8-4cda-902e-94ba38bc256e} -@mozilla.org/js/xpc/RuntimeService;1,{b5e65b52-1dd1-11b2-ae8f-f0928ed88482} -@mozilla.org/network/binary-detector;1,{a2027ec6-ba0d-4c72-805d-148233f5f33c} -@mozilla.org/intl/charsetalias;1,{98d41c21-ccf3-11d2-b3b1-00805f8a6670} -@mozilla.org/browser/favicon-service;1,{984e3259-9266-49cf-b605-60b022a00756} -@mozilla.org/globalprefsecuritycheck;1,{7ee2a4c0-4b93-17d3-ba18-0060b0f199a2} -@mozilla.org/js/xpc/Exception;1,{5632bf70-51ec-11d3-9896-006008962422} -@mozilla.org/feed-person;1,{95c963b7-20b2-11db-92f6-001422106990} -@mozilla.org/xul/xul-popup-manager;1,{14632191-ac21-4bdf-83e7-2363ad17e838} -@mozilla.org/content/plugin/document-loader-factory;1,{0ddf4df8-4dbb-4133-8b79-9afb966514f5} -@mozilla.org/network/request-observer-proxy;1,{51fa28c7-74c0-4b85-9c46-d03faa7b696b} -@mozilla.org/browser/clh;1,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/embedcomp/controller-command-group;1,{ecd55a01-2780-11d5-a73c-ca641a6813bc} -@mozilla.org/uriloader/content-handler;1?type=text/plain,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/network/socket;2?type=starttls,{b9507aec-1dd1-11b2-8cd5-c48ee0c50307} -@mozilla.org/uriloader/external-helper-app-service;1,{a7f800e0-4306-11d4-98d0-001083010e9b} -@mozilla.org/scriptsecuritymanager;1,{7ee2a4c0-4b93-17d3-ba18-0060b0f199a2} -@mozilla.org/browser/browserglue;1,{eab9012e-5f74-4cbc-b2b5-a590235513cc} -@mozilla.org/network/protocol;1?name=ftp,{25029490-f132-11d2-9588-00805f369f95} -@mozilla.org/js/xpc/XPConnect;1,{cb6593e0-f9b2-11d2-bdd6-000064657374} -@mozilla.org/intl/unicode/encoder;1?charset=x-mathematica3,{830b5f80-e2f2-11d3-b32f-004005a7a7e4} -@mozilla.org/intl/unicode/decoder;1?charset=Big5-HKSCS,{ba6151bb-ec62-11d2-8aac-00600811a836} -@mozilla.org/security/psmdownload;1,{c94f4a30-64d7-11d4-9960-00b0d02354a0} -@mozilla.org/image/container;2,{376ff2c1-9bf6-418a-b143-3340c00112f7} -@mozilla.org/embedcomp/find;1,{57cf9383-3405-11d5-be5b-aa20fa2cf37c} -@mozilla.org/autocomplete/controller;1,{f6d5ebbd-34f4-487d-9d10-3d34123e3eb9} -@mozilla.org/network/unichar-stream-loader;1,{9445791f-fa4c-4669-b174-df5032bb67b3} -@mozilla.org/nsTokenDialogs;1,{518e071f-1dd2-11b2-937e-c45f14def778} -@mozilla.org/intl/scriptabledateformat;1,{2ea2e7d0-4095-11d3-9144-006008a6edf6} -@mozilla.org/network/application-cache-service;1,{02bf7a2a-39d8-4a23-a50c-2cbb085ab7a5} -@mozilla.org/network/http-authenticator;1?scheme=ntlm,{bbef8185-c628-4cc1-b53e-e61e74c2451a} -@mozilla.org/intl/unicode/encoder;1?charset=gb18030,{a59da932-4091-11d5-a145-005004832142} -@mozilla.org/geolocation/provider;1,{77da64d3-7458-4920-9491-86cc9914f904} -@mozilla.org/intl/charsetdetect;1?type=ko_parallel_state_machine,{ea06d4e1-2b3d-11d3-b3bf-00805f8a6670} -@mozilla.org/inspector/search;1?type=cssvalue,{4d977f60-fbe7-4583-8cb7-f5ed882293ef} -@mozilla.org/network/socket;2?type=socks,{8dbe7246-1dd2-11b2-9b8f-b9a849e4403a} -@mozilla.org/intl/platformcharset;1,{84b0f182-c6c7-11d2-b3b0-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-arabic,{6803cac6-1e3b-11d5-a145-005004832142} -@mozilla.org/intl/charsetdetect;1?type=cjk_parallel_state_machine,{fcacef24-2b40-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=KOI8-U,{6394eea6-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=x-t1-cmr,{d5eb483c-67c0-4286-a4a6-330e58a82300} -@mozilla.org/browser/sessionstore;1,{5280606b-2510-4fe0-97ef-9b5a22eafe6b} -@mozilla.org/pref-localizedstring;1,{064d9cee-1dd2-11b2-83e3-d25ab0193c26} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-6-E,{495eca45-0a5c-11d4-a135-005004832142} -@mozilla.org/security/nsscertcache;1,{3f429a14-dffe-417d-8cb8-fdf09bacd09e} -@mozilla.org/libjar/zip-reader-cache;1,{1b117e16-0cad-11d4-986e-00c04fa0cf4a} -@mozilla.org/url-classifier/utils;1,{b7b2ccec-7912-4ea6-a548-b038447004bd} -@mozilla.org/network/protocol/about;1?what=home,{7a2a7a56-827f-4b38-bdac-31aa7ec2971d} -@mozilla.org/intl/unicode/encoder;1?charset=windows-936,{9416bfc1-1f93-11d3-b3bf-00805f8a6670} -@mozilla.org/editor/txtsrvfilter;1,{171e72db-0f8a-412a-8461-e4c927a3a2ac} -@joehewitt.com/firebug-http-observer;1,{2d92593e-14d0-48ce-b260-a9881bbf9c8b} -@mozilla.org/nsDOMCryptoDialogs;1,{518e071f-1dd2-11b2-937e-c45f14def778} -@mozilla.org/intl/unicode/decoder;1?charset=armscii-8,{6394eeac-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/jsctypes;1,{0c797702-1c60-4051-9dd7-4d7405605642} -@mozilla.org/intl/unicode/encoder;1?charset=windows-874,{6394eeb4-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/network/protocol;1?name=resource,{e64f152a-9f07-11d3-8cda-0060b0fc14a3} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-3,{660d8ca5-f763-11d2-8aad-00600811a836} -@mozilla.org/accelerometer;1,{ecba5203-77da-465a-865e-78b7af10d8f7} -@mozilla.org/network/url-parser;1?auth=yes,{275d800e-3f60-4896-adb7-d7f390ce0e42} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-8-I,{495eca48-0a5c-11d4-a135-005004832142} -@mozilla.org/embedcomp/cookieprompt-service;1,{ce002b28-92b7-4701-8621-cc925866fb87} -@mozilla.org/intl/unicode/encoder;1?charset=x-zapf-dingbats,{21dd6a03-413c-11d3-b3c3-00805f8a6670} -@mozilla.org/network/idn-service;1,{62b778a6-bce3-456b-8c31-2865fbb68c91} -@mozilla.org/network/input-stream-channel;1,{6ddb050c-0d04-11d4-986e-00c04fa0cf4a} -@mozilla.org/microsummary/service;1,{460a9792-b154-4f26-a922-0f653e2c8f91} -@mozilla.org/toolkit/app-startup;1,{7dd4d320-c84b-4624-8d45-7bb9b2356977} -@mozilla.org/url-classifier/listmanager;1,{ca168834-cc00-48f9-b83c-fd018e58cae3} -@mozilla.org/network/auth-module;1?name=ntlm,{a4e5888f-4fe4-4632-8e7e-745196ea7c70} -@mozilla.org/intl/xmlencoding;1,{12bb8f16-2389-11d3-b3bf-00805f8a6670} -@mozilla.org/network/socket;2?type=udp,{320706d2-2e81-42c6-89c3-8d83b17d3fb4} -@mozilla.org/intl/unicode/encoder;1?charset=x-johab,{d9b1f97e-cfa0-80b6-fb92-9972e48e3dcc} -@mozilla.org/spellchecker/personaldictionary;1,{7ef52eaf-b7e1-462b-87e2-5d1dbaca9048} -@mozilla.org/security/hmac;1,{a496d0a2-dff7-4e23-bd65-1ca742fa178a} -@mozilla.org/browser/global-history;1,{a772eee4-0464-405d-a329-a29dfda3791a} -@mozilla.org/widget/idleservice;1,{6987230e-0098-4e78-bc5f-1493ee7519fa} -@mozilla.org/xpinstall/installtrigger;1,{18c2f98d-b09f-11d2-bcde-00805f0e1353} -@mozilla.org/layout/documentEncoder;1?type=application/xhtml+xml,{e7ba1480-1dea-11d3-830f-00104bed045e} -@mozilla.org/network/protocol;1?name=http,{4f47e42e-4d23-4dd3-bfda-eb29255e9ea3} -@mozilla.org/intl/unicode/decoder;1?charset=windows-1252,{7c657d15-ec5e-11d2-8aac-00600811a836} -@mozilla.org/intl/unicode/encoder;1?charset=UTF-32,{49b38f14-6193-11d3-b3c5-00805f8a6670} -@mozilla.org/intl/semanticunitscanner;1,{adf42751-1cef-4ad2-aa8e-bcb849d8d31f} -@mozilla.org/rdf/datasource;1?name=in-memory-datasource,{bfd0526d-834c-11d2-8eac-00805f29f370} -@mozilla.org/intl/unicode/decoder;1?charset=UTF-16LE,{ba6151b7-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/streamconv;1?from=compress&to=uncompressed,{66230b2b-17fa-4bd3-abf4-07986151022d} -@mozilla.org/intl/unicode/decoder;1?charset=us-ascii,{ba6151b9-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/network/stream-loader;1,{5ba6d920-d4e9-11d3-a1a5-0050041caf44} -@mozilla.org/content/canvas-rendering-context;1?id=2d,{a35d1cd4-c505-4d2d-a0f9-aef00b7ce5a5} -@mozilla.org/layout/contentserializer;1?mimetype=text/html,{9d3f70da-86e9-11d4-95ec-00b0d03e37b7} -@mozilla.org/network/socket;2?type=ssl,{217d014a-1dd2-11b2-999c-b0c4df79b324} -@mozilla.org/intl/unicode/encoder;1?charset=x-windows-949,{9416bfbe-1f93-11d3-b3bf-00805f8a6670} -@mozilla.org/security/hash;1,{36a1d3b3-d886-4317-96ff-87b0005cfef7} -@mozilla.org/network/auth-module;1?name=sasl-gssapi,{815e42e0-72cc-480f-934b-148e33c228a6} -@mozilla.org/intl/unicode/encoder;1?charset=windows-1251,{a578e0a3-f76b-11d2-8aac-00600811a836} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-15,{6394eea2-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-3,{660d8ca0-f763-11d2-8aad-00600811a836} -@mozilla.org/intl/unicode/encoder;1?charset=UTF-32LE,{ba6151b6-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/dom/storagemanager;1,{b88a4712-eb52-4c10-9b85-bf5894b510f0} -@mozilla.org/psm;1,{a277189c-1dd1-11b2-a8c9-e4e8bfb1338e} -@mozilla.org/docloaderservice;1,{057b04d0-0ccf-11d2-beba-00805f8a66dc} -@mozilla.org/streamconv;1?from=application/mac-binhex40&to=*/*,{301dea42-6850-4cda-8945-81f7dbc2186b} -@mozilla.org/network/protocol/about;1?what=cache,{9158c470-86e4-11d4-9be2-00e09872a416} -@mozilla.org/gfx/printsettings-service;1,{841387c8-72e6-484b-9296-bf6eea80d58a} -@mozilla.org/intl/unicode/decoder;1?charset=IBM866,{ba6151a9-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/content/syncload-dom-service;1,{0e4e7d00-f71a-439f-9178-1a71ff11b55f} -@mozilla.org/intl/unicode/encoder;1?charset=us-ascii,{ba6151ba-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=TIS-620,{c5de4da2-d667-42d2-b8c2-efdbcf3302ef} -@mozilla.org/uriloader/content-handler;1?type=text/html,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/security/nsCertTree;1,{4ea60761-31d6-491d-9e34-4b53a26c416c} -@mozilla.org/xul/xul-template-builder;1,{3d262d00-8b5a-11d2-8eb0-00805f29f370} -@mozilla.org/inspector/flasher;1,{9286e71a-621a-4b91-851e-9984c1a2e81a} -@mozilla.org/security/crypto;1,{929d9320-251e-11d4-8a7c-006008c844c3} -@mozilla.org/fuel/application;1,{fe74cf80-aa2d-11db-abbd-0800200c9a66} -@mozilla.org/url-classifier/hashcompleter;1,{786e0a0e-e035-4600-8ee0-365a63a80b80} -@mozilla.org/intl/converter-output-stream;1,{ff8780a5-bbb1-4bc5-8ee7-057e7bc5c925} -@mozilla.org/embeddor.implemented/bookmark-charset-resolver;1,{88cecbb7-6c63-4b3b-8cd4-84f3b8228c69} -@mozilla.org/intl/stringcharsetdetect;1?type=zhcn_parallel_state_machine,{ea06d4e5-2b3d-11d3-b3bf-00805f8a6670} -@mozilla.org/find/find_service;1,{5060b803-340e-11d5-be5b-b3e063ec6a3c} -@mozilla.org/editor/editingsession;1,{bc26ff01-f2bd-11d4-a73c-e5a4b5a8bdfc} -@mozilla.org/xbl;1,{64f300a1-c88c-11d3-97fb-00400553eef0} -@mozilla.org/uriloader/dbus-handler-app;1,{6c3c274b-4cbf-4bb5-a635-05ad2cbb6535} -@mozilla.org/intl/unicode/encoder;1?charset=GEOSTD8,{6394eebe-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/content-pref/hostname-grouper;1,{8df290ae-dcaa-4c11-98a5-2429a4dc97bb} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-romanian,{6394eeb8-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/network/util;1,{9ac9e770-18bc-11d3-9337-00104ba0fd40} -@mozilla.org/intl/unicode/encoder;1?charset=x-ttf-cmex,{e91f9440-e076-11d3-b32f-004005a7a7e4} -@mozilla.org/intl/converter-input-stream;1,{2bc2ad62-ad5d-4b7b-a9db-f74ae203c527} -@mozilla.org/network/url-parser;1?auth=maybe,{ff41913b-546a-4bff-9201-dc9b2c032eba} -@mozilla.org/netwerk/global-channel-event-sink;1,{7ee2a4c0-4b93-17d3-ba18-0060b0f199a2} -@mozilla.org/layout/documentEncoder;1?type=image/svg+xml,{e7ba1480-1dea-11d3-830f-00104bed045e} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-ce,{7b8556b0-ec79-11d2-8aac-00600811a836} -@mozilla.org/permissionmanager;1,{4f6b5e00-0c36-11d5-a535-0010a401eb10} -@mozilla.org/toolkit/crash-reporter;1,{95d89e3e-a169-41a3-8e56-719978e15b12} -@mozilla.org/safebrowsing/application;1,{c64d0bcb-8270-4ca7-a0b3-3380c8ffecb5} -@mozilla.org/network/application-cache-namespace;1,{b00ed78a-04e2-4f74-8e1c-d1af79dfd12f} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-8,{660d8ca9-f763-11d2-8aad-00600811a836} -@mozilla.org/uriloader/content-handler;1?type=image/x-icon,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/accessibleRetrieval;1,{663ca4a8-d219-4000-925d-d8f66406b626} -@mozilla.org/intl/stringcharsetdetect;1?type=cjk_parallel_state_machine,{fcacef22-2b40-11d3-b3bf-00805f8a6670} -@mozilla.org/js/jsd/debugger-service;1,{f1299dc2-1dd1-11b2-a347-ee6b7660e048} -@mozilla.org/docshell;1,{f1eac762-87e9-11d3-af80-00a024ffc08c} -@mozilla.org/image/encoder;2?type=image/png,{38d1592e-b81e-432b-86f8-471878bbfe07} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-cyrillic,{6394eeb9-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/gfx/devicecontextspec;1,{d3f69889-e13a-4321-980c-a39332e21f34} -@mozilla.org/nsGeneratingKeypairInfoDialogs;1,{518e071f-1dd2-11b2-937e-c45f14def778} -@mozilla.org/cookie/permission;1,{ef565d0a-ab9a-4a13-9160-0644cdfd859a} -@mozilla.org/uriloader/content-handler;1?type=image/bmp,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/intl/unicode/encoder;1?charset=x-mathematica4,{87ed1160-e2f2-11d3-b32f-004005a7a7e4} -@mozilla.org/gnome-gconf-service;1,{d96d5985-a13a-4bdc-9386-ef348d7a97a1} -@mozilla.org/widget/appshell/gtk;1,{2d96b3df-c051-11d1-a827-0040959a28c9} -@mozilla.org/xhtmlparanoidfragmentsink;1,{2d78bbf0-e26c-482b-92b3-78a7b2afc8f7} -@mozilla.org/intl/unicode/decoder;1?charset=GB2312,{379c2774-ec77-11d2-8aac-00600811a836} -@mozilla.org/image/loader;1,{9f6a0d2e-1dd1-11b2-a5b8-951f13c846f7} -@mozilla.org/profile/migrator;1?app=browser&type=seamonkey,{9a28ffa7-e6ef-4b52-a127-6ad951de8e9b} -@mozilla.org/uriloader/psm-external-content-listener;1,{c94f4a30-64d7-11d4-9960-00b0d02354a0} -@mozilla.org/uriloader/content-handler;1?type=image/vnd.microsoft.icon,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/intl/unicode/encoder;1?charset=x-koreanjamo-0,{47433d1d-d9a7-4954-994f-f7a05cf87c2e} -@mozilla.org/intl/unicode/decoder;1?charset=windows-1257,{a578e0a2-f76b-11d2-8aad-00600811a836} -@mozilla.org/widget/window/gtk;1,{2d96b3d0-c051-11d1-a827-0040959a28c9} -@mozilla.org/widget/printdialog-service;1,{06beec76-a183-4d9f-85dd-085f26da565a} -@mozilla.org/login-manager/prompter;1,{8aa66d77-1bbb-45a6-991e-b8f47751c291} -@mozilla.org/network/protocol;1?name=gopher,{44588c1f-2ce8-4ad8-9b16-dfb9d9d513a7} -@mozilla.org/intl/unicode/decoder;1?charset=KOI8-R,{6394eea5-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-romanian,{6394eea8-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/network/standard-url;1,{de9472d0-8034-11d3-9399-00104ba0fd40} -@mozilla.org/updates/item;1,{f3294b1c-89f4-46f8-98a0-44e1eae92518} -@mozilla.org/streamconv;1?from=application/vnd.mozilla.maybe.video.feed&to=*/*,{229fa115-9412-4d32-baf3-2fc407f76fb1} -@mozilla.org/intl/charsetdetect;1?type=zhcn_parallel_state_machine,{ea06d4e2-2b3d-11d3-b3bf-00805f8a6670} -@mozilla.org/feed-processor;1,{26acb1f0-28fc-43bc-867a-a46aabc85dd4} -@mozilla.org/security/cipherinfo;1,{ec693a6f-0832-49dd-877c-89f6552df5de} -@mozilla.org/network/protocol;1?name=moz-anno,{e8b8bdb7-c96c-4d82-9c6f-2b3c585ec7ea} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-gujarati,{6803cacb-1e3b-11d5-a145-005004832142} -@mozilla.org/xmlextras/xmlserializer;1,{a6cf9124-15b3-11d2-932e-00805f8add32} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-8,{660d8ca4-f763-11d2-8aad-00600811a836} -@mozilla.org/layout/xul-boxobject-container;1,{dca9d7c3-7b6a-4490-ad6d-2699a8d683cd} -@mozilla.org/streamconv;1?from=multipart/mixed&to=*/*,{7584ce90-5b25-11d3-a175-0050041caf44} -@mozilla.org/network/auth-module;1?name=kerb-gss,{dc8e21a0-03e4-11da-8cd6-0800200c9a66} -@mozilla.org/layout/contentserializer;1?mimetype=application/xhtml+xml,{e7c2aaf5-c11a-4954-9dbf-e28edec1fd91} -@mozilla.org/appshell/appShellService;1,{0099907d-123c-4853-a46a-43098b5fb68c} -@mozilla.org/network/protocol/about;1?what=mozilla,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@joehewitt.com/firebug-channel-listener;1,{5aaeb534-fa57-488d-9a73-20c258fc7bdb} -@mozilla.org/js/jsd/app-start-observer;2,{2fd6b7f6-eb8c-4f32-ad26-113f2c02d0fe} -@mozilla.org/network/protocol/about;1?what=plugins,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/intl/unicharutil;1,{cc10c750-9ec3-11d2-b3ae-00805f8a6670} -@mozilla.org/browser/search-service;1,{7319788a-fe93-4db3-9f39-818cf08f4256} -@mozilla.org/intl/unicode/decoder;1?charset=gb18030,{a59da935-4091-11d5-a145-005004832142} -@mozilla.org/browser/feeds/sniffer;1,{06893e69-71d8-4b23-81eb-80314daf3e66} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-greek,{7b8556a3-ec79-11d2-8aac-00600811a836} -@mozilla.org/system-alerts-service;1,{84e11f80-ca55-11dd-ad8b-0800200c9a66} -@mozilla.org/network/protocol/about;1?what=logo,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/intl/unicode/encoder;1?charset=T.61-8bit,{ba6151af-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/login-manager/loginInfo;1,{0f2f347c-1e4f-40cc-8efd-792dea70a85e} -@mozilla.org/intl/unicode/decoder;1?charset=T.61-8bit,{ba6151b4-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/embedcomp/appstartup-notifier;1,{1f59b001-02c9-11d5-ae76-cc92f7db9e03} -@mozilla.org/intl/unicode/encoder;1?charset=IBM855,{2d524fd8-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-ce,{7b8556a2-ec79-11d2-8aac-00600811a836} -@mozilla.org/rdf/datasource;1?name=composite-datasource,{e638d761-8687-11d2-b530-000000000000} -@mozilla.org/satchel/form-history;1,{a2059c0e-5a58-4c55-ab7c-26f0557546ef} -@mozilla.org/nsClientAuthDialogs;1,{518e071f-1dd2-11b2-937e-c45f14def778} -@mozilla.org/intl/datetimeformat;1,{0704e7c0-a758-11d2-9119-006008a6edf6} -@mozilla.org/nullprincipal;1,{dd156d62-d26f-4441-9cdb-e8f09107c273} -@mozilla.org/dom/window-controller;1,{7bd05c78-6a26-11d7-b16f-0003938a9d96} -@mozilla.org/inspector/deep-tree-walker;1,{bfcb82c2-5611-4318-90d6-baf4a7864252} -@mozilla.org/intl/charsetdetect;1?type=zh_parallel_state_machine,{fcacef23-2b40-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/collation-factory;1,{a1b72850-a999-11d2-9119-006008a6edf6} -@mozilla.org/layout/contentserializer;1?mimetype=text/plain,{6030f7ef-32ed-46a7-9a63-6a5d3f90445f} -@mozilla.org/inspector/dom-view;1,{fb5c1775-1bbd-4b9c-abb0-ae7acd29e87e} -@mozilla.org/embeddor.implemented/web-content-handler-registrar;1,{792a7e82-06a0-437c-af63-b2d12e808acc} -@mozilla.org/uriloader/content-handler;1?type=image/gif,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/offlinecacheupdate;1,{e56f5e01-c7cc-4675-a9d7-b8f1e4127295} -@mozilla.org/geolocation;1,{01e1c3ff-094a-d048-44b4-62d29c7b4f39} -@mozilla.org/embedcomp/controller-command-table;1,{670ee5da-6ad5-11d7-9950-000393636592} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-roman,{7b8556a1-ec79-11d2-8aac-00600811a836} -@mozilla.org/image/request;1,{20557898-1dd2-11b2-8f65-9c462ee2bc95} -@mozilla.org/autoconfiguration;1,{e036c738-1dd1-11b2-9392-9d94aa74b0c5} -@mozilla.org/network/protocol;1?name=wyciwyg,{e7509b46-2eb2-410a-9d7c-c3ce73284d01} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-turkish,{7b8556b2-ec79-11d2-8aac-00600811a836} -@mozilla.org/streamconv;1?from=uncompressed&to=deflate,{461cd5dd-73c6-47a4-8cc3-603b37d84a61} -@mozilla.org/svg/svg-document;1,{b7f44954-11d1-11b2-8c2e-c2feab4186bc} -@mozilla.org/rdf/serializer;1?format=ntriples,{0a5cd734-eb65-4d14-88a0-9f0bb2aba206} -@mozilla.org/intl/unicode/encoder;1?charset=windows-1252,{7b8556ac-ec79-11d2-8aac-00600811a836} -@mozilla.org/network/protocol;1?name=moz-gnomevfs,{9b6dc177-a2e4-49e1-9c98-0a8384de7f6c} -@mozilla.org/intl/charsetdetect;1?type=zhtw_parallel_state_machine,{ea06d4e3-2b3d-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-10,{ba6151b0-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/uriloader/content-handler;1?type=application/http-index-format,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/network/simple-stream-listener;1,{fb8cbf4e-4701-4ba1-b1d6-5388e041fb67} -@mozilla.org/browser/directory-provider;1,{6deb193c-f87d-4078-bc78-5e64655b4d62} -@mozilla.org/layout/xmlfragmentsink;1,{4b664e54-72a2-4bbf-a5c2-66d4dc3066a0} -@mozilla.org/content-pref/service;1,{e6a3f533-4ffa-4615-8eb4-d4e72d883fa7} -@mozilla.org/intl/unicode/decoder;1?charset=VISCII,{6394eeae-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/layout/xul-boxobject-scrollbox;1,{56e2ada8-4631-11d4-ba11-001083023c1e} -@mozilla.org/network/load-group;1,{e1c61582-2a84-11d3-8cce-0060b0fc14a3} -@mozilla.org/layout/xul-boxobject-tree;1,{3b581fd4-3497-426c-8f61-3658b971cb80} -@mozilla.org/alerts-service;1,{a0ccaaf8-09da-44d8-b250-9ac3e93c8117} -@mozilla.org/intl/unicode/encoder;1?charset=x-euc-tw,{379c2776-ec77-11d2-8aac-00600811a836} -@mozilla.org/browser/shell-service;1,{63c7b9f4-0cc8-43f8-b666-0a661655cb73} -@mozilla.org/intl/unicode/encoder;1?charset=x-adobe-euro,{822cb9ae-6421-4484-b3c3-00805f8a6670} -@mozilla.org/widget/lookandfeel;1,{a61e6398-2057-40fd-9c81-873b908d24e7} -@mozilla.org/browser/placesTransactionsService;1,{c0844a84-5a12-4808-80a8-809cb002bb4f} -@mozilla.org/intl/unicode/encoder;1?charset=IBM862,{2d524fda-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/network/file-output-stream;1,{c272fee0-c7e9-11d3-8cda-0060b0fc14a3} -@mozilla.org/network/protocol/about;1?what=credits,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/content/contentutils2;1,{6f8366c7-2195-42ce-a149-48e26aeb9c24} -@mozilla.org/intl/unicode/decoder;1?charset=windows-1258,{6394eea3-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/network/protocol;1?name=about,{9e3b6c90-2f75-11d3-8cd0-0060b0fc14a3} -@mozilla.org/content/style-sheet-service;1,{fcca6f83-9f7d-44e4-a74b-b59433e6c8c3} -@mozilla.org/uriloader/content-handler;1?type=image/png,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/chrome/chrome-registry;1,{47049e42-1d87-482a-984d-56ae185e367a} -@mozilla.org/appshell/trytoclose;1,{b69155f4-a8bf-453d-8653-91d1456e1d3d} -@mozilla.org/image/decoder;2?type=image/x-png,{36fa00c2-1dd2-11b2-be07-d16eeb4c50ed} -@mozilla.org/cookieService;1,{c375fa80-150f-11d6-a618-0010a401eb10} -@mozilla.org/xpcom/ini-processor-factory;1,{6ec5f479-8e13-4403-b6ca-fe4c2dca14fd} -@mozilla.org/principal;1,{36102b6b-7b62-451a-a1c8-a0d456c92dc5} -@mozilla.org/nsCMSDecoder;1,{9dcef3a4-a3bc-11d5-ba47-00108303b117} -@mozilla.org/intl/unicode/encoder;1?charset=EUC-JP,{45c23a20-d71c-11d2-8aac-00600811a836} -@mozilla.org/crypto/fips-info-service;1,{ff9fbcd7-9517-4334-b97a-ceed78909974} -@mozilla.org/intl/charsetdetect;1?type=ja_parallel_state_machine,{12bb8f1b-2389-11d3-b3bf-00805f8a6670} -@mozilla.org/content/element/html;1?name=audio,{1d40026b-4c44-4f6f-b158-26bb5e9c65e9} -@mozilla.org/security/script/nameset;1,{7c02eadc-0076-4d03-998d-80d779c48589} -@mozilla.org/network/protocol;1?name=moz-icon,{d0f9db12-249c-11d5-9905-001083010e9b} -@mozilla.org/uriloader/handler-service;1,{32314cc8-22f7-4f7f-a645-1a45453ba6a6} -@mozilla.org/security/pkcs11moduledb;1,{ff9fbcd7-9517-4334-b97a-ceed78909974} -@mozilla.org/widgets/child_window/gtk;1,{2d96b3d1-c051-11d1-a827-0040959a28c9} -@mozilla.org/autocomplete/search;1?name=form-history,{895db6c7-dbdf-40ea-9f64-b175033243dc} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-5,{660d8ca7-f763-11d2-8aad-00600811a836} -@mozilla.org/browser/places/import-export-service;1,{6fb0c970-e1b1-11db-8314-0800200c9a66} -@mozilla.org/toolkit/URLFormatterService;1,{e6156350-2be8-11db-a98b-0800200c9a66} -@mozilla.org/xml/xml-document;1,{a6cf9063-15b3-11d2-932e-00805f8add32} -@mozilla.org/image/decoder;2?type=image/pjpeg,{5871a422-1dd2-11b2-ab3f-e2e56be5da9c} -@mozilla.org/network/buffered-input-stream;1,{9226888e-da08-11d3-8cda-0060b0fc14a3} -@mozilla.org/intl/nslanguageatomservice;1,{a6cf9120-15b3-11d2-932e-00805f8add32} -@mozilla.org/feed-textconstruct;1,{b992ddcd-3899-4320-9909-924b3e72c922} -@mozilla.org/intl/unicode/encoder;1?charset=Adobe-Symbol-Encoding,{21dd6a02-413c-11d3-b3c3-00805f8a6670} -@mozilla.org/image/decoder;2?type=image/x-icon,{cb3ede1a-0fa5-4e27-aafe-0f7801e5a1f1} -@mozilla.org/uriloader/content-handler;1?type=application/xhtml+xml,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/security/keyobjectfactory;1,{a39e0e9d-e567-41e3-b12c-5df67f18174d} -@mozilla.org/intl/unicode/encoder;1?charset=UTF-16LE,{ba6151b5-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/widget/native-key-bindings;1?type=textarea,{2a898043-180f-4c8b-8e54-410c7a540f27} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-15,{6394eeb2-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/spellchecker-inline;1,{9fe5d975-09bd-44aa-a01a-66402ea28657} -@mozilla.org/htmlparanoidfragmentsink;2,{a47ef526-6e48-4574-9d60-3164e271f75e} -@mozilla.org/network/safe-file-output-stream;1,{a181af0d-68b8-4308-94db-d4f859058215} -@mozilla.org/streamconv;1?from=uncompressed&to=gzip,{461cd5dd-73c6-47a4-8cc3-603b37d84a61} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-6-E,{495eca47-0a5c-11d4-a135-005004832142} -@mozilla.org/content/css-parser;1,{2e363d60-872e-11d2-b531-000000000000} -@mozilla.org/rdf/datasource;1?name=window-mediator,{c744ca3d-840b-460a-8d70-7ce63c51c958} -@mozilla.org/intl/unicode/decoder;1?charset=windows-1250,{7c657d14-ec5e-11d2-8aac-00600811a836} -@mozilla.org/toolkit/console-clh;1,{2cd0c310-e127-44d0-88fc-4435c9ab4d4b} -@mozilla.org/transformiix-nodeset;1,{5d5d92cd-6bf8-11d9-bf4a-000a95dc234c} -@mozilla.org/uriloader/content-handler;1?type=image/svg+xml,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/intl/unicode/decoder;1?charset=UTF-32BE,{ba6151b3-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/nslocaleservice;1,{c8e518c1-47ae-11d3-91cd-00105aa3f7dc} -@mozilla.org/rdf/content-sink;1,{0958b101-9ada-11d2-8ebc-00805f29f370} -@mozilla.org/network/urichecker;1,{cf3a0e06-1dd1-11b2-a904-ac1d6da77a02} -@mozilla.org/dom/storage;2,{27aecc62-7777-428e-b34c-5973a47b8298} -@mozilla.org/intl/unicode/encoder;1?charset=x-mtextra,{0cb0d9a0-f503-11d3-b32f-004005a7a7e4} -@mozilla.org/uriloader/content-handler;1?type=application/vnd.mozilla.xul+xml,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/browser/livemark-service;2,{dca61eb5-c7cd-4df1-b0fb-d0722baba251} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-5,{660d8ca2-f763-11d2-8aad-00600811a836} -@mozilla.org/intl/unicode/decoder;1?charset=x-user-defined,{9416bfb2-1f93-11d3-b3bf-00805f8a6670} -@mozilla.org/preferences;1,{dc26e0e0-ca94-11d1-a9a4-00805f8a7ac4} -@mozilla.org/uriloader/content-handler;1?type=image/jpg,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/network/protocol;1?name=data,{b6ed3030-6183-11d3-a178-0050041caf44} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-8-E,{495eca42-0a5c-11d4-a135-005004832142} -@mozilla.org/parser/parser-service;1,{a6cf9112-15b3-11d2-932e-00805f8add32} -@mozilla.org/intl/unicode/encoder;1?charset=x-viet-tcvn5712,{6394eebd-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/browser/httpindex-service;1,{2587e382-1324-11d4-a652-eadbb2be3484} -@mozilla.org/gfx/fontmetrics;1,{6049b263-c1e6-11d1-a827-0040959a28c9} -@mozilla.org/intl/stringcharsetdetect;1?type=ukprob,{2002f784-3960-11d3-b3c3-00805f8a6670} -@mozilla.org/network/protocol/about;1?what=blocked,{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980} -@mozilla.org/widget/native-key-bindings;1?type=editor,{f916ebfb-78ef-464b-94d0-a6f2ca3200ae} -@mozilla.org/js/xpc/ContextStackIterator;1,{05bae29d-8aef-486d-84aa-53f48f146811} -@mozilla.org/browser/session-history-entry;1,{bfd1a791-ad9f-11d3-bdc7-0050040a9b44} -@joehewitt.com/firebug;1,{a380e9c0-cb39-11da-a94d-0800200c9a66} -@mozilla.org/feed-result;1,{072a5c3d-30c6-4f07-b87f-9f63d51403f2} -@mozilla.org/userinfo;1,{14c13684-1dd2-11b2-9463-bb10ba742554} -@mozilla.org/xpfe/http-index-format-factory-constructor,{82776710-5690-11d3-be36-00104bde6048} -@mozilla.org/intl/unicode/encoder;1?charset=IBM852,{2d524fd7-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/browser/nav-history-service;1,{88cecbb7-6c63-4b3b-8cd4-84f3b8228c69} -@mozilla.org/gnome-vfs-service;1,{5f43022c-6194-4b37-b26d-e41024625264} -@mozilla.org/nsFormSigningDialog;1,{a4bd2161-7892-4389-8d5a-3111a6d17ec7} -@mozilla.org/xhtmlparanoidfragmentsink;2,{ad78bbf0-e261-482b-32b3-78a7b2afc8f7} -@mozilla.org/js/xpc/ID;1,{f24a14f0-4fa1-11d3-9894-006008962422} -@mozilla.org/geolocation/service;1,{0404d02a-01ca-aaab-4762-944b1bf2f7b5} -@mozilla.org/intl/stringcharsetdetect;1?type=zhtw_parallel_state_machine,{ea06d4e6-2b3d-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-roman,{7b8556af-ec79-11d2-8aac-00600811a836} -@mozilla.org/nsCMSSecureMessage;1,{5fb907e0-1dd2-11b2-a7c0-f14c416a62a1} -@mozilla.org/embedding/browser/nsWebBrowserPersist;1,{7e677795-c582-4cd1-9e8d-8271b3474d2a} -@mozilla.org/toolkit/remote-service;1,{c0773e90-5799-4eff-ad03-3ebcd85624ac} -@mozilla.org/exslt/regexp;1,{18a03189-067b-4978-b4f1-bafe35292ed6} -@mozilla.org/intl/stringbundle;1,{d85a17c1-aa7c-11d2-9b8c-00805f8a16d9} -@mozilla.org/user_cert_picker;1,{735959a1-af01-447e-b02d-56e968fa52b4} -@mozilla.org/browser/shistory;1,{7294fe9c-14d8-11d5-9882-00c04fa02f40} -@mozilla.org/intl/unicode/encoder;1?charset=UTF-7,{77cfaaf2-1cf4-11d3-8aaf-00600811a836} -@mozilla.org/gfx/devicecontext;1,{6049b262-c1e6-11d1-a827-0040959a28c9} -@mozilla.org/browser/final-clh;1,{47cd0651-b1be-4a0f-b5c4-10e5a573ef71} -@mozilla.org/network/input-stream-pump;1,{ccd0e960-7947-4635-b70e-4c661b63d675} -@mozilla.org/embedcomp/prompt-service;1,{a2112d6a-0e28-421f-b46a-25c0b308cbd0} -@mozilla.org/intl/entityconverter;1,{9e9b565a-8e52-4c1a-8805-b2b91655f874} -@mozilla.org/intl/unicode/decoder;1?charset=x-imap4-modified-utf7,{b57f97c1-0d70-11d3-8aae-00600811a836} -@mozilla.org/intl/unicode/encoder;1?charset=x-user-defined,{9416bfb4-1f93-11d3-b3bf-00805f8a6670} -@mozilla.org/typeaheadfind;1,{e7f70966-9a37-48d7-8aeb-35998f31090e} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-13,{ba6151b1-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=x-mathematica2,{7e6e57c0-e2f2-11d3-b32f-004005a7a7e4} -@mozilla.org/intl/unicode/decoder;1?charset=x-johab,{d9b1f97f-cfa0-80b6-fb92-9972e48e3dcc} -@mozilla.org/prefetch-service;1,{6b8bdffc-3394-417d-be83-a81b7c0f63bf} -@mozilla.org/embedcomp/nbalert-service;1,{a2112d6a-0e28-421f-b46a-25c0b308cbd0} -@mozilla.org/network/socket-provider-service;1,{ed394ba0-5472-11d3-bbc8-0000861d1237} -@mozilla.org/zipwriter;1,{430d416c-a722-4ad1-be98-d9a445f85e3f} -@mozilla.org/rdf/datasource;1?name=local-store,{df71c6f0-ec53-11d2-bdca-000064657374} -@mozilla.org/preferences-service;1,{1cd91b88-1dd2-11b2-92e1-ed22ed298000} -@mozilla.org/nsSSLCertErrorDialog;1,{518e071f-1dd2-11b2-937e-c45f14def778} -@mozilla.org/streamconv;1?from=gzip&to=uncompressed,{66230b2b-17fa-4bd3-abf4-07986151022d} -@mozilla.org/intl/unicode/decoder;1?charset=windows-1255,{ba6151a1-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/scriptableunicodeconverter,{0a698c44-3bff-11d4-9649-00c0ca135b4e} -@mozilla.org/nsCertPickDialogs;1,{518e071f-1dd2-11b2-937e-c45f14def778} -@mozilla.org/content/range-utils;1,{a6cf9126-15b3-11d2-932e-00805f8add32} -@mozilla.org/editor/txtsrvfiltermail;1,{7fbd2146-5ff4-4674-b069-a7bbce66e773} -@mozilla.org/network/protocol;1?name=jar,{c7e410d4-85f2-11d3-9f63-006008a6efe9} -@mozilla.org/pref-relativefile;1,{2f977d4f-5485-11d4-87e2-0010a4e75ef2} -@mozilla.org/gfx/printsession;1,{2f977d53-5485-11d4-87e2-0010a4e75ef2} -@mozilla.org/mime;1,{a7f800e0-4306-11d4-98d0-001083010e9b} -@mozilla.org/browser/global-history;2,{88cecbb7-6c63-4b3b-8cd4-84f3b8228c69} -@mozilla.org/intl/unicode/encoder;1?charset=windows-1258,{6394eeb3-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/charsetdetectionadaptor;1,{12bb8f17-2389-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=VISCII,{6394eebf-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/profile/migrator;1?app=browser&type=phoenix,{78481e4a-50e4-4489-b68a-ef82670ed63f} -@mozilla.org/intl/unicode/encoder;1?charset=Big5-HKSCS,{ba6151bc-ec62-11d2-8aac-00600811a836} -@mozilla.org/streamconv;1?from=deflate&to=uncompressed,{66230b2b-17fa-4bd3-abf4-07986151022d} -@mozilla.org/layout/htmlsanitizer;1,{feca3c34-205e-4ae5-bd1c-03c686ff012b} -@mozilla.org/cookiemanager;1,{aaab6710-0f2c-11d5-a53b-0010a401eb10} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-2,{7b8556a6-ec79-11d2-8aac-00600811a836} -@mozilla.org/autocomplete/search;1?name=search-autocomplete,{aa892eb4-ffbf-477d-9f9a-06c995ae9f27} -@mozilla.org/intl/unicode/encoder;1?charset=x-mathematica1,{758e4f20-e2f2-11d3-b32f-004005a7a7e4} -@mozilla.org/network/url-parser;1?auth=no,{78804a84-8173-42b6-bb94-789f0816a810} -@mozilla.org/embedcomp/printingprompt-service;1,{e042570c-62de-4bb6-a6e0-798e3c07b4df} -@mozilla.org/image/encoder;2?type=image/jpeg,{ac2bb8fe-eeeb-4572-b40f-be03932b56e0} -@mozilla.org/network/network-link-service;1,{75a500a2-0030-40f7-86f8-63f225b940ae} -@mozilla.org/intl/wbrk;1,{2bf64765-997f-450d-af96-3028d1a902b0} -@mozilla.org/charset-converter-manager;1,{3c1c0163-9bd0-11d3-9d09-0050040007b2} -@mozilla.org/security/streamcipher;1,{dbfcbe4a-10f7-4d6f-a481-68e6d6b71d21} -@mozilla.org/eventlistenerservice;1,{baa34652-f1f1-4185-b224-244ee82a413a} -@mozilla.org:/content/content-area-dragdrop;1,{1f34bc80-1bc7-11d6-a384-d705dd0746fc} -@mozilla.org/layout/documentEncoder;1?type=text/html,{e7ba1480-1dea-11d3-830f-00104bed045e} -@mozilla.org/rdf/rdf-service;1,{bfd05264-834c-11d2-8eac-00805f29f370} -@mozilla.org/security/certoverride;1,{67ba681d-5485-4fff-952c-2ee337ffdcd6} -@mozilla.org/layout/content-policy;1,{0e3afd3d-eb60-4c2b-963b-56d7c439f124} -@mozilla.org/secure_browser_ui;1,{cc75499a-1dd1-11b2-8a82-ca410ac907b8} -@mozilla.org/browser/history-entry;1,{a41661d5-1417-11d5-9882-00c04fa02f40} -@mozilla.org/htmlparanoidfragmentsink;1,{a47e9526-6e48-4574-9d6c-3164e271f74e} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-10,{ba6151ab-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/widget/dragservice;1,{8b5314bb-db01-11d2-96ce-0060b0fb9956} -@mozilla.org/channelclassifier,{ce02d538-0217-47a3-a589-b51790fdd8ce} -@mozilla.org/layout/xul-boxobject-menu;1,{aa40253b-4c42-4056-8132-37bcd07862fd} -@mozilla.org/embedcomp/base-command-controller;1,{bf88b48c-fd8e-40b4-ba36-c7c3ad6d8ac9} -@mozilla.org/intl/unicode/decoder;1?charset=IBM864i,{2d524fdc-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/wifi/monitor;1,{3ff8fb9f-ee63-48df-89f0-dace0242fd82} -@mozilla.org/plugin/host;1,{23e8fd98-a625-4b08-be1a-f7cc18a5b106} -@mozilla.org/embedcomp/command-params;1,{f7fa4581-238e-11d5-a73c-ab64fb68f2bc} -@mozilla.org/uriloader/content-handler;1?type=text/xml,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/intl/unicode/encoder;1?charset=IBM857,{2d524fd9-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/layout/xul-boxobject-listbox;1,{c2710d40-6f4d-4b7f-9778-76ae5166648c} -@mozilla.org/uriloader;1,{9f6d5d40-90e7-11d3-af80-00a024ffc08c} -@mozilla.org/intl/unicode/encoder;1?charset=windows-1255,{ba6151a3-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=x-tamilttf-0,{a431b276-f77d-4b83-9b37-872cf2fbcc2a} -@mozilla.org/feed-generator;1,{414af362-9ad8-4296-898e-62247f25a20e} -@mozilla.org/intl/lbrk;1,{2bf64764-997f-450d-af96-3028d1a902b0} -@mozilla.org/uriloader/local-handler-app;1,{bc0017e3-2438-47be-a567-41db58f17627} -@mozilla.org/intl/unicode/encoder;1?charset=EUC-KR,{379c2778-ec77-11d2-8aac-00600811a836} -@mozilla.org/xmlextras/xmlhttprequest;1,{d164e770-4157-11d4-9a42-000064657374} -@mozilla.org/layout/documentEncoder;1?type=text/plain,{e7ba1480-1dea-11d3-830f-00104bed045e} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-hebrew,{6803cacd-1e3b-11d5-a145-005004832142} -@mozilla.org/filepicker;1,{bd57cee8-1dd1-11b2-9fe7-95cf4709aea3} -@mozilla.org/accessibilityService;1,{de401c37-9a7f-4278-a6f8-3de2833989ef} -@mozilla.org/xml/xpointer;1?scheme=xpath1,{0c351177-0159-4500-86b0-a219dfde4258} -@mozilla.org/network/protocol/about;1?what=sessionrestore,{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-gurmukhi,{6803cace-1e3b-11d5-a145-005004832142} -@mozilla.org/intl/unicode/encoder;1?charset=windows-1250,{7b8556aa-ec79-11d2-8aac-00600811a836} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-16,{a0f827e1-8ab6-11d5-a14b-005004832142} -@mozilla.org/content/xmlhttprequest-bad-cert-handler;1,{dbded6ec-edbf-4054-a834-287b82c260f9} -@mozilla.org/layout/htmlfragmentsink;2,{13111d00-ce81-11d6-8082-ecf3665af67c} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-2,{7c657d11-ec5e-11d2-8aac-00600811a836} -@mozilla.org/image/decoder;2?type=image/bmp,{78c61626-4d1f-4843-9364-4652d98ff6e1} -@mozilla.org/image/decoder;2?type=image/jpeg,{5871a422-1dd2-11b2-ab3f-e2e56be5da9c} -@mozilla.org/feed-entry;1,{8e4444ff-8e99-4bdd-aa7f-fb3c1c77319f} -@mozilla.org/streamconv;1?from=x-gzip&to=uncompressed,{66230b2b-17fa-4bd3-abf4-07986151022d} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-IR-111,{9416bfb3-1f93-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=IBM864,{2d524fdb-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/content/namespacemanager;1,{d9783472-8fe9-11d2-9d3c-0060088f9ff7} -@mozilla.org/rdf/datasource;1?name=xml-datasource,{7baf62e0-8e61-11d2-8eb1-00805f29f370} -@mozilla.org/uriloader/content-handler;1?type=image/jpeg,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/embedding/browser/nsWebBrowser;1,{f1eac761-87e9-11d3-af80-00a024ffc08c} -@mozilla.org/network/proxy-auto-config;1,{63ac8c66-1dd2-11b2-b070-84d00d3eaece} -@mozilla.org/system-preferences;1,{549abb24-7c9d-4aba-915e-7ce0b716b32f} -@mozilla.org/systemprincipal;1,{4a6212db-accb-11d3-b765-0060b0b6cecb} -@mozilla.org/network/protocol/about;1?what=neterror,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/login-manager/storage/legacy;1,{e09e4ca6-276b-4bb4-8b71-0635a3a2a007} -@mozilla.org/streamconv;1?from=uncompressed&to=x-gzip,{461cd5dd-73c6-47a4-8cc3-603b37d84a61} -@mozilla.org/network/incremental-download;1,{a62af1ba-79b3-4896-8aaf-b148bfce4280} -@mozilla.org/xtf/xtf-service;1,{4ec832da-6ae7-4185-807b-daddcb5da37a} -@mozilla.org/embedcomp/command-manager;1,{64edb481-0c04-11d5-a73c-e964b968b0bc} -@mozilla.org/intl/unicode/decoder;1?charset=IBM850,{2d524fd0-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/intl/stringcharsetdetect;1?type=ruprob,{2002f783-3960-11d3-b3c3-00805f8a6670} -@mozilla.org/network/file-input-stream;1,{be9a53ae-c7e9-11d3-8cda-0060b0fc14a3} -@mozilla.org/no-data-protocol-content-policy;1,{ac9e3e82-bfbd-4f26-941e-f58c8ee178c1} -@mozilla.org/libjar/zip-reader;1,{7526a738-9632-11d3-8cd9-0060b0fc14a3} -@mozilla.org/document-charset-info;1,{d25e0511-2bae-11d4-9d10-0050040007b2} -@mozilla.org/network/protocol/about;1?what=privatebrowsing,{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980} -@mozilla.org/download-manager;1,{edb0490e-1dd1-11b2-83b8-dbf8d85906a6} -@mozilla.org/xre/runtime;1,{95d89e3e-a169-41a3-8e56-719978e15b12} -@mozilla.org/readconfig;1,{ba5bc4c6-1dd1-11b2-bb89-b844c6ec0339} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-7,{7b8556a8-ec79-11d2-8aac-00600811a836} -@mozilla.org/content/subtree-content-iterator;1,{a6cf90e5-15b3-11d2-932e-00805f8add32} -@mozilla.org/intl/unicode/decoder;1?charset=UTF-16BE,{ba6151b2-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/network/protocol;1?name=file,{fbc81170-1f69-11d3-9344-00104ba0fd40} -@mozilla.org/offlinecacheupdate-service;1,{ec06f3fc-70db-4ecd-94e0-a6e91ca44d8a} -@mozilla.org/browser/nav-bookmarks-service;1,{9de95a0c-39a4-4d64-9a53-17940dd7cabb} -@mozilla.org/widget/image-to-gdk-pixbuf;1,{fc2389b8-c650-4093-9e42-b05e5f0685b7} -@mozilla.org/txttohtmlconv;1,{77c0e42a-1dd2-11b2-8ebf-edc6606f2f4b} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-devanagari,{6803cac4-1e3b-11d5-a145-005004832142} -@mozilla.org/network/protocol/about;1?what=memory,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/network/protocol;1?name=https,{dccbe7e4-7750-466b-a557-5ea36c8ff24e} -@mozilla.org/intl/unicode/decoder;1?charset=Shift_JIS,{0e6892c1-a9ad-11d2-b3ae-00805f8a6670} -@mozilla.org/network/http-authenticator;1?scheme=negotiate,{75c80fd0-accb-432c-af59-ec60668c3990} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-cyrillic,{6394eea9-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-hebrew,{6803cacc-1e3b-11d5-a145-005004832142} -@mozilla.org/streamconv;1?from=application/x-unknown-content-type&to=*/*,{7d7008a0-c49a-11d3-9b22-0080c7cb1080} -@mozilla.org/rdf/resource-factory;1,{0f78da56-8321-11d2-8eac-00805f29f370} -@mozilla.org/intl/unicode/encoder;1?charset=UTF-32BE,{ba6151ae-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/rdf/datasource;1?name=charset-menu,{42c52b81-a200-11d3-9d0b-0050040007b2} -@mozilla.org/intl/metacharset;1,{218f2ac0-0a48-11d3-b3ba-00805f8a6670} -@mozilla.org/feed;1,{5d0cfa97-69dd-4e5e-ac84-f253162e8f9a} -@mozilla.org/content/pre-content-iterator;1,{80d7e247-d4b8-45d7-bb59-6f1dd56f384c} -@mozilla.org/security/x509certdb;1,{fb0bbc5c-452e-4783-b32c-80124693d871} -@mozilla.org/view-manager;1,{c95f1831-c376-11d1-b721-00600891d8c9} -@mozilla.org/image/decoder;2?type=image/png,{36fa00c2-1dd2-11b2-be07-d16eeb4c50ed} -@mozilla.org/moz/jssubscript-loader;1,{929814d6-1dd2-11b2-8e08-82fa0a339b00} -@mozilla.org/security/sdr;1,{0c4f1ddc-1dd2-11b2-9d95-f2fdf113044b} -@mozilla.org/intl/unicode/decoder;1?charset=windows-1256,{ba6151a2-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/extensions/manager;1,{8a115faa-7dcb-4e8f-979b-5f53472f51cf} -@mozilla.org/spellchecker/i18nmanager;1,{aeb8936f-219c-4d3c-8385-d9382daa551a} -@mozilla.org/intl/unicode/decoder;1?charset=x-gbk,{ba61519e-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-6-I,{495eca44-0a5c-11d4-a135-005004832142} -@mozilla.org/dirIndex;1,{f6913e2e-1dd1-11b2-84be-f455dee342af} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-croatian,{6394eea7-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/appshell/window-mediator;1,{0659cb83-faad-11d2-8e19-b206620a657c} -@mozilla.org/network/protocol/about;1?what=rights,{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980} -@mozilla.org/network/simple-uri;1,{e0da1d70-2f7b-11d3-8cd0-0060b0fc14a3} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-gujarati,{6803caca-1e3b-11d5-a145-005004832142} -@mozilla.org/intl/unicode/decoder;1?charset=GEOSTD8,{6394eeaf-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-7,{af7a9951-aa48-11d2-b3ae-00805f8a6670} -@mozilla.org/security/datasignatureverifier;1,{296d76aa-275b-4f3c-af8a-30a4026c18fc} -@mozilla.org/content/range;1,{56ad2981-8a87-11d2-918c-0080c8e44db5} -@mozilla.org/network/default-auth-prompt;1,{ca200860-4696-40d7-88fa-4490d423a8ef} -@mozilla.org/places/sync;1,{c1751cfc-e8f1-4ade-b0bb-f74edfb8ef6a} -@mozilla.org/network/protocol/about;1?what=robots,{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980} -@mozilla.org/embedcomp/window-watcher;1,{a21bfa01-f349-4394-a84c-8de5cf0737d0} -@mozilla.org/network/protocol/about;1?what=licence,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/browser/default-browser-clh;1,{f57899d0-4e2c-4ac6-9e29-50c736103b0c} -@mozilla.org/layout/documentEncoder;1?type=text/xml,{e7ba1480-1dea-11d3-830f-00104bed045e} -@mozilla.org/streamconv;1?from=application/vnd.mozilla.maybe.feed&to=*/*,{229fa115-9412-4d32-baf3-2fc407f76fb1} -@mozilla.org/intl/stringcharsetdetect;1?type=ko_parallel_state_machine,{ea06d4e4-2b3d-11d3-b3bf-00805f8a6670} -@mozilla.org/appshell/component/browser/instance;1,{5551a1e0-5a66-11d3-806a-00600811a9c3} -@mozilla.org/updates/timer-manager;1,{b322a5c0-a419-484e-96ba-d7182163899f} -@mozilla.org/uriloader/content-handler;1?type=text/rdf,{5d0ce354-df01-421a-83fb-7ead0990c24e} -@mozilla.org/widget/clipboard;1,{8b5314ba-db01-11d2-96ce-0060b0fb9956} -@mozilla.org/scripterror;1,{e38e53b9-5bb0-456a-b553-579370cb1567} -@mozilla.org/nsCMSEncoder;1,{a15789aa-8903-462b-81e9-4aa2cff4d5cb} -@mozilla.org/content/element/html;1?name=option,{a6cf90f5-15b3-11d2-932e-00805f8add32} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-13,{ba6151ac-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/spellchecker;1,{8227f019-afc7-461e-b030-9f185d7a0e29} -@mozilla.org/network/async-stream-copier;1,{e746a8b1-c97a-4fc5-baa4-66607521bd08} -@mozilla.org/image/cache;1,{9f6a0d2e-1dd1-11b2-a5b8-951f13c846f7} -@mozilla.org/intl/unicodenormalizer;1,{a665e49a-f3e6-4fed-9f31-f7c568a29899} -@mozilla.org/editor/editordocstatecontroller;1,{50e95301-17a8-11d4-9f7e-dd530d5f057c} -@mozilla.org/intl/unicode/decoder;1?charset=UTF-16,{d673255d-1184-400a-b0b5-ee9d1295bd85} -@mozilla.org/uriclassifierservice,{5eb7c3c1-ec1f-4007-87cc-eefb37d68ce6} -@mozilla.org/textservices/textservicesdocument;1,{019718e3-cdb5-11d2-8d3c-000000000000} -@mozilla.org/spellcheck/dir-provider;1,{64d6174c-1496-4ffd-87f2-da2670f88934} -@mozilla.org/embedcomp/rangefind;1,{471f4944-1dd2-11b2-87ac-90be0a51d609} -@mozilla.org/login-manager;1,{cb9e0de8-3598-4ed7-857b-827f011ad5d8} -@mozilla.org/streamconv;1?from=multipart/byteranges&to=*/*,{7584ce90-5b25-11d3-a175-0050041caf44} -@mozilla.org/network/protocol;1?name=javascript,{bfc310d2-38a0-11d3-8cd3-0060b0fc14a3} -@mozilla.org/geolocation/prompt;1,{c6e8c44d-9f39-4af7-bcc0-76e38a8310f5} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-8-E,{495eca49-0a5c-11d4-a135-005004832142} -@mozilla.org/network/protocol;1?name=chrome,{61ba33c0-3031-11d3-8cd0-0060b0fc14a3} -@mozilla.org/toolkit/command-line;1,{23bcc750-dc20-460b-b2d4-74d8f58d3615} -@mozilla.org/intl/unicode/encoder;1?charset=x-tscii,{d2800356-c2d7-4e05-a884-79fe566af1cf} -@mozilla.org/uriloader/external-protocol-service;1,{a7f800e0-4306-11d4-98d0-001083010e9b} -@mozilla.org/rdf/datasource;1?name=extensions,{69bb8313-2d4f-45ec-97e0-d39da58ecce9} -@mozilla.org/intl/unicode/decoder;1?charset=UTF-7,{77cfaaf1-1cf4-11d3-8aaf-00600811a836} -@mozilla.org/browser/annotation-service;1,{5e8d4751-1852-434b-a992-2c6d2a25fa46} -@mozilla.org/system-preference-service;1,{94f1de09-d0e5-4ca8-94c2-98b049316b7f} -@mozilla.org/intl/unicode/encoder;1?charset=x-ttf-cmsy,{e332db00-e076-11d3-b32f-004005a7a7e4} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-11,{776588a6-86d5-47e2-b6b3-992810078202} -@mozilla.org/intl/unicode/encoder;1?charset=x-imap4-modified-utf7,{b57f97c2-0d70-11d3-8aae-00600811a836} -@mozilla.org/intl/unicode/decoder;1?charset=x-viet-vps,{6394eeb0-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/layout/htmlfragmentsink;1,{d4f2b600-b5c1-11d6-b483-cc97c63e567c} -@mozilla.org/security/pkcs11;1,{74b7a390-3b41-11d4-8a80-006008c844c3} -@mozilla.org/layout/xmlfragmentsink;2,{4dc30689-929d-425e-a709-082c6294e542} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-croatian,{6394eeb7-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/network/protocol/about;1?what=support,{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980} -@mozilla.org/plugin-bindings;1,{12663f3a-a311-4606-83eb-b6b9108dcc36} -@mozilla.org/url-classifier/dbservice;1,{5eb7c3c1-ec1f-4007-87cc-eefb37d68ce6} -@mozilla.org/intl/unicode/decoder;1?charset=IBM862,{2d524fd4-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/document-transformer;1?type=xslt,{bacd8ad0-552f-11d3-a9f7-000064657374} -@mozilla.org/image/decoder;2?type=image/vnd.microsoft.icon,{cb3ede1a-0fa5-4e27-aafe-0f7801e5a1f1} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-IR-111,{9416bfb1-1f93-11d3-b3bf-00805f8a6670} -@mozilla.org/editor/htmleditor;1,{ed0244e0-c144-11d2-8f4c-006008159b0c} -@mozilla.org/network/http-auth-manager;1,{36b63ef3-e0fa-4c49-9fd4-e065e85568f4} -@joehewitt.com/firebug-trace-service;1,{d2ac51bc-1622-4d4d-85cb-f8e8b5805cb9} -@mozilla.org/xul/xul-document;1,{541afcb2-a9a3-11d2-8ec5-00805f29f370} -@mozilla.org/url-classifier/jslib;1,{26a4a019-2827-4a89-a85c-5931a678823a} -@mozilla.org/saxparser/attributes;1,{7bb40992-77eb-43db-9a4e-39d3bcc383ae} -@mozilla.org/intl/unicode/encoder;1?charset=KOI8-U,{6394eeb6-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/focus-manager;1,{cf7fd51f-aba2-44c1-9ff0-11f7508efcd4} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-gurmukhi,{6803cacf-1e3b-11d5-a145-005004832142} -@mozilla.org/intl/unicode/decoder;1?charset=windows-936,{9416bfc0-1f93-11d3-b3bf-00805f8a6670} -@mozilla.org/transfer;1,{e3fa9d0a-1dd1-11b2-bdef-8c720b597445} -@mozilla.org/rdf/container-utils;1,{d4214e92-fb94-11d2-bdd8-00104bde6048} -@mozilla.org/rdf/datasource;1?name=httpindex,{2587e382-1324-11d4-a652-eadbb2be3484} -@mozilla.org/intl/unicode/decoder;1?charset=windows-874,{6394eea4-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/browser/session-history-transaction;1,{bfd1a792-ad9f-11d3-bdc7-0050040a9b44} -@mozilla.org/autocomplete/simple-result;1,{2ee3039b-2de4-43d9-93b0-649beacff39a} -@mozilla.org/scriptableinterfaces;1,{fe4f7592-c1fc-4662-ac83-538841318803} -@mozilla.org/security/random-generator;1,{be65e2b7-fe46-4e0f-88e0-4b385db4d68a} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-4,{660d8ca6-f763-11d2-8aad-00600811a836} -@mozilla.org/profile/migrator;1?app=browser&type=dogbert,{24f92fae-f793-473b-8061-713408bd11d5} -@mozilla.org/network/content-sniffer;1,{7d7008a0-c49a-11d3-9b22-0080c7cb1080} -@mozilla.org/intl/unicode/decoder;1?charset=HZ-GB-2312,{ba61519a-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/rdf/xml-parser;1,{a4048e94-1dd1-11b2-a676-8a06c086cc7d} -@mozilla.org/nsTokenPasswordDialogs;1,{518e071f-1dd2-11b2-937e-c45f14def778} -@mozilla.org/intl/unicode/encoder;1?charset=x-t1-cmsy,{e768ebef-70f9-4fe3-8835-4f4f3fd996e2} -@mozilla.org/intl/unicode/decoder;1?charset=TIS-620,{66634f68-be19-42d0-a4ca-d1c21fa059b8} -@mozilla.org/network/protocol;1?name=default,{bd6390c8-fbea-11d4-98f6-001083010e9b} -@mozilla.org/toolkit/default-clh;1,{6ebc941a-f2ff-4d56-b3b6-f7d0b9d73344} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-icelandic,{6394eebb-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-2022-JP,{4f76e100-d71c-11d2-8aac-00600811a836} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-16,{a0f827e2-8ab6-11d5-a14b-005004832142} -@mozilla.org/gfx/fontenumerator;1,{a6cf9115-15b3-11d2-932e-00805f8add32} -@mozilla.org/network/socket-transport-service;1,{c07e81e0-ef12-11d2-92b6-00105a1b0d64} -@mozilla.org/content/element/html;1?name=img,{d6008c40-4dad-11d2-b328-00805f8a3859} -@mozilla.org/intl/unicode/encoder;1?charset=windows-1257,{a578e0a4-f76b-11d2-8aac-00600811a836} -@mozilla.org/browser/download-history;1,{88cecbb7-6c63-4b3b-8cd4-84f3b8228c69} -@mozilla.org/intl/unicode/encoder;1?charset=x-mac-farsi,{6803cac9-1e3b-11d5-a145-005004832142} -@mozilla.org/security/keyobject;1,{eae599aa-ecef-49c6-a8af-6ddcc6feb484} -@mozilla.org/network/stream-listener-tee;1,{831f8f13-7aa8-485f-b02e-77c881cc5773} -@mozilla.org/gfx/printerenumerator;1,{a6cf9129-15b3-11d2-932e-00805f8add32} -@mozilla.org/browser/feeds/result-service;1,{2376201c-bbc6-472f-9b62-7548040a61c6} -@mozilla.org/intl/unicode/decoder;1?charset=windows-1253,{af7a9952-aa48-11d2-b3ae-00805f8a6670} -@mozilla.org/network/protocol/about;1?what=,{1f1ce501-663a-11d3-b7a0-be426e4e69bc} -@mozilla.org/layout/xul-boxobject-popup;1,{6c392c62-1ab1-4de7-bfc6-ed4f9fc7749a} -@mozilla.org/nsSecurityWarningDialogs;1,{8d995d4f-adcc-4159-b7f1-e94af72eeb88} -@mozilla.org/data-document-content-policy;1,{1147d32c-215b-4014-b180-07fe7aedf915} -@mozilla.org/filepicker/fileview;1,{a5570462-1dd1-11b2-9d19-df30a27fbdc4} -@mozilla.org/xul/xul-controllers;1,{1f5c1721-7dc3-11d3-bf87-00105a1b0627} -@mozilla.org/embedcomp/dialogparam;1,{4e4aae11-8901-46cc-8217-dad7c5415873} -@mozilla.org/layout/xul-boxobject;1,{d750a964-2d14-484c-b3aa-8ed7823b5c7b} -@mozilla.org/layout/form-processor;1,{0ae53c0f-8ea2-4916-bedc-717443c3e185} -@mozilla.org/intl/unicode/encoder;1?charset=UTF-8,{7c657d18-ec5e-11d2-8aac-00600811a836} -@mozilla.org/gfx/screenmanager;1,{c401eb80-f9ea-11d3-bb6f-e732b73ebe7c} -@mozilla.org/rdf/container;1,{d4214e93-fb94-11d2-bdd8-00104bde6048} -@mozilla.org/moz/jsloader;1,{6bd13476-1dd2-11b2-bbef-f0ccb5fa64b6} -@mozilla.org/network/protocol/about;1?what=feeds,{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980} -@mozilla.org/rdf/xml-serializer;1,{0032d852-1dd2-11b2-95f7-e0a1910ed2da} -@mozilla.org/network/dns-service;1,{b0ff4572-dae4-4bef-a092-83c1b88f6be9} -@mozilla.org/intl/unicode/encoder;1?charset=windows-1256,{ba6151a4-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/content/document-loader-factory;1,{fc886801-e768-11d4-9885-00c04fa0cf4b} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-14,{6394eea1-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=Big5,{efc323e1-ec62-11d2-8aac-00600811a836} -@mozilla.org/helperapplauncherdialog;1,{f68578eb-6ec2-4169-ae19-8c6243f0abe1} -@mozilla.org/streamConverters;1,{892ffeb0-3f80-11d3-a16c-0050041caf44} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-4,{660d8ca1-f763-11d2-8aad-00600811a836} -@mozilla.org/content/contentutils;1,{762c4ae7-b923-422f-b97e-b9bfc1ef7bf0} -@mozilla.org/intl/unicode/decoder;1?charset=EUC-JP,{3f6fe6a1-ac0a-11d2-b3ae-00805f8a6670} -@mozilla.org/intl/stringbundle/text-override;1,{6316c6ce-12d3-479e-8f53-e289351412b8} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-2022-JP,{3f6fe6a2-ac0a-11d2-b3ae-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=HZ-GB-2312,{ba61519d-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/browser/shistory-internal;1,{9c47c121-1c6e-4d8f-b904-3ac968116e88} -@mozilla.org/network/socket;2?type=socks4,{f7c9f5f4-4451-41c3-a28a-5ba2447fbace} -@mozilla.org/network/buffered-output-stream;1,{9868b4ce-da08-11d3-8cda-0060b0fc14a3} -@mozilla.org/intl/unicode/encoder;1?charset=IBM866,{ba6151aa-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=x-ttf-cmmi,{73bb7c12-dbab-4ae2-aecf-a0331dec916f} -@mozilla.org/editor/editorspellchecker;1,{75656ad9-bd13-4c5d-939a-ec6351eea0cc} -@mozilla.org/intl/collation;1,{aa13e4a0-a5ac-11d2-9119-006008a6edf6} -@mozilla.org/widget/transferable;1,{8b5314bc-db01-11d2-96ce-0060b0fb9956} -@mozilla.org/intl/unicode/encoder;1?charset=UTF-16BE,{ba6151ad-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/login-manager/storage/mozStorage;1,{8c2023b9-175c-477e-9761-44ae7b549756} -@mozilla.org/network/auth-module;1?name=sys-ntlm,{bc54f001-6eb0-4e32-9f49-7e064d8e70ef} -@mozilla.org/intl/unicode/encoder;1?charset=hkscs-1,{a59da931-4091-11d5-a145-005004832142} -@mozilla.org/intl/unicode/encoder;1?charset=x-t1-cmex,{f01cb3e7-4ace-414e-a2b7-eaba03e9c86c} -@mozilla.org/satchel/form-autocomplete;1,{c11c21b2-71c9-4f87-a0f8-5e13f50495fd} -@mozilla.org/intl/unicode/decoder;1?charset=IBM852,{2d524fd1-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/network/protocol;1?name=feed,{4f91ef2e-57ba-472e-ab7a-b4999e42d6c0} -@mozilla.org/layout/contentserializer;1?mimetype=application/vnd.mozilla.xul+xml,{4aef38b7-6364-4e23-a5e7-12f837fbbd9c} -@mozilla.org/intl/unicode/encoder;1?charset=x-gbk,{ba61519b-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=IBM855,{2d524fd2-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/satchel/form-fill-controller;1,{895db6c7-dbdf-40ea-9f64-b175033243dc} -@mozilla.org/editor/texteditor;1,{e197cc01-cfe1-11d4-8eb0-87ae406dfd3f} -@mozilla.org/privatebrowsing-wrapper;1,{136e2c4d-c5a4-477c-b131-d93d7d704f64} -@mozilla.org/chrome/chrome-native-theme;1,{d930e29b-6909-44e5-ab4b-af10d6923705} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-9,{7b8556a9-ec79-11d2-8aac-00600811a836} -@mozilla.org/intl/unicode/encoder;1?charset=x-ttf-cmr,{67671792-8e25-4487-b1b7-5073cfa95fee} -@mozilla.org/nsCMSMessage;1,{a4557478-ae16-11d5-ba4b-00108303b117} -@joehewitt.com/firebug-annotation-service;1,{9589dc0d-9709-4578-883e-d393452b3611} -@mozilla.org/content/dom-selection;1,{c87a37fc-8109-4ce2-a322-8cdec925379f} -@mozilla.org/network/protocol/about;1?what=crashes,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-2022-KR,{ba61519f-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/editor/htmleditorcontroller;1,{62db0002-dbb6-43f4-8fb7-9d2538bc5747} -@mozilla.org/profile/migrator;1?app=browser&type=opera,{f34ff792-722e-4490-b195-47d242edca1c} -@mozilla.org/streamconv;1?from=multipart/x-mixed-replace&to=*/*,{7584ce90-5b25-11d3-a175-0050041caf44} -@mozilla.org/streamconv;1?from=text/ftp-dir&to=application/http-index-format,{14c0e880-623e-11d3-a178-0050041caf44} -@mozilla.org/intl/unicode/encoder;1?charset=x-mathematica5,{8a0dce80-e2f2-11d3-b32f-004005a7a7e4} -@mozilla.org/intl/unicode/encoder;1?charset=IBM864i,{2d524fdd-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/xul/xul-prototype-cache;1,{3a0a0fc1-8349-11d3-be47-00104bde6048} -@mozilla.org/intl/unicode/encoder;1?charset=UTF-16,{49b38f12-6193-11d3-b3c5-00805f8a6670} -@mozilla.org/network/default-prompt;1,{2e41ada0-62b7-4902-b9a6-e4542aa458ba} -@mozilla.org/intl/unicode/encoder;1?charset=GB2312,{379c2777-ec77-11d2-8aac-00600811a836} -@mozilla.org/security/pkiparamblock;1,{0bec75a8-1dd2-11b2-863a-f69f77c31371} -@mozilla.org/toolkit/profile-migrator;1,{4ca3c946-5408-49f0-9eca-3a97d5c67750} -@mozilla.org/network/auth-module;1?name=negotiate-gss,{96ec4163-efc8-407a-8735-007fb26be4e8} -@mozilla.org/embedding/browser/content-policy;1,{f66bc334-1dd1-11b2-bab2-90e04fe15c19} -@mozilla.org/browser/tagging-service;1,{bbc23860-2553-479d-8b78-94d9038334f7} -@mozilla.org/network/protocol/about;1?what=certerror,{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980} -@mozilla.org/js/xpc/ContextStack;1,{ff8c4d10-3194-11d3-9885-006008962422} -@mozilla.org/intl/unicode/encoder;1?charset=jis_0201,{ba615191-1dfa-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=windows-1254,{7c657d17-ec5e-11d2-8aac-00600811a836} -@mozilla.org/streamconv;1?from=uncompressed&to=rawdeflate,{461cd5dd-73c6-47a4-8cc3-603b37d84a61} -@mozilla.org/xre/app-info;1,{95d89e3e-a169-41a3-8e56-719978e15b12} -@mozilla.org/xptinfo/loader;1&type=zip,{0320e073-79c7-4dae-8055-81bed8b8db96} -@mozilla.org/streamconv;1?from=application/vnd.mozilla.maybe.audio.feed&to=*/*,{229fa115-9412-4d32-baf3-2fc407f76fb1} -@mozilla.org/intl/unicode/encoder;1?charset=KOI8-R,{6394eeb5-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/network/protocol/about;1?what=license,{f0acde16-1dd1-11b2-9e35-f5786fff5a66} -@mozilla.org/intl/utf8converterservice;1,{2b026890-5a2e-4981-ada2-a600358947b4} -@mozilla.org/transactionmanager;1,{9c8f9601-801a-11d2-98ba-00805f297d89} -@mozilla.org/nss_errors_service;1,{a277189c-1dd1-11b2-a8c9-e4e8bfb1338e} -@mozilla.org/saxparser/xmlreader;1,{ab1da296-6125-40ba-96d0-47a8282ae3db} -@mozilla.org/locale/posix-locale;1,{d92d57c5-ba1d-11d2-af0c-0060089fe59b} -@mozilla.org/content-dispatch-chooser;1,{e35d5067-95bc-4029-8432-e8f1e431148d} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-9,{7c657d13-ec5e-11d2-8aac-00600811a836} -@mozilla.org/network/authprompt-adapter-factory;1,{a21bfa01-f349-4394-a84c-8de5cf0737d0} -@mozilla.org/layout/plaintextsink;1,{6030f7ef-32ed-46a7-9a63-6a5d3f90445f} -@mozilla.org/gfx/region;1,{da5b130a-1dd1-11b2-ad47-f455b1814a78} -@mozilla.org/geolocation/gpsd/provider;1,{0a3be523-0f2a-32cc-ccd8-1e5986d5a79d} -@mozilla.org/network/http-authenticator;1?scheme=digest,{17491ba4-1dd2-11b2-aae3-de6b92dab620} -@mozilla.org/network/cache-service;1,{6c84aec9-29a5-4264-8fbc-bee8f922ea67} -@mozilla.org/security/entropy;1,{34587f4a-be18-43c0-9112-b782b08c0add} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-1,{920307b0-c6e8-11d2-8aa8-00600811a836} -@mozilla.org/satchel/form-history-importer;1,{db340cc2-7f50-4ea3-8427-f529daf6dc87} -@mozilla.org/spellchecker/engine;1,{56c778e4-1bee-45f3-a689-886692a97fe7} -@mozilla.org/intl/unicode/decoder;1?charset=x-euc-tw,{379c2771-ec77-11d2-8aac-00600811a836} -@mozilla.org/network/protocol/about;1?what=blank,{3decd6c8-30ef-11d3-8cd0-0060b0fc14a3} -@mozilla.org/autocomplete/search;1?name=file,{cb60980e-18a5-4a77-9110-8146614ca7f0} -@mozilla.org/autocomplete/search;1?name=places-tag-autocomplete,{1dcc23b0-d4cb-11dc-9ad6-479d56d89593} -@mozilla.org/network/protocol/about;1?what=cache-entry,{7fa5237d-b0eb-438f-9e50-ca0166e63788} -@mozilla.org/security/pk11tokendb;1,{b084a2ce-1dd1-11b2-bf10-8324f8e065cc} -@mozilla.org/network/protocol;1?name=view-source,{9c7ec5d1-23f9-11d5-aea8-8fcc0793e97f} -@mozilla.org/intl/stringcharsetdetect;1?type=ja_parallel_state_machine,{12bb8f1c-2389-11d3-b3bf-00805f8a6670} -@mozilla.org/rdf/datasource;1?name=files,{e638d760-8687-11d2-b530-000000000001} -@mozilla.org/intl/unicode/encoder;1?charset=armscii-8,{6394eebc-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-11,{9c0ff6f4-deda-40e5-806c-b6cc449c21ce} -@mozilla.org/intl/stringcharsetdetect;1?type=universal_charset_detector,{6ee5301a-3981-49bd-85f8-1a2cc228cf3e} -@mozilla.org/feed-unescapehtml;1,{10f2f5f0-f103-4901-980f-ba11bd70d60d} -@mozilla.org/dom/xpath-evaluator;1,{d0a75e02-b5e7-11d5-a7f2-df109fb8a1fc} -@mozilla.org/layout/contentserializer;1?mimetype=text/xml,{4aef38b7-6364-4e23-a5e7-12f837fbbd9c} -@mozilla.org/intl/unicode/decoder;1?charset=IBM857,{2d524fd3-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/browser/sessionstartup;1,{ec7a6c20-e081-11da-8ad9-0800200c9a66} -@mozilla.org/intl/unicode/encoder;1?charset=ISO-8859-6-I,{495eca46-0a5c-11d4-a135-005004832142} -@mozilla.org/intl/charsetdetect;1?type=universal_charset_detector,{374e0cde-f605-4259-8c92-e639c6c2eeef} -@mozilla.org/dirIndexParser;1,{a0d6ad32-1dd1-11b2-aa55-a40187b54036} -@mozilla.org/autocomplete/search;1?name=history,{d0272978-beab-4adc-a3d4-04b76acfa4e7} -@mozilla.org/network/downloader;1,{510a86bb-6019-4ed1-bb4f-965cffd23ece} -@mozilla.org/intl/unicode/decoder;1?charset=EUC-KR,{379c2775-ec77-11d2-8aac-00600811a836} -@mozilla.org/files/filereader;1,{06aa7c21-fe05-4cf2-b1c4-0c7126a4f713} -@mozilla.org/PopupWindowManager;1,{822bcd11-6432-48be-9e9d-36f7804b7747} -@mozilla.org/security/recentbadcerts;1,{e7caf8c0-3570-47fe-aa1b-da47539b5d07} -@mozilla.org/dom/json;1,{93ad72a6-02cd-4716-9626-d47d5ec275ec} -@mozilla.org/browser/feeds/result-writer;1,{49bb6593-3aff-4eb3-a068-2712c28bd58e} -@mozilla.org/intl/unicode/encoder;1?charset=x-viet-vps,{6394eec0-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/intl/unicode/encoder;1?charset=windows-1253,{7b8556ad-ec79-11d2-8aac-00600811a836} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-8-I,{495eca43-0a5c-11d4-a135-005004832142} -@mozilla.org/network/protocol;1?name=pcast,{1c31ed79-accd-4b94-b517-06e0c81999d5} -@mozilla.org/network/io-service;1,{9ac9e770-18bc-11d3-9337-00104ba0fd40} -@mozilla.org/uriloader/content-handler;1?type=application/x-xpinstall,{18c2f98d-b09f-11d2-bcde-00805f0e1353} -@mozilla.org/intl/unicode/decoder;1?charset=ISO-8859-1,{a3254cb0-8e20-11d2-8a98-00600811a836} -@mozilla.org/intl/unicode/decoder;1?charset=IBM864,{2d524fd5-ae74-11d3-abf7-0004aceefa51} -@mozilla.org/xul/xul-tree-builder;1,{1abdcc96-1dd2-11b2-b520-f8f59cdd67bc} -@mozilla.org/privatebrowsing;1,{c31f4883-839b-45f6-82ad-a6a9bc5ad599} -@mozilla.org/docshell/urifixup;1,{214c48a0-b57f-11d4-959c-0020183bf181} -@mozilla.org/intl/stringcharsetdetect;1?type=zh_parallel_state_machine,{fcacef21-2b40-11d3-b3bf-00805f8a6670} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-icelandic,{6394eeab-fc3d-11d2-b3b8-00805f8a6670} -@mozilla.org/network/protocol;1?name=moz-safe-about,{1423e739-782c-4081-b5d8-fe6fba68c0ef} -@mozilla.org/xul/xul-sort-service;1,{bfd05264-834c-11d2-8eac-00805f29f371} -@mozilla.org/intl/unicode/decoder;1?charset=x-mac-farsi,{6803cac8-1e3b-11d5-a145-005004832142} -@mozilla.org/image/decoder;2?type=image/x-ms-bmp,{78c61626-4d1f-4843-9364-4652d98ff6e1} -@mozilla.org/layout/htmlCopyEncoder;1,{7f915b01-98fc-11d4-8eb0-a803f80ff1bc} -@mozilla.org/intl/unicode/decoder;1?charset=UTF-32LE,{ba6151b8-1dfa-11d3-b3bf-00805f8a6670} - -[CATEGORIES] -content-sniffing-services,@mozilla.org/image/loader;1,@mozilla.org/image/loader;1 -Charset Encoders,UTF-16, -Charset Encoders,ISO-8859-8-E, -Charset Encoders,ISO-8859-4, -Charset Encoders,ISO-8859-16, -Charset Encoders,x-mac-gurmukhi, -Charset Encoders,x-ttf-cmex, -Charset Encoders,TIS-620, -Charset Encoders,ISO-IR-111, -Charset Encoders,EUC-JP, -Charset Encoders,windows-1251, -Charset Encoders,HZ-GB-2312, -Charset Encoders,x-t1-cmex, -Charset Encoders,x-mac-roman, -Charset Encoders,ISO-8859-7, -Charset Encoders,x-mac-hebrew, -Charset Encoders,ISO-8859-15, -Charset Encoders,Adobe-Symbol-Encoding, -Charset Encoders,IBM857, -Charset Encoders,x-ttf-cmsy, -Charset Encoders,x-mathematica5, -Charset Encoders,hkscs-1, -Charset Encoders,x-mac-ce, -Charset Encoders,windows-1252, -Charset Encoders,KOI8-U, -Charset Encoders,ISO-8859-10, -Charset Encoders,GB2312, -Charset Encoders,UTF-8, -Charset Encoders,x-viet-tcvn5712, -Charset Encoders,gb18030, -Charset Encoders,ISO-8859-2, -Charset Encoders,windows-1257, -Charset Encoders,x-mathematica1, -Charset Encoders,x-windows-949, -Charset Encoders,x-tamilttf-0, -Charset Encoders,ISO-8859-6-I, -Charset Encoders,ISO-8859-5, -Charset Encoders,KOI8-R, -Charset Encoders,x-imap4-modified-utf7, -Charset Encoders,VISCII, -Charset Encoders,windows-1258, -Charset Encoders,ISO-8859-8, -Charset Encoders,IBM855, -Charset Encoders,EUC-KR, -Charset Encoders,x-ttf-cmmi, -Charset Encoders,x-mathematica3, -Charset Encoders,UTF-32LE, -Charset Encoders,windows-1250, -Charset Encoders,armscii-8, -Charset Encoders,IBM864i, -Charset Encoders,IBM852, -Charset Encoders,x-euc-tw, -Charset Encoders,ISO-8859-8-I, -Charset Encoders,x-johab, -Charset Encoders,UTF-16LE, -Charset Encoders,x-user-defined, -Charset Encoders,x-mac-icelandic, -Charset Encoders,windows-874, -Charset Encoders,windows-1255, -Charset Encoders,x-mac-romanian, -Charset Encoders,x-ttf-cmr, -Charset Encoders,x-mathematica4, -Charset Encoders,ISO-8859-3, -Charset Encoders,ISO-8859-11, -Charset Encoders,Big5, -Charset Encoders,UTF-7, -Charset Encoders,Shift_JIS, -Charset Encoders,IBM866, -Charset Encoders,x-mac-devanagari, -Charset Encoders,x-mtextra, -Charset Encoders,x-mac-turkish, -Charset Encoders,x-gbk, -Charset Encoders,UTF-32BE, -Charset Encoders,x-t1-cmr, -Charset Encoders,windows-1256, -Charset Encoders,x-mac-farsi, -Charset Encoders,GEOSTD8, -Charset Encoders,UTF-32, -Charset Encoders,x-koreanjamo-0, -Charset Encoders,x-t1-cmsy, -Charset Encoders,x-mac-croatian, -Charset Encoders,UTF-16BE, -Charset Encoders,ISO-8859-6, -Charset Encoders,us-ascii, -Charset Encoders,x-mac-greek, -Charset Encoders,T.61-8bit, -Charset Encoders,ISO-8859-9, -Charset Encoders,jis_0201, -Charset Encoders,x-mac-gujarati, -Charset Encoders,ISO-8859-6-E, -Charset Encoders,x-mathematica2, -Charset Encoders,Big5-HKSCS, -Charset Encoders,windows-1253, -Charset Encoders,ISO-8859-1, -Charset Encoders,IBM864, -Charset Encoders,ISO-8859-13, -Charset Encoders,IBM850, -Charset Encoders,x-zapf-dingbats, -Charset Encoders,ISO-8859-14, -Charset Encoders,x-mac-arabic, -Charset Encoders,IBM862, -Charset Encoders,windows-936, -Charset Encoders,windows-1254, -Charset Encoders,x-t1-cmmi, -Charset Encoders,x-tscii, -Charset Encoders,ISO-2022-JP, -Charset Encoders,x-viet-vps, -Charset Encoders,x-mac-cyrillic, -net-content-sniffers,Feed Sniffer,@mozilla.org/browser/feeds/sniffer;1 -net-content-sniffers,Binary Detector,@mozilla.org/network/binary-detector;1 -JavaScript global static nameset,PrivilegeManager,@mozilla.org/security/script/nameset;1 -JavaScript global constructor,BrowserFeedWriter,@mozilla.org/browser/feeds/result-writer;1 -JavaScript global constructor,Image,@mozilla.org/content/element/html;1?name=img -JavaScript global constructor,Audio,@mozilla.org/content/element/html;1?name=audio -JavaScript global constructor,Option,@mozilla.org/content/element/html;1?name=option -agent-style-sheets,pluginproblem xbl binding,chrome://mozapps/content/plugins/pluginProblemBinding.css -agent-style-sheets,pluginfinder xbl binding,chrome://ubufox/content/alternatePluginsBinding.css -xpcom-directory-providers,spellcheck-directory-provider,@mozilla.org/spellcheck/dir-provider;1 -xpcom-directory-providers,browser-directory-provider,@mozilla.org/browser/directory-provider;1 -external-uricontentlisteners,application/x-x509-user-cert,@mozilla.org/uriloader/psm-external-content-listener;1 -external-uricontentlisteners,application/x-x509-email-cert,@mozilla.org/uriloader/psm-external-content-listener;1 -external-uricontentlisteners,application/x-x509-crl,@mozilla.org/uriloader/psm-external-content-listener;1 -external-uricontentlisteners,application/pkix-crl,@mozilla.org/uriloader/psm-external-content-listener;1 -external-uricontentlisteners,application/x-pkcs7-crl,@mozilla.org/uriloader/psm-external-content-listener;1 -external-uricontentlisteners,application/x-x509-ca-cert,@mozilla.org/uriloader/psm-external-content-listener;1 -external-uricontentlisteners,application/x-x509-server-cert,@mozilla.org/uriloader/psm-external-content-listener;1 -uconv-charset-titles,chrome://global/locale/charsetTitles.properties, -pref-config-startup,ReadConfig Module,@mozilla.org/readconfig;1 -command-line-handler,x-default,@mozilla.org/browser/final-clh;1 -command-line-handler,m-privatebrowsing,@mozilla.org/privatebrowsing;1 -command-line-handler,b-jsconsole,@mozilla.org/toolkit/console-clh;1 -command-line-handler,m-setdefaultbrowser,@mozilla.org/browser/default-browser-clh;1 -command-line-handler,m-browser,@mozilla.org/browser/clh;1 -command-line-handler,y-default,@mozilla.org/toolkit/default-clh;1 -content-policy,@mozilla.org/data-document-content-policy;1,@mozilla.org/data-document-content-policy;1 -content-policy,@mozilla.org/no-data-protocol-content-policy;1,@mozilla.org/no-data-protocol-content-policy;1 -content-policy,@mozilla.org/permissions/contentblocker;1,@mozilla.org/permissions/contentblocker;1 -content-policy,@mozilla.org/embedding/browser/content-policy;1,@mozilla.org/embedding/browser/content-policy;1 -@mozilla.org/streamconv;1,?from=multipart/x-mixed-replace&to=*/*, -@mozilla.org/streamconv;1,?from=multipart/mixed&to=*/*, -@mozilla.org/streamconv;1,?from=deflate&to=uncompressed, -@mozilla.org/streamconv;1,?from=application/http-index-format&to=text/html, -@mozilla.org/streamconv;1,?from=gzip&to=uncompressed, -@mozilla.org/streamconv;1,?from=text/gopher-dir&to=application/http-index-format, -@mozilla.org/streamconv;1,?from=application/x-unknown-content-type&to=*/*, -@mozilla.org/streamconv;1,?from=text/plain&to=text/html, -@mozilla.org/streamconv;1,?from=x-compress&to=uncompressed, -@mozilla.org/streamconv;1,?from=compress&to=uncompressed, -@mozilla.org/streamconv;1,?from=application/mac-binhex40&to=*/*, -@mozilla.org/streamconv;1,?from=text/ftp-dir&to=application/http-index-format, -@mozilla.org/streamconv;1,?from=x-gzip&to=uncompressed, -@mozilla.org/streamconv;1,?from=multipart/byteranges&to=*/*, -XSLT extension functions,http://exslt.org/regular-expressions,@mozilla.org/exslt/regexp;1 -charset-detectors,cjk_parallel_state_machine,@mozilla.org/intl/charsetdetect;1?type=cjk_parallel_state_machine -charset-detectors,ko_parallel_state_machine,@mozilla.org/intl/charsetdetect;1?type=ko_parallel_state_machine -charset-detectors,ruprob,@mozilla.org/intl/charsetdetect;1?type=ruprob -charset-detectors,off,off -charset-detectors,universal_charset_detector,@mozilla.org/intl/charsetdetect;1?type=universal_charset_detector -charset-detectors,zhcn_parallel_state_machine,@mozilla.org/intl/charsetdetect;1?type=zhcn_parallel_state_machine -charset-detectors,zhtw_parallel_state_machine,@mozilla.org/intl/charsetdetect;1?type=zhtw_parallel_state_machine -charset-detectors,zh_parallel_state_machine,@mozilla.org/intl/charsetdetect;1?type=zh_parallel_state_machine -charset-detectors,ja_parallel_state_machine,@mozilla.org/intl/charsetdetect;1?type=ja_parallel_state_machine -charset-detectors,ukprob,@mozilla.org/intl/charsetdetect;1?type=ukprob -JavaScript global property,InstallTrigger,@mozilla.org/xpinstall/installtrigger;1 -JavaScript global property,external,@mozilla.org/sidebar;1 -JavaScript global property,sidebar,@mozilla.org/sidebar;1 -command-line-validator,b-browser,@mozilla.org/browser/clh;1 -parser-service-category,Meta Charset Service,@mozilla.org/intl/metacharset;1 -profile-after-change,Timer Manager,@mozilla.org/updates/timer-manager;1 -profile-after-change,Extension Manager,@mozilla.org/extensions/manager;1 -Gecko-Content-Viewers,application/xml,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,application/x-javascript,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,application/javascript,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,text/plain,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/jpg,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/gif,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/bmp,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,application/x-view-source,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/icon,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/jpeg,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/pjpeg,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,application/ecmascript,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,mozilla.application/cached-xul,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/x-png,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,application/http-index-format,@mozilla.org/xpfe/http-index-format-factory-constructor -Gecko-Content-Viewers,text/rdf,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/png,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,text/css,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,text/html,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,application/rdf+xml,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/x-icon,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,text/ecmascript,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,text/javascript,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,application/xhtml+xml,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,application/vnd.mozilla.xul+xml,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,text/xml,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/vnd.microsoft.icon,@mozilla.org/content/document-loader-factory;1 -Gecko-Content-Viewers,image/x-ms-bmp,@mozilla.org/content/document-loader-factory;1 -Charset Decoders,UTF-16, -Charset Decoders,ISO-8859-8-E, -Charset Decoders,ISO-8859-4, -Charset Decoders,ISO-8859-16, -Charset Decoders,UTF-32LE, -Charset Decoders,TIS-620, -Charset Decoders,ISO-IR-111, -Charset Decoders,windows-1252, -Charset Decoders,windows-1251, -Charset Decoders,UTF-16BE, -Charset Decoders,IBM852, -Charset Decoders,x-mac-roman, -Charset Decoders,ISO-8859-7, -Charset Decoders,x-mac-ce, -Charset Decoders,ISO-8859-15, -Charset Decoders,IBM857, -Charset Decoders,gb18030, -Charset Decoders,x-viet-tcvn5712, -Charset Decoders,IBM862, -Charset Decoders,KOI8-U, -Charset Decoders,ISO-8859-2, -Charset Decoders,armscii-8, -Charset Decoders,ISO-8859-10, -Charset Decoders,UTF-8, -Charset Decoders,us-ascii, -Charset Decoders,HZ-GB-2312, -Charset Decoders,ISO-2022-JP, -Charset Decoders,x-gbk, -Charset Decoders,windows-1257, -Charset Decoders,ISO-8859-14, -Charset Decoders,x-mac-hebrew, -Charset Decoders,ISO-8859-6-I, -Charset Decoders,x-johab, -Charset Decoders,ISO-8859-5, -Charset Decoders,KOI8-R, -Charset Decoders,x-imap4-modified-utf7, -Charset Decoders,VISCII, -Charset Decoders,windows-1258, -Charset Decoders,ISO-8859-8, -Charset Decoders,EUC-KR, -Charset Decoders,x-mac-gurmukhi, -Charset Decoders,Big5, -Charset Decoders,IBM864, -Charset Decoders,windows-1250, -Charset Decoders,EUC-JP, -Charset Decoders,IBM864i, -Charset Decoders,x-euc-tw, -Charset Decoders,ISO-8859-8-I, -Charset Decoders,UTF-16LE, -Charset Decoders,x-mac-icelandic, -Charset Decoders,GB2312, -Charset Decoders,windows-1255, -Charset Decoders,x-windows-949, -Charset Decoders,ISO-2022-KR, -Charset Decoders,x-mac-romanian, -Charset Decoders,T.61-8bit, -Charset Decoders,ISO-8859-3, -Charset Decoders,ISO-8859-11, -Charset Decoders,UTF-7, -Charset Decoders,Shift_JIS, -Charset Decoders,x-mac-devanagari, -Charset Decoders,ISO-2022-CN, -Charset Decoders,UTF-32BE, -Charset Decoders,x-mac-turkish, -Charset Decoders,IBM866, -Charset Decoders,windows-1256, -Charset Decoders,x-mac-farsi, -Charset Decoders,GEOSTD8, -Charset Decoders,UTF-32, -Charset Decoders,x-mac-croatian, -Charset Decoders,ISO-8859-6, -Charset Decoders,x-mac-greek, -Charset Decoders,ISO-8859-9, -Charset Decoders,x-mac-cyrillic, -Charset Decoders,x-mac-gujarati, -Charset Decoders,ISO-8859-6-E, -Charset Decoders,Big5-HKSCS, -Charset Decoders,windows-1253, -Charset Decoders,ISO-8859-1, -Charset Decoders,ISO-8859-13, -Charset Decoders,IBM850, -Charset Decoders,x-user-defined, -Charset Decoders,x-mac-arabic, -Charset Decoders,windows-874, -Charset Decoders,windows-936, -Charset Decoders,windows-1254, -Charset Decoders,IBM855, -Charset Decoders,x-viet-vps, -geolocation-provider,Returns a geolocation from a GPSD source,@mozilla.org/geolocation/gpsd/provider;1 -JavaScript global constructor prototype alias,Image,HTMLImageElement -JavaScript global constructor prototype alias,Audio,HTMLAudioElement -JavaScript global constructor prototype alias,Option,HTMLOptionElement -module-loader,text/javascript,@mozilla.org/moz/jsloader;1 -app-startup,PrivateBrowsing Service,service,@mozilla.org/privatebrowsing;1 -app-startup,tryToClose Service,service,@mozilla.org/appshell/trytoclose;1 -app-startup,Web Content Handler Registrar,service,@mozilla.org/embeddor.implemented/web-content-handler-registrar;1 -app-startup,Application,service,@mozilla.org/fuel/application;1 -app-startup,Window Data Source,service,@mozilla.org/rdf/datasource;1?name=window-mediator -app-startup,Firefox Browser Glue Service,service,@mozilla.org/browser/browserglue;1 -app-startup,Browser Session Startup Service,service,@mozilla.org/browser/sessionstartup;1 -app-startup,SystemPref Module,@mozilla.org/system-preferences;1 -app-startup,Script Security Manager,service,@mozilla.org/scriptsecuritymanager;1 -uconv-charset-data,resource://gre/res/charsetData.properties, -bookmark-observers,Used to synchronize the temporary and permanent tables of Places,@mozilla.org/places/sync;1 -JavaScript global privileged property,Application,@mozilla.org/fuel/application;1 -update-timer,Extension Manager,@mozilla.org/extensions/manager;1,getService,addon-background-update-timer,extensions.update.interval,86400 -update-timer,Microsummary Service,@mozilla.org/microsummary/service;1,getService,microsummary-generator-update-timer,browser.microsummary.generatorUpdateInterval,604800 -update-timer,Blocklist Service,@mozilla.org/extensions/blocklist;1,getService,blocklist-background-update-timer,extensions.blocklist.interval,86400 -history-observers,Used to synchronize the temporary and permanent tables of Places,@mozilla.org/places/sync;1 diff --git a/src/test/profile/selenium/firefoxprofile/content-prefs.sqlite b/src/test/profile/selenium/firefoxprofile/content-prefs.sqlite deleted file mode 100644 index 02d7db08894c0669f95ec9ac9160b431c1a8cee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 zcmeHJ+e*VQ7;e_C1;Oi3VHhuj73P&M;0{sBx=y<eH+CV_cB8NpTPK1b7T?JS@-4(0 z+oV}nm^b2ukOZ3i2lD;-zT}7YZmcj0(0H+$c@a976bS(70wGC~wCqb3GSp-SnVl}F zE${gIOieob&<~T03XUZCwe$(Tz&i*N=iiTxs={Lk*5TX_o|da%yuJ&4YG_Rd*IkTE zyM+g6n?qfjI@QT)v00j}8d?WY6wW7R%V?KXcv=Au1TG5`L}sf6P!>&Vrnt<n&b?V+ zG!+$|=wL*^NHGFMt#Sb<&!#Zcqag9KtU(CDTR-ydrvafsCM5%K>kSK2MyMM4C?BTn z;w$W+Ysc)=ogr%DVJ*+*7Aa@8Xn<{U@FjMz-NZe1oX|J+ZqG<l0Jh!ky2$QZ7TUqt zs`C@lqc`0I>|712+c09Kq`^uB#3RC<A+S|0XuzVslp(z{Rvfu_kPyg77%xDBx(?!7 zateAqbS@Q6Kx2PjKkdz=>BSHV2n9G)K=eO{mo6v^1u_Lh|BI&}6yR5ZgOs}X|L6As b2<BWXAo`!{>lfrXS3vYX=MO;8=URbpYX;a+ diff --git a/src/test/profile/selenium/firefoxprofile/cookies.sqlite b/src/test/profile/selenium/firefoxprofile/cookies.sqlite deleted file mode 100644 index efe57127b89a4f70b74c0ed32118a40a14f6d251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmWFz^vNtqRY=P(%1ta$FlJz3U}R))P*7lCU|@n`AO!}DKoW#u0K^8V!3UTabRS9b z0#z_F8!`aVC>RZap&bH^K8)<*%F2vQ@g<2#IjOn%Rq@IB`PrGN#Yjvh=O9<d5Lbl| zM<*Xw1tbXtjm#7UPrndXch?|=fFMs_$Dl|BZ`Vj2g}lVvRD}@Nh!7oxvc#NH7&{}s zxCAO(kXVudVWw6TWENGz%+XQENh~gLOioTME>4A;uA`7y9Gse5T9k@Vms#vlQc~cb Ymjl<U3Cf$mOg{=nLtr!nMqmg404CE)4gdfE diff --git a/src/test/profile/selenium/firefoxprofile/downloads.sqlite b/src/test/profile/selenium/firefoxprofile/downloads.sqlite deleted file mode 100644 index 8e56c7f894822cc4544755da71b27ec403d6ac32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeHGQA@)x5KfDrFXE&4c5j=|f#M&qb5V-5&YFUIlGtWiSeuew(e737hx$v*M&c+; z`~mAnF3IJ)<SrlF<3pIEfVor!N4Ow+#Bs<a03pORrk6DwJ+I7SwLh@VAFE47-zSHf zblimK(PI}B_#8U>$Af|Mb%gw7Aqu&C&g6T!kUXn9j(ZhTpHX1`IHb^_V3=nRM2z0h z7^ZP>=f^X+r85soUI<|HiFr`VMy1w4u3iNi21QX#IlkFIO(M(nMf0QwqRhGnHFDhv zzq}H2p_EYO1yN#-Z7?xz+9)+{QPlPVME4A$Bn)9ful*!saOOe5KmG|Co$DxF7i%l~ ykIH1u{Hj{yDaTxvChLYu*QZvWZMk`aG8T2S`SX?%PglLEo4!Y{K(D|KD)0lr_l}bQ diff --git a/src/test/profile/selenium/firefoxprofile/extensions.cache b/src/test/profile/selenium/firefoxprofile/extensions.cache deleted file mode 100644 index 36242d9001a..00000000000 --- a/src/test/profile/selenium/firefoxprofile/extensions.cache +++ /dev/null @@ -1,7 +0,0 @@ -app-global langpack-en-AU@firefox-3.6.ubuntu.com rel%langpack-en-AU@firefox-3.6.ubuntu.com 1293454333 -app-global langpack-en-GB@firefox-3.6.ubuntu.com rel%langpack-en-GB@firefox-3.6.ubuntu.com 1286468210 -app-global {972ce4c6-7e08-4474-a285-3208198ce6fd} rel%{972ce4c6-7e08-4474-a285-3208198ce6fd} 1301039473 -app-global langpack-en-CA@firefox-3.6.ubuntu.com rel%langpack-en-CA@firefox-3.6.ubuntu.com 1286468210 -app-global langpack-en@firefox-3.6.ubuntu.com rel%langpack-en@firefox-3.6.ubuntu.com 1286468210 -app-system-share firebug@software.joehewitt.com rel%firebug@software.joehewitt.com 1287867233 -app-system-share ubufox@ubuntu.com rel%ubufox@ubuntu.com 1288944959 diff --git a/src/test/profile/selenium/firefoxprofile/extensions.ini b/src/test/profile/selenium/firefoxprofile/extensions.ini deleted file mode 100644 index b3446f0fb0a..00000000000 --- a/src/test/profile/selenium/firefoxprofile/extensions.ini +++ /dev/null @@ -1,9 +0,0 @@ -[ExtensionDirs] -Extension0=/usr/lib/firefox-3.6.16/extensions/langpack-en-AU@firefox-3.6.ubuntu.com -Extension1=/usr/lib/firefox-3.6.16/extensions/langpack-en-GB@firefox-3.6.ubuntu.com -Extension2=/usr/lib/firefox-3.6.16/extensions/langpack-en-CA@firefox-3.6.ubuntu.com -Extension3=/usr/lib/firefox-3.6.16/extensions/langpack-en@firefox-3.6.ubuntu.com -Extension4=/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com -Extension5=/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ubufox@ubuntu.com -[ThemeDirs] -Extension0=/usr/lib/firefox-3.6.16/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd} diff --git a/src/test/profile/selenium/firefoxprofile/extensions.rdf b/src/test/profile/selenium/firefoxprofile/extensions.rdf deleted file mode 100644 index 439bd8d3298..00000000000 --- a/src/test/profile/selenium/firefoxprofile/extensions.rdf +++ /dev/null @@ -1,159 +0,0 @@ -<?xml version="1.0"?> -<RDF:RDF xmlns:NS1="http://www.mozilla.org/2004/em-rdf#" - xmlns:NC="http://home.netscape.com/NC-rdf#" - xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - <RDF:Description RDF:about="rdf:#$CbIeH3" - NS1:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" - NS1:minVersion="3.6" - NS1:maxVersion="3.6.*" /> - <RDF:Description RDF:about="urn:mozilla:item:langpack-en@firefox-3.6.ubuntu.com" - NS1:installLocation="app-global" - NS1:version="3.6" - NS1:name="Firefox (en)" - NS1:creator="http://translations.launchpad.net"> - <NS1:type NC:parseType="Integer">8</NS1:type> - <NS1:targetApplication RDF:resource="rdf:#$CbIeH3"/> - </RDF:Description> - <RDF:Description RDF:about="rdf:#$JbIeH3" - NS1:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" - NS1:minVersion="3.6" - NS1:maxVersion="3.6.*" /> - <RDF:Description RDF:about="urn:mozilla:item:firebug@software.joehewitt.com" - NS1:installLocation="app-system-share" - NS1:version="1.5.4" - NS1:iconURL="chrome://firebug/content/firebug.png" - NS1:name="Firebug" - NS1:description="Web Development Evolved." - NS1:creator="Joe Hewitt" - NS1:homepageURL="http://www.getfirebug.com/"> - <NS1:type NC:parseType="Integer">2</NS1:type> - <NS1:translator>Leszek(teo)Å»yczkowski (pl-PL)</NS1:translator> - <NS1:translator>markh (nl-NL)</NS1:translator> - <NS1:translator>peter3 (sv-SE)</NS1:translator> - <NS1:translator>AlleyKat (da-DK)</NS1:translator> - <NS1:translator>Hector Zhao, lovelywcm (zh-CN)</NS1:translator> - <NS1:translator>Lukáš Kucharczyk, Michal Kec (cs-CZ)</NS1:translator> - <NS1:translator>Team erweiterungen.de, ReinekeFux, Benedikt Langens (de-DE)</NS1:translator> - <NS1:translator>l0stintranslation, gonzalopirobutirro (it-IT)</NS1:translator> - <NS1:translator>alexxed (ro-RO)</NS1:translator> - <NS1:translator>Nicolas Martin, Franck Marcia (fr-FR)</NS1:translator> - <NS1:translator>gLes (hu-HU)</NS1:translator> - <NS1:translator>Xavi Ivars - Softcatalà (ca)</NS1:translator> - <NS1:translator>gezmen (tr-TR)</NS1:translator> - <NS1:translator>eternoendless (es-AR)</NS1:translator> - <NS1:translator>Dark Preacher (ru-RU)</NS1:translator> - <NS1:translator>Tiago Oliveira, Diego de Carvalho Zimmermann, Alexandre Rapaki (pt-BR)</NS1:translator> - <NS1:translator>Juan BotÃas (es-ES)</NS1:translator> - <NS1:translator>Andriy Zhouck (uk-UA)</NS1:translator> - <NS1:translator>Hisateru Tanaka (ja-JP)</NS1:translator> - <NS1:translator>Mohsen Shadroo (fa-IR)</NS1:translator> - <NS1:translator>Eduard Babayan (hy-AM)</NS1:translator> - <NS1:translator>Helder Magalhães (pt-PT)</NS1:translator> - <NS1:translator>Tomaž MaÄus (sl-SI)</NS1:translator> - <NS1:translator>Stoyan Stefanov (bg-BG)</NS1:translator> - <NS1:translator>Kristján Bjarni Guðmundsson (is-IS)</NS1:translator> - <NS1:translator>NGUYỄN Mạnh Hùng (vi-VN)</NS1:translator> - <NS1:translator>Bwah (hr-HR)</NS1:translator> - <NS1:translator>Sonickydon (el-GR)</NS1:translator> - <NS1:contributor>John J. Barton (IBM Almaden)</NS1:contributor> - <NS1:contributor>Jan Odvarko (Mozilla Corp.)</NS1:contributor> - <NS1:contributor>Max Stepanov (Aptana Inc.)</NS1:contributor> - <NS1:contributor>Rob Campbell (Mozilla Corp.)</NS1:contributor> - <NS1:contributor>Hans Hillen (Paciello Group, Mozilla)</NS1:contributor> - <NS1:contributor>Curtis Bartley (Mozilla Corp.)</NS1:contributor> - <NS1:contributor>Mike Collins (IBM Almaden)</NS1:contributor> - <NS1:contributor>Kevin Decker</NS1:contributor> - <NS1:contributor>Mike Ratcliffe (Comartis AG)</NS1:contributor> - <NS1:contributor>Hernan RodrÃguez Colmeiro</NS1:contributor> - <NS1:contributor>Austin Andrews</NS1:contributor> - <NS1:contributor>Christoph Dorn</NS1:contributor> - <NS1:contributor>Steven Roussey (AppCenter Inc, Network54)</NS1:contributor> - <NS1:targetApplication RDF:resource="rdf:#$ubIeH3"/> - <NS1:targetApplication RDF:resource="rdf:#$vbIeH3"/> - </RDF:Description> - <RDF:Seq RDF:about="urn:mozilla:item:root"> - <RDF:li RDF:resource="urn:mozilla:item:langpack-en-AU@firefox-3.6.ubuntu.com"/> - <RDF:li RDF:resource="urn:mozilla:item:langpack-en-GB@firefox-3.6.ubuntu.com"/> - <RDF:li RDF:resource="urn:mozilla:item:{972ce4c6-7e08-4474-a285-3208198ce6fd}"/> - <RDF:li RDF:resource="urn:mozilla:item:langpack-en-CA@firefox-3.6.ubuntu.com"/> - <RDF:li RDF:resource="urn:mozilla:item:langpack-en@firefox-3.6.ubuntu.com"/> - <RDF:li RDF:resource="urn:mozilla:item:firebug@software.joehewitt.com"/> - <RDF:li RDF:resource="urn:mozilla:item:ubufox@ubuntu.com"/> - </RDF:Seq> - <RDF:Description RDF:about="urn:mozilla:item:langpack-en-CA@firefox-3.6.ubuntu.com" - NS1:installLocation="app-global" - NS1:version="3.6" - NS1:name="Firefox (en-CA)" - NS1:creator="http://translations.launchpad.net"> - <NS1:type NC:parseType="Integer">8</NS1:type> - <NS1:targetApplication RDF:resource="rdf:#$JbIeH3"/> - </RDF:Description> - <RDF:Description RDF:about="urn:mozilla:item:langpack-en-GB@firefox-3.6.ubuntu.com" - NS1:installLocation="app-global" - NS1:version="3.6" - NS1:name="Firefox (en-GB)" - NS1:creator="http://translations.launchpad.net"> - <NS1:type NC:parseType="Integer">8</NS1:type> - <NS1:targetApplication RDF:resource="rdf:#$3cIeH3"/> - </RDF:Description> - <RDF:Description RDF:about="rdf:#$3cIeH3" - NS1:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" - NS1:minVersion="3.6" - NS1:maxVersion="3.6.*" /> - <RDF:Description RDF:about="rdf:#$yaIeH3" - NS1:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" - NS1:minVersion="1.5" - NS1:maxVersion="3.7.*" /> - <RDF:Description RDF:about="rdf:#$acIeH3" - NS1:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" - NS1:minVersion="3.6" - NS1:maxVersion="3.6.*" /> - <RDF:Description RDF:about="urn:mozilla:item:langpack-en-AU@firefox-3.6.ubuntu.com" - NS1:installLocation="app-global" - NS1:version="3.6" - NS1:name="Firefox (en-AU)" - NS1:creator="http://translations.launchpad.net"> - <NS1:type NC:parseType="Integer">8</NS1:type> - <NS1:targetApplication RDF:resource="rdf:#$acIeH3"/> - </RDF:Description> - <RDF:Description RDF:about="rdf:#$vbIeH3" - NS1:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" - NS1:minVersion="3.5" - NS1:maxVersion="3.6.*" /> - <RDF:Description RDF:about="urn:mozilla:item:ubufox@ubuntu.com" - NS1:installLocation="app-system-share" - NS1:version="0.9rc2" - NS1:iconURL="chrome://ubufox/content/ubuntulogo32.png" - NS1:name="Ubuntu Firefox Modifications" - NS1:description="Ubuntu configuration defaults and apt support for firefox extensions/plugins." - NS1:creator="Canonical Ltd."> - <NS1:type NC:parseType="Integer">2</NS1:type> - <NS1:contributor>Alexander Sack <asac@ubuntu.com></NS1:contributor> - <NS1:contributor>Sasa Bodiroza <jazzva@gmail.com></NS1:contributor> - <NS1:contributor>Daniel Abramov <ex@vingrad.ru></NS1:contributor> - <NS1:contributor>Arzhel Younsi <xionox@gmail.com></NS1:contributor> - <NS1:contributor>Saïvann Carignan <oxmosys@gmail.com></NS1:contributor> - <NS1:targetApplication RDF:resource="rdf:#$yaIeH3"/> - </RDF:Description> - <RDF:Description RDF:about="urn:mozilla:item:{972ce4c6-7e08-4474-a285-3208198ce6fd}" - NS1:installLocation="app-global" - NS1:version="3.6.16" - NS1:internalName="classic/1.0" - NS1:locked="true" - NS1:appManaged="true" - NS1:name="Default" - NS1:description="The default theme." - NS1:creator="Mozilla" - NS1:contributor="Mozilla Contributors"> - <NS1:type NC:parseType="Integer">4</NS1:type> - <NS1:targetApplication RDF:resource="rdf:#$YbIeH3"/> - </RDF:Description> - <RDF:Description RDF:about="rdf:#$YbIeH3" - NS1:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" - NS1:minVersion="3.6.16" - NS1:maxVersion="3.6.16" /> - <RDF:Description RDF:about="rdf:#$ubIeH3" - NS1:id="toolkit@mozilla.org" - NS1:minVersion="1.9.1" - NS1:maxVersion="1.9.2.*" /> -</RDF:RDF> diff --git a/src/test/profile/selenium/firefoxprofile/firebug/annotations.json b/src/test/profile/selenium/firefoxprofile/firebug/annotations.json deleted file mode 100644 index 0637a088a01..00000000000 --- a/src/test/profile/selenium/firefoxprofile/firebug/annotations.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/src/test/profile/selenium/firefoxprofile/formhistory.sqlite b/src/test/profile/selenium/firefoxprofile/formhistory.sqlite deleted file mode 100644 index 01dcc49ab9a9b3f89879a7adfb07384f04799207..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmWFz^vNtqRY=P(%1ta$FlJz3U}R))P*7lCU|<Ad79fTJW*`G31_K~A6O4m{W@ONP zB*_buWM;BuU^Ztu45UWEa0!7%W@dJAPi@9V`OLhO)Qa5vs(4UB%E&A($uFvm&q*vU zDJ@P-iN_|(;vD4a7~-nn>F44ap@3hjg1;ZS3Iz?2>7hW=HH(<o#m#|^;KybSR=b(; z+6^`atCeY)sW~ZmiMgqojc$zW;@aAbP0l5WNja%#&PU@iL9GjMbn<b<^hjn3Fc3mq z-Ccte0)jk!9fKkjyj>%86yUZggt$h8DERpUaj1`vjzU>tPH8H-U`b|fYB4B0V1|JV zD1rnLLI@UUFcD2q-bBge!zFEw`eQT%MniyL2ylT^AlLE)b&M()4S~@R7%m|&n*WDO NOpf|vGz3Tw0RZNcr(pm9 diff --git a/src/test/profile/selenium/firefoxprofile/key3.db b/src/test/profile/selenium/firefoxprofile/key3.db deleted file mode 100644 index 79c9765ee2584fb7bef3b2132e2ddceb72d7b405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI$F$%&k6vpwdwuple7Z-2f;2FGto8VqiL@2FTanl1hxri5X7u=nk#Z?E<q<R4z z3W5KF$9qW#dHlwx+KeStr066yY^%By*y2*PZ)4Akjj*W2k-MW{m#!|hx^QckrAO^E zPwDUSAOZ*=fB*srAb<b@2q1s}0=@`DdYHSpnzK3Dd=UsBfB*srAb<b@2q1s}0tg`B zn?SFvS+})6^l$lgIohlzNj8j=P97(Va4??d(=7GnpMp6NKmY**5I_I{1Q0*~0R#|0 h;D3RqZ+{xhivR)$Ab<b@2q1s}0tg_000KV?ya9^?$hQCh diff --git a/src/test/profile/selenium/firefoxprofile/localstore.rdf b/src/test/profile/selenium/firefoxprofile/localstore.rdf deleted file mode 100644 index fabd80a26f7..00000000000 --- a/src/test/profile/selenium/firefoxprofile/localstore.rdf +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version="1.0"?> -<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#" - xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - <RDF:Description RDF:about="chrome://browser/content/preferences/connection.xul"> - <NC:persist RDF:resource="chrome://browser/content/preferences/connection.xul#ConnectionsDialog"/> - </RDF:Description> - <RDF:Description RDF:about="chrome://browser/content/preferences/connection.xul#ConnectionsDialog" - screenX="62" - screenY="44" /> - <RDF:Description RDF:about="chrome://browser/content/preferences/preferences.xul#BrowserPreferences" - screenX="184" - screenY="201" - lastSelected="paneAdvanced" /> - <RDF:Description RDF:about="chrome://browser/content/preferences/preferences.xul"> - <NC:persist RDF:resource="chrome://browser/content/preferences/preferences.xul#BrowserPreferences"/> - </RDF:Description> - <RDF:Description RDF:about="chrome://global/content/customizeToolbar.xul#CustomizeToolbarWindow" - width="636" - height="400" /> - <RDF:Description RDF:about="chrome://global/content/customizeToolbar.xul"> - <NC:persist RDF:resource="chrome://global/content/customizeToolbar.xul#CustomizeToolbarWindow"/> - </RDF:Description> - <RDF:Description RDF:about="chrome://browser/content/preferences/securityWarnings.xul"> - <NC:persist RDF:resource="chrome://browser/content/preferences/securityWarnings.xul#SecurityWarnings"/> - </RDF:Description> - <RDF:Description RDF:about="chrome://browser/content/browser.xul#sidebar-box" - sidebarcommand="" - width="" - src="" /> - <RDF:Description RDF:about="chrome://browser/content/browser.xul#navigator-toolbox" - iconsize="small" - mode="text" /> - <RDF:Description RDF:about="chrome://browser/content/browser.xul#nav-bar" - currentset="unified-back-forward-button,back-button,forward-button,reload-button,stop-button,home-button,urlbar-container" - iconsize="small" - mode="text" /> - <RDF:Description RDF:about="chrome://browser/content/browser.xul#toolbar-menubar" - currentset="menubar-items" - iconsize="small" - mode="text" /> - <RDF:Description RDF:about="chrome://browser/content/browser.xul#PersonalToolbar" - collapsed="true" - currentset="personal-bookmarks" - iconsize="small" - mode="text" /> - <RDF:Description RDF:about="chrome://browser/content/browser.xul#main-window" - width="820" - height="956" - sizemode="normal" - screenY="32" - screenX="858" /> - <RDF:Description RDF:about="chrome://browser/content/preferences/securityWarnings.xul#SecurityWarnings" - screenX="25" - screenY="197" /> - <RDF:Description RDF:about="chrome://browser/content/browser.xul#sidebar-title" - value="" /> - <RDF:Description RDF:about="chrome://browser/content/browser.xul"> - <NC:persist RDF:resource="chrome://browser/content/browser.xul#main-window"/> - <NC:persist RDF:resource="chrome://browser/content/browser.xul#PersonalToolbar"/> - <NC:persist RDF:resource="chrome://browser/content/browser.xul#toolbar-menubar"/> - <NC:persist RDF:resource="chrome://browser/content/browser.xul#nav-bar"/> - <NC:persist RDF:resource="chrome://browser/content/browser.xul#navigator-toolbox"/> - <NC:persist RDF:resource="chrome://browser/content/browser.xul#sidebar-box"/> - <NC:persist RDF:resource="chrome://browser/content/browser.xul#sidebar-title"/> - </RDF:Description> -</RDF:RDF> diff --git a/src/test/profile/selenium/firefoxprofile/mimeTypes.rdf b/src/test/profile/selenium/firefoxprofile/mimeTypes.rdf deleted file mode 100644 index 1540e39d91c..00000000000 --- a/src/test/profile/selenium/firefoxprofile/mimeTypes.rdf +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> -<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#" - xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - <RDF:Description RDF:about="urn:scheme:handler:webcal" - NC:useSystemDefault="true" - NC:alwaysAsk="true"> - <NC:possibleApplication RDF:resource="urn:handler:web:http://30boxes.com/external/widget?refer=ff&url=%s"/> - </RDF:Description> - <RDF:Description RDF:about="urn:mimetypes"> - <NC:MIME-types RDF:resource="urn:mimetypes:root"/> - </RDF:Description> - <RDF:Description RDF:about="urn:handler:web:https://www.mibbit.com/?url=%s" - NC:prettyName="Mibbit" - NC:uriTemplate="https://www.mibbit.com/?url=%s" /> - <RDF:Description RDF:about="urn:scheme:handler:mailto" - NC:useSystemDefault="true" - NC:alwaysAsk="false"> - <NC:possibleApplication RDF:resource="urn:handler:web:https://mail.google.com/mail/?extsrc=mailto&url=%s"/> - <NC:possibleApplication RDF:resource="urn:handler:web:http://compose.mail.yahoo.com/?To=%s"/> - </RDF:Description> - <RDF:Description RDF:about="urn:scheme:webcal" - NC:value="webcal"> - <NC:handlerProp RDF:resource="urn:scheme:handler:webcal"/> - </RDF:Description> - <RDF:Description RDF:about="urn:handler:web:http://compose.mail.yahoo.com/?To=%s" - NC:prettyName="Yahoo! Mail" - NC:uriTemplate="http://compose.mail.yahoo.com/?To=%s" /> - <RDF:Description RDF:about="urn:root" - NC:en-US_defaultHandlersVersion="3" /> - <RDF:Description RDF:about="urn:scheme:handler:irc" - NC:alwaysAsk="true"> - <NC:possibleApplication RDF:resource="urn:handler:web:https://www.mibbit.com/?url=%s"/> - </RDF:Description> - <RDF:Seq RDF:about="urn:schemes:root"> - <RDF:li RDF:resource="urn:scheme:mailto"/> - <RDF:li RDF:resource="urn:scheme:irc"/> - <RDF:li RDF:resource="urn:scheme:ircs"/> - <RDF:li RDF:resource="urn:scheme:webcal"/> - </RDF:Seq> - <RDF:Description RDF:about="urn:scheme:mailto" - NC:value="mailto"> - <NC:handlerProp RDF:resource="urn:scheme:handler:mailto"/> - </RDF:Description> - <RDF:Description RDF:about="urn:handler:web:http://30boxes.com/external/widget?refer=ff&url=%s" - NC:prettyName="30 Boxes" - NC:uriTemplate="http://30boxes.com/external/widget?refer=ff&url=%s" /> - <RDF:Seq RDF:about="urn:mimetypes:root"> - </RDF:Seq> - <RDF:Description RDF:about="urn:handler:web:https://mail.google.com/mail/?extsrc=mailto&url=%s" - NC:prettyName="Gmail" - NC:uriTemplate="https://mail.google.com/mail/?extsrc=mailto&url=%s" /> - <RDF:Description RDF:about="urn:scheme:handler:ircs" - NC:alwaysAsk="true"> - <NC:possibleApplication RDF:resource="urn:handler:web:https://www.mibbit.com/?url=%s"/> - </RDF:Description> - <RDF:Description RDF:about="urn:scheme:ircs" - NC:value="ircs"> - <NC:handlerProp RDF:resource="urn:scheme:handler:ircs"/> - </RDF:Description> - <RDF:Description RDF:about="urn:scheme:irc" - NC:value="irc"> - <NC:handlerProp RDF:resource="urn:scheme:handler:irc"/> - </RDF:Description> - <RDF:Description RDF:about="urn:schemes"> - <NC:Protocol-Schemes RDF:resource="urn:schemes:root"/> - </RDF:Description> -</RDF:RDF> diff --git a/src/test/profile/selenium/firefoxprofile/permissions.sqlite b/src/test/profile/selenium/firefoxprofile/permissions.sqlite deleted file mode 100644 index f2069bd4a863807e8dff6d59012d6e04578a82e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmWFz^vNtqRY=P(%1ta$FlJz3U}R))P*7lCU|@n`AO!}DKoW#u0G$sLN2Zw=bRS9b z0!0{^I~agy6pV(zXb4~lfigyRad~;hM(dKqq@2{;{Hpkj{Nj>gID^SK$kj2#RUyRD z$;VXzF07!TkeQ<3=@;Va?i!>J5aj9W7!;}C?HZ{A(ykEV8WEyXQdy7+VHKnn<z^Na ZXXfX@v}l6zCNR^Fg3%Bd4S^9D0szROF5&<H diff --git a/src/test/profile/selenium/firefoxprofile/places.sqlite b/src/test/profile/selenium/firefoxprofile/places.sqlite deleted file mode 100644 index 4925ab71261cab51343b04231285fdd596b11c4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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 diff --git a/src/test/profile/selenium/firefoxprofile/places.sqlite-journal b/src/test/profile/selenium/firefoxprofile/places.sqlite-journal deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/test/profile/selenium/firefoxprofile/pluginreg.dat b/src/test/profile/selenium/firefoxprofile/pluginreg.dat deleted file mode 100644 index e9a251c90a7..00000000000 --- a/src/test/profile/selenium/firefoxprofile/pluginreg.dat +++ /dev/null @@ -1,90 +0,0 @@ -Generated File. Do not edit. - -[HEADER] -Version:0.11:$ - -[PLUGINS] -libflashplayer.so:$ -/usr/lib/flashplugin-installer/libflashplayer.so:$ -:$ -1303032985000:1:5:$ -Shockwave Flash 10.2 r159:$ -Shockwave Flash:$ -2 -0:application/x-shockwave-flash:Shockwave Flash:swf:$ -1:application/futuresplash:FutureSplash Player:spl:$ -librhythmbox-itms-detection-plugin.so:$ -/usr/lib/mozilla/plugins/librhythmbox-itms-detection-plugin.so:$ -:$ -1295949257000:1:5:$ -This plug-in detects the presence of iTunes when opening iTunes Store URLs in a web page with Firefox.:$ -iTunes Application Detector:$ -1 -0:application/itunes-plugin:::$ -libtotem-narrowspace-plugin.so:$ -/usr/lib/mozilla/plugins/libtotem-narrowspace-plugin.so:$ -:$ -1285633033000:1:5:$ -The <a href="http://www.gnome.org/projects/totem/">Totem</a> 2.32.0 plugin handles video and audio streams.:$ -QuickTime Plug-in 7.6.6:$ -5 -0:video/quicktime:QuickTime video:mov:$ -1:video/mp4:MPEG-4 video:mp4:$ -2:image/x-macpaint:MacPaint Bitmap image:pntg:$ -3:image/x-quicktime:Macintosh Quickdraw/PICT drawing:pict, pict1, pict2:$ -4:video/x-m4v:MPEG-4 video:m4v:$ -libtotem-mully-plugin.so:$ -/usr/lib/mozilla/plugins/libtotem-mully-plugin.so:$ -:$ -1285633033000:1:5:$ -DivX Web Player version 1.4.0.233:$ -DivX® Web Player:$ -1 -0:video/divx:AVI video:divx:$ -libtotem-gmp-plugin.so:$ -/usr/lib/mozilla/plugins/libtotem-gmp-plugin.so:$ -:$ -1285633033000:1:5:$ -The <a href="http://www.gnome.org/projects/totem/">Totem</a> 2.32.0 plugin handles video and audio streams.:$ -Windows Media Player Plug-in 10 (compatible; Totem):$ -13 -0:application/x-mplayer2:AVI video:avi, wma, wmv:$ -1:video/x-ms-asf-plugin:ASF video:asf, wmv:$ -2:video/x-msvideo:AVI video:asf, wmv:$ -3:video/x-ms-asf:ASF video:asf:$ -4:video/x-ms-wmv:Windows Media video:wmv:$ -5:video/x-wmv:Windows Media video:wmv:$ -6:video/x-ms-wvx:Windows Media video:wmv:$ -7:video/x-ms-wm:Windows Media video:wmv:$ -8:video/x-ms-wmp:Windows Media video:wmv:$ -9:application/x-ms-wms:Windows Media video:wms:$ -10:application/x-ms-wmp:Windows Media video:wmp:$ -11:application/asx:Microsoft ASX playlist:asx:$ -12:audio/x-ms-wma:Windows Media audio:wma:$ -libtotem-cone-plugin.so:$ -/usr/lib/mozilla/plugins/libtotem-cone-plugin.so:$ -:$ -1285633033000:1:5:$ -The <a href="http://www.gnome.org/projects/totem/">Totem</a> 2.32.0 plugin handles video and audio streams.:$ -VLC Multimedia Plugin (compatible Totem 2.32.0):$ -20 -0:application/x-vlc-plugin:VLC Multimedia Plugin::$ -1:application/vlc:VLC Multimedia Plugin::$ -2:video/x-google-vlc-plugin:VLC Multimedia Plugin::$ -3:application/x-ogg:Ogg multimedia file:ogg:$ -4:application/ogg:Ogg multimedia file:ogg:$ -5:audio/ogg:Ogg Audio:oga:$ -6:audio/x-ogg:Ogg Audio:ogg:$ -7:video/ogg:Ogg Video:ogv:$ -8:video/x-ogg:Ogg Video:ogg:$ -9:application/annodex:Annodex exchange format:anx:$ -10:audio/annodex:Annodex Audio:axa:$ -11:video/annodex:Annodex Video:axv:$ -12:video/mpeg:MPEG video:mpg, mpeg, mpe:$ -13:audio/wav:WAV audio:wav:$ -14:audio/x-wav:WAV audio:wav:$ -15:audio/mpeg:MP3 audio:mp3:$ -16:application/x-nsv-vp3-mp3:NullSoft video:nsv:$ -17:video/flv:Flash video:flv:$ -18:video/webm:WebM video:webm:$ -19:application/x-totem-plugin:Totem Multimedia plugin::$ diff --git a/src/test/profile/selenium/firefoxprofile/prefs.js b/src/test/profile/selenium/firefoxprofile/prefs.js deleted file mode 100644 index 91fdd76b006..00000000000 --- a/src/test/profile/selenium/firefoxprofile/prefs.js +++ /dev/null @@ -1,48 +0,0 @@ -# Mozilla User Preferences - -/* Do not edit this file. - * - * If you make changes to this file while the application is running, - * the changes will be overwritten when the application exits. - * - * To make a manual change to preferences, you can visit the URL about:config - * For more information, see http://www.mozilla.org/unix/customizing.html#prefs - */ - -user_pref("app.update.lastUpdateTime.places-maintenance-timer", 1304093622); -user_pref("app.update.lastUpdateTime.search-engine-update-timer", 1304093594); -user_pref("browser.bookmarks.restore_default_bookmarks", false); -user_pref("browser.download.manager.showWhenStarting", false); -user_pref("browser.history_expire_days.mirror", 180); -user_pref("browser.migration.version", 1); -user_pref("browser.offline", false); -user_pref("browser.offline-apps.notify", false); -user_pref("browser.places.smartBookmarksVersion", 2); -user_pref("browser.preferences.advanced.selectedTabIndex", 3); -user_pref("browser.privatebrowsing.autostart", true); -user_pref("browser.safebrowsing.enabled", false); -user_pref("browser.safebrowsing.malware.enabled", false); -user_pref("browser.search.update", false); -user_pref("browser.sessionstore.resume_session_once", true); -user_pref("browser.startup.homepage", "about:blank"); -user_pref("browser.startup.homepage_override.mstone", "rv:1.9.2.16"); -user_pref("browser.startup.page", 0); -user_pref("browser.tabs.warnOnClose", false); -user_pref("browser.tabs.warnOnOpen", false); -user_pref("distribution.canonical.bookmarksProcessed", true); -user_pref("dom.disable_open_during_load", false); -user_pref("extensions.enabledItems", "langpack-en-AU@firefox-3.6.ubuntu.com:3.6,langpack-en-GB@firefox-3.6.ubuntu.com:3.6,langpack-en-CA@firefox-3.6.ubuntu.com:3.6,langpack-en@firefox-3.6.ubuntu.com:3.6,firebug@software.joehewitt.com:1.5.4,ubufox@ubuntu.com:0.9rc2,{972ce4c6-7e08-4474-a285-3208198ce6fd}:3.6.16"); -user_pref("extensions.lastAppVersion", "3.6.16"); -user_pref("extensions.update.enabled", false); -user_pref("general.warnOnAboutConfig", false); -user_pref("intl.charsetmenu.browser.cache", "UTF-8"); -user_pref("layout.spellcheckDefault", 0); -user_pref("network.cookie.prefsMigrated", true); -user_pref("network.online", false); -user_pref("privacy.sanitize.migrateFx3Prefs", true); -user_pref("security.warn_entering_weak", false); -user_pref("security.warn_viewing_mixed", false); -user_pref("signon.rememberSignons", false); -user_pref("toolkit.networkmanager.disable", true); -user_pref("urlclassifier.keyupdatetime.https://sb-ssl.google.com/safebrowsing/newkey", 1306685517); -user_pref("xpinstall.whitelist.required", false); diff --git a/src/test/profile/selenium/firefoxprofile/search.json b/src/test/profile/selenium/firefoxprofile/search.json deleted file mode 100644 index c2f796f4b3b..00000000000 --- a/src/test/profile/selenium/firefoxprofile/search.json +++ /dev/null @@ -1 +0,0 @@ -{"version":6,"buildID":"20110323142937","locale":"en-US","directories":{"/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ubufox@ubuntu.com/searchplugins":{"lastModifiedTime":1288944959000,"engines":[{"_id":"/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ubufox@ubuntu.com/searchplugins/ask.xml","_name":"Ask.com","description":"Ask.com Search Engine - Better Web Search","__searchForm":"http://www.ask.com/","_iconURL":"data:image/x-icon;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAAAACbm5sAAADJAAAA1gAAANMAAADYAAAAyACcnJ0AAADLAAEBywDCwsAAjIy2AH9/gwBdXa4AAAC5AAAAygAwMOEAMjLgADMzvQAEBHwAaGipAAAAzwCtsLEAhYWgAAsLygDq6toAQkK3AGZnigA5O84ACAiuANjY3wAICIsAAADAAGVljgAEBIQAAADfAGNiegAREZAAwsLzAAcHkwAEBZ0Ag4jOAC0twAALC7QAqK7dAKSq1wBycqQABATQAPT04ACYm74ARkaOALO09wAmJnQAJSXJADw9fwAzNc4ALzDCAHp6pACdnZkApKevAL29sQD5+foAkpKcAOzs4AAMDMoAPj7iAKGinACvr6oAT0/wAAwNyQAAANIAlJTaAN/f0QCcnZ0AAADRAF5erQAAAJ8AAADDAAAAzAA1NrwAMTGfAAkJ1QAAAMQAWlqvAHJ31wDMzMAAFhbHAAAAiQBERNIA8fHmAAgI1gCys6oAu7v4AD09ngDDwfoABgbOAM7N9wCYmPUAKyuOABkZmgAyMsEAiYq8AHp68gDDw5sAAgLPALW2rwCdnZgAAAC9AAMD1wCenpgA9fX1AAAArQCCgrIA0dLYAK+vnwB3e9kA5ubSAOfn+AClp6cA3NzDAMHHygBQU9MABATCAG5z2gAcHMQAio/aAAAA2QD19fwAnaHIAIaGogDm5uoAk5N0AK+ytAAMDNUAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////////////////////////////+DBgAAAAAASBX///////8GEzQ/Ll5VEUo9aXX///86e08hAg1qUUUiaymAOXf/NxQlglZvIzgzHksFeQxs/xcBEG1aWC1lc2YgCmEEUkE2BwFdaHAkQ3RGRxgqAmcWKwgFD1Q7Yn4xYzx2En0DGf9TBwFbLyZgCVwdQgtuBE7//3xEQD4nA1BZgTVXHwIw/////3pkHEkOTV8aTIR//////////yxyeBsycSj/////////////////////////////////////////////////AAD//wAA//8AAMAfAACABwAAAAEAAAABAAAAAAAAAAAAAAAAAACAAAAAwAAAAPABAAD8BwAA//8AAP//AAA=","_urls":[{"template":"http://www.ask.com/web","rels":[],"params":[{"name":"q","value":"{searchTerms}"},{"name":"o","value":"1576"},{"name":"l","value":"dis"}]}],"filePath":"/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ubufox@ubuntu.com/searchplugins/ask.xml","_installLocation":3,"queryCharset":"UTF-8"}]},"/usr/lib/firefox-addons/searchplugins/en-US":{"lastModifiedTime":1301039473000,"engines":[{"_id":"/usr/lib/firefox-addons/searchplugins/en-US/eBay.xml","_name":"eBay","description":"eBay - Online auctions","__searchForm":"http://search.ebay.com/","_iconURL":"data:image/x-icon;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAAA/wAAAABAAABAQAAAgEAAAMBAAAD/QAAAAIAAAECAAACAgAAAwIAAAP+AAAAAwAAAQMAAAIDAAADAwAAA/8AAAAD/AABA/wAAgP8AAMD/AAD//wAAAABAAEAAQACAAEAAwABAAP8AQAAAQEAAQEBAAIBAQADAQEAA/0BAAACAQABAgEAAgIBAAMCAQAD/gEAAAMBAAEDAQACAwEAAwMBAAP/AQAAA/0AAQP9AAID/QADA/0AA//9AAAAAgABAAIAAgACAAMAAgAD/AIAAAECAAEBAgACAQIAAwECAAP9AgAAAgIAAQICAAICAgADAgIAA/4CAAADAgABAwIAAgMCAAMDAgAD/wIAAAP+AAED/gACA/4AAwP+AAP//gAAAAMAAQADAAIAAwADAAMAA/wDAAABAwABAQMAAgEDAAMBAwAD/QMAAAIDAAECAwACAgMAAwIDAAP+AwAAAwMAAQMDAAIDAwADAwMAA/8DAAAD/wABA/8AAgP/AAMD/wAD//8AAAAD/AEAA/wCAAP8AwAD/AP8A/wAAQP8AQED/AIBA/wDAQP8A/0D/AACA/wBAgP8AgID/AMCA/wD/gP8AAMD/AEDA/wCAwP8AwMD/AP/A/wAA//8AQP//AID//wDA//8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHx8fHx8fHx8fHx8AAB8cGRkUFAcHBx8fBUKfAAAfFBkfHxNHF4cb29vCnwAAHxkZFBQUBx8HG98bwp8fAB8ZGR8UGQcXhxvb28KFXx8fHZkZGRNHBwcfG8jCgoQfAB8fHx8HBx8b29vCnwPCnwAAAB8fBwcfHx8EBB8Dwp8AAAAAHx8fHwAfHx8AHx8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AACAAwAAAAMAAAADAAAAAQAAAAAAAAAAAACAAAAA4AAAAPCIAAD//wAA//8AAP//AAA=","_urls":[{"template":"http://rover.ebay.com/rover/1/711-47294-18009-3/4","rels":[],"params":[{"name":"satitle","value":"{searchTerms}"}]}],"filePath":"/usr/lib/firefox-addons/searchplugins/en-US/eBay.xml","_installLocation":3},{"_id":"/usr/lib/firefox-addons/searchplugins/en-US/google.xml","_name":"Google","description":"Google Search","__searchForm":"http://www.google.com/firefox","_iconURL":"data:image/png;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F39%2F%2F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%2F%2B%2Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%2BooT8%2Fv%2F7%2F%2F%2FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%2BhwGfXifWvqz%2B%2Ff%2F58u%2Fev6Dt4tr%2B%2F%2F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%2FkwBChwHt4dv%2F%2F%2F728ei1bCi7VAC5XQ7kz7n%2F%2F%2F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%2F%2F%2F9%2F%2F%2FSqYK5UwDKZAS9WALIkFn%2B%2F%2F3%2F%2BP8oKccGGcIRJrERILYFEMwAAuEAAdX%2F%2Ff7%2F%2FP%2B%2BfDvGXQLIZgLEWgLOjlf7%2F%2F%2F%2F%2F%2F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%2F%2F%2F%2F7%2B%2Fu2bCTIYwDPZgDBWQDSr4P%2F%2Fv%2F%2F%2FP5GRuABAPkAA%2FwBAfkDAPAAAesAAN%2F%2F%2B%2Fz%2F%2F%2F64g1C5VwDMYwK8Yg7y5tz8%2Fv%2FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%2F%2FPvi28ymXyChTATRrIb8%2F%2F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA","_urls":[{"template":"http://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}","rels":[],"type":"application/x-suggestions+json","params":[]},{"template":"http://www.google.com/search","rels":[],"params":[{"name":"client","value":"ubuntu"},{"name":"channel","value":"fs"},{"name":"q","value":"{searchTerms}"},{"name":"ie","value":"utf-8"},{"name":"oe","value":"utf-8"}]}],"filePath":"/usr/lib/firefox-addons/searchplugins/en-US/google.xml","_installLocation":3,"queryCharset":"UTF-8"},{"_id":"/usr/lib/firefox-addons/searchplugins/en-US/yahoo.xml","_name":"Yahoo","description":"Yahoo Search","__searchForm":"http://search.yahoo.com/","_iconURL":"data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgJqAIoCdgCaAnoAnhKCAKYijgCuLpIAskKeALpSpgC+Yq4AzHy8ANqezgDmvt4A7tLqAPz5+wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKlRFIoABWAKERERE6ADcKMzzu2hOgAAhERK8REWCWBERE36ERMHMEREvo6iEgY6hEn6Pu0mAzqkz/xjMzoDNwpERERDoAMzAKlERIoAAzMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AADAOQAAgBkAAAAPAAAACQAAAAkAAAAIAAAACAAAAAgAAIAYAADAOAAA//8AAP//AAD//wAA","_urls":[{"template":"http://ff.search.yahoo.com/gossip?output=fxjson&command={searchTerms}","rels":[],"type":"application/x-suggestions+json","params":[]},{"template":"http://search.yahoo.com/search","rels":[],"params":[{"name":"p","value":"{searchTerms}"},{"name":"ei","value":"UTF-8"},{"pref":"yahoo-fr","name":"fr","condition":"pref","mozparam":true}]}],"filePath":"/usr/lib/firefox-addons/searchplugins/en-US/yahoo.xml","_installLocation":3,"queryCharset":"UTF-8"},{"_id":"/usr/lib/firefox-addons/searchplugins/en-US/amazondotcom.xml","_name":"Amazon.com","description":"Amazon.com Search","__searchForm":"http://www.amazon.com/","_iconURL":"data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHgSURBVHjalFM9TNtQEP4cB7PwM1RITUXIgsRaYEEVEyKZwhiyZAQyd0BhpFOlIjoBqhjSqVQMoVMLLAjEwECCQJkSkBqJYDOAFOMKFSf28d7DTUxiUDnp/Pzeu/vuu7t3ICKF6SLTMv2/lB0fRWKfjwDm4JJisYh0Oo3fpZLYT0SjSCQS8JAFMADNDZ3NZsnf1taiqVTKi4nGASruk5lkkmTmMB6JUKFQqO+DfX1eABWeQoVR6f7HSdM0obqu48Yw8G1tDT82NsRd1TSbU9BbGPCog8PDj+jLzurFoAVgMh4XxoNDQ6SqKi0tL9eBvAB8zZwymYxYY7EYAoEA8vm82BNTg6XUIs0MeGTZoR1mhXSnwNl4pmAbjU7mcjkKhkL1ynMnntZ4OEw3VyrV8utk7s5TdW++0QXz+1i3P7IK36t+PCfVn1OQOoOA0gXr5DPak+cPXbBK+/T3S69AtY3LJ98vZ1or/iLr+pTuvr59/A6s003UdqZFJF/PCKQ3o5CUznoBST2AfbEF/9iqYEDaIfwj73VJPEfgNTe0tWNYR0uwy9uOW0OkrgHI7z5ADo2C7v48nLV3XHKAT+x/1m1sX58xsBxg8rZJrDYD8DHHp4aJj/MK09sXjPOt46PcCzAACXY8/u34wN0AAAAASUVORK5CYII=","_urls":[{"template":"http://www.amazon.com/exec/obidos/external-search/","rels":[],"params":[{"name":"field-keywords","value":"{searchTerms}"},{"name":"mode","value":"blended"},{"name":"tag","value":"wwwcanoniccom-20"},{"name":"sourceid","value":"Mozilla-search"}]}],"filePath":"/usr/lib/firefox-addons/searchplugins/en-US/amazondotcom.xml","_installLocation":3},{"_id":"/usr/lib/firefox-addons/searchplugins/en-US/creativecommons.xml","_name":"Creative Commons","description":"Find photos, movies, music, and text to rip, sample, mash, and share.","__searchForm":"http://search.creativecommons.org/","_iconURL":"data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJUSURBVDiNjZO9S1thGMXPvTfJFbnkipNkLLS0ksFg0M0lf4CboNCEgIIg/RiKtEOn0qGWTtbVoBYcIji10I9J0ApWCjp0kRaXdhHjTW4+uGnur4NJ8GOwZ3nf4TnnfZ5z3scAdBGGYdyVdN+yrGHTNNOtVqsVhuG+pO+S3gE/LtV3BIxzPDJNc8FxHGN0dNRKpVIGoJ2dndr+/r5Vr9cl6bmkN0AoSQIEyHXdj5KYnZ3F932uolKpkM/nK5KQ9FmSCZwLOI7zQBLr6+vXiFdRLBaDtsiTTve3YrFYkM/nbyR3MDU1dSKpLumO+vr6Xruui+d5AFSrVVZWVtjY2KDRaABwdHTE4uIie3t7AJTLZaLRaFXSCyUSid1MJgOA53n09/eTTqdJJpPMzc2xurqKbduMj48Tj8fZ3d0FYHBw8FjSezmOU56fnwdgeXkZ27ap1WpUKhWazSZjY2Nks1kASqVSd4zp6eljSX/MtiHdRDpnEATyfb+bkiSVSqXu3TCM8xgHBga+dkY4OzvDdV2GhoZIJBLMzMxQKBSIRqNkMhlisRhbW1sAJJPJn5I+KB6Pv7poou/7rK2tsbm5SRAEXROXlpY4ODgAoFarYdu2J+llN8ZcLvffMeZyud+SGpLuCVBPT89jSRQKhRvJxWKxISmU9JTOT5Rk9Pb2fpHE5OQkJycn14inp6dMTEx4bdM/SbKAy8sk6WEkElmwLCuSSqUYGRmxgHB7e7t+eHgYazabgaRnkt7SeZnr63xbUtYwjGHTNNNhGP4F9iR9a6/zr4v1/wDE1D9XlC4rrAAAAABJRU5ErkJggg==","_urls":[{"template":"http://search.creativecommons.org/","rels":[],"params":[{"name":"q","value":"{searchTerms}"},{"name":"sourceid","value":"Mozilla-search"}]}],"filePath":"/usr/lib/firefox-addons/searchplugins/en-US/creativecommons.xml","_installLocation":3,"queryCharset":"UTF-8"},{"_id":"/usr/lib/firefox-addons/searchplugins/en-US/wikipedia.xml","_name":"Wikipedia (en)","description":"Wikipedia, the free encyclopedia","__searchForm":"http://en.wikipedia.org/wiki/Special:Search","_iconURL":"data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAEAgQAhIOEAMjHyABIR0gA6ejpAGlqaQCpqKkAKCgoAPz9%2FAAZGBkAmJiYANjZ2ABXWFcAent6ALm6uQA8OjwAiIiIiIiIiIiIiI4oiL6IiIiIgzuIV4iIiIhndo53KIiIiB%2FWvXoYiIiIfEZfWBSIiIEGi%2FfoqoiIgzuL84i9iIjpGIoMiEHoiMkos3FojmiLlUipYliEWIF%2BiDe0GoRa7D6GPbjcu1yIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","_urls":[{"template":"http://en.wikipedia.org/w/api.php","rels":[],"type":"application/x-suggestions+json","params":[{"name":"action","value":"opensearch"},{"name":"search","value":"{searchTerms}"}]},{"template":"http://en.wikipedia.org/wiki/Special:Search","rels":[],"params":[{"name":"search","value":"{searchTerms}"},{"name":"sourceid","value":"Mozilla-search"}]}],"filePath":"/usr/lib/firefox-addons/searchplugins/en-US/wikipedia.xml","_installLocation":3,"queryCharset":"UTF-8"},{"_id":"/usr/lib/firefox-addons/searchplugins/en-US/answers.xml","_name":"Answers.com","description":"Dictionary Search on Answers.com","__searchForm":"http://www.answers.com/","_iconURL":"data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////K////4f////E////5f///+n////P////mv///0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////fv///+//////////////////////7NnP/+LFtv/////+////of///xYAAAAAAAAAAAAAAAD///8D////lf////////////j0//bi1v/OlXf/tGU9/6FCEv/OmH3////////////////D////FgAAAAAAAAAA////avPm4P/evaz/8NbI//7r3//23M3/xYRi/5kzAP/Df1z//u/l//749P/v4dn/+PPw/////6j///8B////GP///+W/f1//smM7//bczf/+69///uvf/9ytlP+ZMwD/5se3/+/f1//AgmP/nj0N/927qv/////+////QP///2z/////8NvQ/8WCYP/+69///uvf//7r3/+7ckz/pUkb/9m1ov+ePQ3/okUW/8+fh//38O3//////////5r///+t//////7y6v/Cflv/58Cr//DRwP/mwKv/okQU/8ODYv/cuqj/yZN4//Tq5f/+9e///vDn///////////Q////yf/////+7+b/05yA/65ZLv+9dVD/sF40/5kzAP/kvKb//vTu//Tr5v/7+Pb//vfz//707f//////////6f///8X//////vDm/+K4ov/KjGz//ure/8uNbf+jRBX/+OTX/+3b0v+jSBr/pk0h/717Wv/Wrpr//Pn4/////+b///+i//////7z7f/02Mj/wn5b//vl2P+uWS7/vXhU//v49//48u//1q6a/717Wv+oUSb/tWxH//jz8P/////K////V///////+/j//ure/8aFZP/fs5v/oEAQ/9q1o/+zaEL/1ayX//718P/+9/P/+PHu//jz8P//////////h////wr////O///////38v/YpYr/tGQ7/6ZLHf/06eX/s2dB/549Df/x49z//vDn//7x6f//////////8////yoAAAAA////R/////v/////7dXI/5kzAP+7cUv//vHp/+vYzv+bNwX/vHlY//38/P///////////////30AAAAAAAAAAAAAAAD///9n////+/z5+P++e1n/3LGc//7w5//++PT/0KKL/8OIa//9/Pv//////////5X///8GAAAAAAAAAAAAAAAAAAAAAP///0n////K///////////////////////////+/v7/////5v///2z///8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Cv///1f///+g////xP///8n///+r////bP///xoAAAAAAAAAAAAAAAAAAAAA+B////AH///AA///wAH//4AB//+AAP//AAD//wAA//8AAP//AAD//4AA//+AAf//wAP//+AD///wD////D///w==","_urls":[{"template":"http://www.answers.com/main/ntquery","rels":[],"params":[{"name":"s","value":"{searchTerms}"},{"name":"gwp","value":"13"}]},{"template":"http://www.answers.com/main/startswith?output=json&client=firefox&s={searchTerms}","rels":[],"type":"application/x-suggestions+json","params":[]}],"filePath":"/usr/lib/firefox-addons/searchplugins/en-US/answers.xml","_installLocation":3,"queryCharset":"UTF-8"}]}}} \ No newline at end of file diff --git a/src/test/profile/selenium/firefoxprofile/search.sqlite b/src/test/profile/selenium/firefoxprofile/search.sqlite deleted file mode 100644 index d0a8616aea17941990a5d6872e8d996a0c2f1515..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmWFz^vNtqRY=P(%1ta$FlJz3U}R))P*7lCU|<AdCLo3Z5FdnL0GSOFL#G)TbRS9b z0!0~_YZ-uO6pV(zXb8YUppk)*U0hk2vC+LGF)1fCH7`9gFEu_Tu_O_R$>bd5>KNjx z5aQ_M<Enrpp`ekOqTuNl;_B`iq!19~>FXF2so?DzsRLC6lno9E^7M1pQOHZoO@(vH Z5_3vnJWWvE1ZMhCFd71*Aus|%0007aFz5gP diff --git a/src/test/profile/selenium/firefoxprofile/secmod.db b/src/test/profile/selenium/firefoxprofile/secmod.db deleted file mode 100644 index a2fbcf804aab7efab2130286863e762f59beb00b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI&&x+GP90%~RE6W}VdhsSQ;2{cbvlYQpkY$Ud)UJW_1*Vf<+M!7%OeSkv@G%6B zK9ffeUi7dpAv$Tg)Y4UNi!9%PA<6vt&2K(UP91jmKrqHyjNSdr*nM})+Kk<Cm%6f} z&5i3{Hyo_5>#k<dhy49F*H)K$OkHoh95wme__|mS0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bcLzX-J0_j{M^ukB0suRjU|AOHafKmY;|fB*y_0D)T} zaL9P;%g#aJq1#vNYSZ}eJc{@rw`6jW@^E+-@yFdRAL+PC$sKI|D0QBwX{=1(`7@o7 zUkGcIocq;k=Fg@bnd+QM|LvR8@$t*f^UmTp8lUzD=Y794(zjGvzX{=&lv1v$%uke| zL@x@X6P1$3B^evKCbbAWkI!kjeJDw0Iu5+%+KDF~Pf{^016^2^sTD<qki@GZ7M9jY zdYgx{ouJKt;qRfFCgp-(O&RMs<vl8;Q7*d9>mHtoyh?<$l_4|e1>Q)nRGNy8HdBwM zYGQ<0?#v0J(H8W~EDNi7MCL+CD&1b!4f`wgDJRFu_a?-X{lSq=>^ot|#g&y&cFB8G z$G-|6rP}^0r>POe%q_T0EuLIEFEr}H;c|!P@_#)DqrG8&%7;Ixhd*s*?Qf&*<lPr1 zn@w*rdRDK*MIQ6|Csc`&_3GO+GnI!?aMGN^|8(#waPRV?>%P^$z1cs0qCfxw5P$## UAOHafKmY;|fB*y_aN7lb0bC6IA^-pY diff --git a/src/test/profile/selenium/firefoxprofile/sessionstore.js b/src/test/profile/selenium/firefoxprofile/sessionstore.js deleted file mode 100644 index 3ea3703b7ac..00000000000 --- a/src/test/profile/selenium/firefoxprofile/sessionstore.js +++ /dev/null @@ -1 +0,0 @@ -({"windows":[{"tabs":[{"entries":[{"url":"about:home","title":"Welcome to Ubuntu 10.10!","ID":0,"owner_b64":"NhAra3tiRRqhyKDUVsktxQAAAAAAAAAAwAAAAAAAAEYAAQAAAAAAAS8nfAAOr03buTZBMmukiq4HoizADOUR05MxABBLoP1AAAAAAAVhYm91dAAAAARob21l4NodcC97EdOM0ABgsPwUoweiLMAM5RHTkzEAEEug/UAAAAAADm1vei1zYWZlLWFib3V0AAAABGhvbWUAAAA=","scroll":"0,0"}],"index":1,"attributes":{},"_formDataSaved":true}],"selected":1,"_closedTabs":[],"_hosts":{},"width":820,"height":956,"screenX":0,"screenY":40,"sizemode":"normal"}],"selectedWindow":1,"_closedWindows":[],"session":{"state":"stopped"}}) \ No newline at end of file diff --git a/src/test/profile/selenium/firefoxprofile/urlclassifier3.sqlite b/src/test/profile/selenium/firefoxprofile/urlclassifier3.sqlite deleted file mode 100644 index c1440d8ac150e62c351cf3ae18135c5ce383074a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI*%}W$v90%~{*>!g;Tqp5m654ncIylfGp<XhmbsbV#HMd1HqG5DKoZ1)J8A*~3 z>#0k}PIeIgf}jo^qPi4F9txpTCkyJ-MM02)p4r{m+116XxO^X&;hEp_%>16`^UP)T z_0D9%v<)_&%V#v3^^tRgQgVYaLP$H`n)&7yfmf(|P_8?%<4QY;?sSKE525865#z0! ztrMYVp-9UIeux4A2tWV=5P$##AOHafoFah&6$B{~p@lJ9n@t;;++(#^vAkMyJgLM| z3QNU?5(@L;tjE;Z=y*!GsU+F$<mgx|Im2!#GnX05Y8iv2l<5?&Yr3w^Ei7dpT5iNz znyrq=YA`4bgz1Wz)s1E6`n-cx>Y>)egz`v6$A^{a;z$nnWE10+cuz5_YU=WXfFKQq zY2i%G)l@#Ra+m7F!TL#RJJ;l?%+SeIxZWg4;V@mDtbjU$bf*<Kg6Xs#L#gL7nwe!o ziHRYOxv1rBQ%kG5W@~P2E|*zM8@5p!bj101+y&z27ROT?svf!9Q(pE9QcR|W_KMbA zTC*&3-Zb)uSH){-I>P3)RiEX`d9B_$E&Bv1&NH{w%Upu+ZV2xJ{^L?tpH?S#saY;u zrGg~ObhWp#YTosoweyaAM^?~lJCSvioo92OxIx6Pe1`%72tWV=5P$##AOHafKmY;| zfWQd}M7spiK@yY>Z%oDqKYbtAZoB_t{pI_uvAbW^p6>+1n-~7B?7mY*_Ah>ZMSaoE zs_sAJr^&VLkKg*I?mc<kv)*@pD!=>tUu-0C>CM~e$lgy%&+=LM#6Lvb=Q|V#KmY;| zfB*y_009U<00Izz00bI9pxNJ1d>Nt3t#p>2|M!S^AnrB51Th5&KmY;|fB*y_009U< z00Izz00hbc0Y9a*tGMrUKL5|Z^p64o2tWV=5P$##AOHafKmY;|fItHaIPd@C`M-e| z7*m4)1Rwwb2tWV=5P$##AOHafZ~;93<2HZ*1Rwwb2tWV=5P$##AOHafG`>LT_y4zu zxF!B-{MllL5P$##AOHafKmY;|fB*y_0D;pa&|i13-84Y@#E@-Rb~K}<A8C0bYMIU- TJYJD}0n%G;T3j%#1-Icp&~}%f diff --git a/src/test/profile/selenium/firefoxprofile/webappsstore.sqlite b/src/test/profile/selenium/firefoxprofile/webappsstore.sqlite deleted file mode 100644 index b982b444ff32431b65dfc0b216e37cebfc96c75f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3072 zcmWFz^vNtqRY=P(%1ta$FlJz3U}R))P*7lCU|<4bW*~+E5T6moL1QBcqcE8mbRS9b z0)?2Eg&3G?fy5{n4S_)&0+~$g;@awrjl7w8DXA63$@vAT@!6@B@nCLwYEoiBL2+?O zeo?9svvZKEV~DFlsGnzGsH=jfpNngR0-6Q|e?J8jO&VYYItoA|H5(Zi*~Qg?cG;IC zCgr4}s6*i}L2U|gbn<aUHBSLzphAdiL<rbaD61?nr!*DHE>2A@ElLGCFvQi}HAqJx qzdSFs2rQ=w%A3GUKMF=eU^E0qU<h!5{5+cfM_|m4dU-Si7#IM*FjqDJ diff --git a/src/test/profile/selenium/firefoxprofile/xpti.dat b/src/test/profile/selenium/firefoxprofile/xpti.dat deleted file mode 100644 index fcf0b9ae523..00000000000 --- a/src/test/profile/selenium/firefoxprofile/xpti.dat +++ /dev/null @@ -1,1442 +0,0 @@ -# Generated file. ** DO NOT EDIT! ** - -[Header,2] -0,Version,2,0 -1,AppDir,/usr/lib/firefox-3.6.16 - -[Directories,3] -0,/usr/lib/firefox-3.6.16/components -1,/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/firebug@software.joehewitt.com/components -2,/usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/ubufox@ubuntu.com/components - -[Files,1] -0,browser.xpt,0,364841,1300895268000 - -[ArchiveItems,0] - -[Interfaces,1425] -0,nsIDOMStyleSheet,{a6cf9080-15b3-11d2-932e-00805f8add32},0,-1,1 -1,nsIAddonSearchResultsCallback,{a6f70917-dd30-4eb6-8b3d-453204f96f33},0,-1,1 -2,inIDOMView,{fbb67442-27a3-483c-8eb2-29c3eed7514c},0,-1,1 -3,txIXPathObject,{67706346-dece-4c9b-9fc2-57cf19071014},0,-1,1 -4,nsIUnicharStreamListener,{4a7e9b62-fef8-400d-9865-d6820f630b4c},0,-1,1 -5,nsIContentSniffer,{a5772d1b-fc63-495e-a169-96e8d3311af0},0,-1,1 -6,extIPreferenceBranch,{ce697d40-aa5a-11db-abbd-0800200c9a66},0,-1,1 -7,nsIDOMMediaList,{9b0c2ed7-111c-4824-adf9-ef0da6dad371},0,-1,1 -8,nsISHContainer,{65281ba2-988a-11d3-bdc7-0050040a9b44},0,-1,1 -9,nsITimer,{193fc37a-8aa4-4d29-aa57-1acd87c26b66},0,-1,1 -10,nsIBrowserSearchService,{8307b8f2-08ea-45b8-96bf-b1dc7688fe3b},0,-1,1 -11,nsIDOMHTMLAudioElement,{5ecd8913-a738-41be-8597-7f3a4ffba017},0,-1,1 -12,nsIDOMNSDataTransfer,{990758e9-fd38-4444-a1e8-395195802bda},0,-1,1 -13,nsIThreadPool,{d628159b-1a03-4985-aa77-43122eb23bfc},0,-1,1 -14,nsIScrollBoxObject,{56e2ada8-4631-11d4-ba11-001083023c1e},0,-1,1 -15,nsICachingChannel,{830d4bcb-3e46-4011-9bda-51a5d1af891f},0,-1,1 -16,nsIDNSService,{c1a56a45-8fa3-44e6-9f01-38c91c858cf9},0,-1,1 -17,nsIDOMCSSUnknownRule,{a6cf90d0-15b3-11d2-932e-00805f8add32},0,-1,1 -18,nsIDragDropHandler,{4f418f58-f834-4736-a755-e0395bedca9d},0,-1,1 -19,nsIDOMSVGAnimatedInteger,{7b196db6-955e-4a9f-8f42-645ebc2ce938},0,-1,1 -20,nsIJARURI,{b0922a89-f87b-4cb5-8612-305a285fcca7},0,-1,1 -21,nsITableEditor,{4805e684-49b9-11d3-9ce4-ed60bd6cb5bc},0,-1,1 -22,nsIZipReader,{5cce7f53-23b3-47f8-be05-122c0ba703fd},0,-1,1 -23,nsIDOMStorageManager,{c8e54beb-48f3-4538-a0ce-d6229f4d8f45},0,-1,1 -24,nsIPropertyBag2,{625cfd1e-da1e-4417-9ee9-dbc8e0b3fd79},0,-1,1 -25,nsILocalFile,{aa610f20-a889-11d3-8c81-000064657374},0,-1,1 -26,nsIURIFixup,{773081ac-9f81-4bdb-9e7a-5e87b4361f09},0,-1,1 -27,nsIDOMStorageItem,{0cc37c78-4c5f-48e1-adfc-7480b8fe9dc4},0,-1,1 -28,nsISupportsPRInt16,{e30d94b0-4a1c-11d3-9890-006008962422},0,-1,1 -29,nsIStorageStream,{604ad9d0-753e-11d3-90ca-34278643278f},0,-1,1 -30,nsIMemory,{59e7e77a-38e4-11d4-8cf5-0060b0fc14a3},0,-1,1 -31,nsITreeSelection,{ab6fe746-300b-4ab4-abb9-1c0e3977874c},0,-1,1 -32,nsIDownloadObserver,{44b3153e-a54e-4077-a527-b0325e40924e},0,-1,1 -33,nsIUnicharStreamLoaderObserver,{6bb3e55b-69c0-4fc9-87e5-bed780d997ce},0,-1,1 -34,nsIFile,{c8c0a080-0868-11d3-915f-d9d889d48e3c},0,-1,1 -35,nsIDocumentLoader,{bbe961ee-59e9-42bb-be50-0331979bb79f},0,-1,1 -36,nsIDOMHTMLTableCellElement,{a6cf90b7-15b3-11d2-932e-00805f8add32},0,-1,1 -37,nsIException,{f3a8d3b4-c424-4edc-8bf6-8974c983ba78},0,-1,1 -38,nsIContentPrefObserver,{746c7a02-f6c1-4869-b434-7c8b86e60e61},0,-1,1 -39,nsICommandParams,{83f892cf-7ed3-490e-967a-62640f3158e1},0,-1,1 -40,nsIUrlClassifierDBService,{7aae3f3a-527d-488b-a448-45dca6db0e80},0,-1,1 -41,nsIRDFDataSource,{0f78da58-8321-11d2-8eac-00805f29f370},0,-1,1 -42,nsIPrefLocalizedString,{ae419e24-1dd1-11b2-b39a-d3e5e7073802},0,-1,1 -43,nsIDOMNotifyPaintEvent,{792e5779-7c39-4817-91a7-fdb3fba6428f},0,-1,1 -44,nsIDOMSVGFEMergeElement,{b860512c-2547-4d1f-bb43-b57b54d39014},0,-1,1 -45,nsIDOMCRMFObject,{16da46c0-208d-11d4-8a7c-006008c844c3},0,-1,1 -46,nsIInterfaceInfoManager,{8b161900-be2b-11d2-9831-006008962422},0,-1,0 -47,nsITextServicesFilter,{5bec321f-59ac-413a-a4ad-8a8d7c50a0d0},0,-1,1 -48,nsIJAR,{04501db2-0409-11d3-bcf8-00805f0e1353},0,-1,1 -49,nsIClientAuthUserDecision,{95c4373e-bdd4-4a63-b431-f5b000367721},0,-1,1 -50,nsILoginManagerPrompter,{68b3cb59-51b8-4c57-bd7f-b2ce955a593d},0,-1,1 -51,nsISearchContext,{31aba0f0-2d93-11d3-8069-00600811a9c3},0,-1,1 -52,nsIDirectoryServiceProvider,{bbf8cab0-d43a-11d3-8cc2-00609792278c},0,-1,1 -53,nsIX509Cert,{f0980f60-ee3d-11d4-998b-00b0d02354a0},0,-1,1 -54,nsISecurityEventSink,{a71aee68-dd38-4736-bd79-035fea1a1ec6},0,-1,1 -55,nsIRDFNode,{0f78da50-8321-11d2-8eac-00805f29f370},0,-1,1 -56,nsIDOMSVGDescElement,{56f539b7-0b3d-4bac-b60d-9efe220216ea},0,-1,1 -57,nsIDOMSVGFEFuncBElement,{8b139fe7-5d21-4af3-beda-414aa089b3fb},0,-1,1 -58,nsIProxyInfo,{3fe9308b-1608-4fa0-933c-c5ec2c6175fd},0,-1,1 -59,nsIDOMHTMLLinkElement,{a6cf9088-15b3-11d2-932e-00805f8add32},0,-1,1 -60,nsISupportsPRUint32,{e01dc470-4a1c-11d3-9890-006008962422},0,-1,1 -61,nsIDOMXMLDocument,{8816d003-e7c8-4065-8827-829b8d07b6e0},0,-1,1 -62,nsIDOMSVGImageElement,{43ae4efe-2610-4cce-8242-279e556a78fa},0,-1,1 -63,nsIUrlClassifierDBServiceWorker,{2af84c09-269e-4fc2-b28f-af56717db118},0,-1,1 -64,nsIXSLTProcessorObsolete,{3fbff728-2d20-11d3-aef3-00108300ff91},0,-1,1 -65,nsIWebBrowserSetup,{f15398a0-8018-11d3-af70-00a024ffc08c},0,-1,1 -66,nsIDOMHTMLParagraphElement,{a6cf90a1-15b3-11d2-932e-00805f8add32},0,-1,1 -67,nsIAssociatedContentSecurity,{8db92dde-799f-4d33-80f7-459cac800dc9},0,-1,1 -68,nsIRunnable,{4a2abaf0-6886-11d3-9382-00104ba0fd40},0,-1,1 -69,nsIDirectoryService,{57a66a60-d43a-11d3-8cc2-00609792278c},0,-1,1 -70,extIExtension,{10cee02c-f6e0-4d61-ab27-c16572b18c46},0,-1,1 -71,nsIDNSListener,{41466a9f-f027-487d-a96c-af39e629b8d2},0,-1,1 -72,nsIPK11TokenDB,{4ee28c82-1dd2-11b2-aabf-bb4017abe395},0,-1,1 -73,nsIDOMSVGAnimatedNumberList,{93ebb030-f82d-4f8e-b133-d1b5abb73cf3},0,-1,1 -74,nsIAccessibleText,{0f4633b1-550c-4b50-8c04-0eb1005eef2f},0,-1,1 -75,nsICommandLineValidator,{5ecaa593-7660-4a3a-957a-92d5770671c7},0,-1,1 -76,nsICommandLineHandler,{d4b123df-51ee-48b1-a663-002180e60d3b},0,-1,1 -77,nsICookieManager,{aaab6710-0f2c-11d5-a53b-0010a401eb10},0,-1,1 -78,mozIStorageService,{fe8e95cb-b377-4c8d-bccb-d9198c67542b},0,-1,1 -79,nsPIDNSService,{a26c5b45-7707-4412-bbc1-2462b890848d},0,-1,1 -80,nsIMIMEHeaderParam,{ddbbdfb8-a1c0-4dd5-a31b-5d2a7a3bb6ec},0,-1,1 -81,xpcIJSWeakReference,{5b776cd4-952b-45a2-b363-84e99e8fe608},0,-1,1 -82,mozIPersonalDictionary,{7ef52eaf-b7e1-462b-87e2-5d1dbaca9048},0,-1,1 -83,nsIInstallLocation,{32a74707-ec7c-af19-f4d8-d0cd8cb6a948},0,-1,1 -84,nsISerializable,{91cca981-c26d-44a8-bebe-d9ed4891503a},0,-1,1 -85,nsICurrentCharsetListener,{cf9428c1-df50-11d3-9d0c-0050040007b2},0,-1,1 -86,nsIStringEnumerator,{50d3ef6c-9380-4f06-9fb2-95488f7d141c},0,-1,1 -87,nsICipherInfoService,{766d47cb-6d8c-4e71-b6b7-336917629a69},0,-1,1 -88,nsIDOMSerializer,{9fd4ba15-e67c-4c98-b52c-7715f62c9196},0,-1,1 -89,nsICacheMetaDataVisitor,{22f9a49c-3cf8-4c23-8006-54efb11ac562},0,-1,1 -90,nsIDownloadManagerUI,{ca7663d5-69e3-4c4a-b754-f462bd36b05f},0,-1,1 -91,nsIPKCS11Slot,{c2d4f296-ee60-11d4-998b-00b0d02354a0},0,-1,1 -92,nsIGeneratingKeypairInfoDialogs,{11bf5cdc-1dd2-11b2-ba6a-c76afb326fa1},0,-1,1 -93,jsdIEphemeral,{46f1e23e-1dd2-11b2-9ceb-8285f2e95e69},0,-1,1 -94,nsIWorker,{daf945c3-8d29-4724-8939-dd383f7d27a7},0,-1,1 -95,nsIPrompt,{a63f70c0-148b-11d3-9333-00104ba0fd40},0,-1,1 -96,nsIAuthPromptAdapterFactory,{60e46383-bb9a-4860-8962-80d9c5c05ddc},0,-1,1 -97,nsIDOMNSHTMLScriptElement,{5b2065d7-7888-4529-8a29-e58390a40bd2},0,-1,1 -98,nsIUrlClassifierCallback,{4ca27b6b-a674-4b3d-ab30-d21e2da2dffb},0,-1,1 -99,nsIApplicationCacheChannel,{9acfd21c-9c07-459f-8dae-ed2ffba23ddc},0,-1,1 -100,nsIXULBuilderListener,{ac46be8f-c863-4c23-84a2-d0fcc8dfa9f4},0,-1,1 -101,nsIDownloader,{fafe41a9-a531-4d6d-89bc-588a6522fb4e},0,-1,1 -102,nsICacheVisitor,{f8c08c4b-d778-49d1-a59b-866fdc500d95},0,-1,1 -103,nsIOutputStream,{0d0acd2a-61b4-11d4-9877-00c04fa0cf4a},0,-1,1 -104,nsIDOMCounter,{31adb439-0055-402d-9b1d-d5ca94f3f55b},0,-1,1 -105,nsIHTTPHeaderListener,{ea51e0b8-871c-4b85-92da-6f400394c5ec},0,-1,1 -106,jsdIObject,{a735a94c-9d41-4997-8fcb-cfa8b649a5b7},0,-1,1 -107,nsIDOMSVGTransformList,{cee0a9d4-8554-4bf6-bf9b-7d0cebb4269d},0,-1,1 -108,nsISecureBrowserUI,{081e31e0-a144-11d3-8c7c-00609792278c},0,-1,1 -109,nsIAppStartup2,{3012668f-44b6-49b1-89fb-761a912a78c1},0,-1,1 -110,nsICertPickDialogs,{51d59b08-1dd2-11b2-ad4a-a51b92f8a184},0,-1,1 -111,nsIToolkit,{18032bd0-b265-11d1-aa2a-000000000000},0,-1,0 -112,nsISupportsFloat,{abeaa390-4ac0-11d3-baea-00805f8a5dd7},0,-1,1 -113,nsIDOMHTMLSelectElement,{a6cf9090-15b3-11d2-932e-00805f8add32},0,-1,1 -114,nsIAutoCompleteInput,{f5eddd39-f8e0-43b7-bc3d-03623f595e52},0,-1,1 -115,nsIContextMenuInfo,{2f977d56-5485-11d4-87e2-0010a4e75ef2},0,-1,1 -116,nsIMultiPartChannel,{ba78db7b-b88c-4b76-baf9-3c2296a585ae},0,-1,1 -117,nsIUnicharLineInputStream,{67f42475-ba80-40f8-ac0b-649c89230184},0,-1,1 -118,nsIDOMGeoPositionAddress,{0df49c5c-9845-42f9-a76c-62e09c110986},0,-1,1 -119,nsIINIParserWriter,{712dc5da-8d09-45d0-ba2e-de27eb384c4c},0,-1,1 -120,nsITokenDialogs,{a1cbc159-468c-495d-8068-61dd538cbcca},0,-1,1 -121,nsILoginManager,{30534ff7-fb95-45c5-8336-5448638f2aa1},0,-1,1 -122,nsIDOMDocumentCSS,{39f76c23-45b2-428a-9240-a981e5abf148},0,-1,1 -123,nsIScriptableRegion,{4d179656-a5bd-42a6-a937-c81f820dcf2f},0,-1,1 -124,nsITransportSecurityInfo,{0d0a6b62-d4a9-402e-a197-6bc6e358fec9},0,-1,1 -125,nsPIPromptService,{c60a1955-6cb3-4827-8ef8-4f5c668af0b3},0,-1,0 -126,nsITextToSubURI,{8b042e24-6f87-11d3-b3c8-00805f8a6670},0,-1,1 -127,nsIAccessibleTableCell,{654e296d-fae6-452b-987d-746b20b9514b},0,-1,1 -128,nsITokenPasswordDialogs,{be26b580-1dd1-11b2-9946-c598d0d07727},0,-1,1 -129,nsIDataSignatureVerifier,{0a84b3d5-6ba9-432d-89da-4fbd0b0f2aec},0,-1,1 -130,jsdIExecutionHook,{3a722496-9d78-4f0a-a797-293d9e8cb8d2},0,-1,1 -131,nsINavBookmarkObserver,{1f7e9032-b2c0-4561-b35b-94ba3f8344e2},0,-1,1 -132,nsIDOMPopupBlockedEvent,{05be571f-c3ea-4959-a340-c57b1591ae4b},0,-1,1 -133,nsIFeedWriter,{67003393-018c-4e96-af10-c6c51a049fad},0,-1,1 -134,nsIDOMSVGFECompositeElement,{6ff3c539-1a3b-4a3f-8acd-354d349eb7fc},0,-1,1 -135,nsIXPIProgressDialog,{ce8f744e-d5a5-41b3-911f-0fee3008b64e},0,-1,1 -136,nsISupportsChar,{e2b05e40-4a1c-11d3-9890-006008962422},0,-1,1 -137,nsISelectionPrivate,{98552206-ad7a-4d2d-8ce3-b6fa2389298b},0,-1,1 -138,nsIXPCConstructor,{c814ca20-e0dc-11d3-8f5f-0010a4e73d9a},0,-1,1 -139,nsIDOMSVGZoomEvent,{339a8c7a-552e-4cbc-8d96-8370a3939358},0,-1,1 -140,nsICancelable,{d94ac0a0-bb18-46b8-844e-84159064b0bd},0,-1,1 -141,nsIDOMHTMLCanvasElement,{d87394af-d31a-484e-8b7c-75381045384d},0,-1,1 -142,nsIJARChannel,{6e6cc56d-51eb-4299-a795-dcfd1229ab3d},0,-1,1 -143,nsIFeedProgressListener,{ebfd5de5-713c-40c0-ad7c-f095117fa580},0,-1,1 -144,nsIDOMLSSerializerFilter,{b9b6ec85-f69f-4a5a-a96a-8a7a8f07e2b4},0,-1,1 -145,nsIBinaryOutputStream,{204ee610-8765-11d3-90cf-0040056a906e},0,-1,1 -146,nsIDOMDOMStringList,{0bbae65c-1dde-11d9-8c46-000a95dc234c},0,-1,1 -147,nsIAccessibleHyperText,{d56bd454-8ff3-4edc-b266-baeada00267b},0,-1,1 -148,nsIExceptionService,{35a88f54-f267-4414-92a7-191f6454ab52},0,-1,1 -149,nsIDOMSVGPathSegLinetoVerticalAbs,{fd5ffb7b-7279-4c09-abfd-b733dc872e80},0,-1,1 -150,nsIAutoCompleteResult,{d2fcba9a-3f5c-40fc-a9fc-4adc87dc61ef},0,-1,1 -151,nsIDOMWindowUtils_1_9_2_5,{915abb48-66d4-4135-a0d8-153fb87b99e6},0,-1,1 -152,nsIThreadInternal,{f89b5063-b06d-42f8-bf23-4dfcf2d80d6a},0,-1,1 -153,nsIDOMCSSMediaRule,{a6cf90bc-15b3-11d2-932e-00805f8add32},0,-1,1 -154,imgIDecoder,{9eebf43a-1dd1-11b2-953e-f1782f4cbad3},0,-1,1 -155,nsIRDFInMemoryDataSource,{17c4e0aa-1dd2-11b2-8029-bf6f668de500},0,-1,1 -156,nsIFeed,{3b8aae33-80e2-4efa-99c8-a6c5b99f76ea},0,-1,1 -157,nsIAccessibleProvider,{3f7f9194-c625-4a85-8148-6d92d34897fa},0,-1,1 -158,nsIDOMHTMLPreElement,{a6cf90a4-15b3-11d2-932e-00805f8add32},0,-1,1 -159,nsIDOMMouseScrollEvent,{ba8d1a7e-b475-4542-8d32-01e7ea7b8091},0,-1,1 -160,nsIDOMSVGUseElement,{d49a3ac7-e779-46c8-ae92-214420aa1b71},0,-1,1 -161,nsIAccessibleSelectable,{34d268d6-1dd2-11b2-9d63-83a5e0ada290},0,-1,1 -162,nsPICommandUpdater,{b135f602-0bfe-11d5-a73c-f0e420e8293c},0,-1,1 -163,nsIDOMDocumentType,{a6cf9077-15b3-11d2-932e-00805f8add32},0,-1,1 -164,nsIExternalProtocolService,{70f93b7a-3ec6-4bcb-b093-92d9984c9f83},0,-1,1 -165,nsIPrivateBrowsingService,{49d6f133-80c0-48c7-876d-0b70bbfd0289},0,-1,1 -166,nsIUTF8ConverterService,{249f52a3-2599-4b00-ba40-0481364831a2},0,-1,1 -167,nsIDOMXULLabelElement,{c987629e-6370-45f5-86ec-aa765fa861cd},0,-1,1 -168,nsIDOMDOMException,{a6cf910a-15b3-11d2-932e-00805f8add32},0,-1,1 -169,mozIStoragePendingStatement,{00da7d20-3768-4398-bedc-e310c324b3f0},0,-1,1 -170,nsIStreamConverter,{0b6e2c69-5cf5-48b0-9dfd-c95950e2cc7b},0,-1,1 -171,nsIContentViewerContainer,{ea2ce7a0-5c3d-11d4-90c2-0050041caf44},0,-1,1 -172,nsIAppStartup,{6799abed-4721-4f51-9304-d1a2ea1df5d5},0,-1,1 -173,nsICookie2,{05c420e5-03d0-4c7b-a605-df7ebe5ca326},0,-1,1 -174,nsIPKCS11ModuleDB,{ff9fbcd7-9517-4334-b97a-ceed78909974},0,-1,1 -175,nsIBrowserInstance,{8af0fa40-598d-11d3-806a-00600811a9c3},0,-1,1 -176,nsIOCSPResponder,{96b2f5ae-4334-11d5-ba27-00108303b117},0,-1,1 -177,nsIAddonUpdateCheckListener,{c946119f-9e7c-41aa-a794-803148045350},0,-1,1 -178,nsIRandomGenerator,{2362d97a-747a-4576-8863-697667309209},0,-1,1 -179,nsIAccessibleTextChangeEvent,{50a1e151-8e5f-4bcc-aaaf-a4bed1190e93},0,-1,1 -180,nsIDOMCDATASection,{a6cf9071-15b3-11d2-932e-00805f8add32},0,-1,1 -181,nsIXPCScriptable,{5d309b93-e9b4-4374-bcd5-44245c83408f},0,-1,0 -182,nsIProtocolProxyFilter,{f424abd3-32b4-456c-9f45-b7e3376cb0d1},0,-1,1 -183,nsIDOMXULContainerItemElement,{4650e55f-4777-4271-8b62-9603a7dd4614},0,-1,1 -184,nsISSLSocketControl,{a092097c-8386-4f1b-97b1-90eb70008c2d},0,-1,1 -185,nsISSLErrorListener,{99f8d972-bae4-414c-b39b-47587d3ded68},0,-1,1 -186,nsIContentHandler,{49439df2-b3d2-441c-bf62-866bdaf56fd2},0,-1,1 -187,nsIPKIParamBlock,{b6fe3d78-1dd1-11b2-9058-ced9016984c8},0,-1,1 -188,nsICache,{ec1c0063-197d-44bb-84ba-7525d50fc937},0,-1,1 -189,nsIBufEntropyCollector,{485b87a8-5dd7-4b8d-8ea8-dee53201f899},0,-1,0 -190,nsIDOMFile,{0845e8ae-56bd-4f0e-962a-3b3e92638a0b},0,-1,1 -191,nsIHTMLEditor,{afc36593-5787-4420-93d9-b2c0ccbf0cad},0,-1,1 -192,nsIDOMSVGPathSegLinetoRel,{7933a81a-72c5-4489-ba64-5635f4c23063},0,-1,1 -193,jsdIStackFrame,{0633ca73-105e-4e8e-bcc5-13405d61754a},0,-1,1 -194,nsISHEntry,{09fecea6-5453-43ba-bf91-3ff32618f037},0,-1,1 -195,nsISHistoryInternal,{7ca0fd71-437c-48ad-985d-11ce9e2429b4},0,-1,1 -196,nsIGnomeVFSService,{dea20bf0-4e4d-48c5-b932-dc3e116dc64b},0,-1,1 -197,nsITreeContentView,{5ef62896-0c0a-41f1-bb3c-44a60f5dfdab},0,-1,1 -198,nsIDOMSVGPathSegLinetoHorizontalRel,{8693268c-5180-43fd-acc3-5b9c09f43386},0,-1,1 -199,nsIXPIDialogService,{8cdd8baa-1dd2-11b2-909a-f0178da5c5ff},0,-1,1 -200,nsIDOMGeoPositionCallback,{527e8b53-6f29-4b6a-8d04-5c1666a4c4c1},0,-1,1 -201,nsIAutoCompleteSimpleResult,{f9841787-ad26-49e6-a2dd-ba9020ee1c64},0,-1,1 -202,nsIFocusManager,{cd6040a8-243f-412a-8a16-0bf2aa1083b9},0,-1,1 -203,nsIAccessibleEditableText,{52837507-202d-4e72-a482-5f068a1fd720},0,-1,1 -204,nsIWorkerMessagePort,{ab3725b8-3fca-40cc-a42c-92fb154ef01d},0,-1,1 -205,nsIAboutModule,{9575693c-60d9-4332-b6b8-6c29289339cb},0,-1,1 -206,nsIDOMNotation,{a6cf907e-15b3-11d2-932e-00805f8add32},0,-1,1 -207,nsIProxyObjectManager,{ee8ce1e3-0319-4bd9-8f70-7258b21c7733},0,-1,1 -208,fuelIApplication,{fe74cf80-aa2d-11db-abbd-0800200c9a66},0,-1,1 -209,nsIObserver,{db242e01-e4d9-11d2-9dde-000064657374},0,-1,1 -210,nsIAuthInformation,{0d73639c-2a92-4518-9f92-28f71fea5f20},0,-1,1 -211,nsIProfileLock,{50e07b0a-f338-4da3-bcdb-f4bb0db94dbe},0,-1,1 -212,nsIAutoCompleteSimpleResultListener,{004efdc5-1989-4874-8a7a-345bf2fa33af},0,-1,1 -213,nsINavHistoryObserver,{14065711-8a91-4d96-ba32-59512f5401b6},0,-1,1 -214,nsIFileOutputStream,{e6f68040-c7ec-11d3-8cda-0060b0fc14a3},0,-1,1 -215,nsIFind,{75125d55-37ee-4575-b9b5-f33bfa68c2a1},0,-1,1 -216,nsIXTFPrivate,{13ef3d54-1dd1-4a5c-a8d5-a04a327fb9b6},0,-1,1 -217,nsIPlaintextEditor,{1480e196-0d5c-40cf-8563-ed8a33eabcf2},0,-1,1 -218,nsIDOMNSHTMLSelectElement,{a6cf9105-15b3-11d2-932e-00805f8add32},0,-1,1 -219,nsIDOMHTMLModElement,{a6cf90a9-15b3-11d2-932e-00805f8add32},0,-1,1 -220,nsIDOMFileInternal,{047ca6c4-52b3-46f1-8976-e198b724f72f},0,-1,1 -221,nsIPluginInputStream,{af160530-542a-11d2-8164-006008119d7a},0,-1,0 -222,nsICRLInfo,{c185d920-4a3e-11d5-ba27-00108303b117},0,-1,1 -223,nsIDOMCSSMozDocumentRule,{4eb9adac-afaf-4b8a-8640-7340863c1587},0,-1,1 -224,nsIAccessibleRelation,{f42a1589-70ab-4704-877f-4a9162bbe188},0,-1,1 -225,nsIDOMSVGEllipseElement,{5d1cd1e6-4a14-4056-acc0-2f78c1672898},0,-1,1 -226,jsdIContext,{3e5c934d-6863-4d81-96f5-76a3b962fc2b},0,-1,1 -227,nsIDOMDocumentTraversal,{13f236c0-47f8-11d5-b6a3-009027446e84},0,-1,1 -228,nsIFeedProcessor,{8a0b2908-21b0-45d7-b14d-30df0f92afc7},0,-1,1 -229,nsIXTFAttributeHandler,{72152f7f-7e8d-43fd-8477-3f29ae8d240d},0,-1,1 -230,nsISupportsWeakReference,{9188bc86-f92e-11d2-81ef-0060083a0bcf},0,-1,1 -231,nsIDOMSVGElement,{e0be7cbb-81c1-4663-8f95-109d96a60b6b},0,-1,1 -232,nsIDOM3DocumentEvent,{090ecc19-b7cb-4f47-ae47-ed68d4926249},0,-1,1 -233,nsIRDFRemoteDataSource,{1d297320-27f7-11d3-be01-000064657374},0,-1,1 -234,nsIDOMSVGPathSegLinetoHorizontalAbs,{4a54a4d2-edef-4e19-9600-2330311000f4},0,-1,1 -235,nsIAsyncInputStream,{a5f255ab-4801-4161-8816-277ac92f6ad1},0,-1,1 -236,nsIDOMText,{a6cf9082-15b3-11d2-932e-00805f8add32},0,-1,1 -237,nsIDOMRect,{71735f62-ac5c-4236-9a1f-5ffb280d531c},0,-1,1 -238,nsICRLManager,{486755db-627a-4678-a21b-f6a63bb9c56a},0,-1,1 -239,nsIHttpEventSink,{9475a6af-6352-4251-90f9-d65b1cd2ea15},0,-1,1 -240,nsIX509Cert3,{399004d8-b8c7-4eb9-8362-d99f4c0161fd},0,-1,1 -241,nsISearchEngine,{803e510b-4b27-4ba2-a16d-bb5fa953c166},0,-1,1 -242,nsIUrlListManagerCallback,{fa4caf12-d057-4e7e-81e9-ce066ceee90b},0,-1,1 -243,nsIDOMXPathNamespace,{75506f87-b504-11d5-a7f2-ca108ab8b6fc},0,-1,1 -244,nsIDOMHTMLHRElement,{a6cf90a8-15b3-11d2-932e-00805f8add32},0,-1,1 -245,fuelIBookmarkRoots,{c9a80870-eb3c-11dc-95ff-0800200c9a66},0,-1,1 -246,nsIXULTemplateRuleFilter,{819cd1ed-8010-42e1-a8b9-778b726a1ff3},0,-1,1 -247,nsIWebBrowserFocus,{9c5d3c58-1dd1-11b2-a1c9-f3699284657a},0,-1,1 -248,nsISAXErrorHandler,{e02b6693-6cca-11da-be43-001422106990},0,-1,1 -249,nsIHTMLObjectResizer,{8b396020-69d3-451f-80c1-1a96a7da25a9},0,-1,1 -250,nsIXMLContentBuilder,{e9c4cd4f-cd41-43d0-bf3b-48abb9cde90f},0,-1,1 -251,nsIInputStreamCallback,{d1f28e94-3a6e-4050-a5f5-2e81b1fc2a43},0,-1,1 -252,nsISupportsPRUint64,{e13567c0-4a1c-11d3-9890-006008962422},0,-1,1 -253,nsIClipboard,{38984945-8674-4d04-b786-5c0ca9434457},0,-1,1 -254,nsPIPlacesHistoryListenersNotifier,{b96adaff-e02c-48da-a379-8af5d10e09af},0,-1,1 -255,inIDOMUtils,{78fd16c2-bdfb-4b1d-8738-d536d0a8f430},0,-1,1 -256,nsIToolkitProfileService,{9b434f48-438c-4f85-89de-b7f321a45341},0,-1,1 -257,nsIRandomAccessIterator,{9bd6fdb0-1dd1-11b2-9101-d15375968230},0,-1,1 -258,nsITransactionListener,{58e330c4-7b48-11d2-98b9-00805f297d89},0,-1,1 -259,nsICookiePermission,{4b1a775d-f6d3-4389-be2e-9dfbaf2ab47b},0,-1,1 -260,nsIContentPolicy,{344f9cb0-9a17-44c5-ab96-ee707884266c},0,-1,1 -261,nsIWyciwygChannel,{89b0674a-9e2f-4124-9b59-481444be841d},0,-1,1 -262,nsIHelperAppLauncher,{d9a19faf-497b-408c-b995-777d956b72c0},0,-1,1 -263,nsIDOMCharacterData,{a6cf9072-15b3-11d2-932e-00805f8add32},0,-1,1 -264,nsITransaction,{58e330c1-7b48-11d2-98b9-00805f297d89},0,-1,1 -265,nsIRDFContainerUtils,{d4214e91-fb94-11d2-bdd8-00104bde6048},0,-1,1 -266,nsIRelativeFilePref,{2f977d4e-5485-11d4-87e2-0010a4e75ef2},0,-1,1 -267,mozIStorageConnection,{ac3c486c-69a1-4cbe-8f25-2ad20880eab3},0,-1,1 -268,nsIDOMClientRect,{b2f824c4-d9d3-499b-8d3b-45c8245497c6},0,-1,1 -269,nsINavHistoryQueryResultNode,{ea17745a-1852-4155-a98f-d1dd1763b3df},0,-1,1 -270,nsIDOMDocumentStyle,{3d9f4973-dd2e-48f5-b5f7-2634e09eadd9},0,-1,1 -271,nsIURIContentListener,{94928ab3-8b63-11d3-989d-001083010e9b},0,-1,1 -272,nsIRDFObserver,{3cc75360-484a-11d2-bc16-00805f912fe7},0,-1,1 -273,nsITransportEventSink,{eda4f520-67f7-484b-a691-8c3226a5b0a6},0,-1,1 -274,nsIDOMPlugin,{ff69a292-c74d-4ef5-9d0f-86112fff2d5b},0,-1,1 -275,nsIWebBrowser,{69e5df00-7b8b-11d3-af61-00a024ffc08c},0,-1,1 -276,nsIRDFXMLSource,{4da56f10-99fe-11d2-8ebb-00805f29f370},0,-1,1 -277,nsIDOMElement,{a6cf9078-15b3-11d2-932e-00805f8add32},0,-1,1 -278,nsICookieManager2,{d1e9e50f-b78b-4e3b-a474-f3cbca59b013},0,-1,1 -279,nsIDOMSVGTextElement,{6d43b1b4-efb6-426d-9e65-4420c3e24688},0,-1,1 -280,jsdIFilter,{0c9189d9-4287-47a4-bca6-6ed65aaf737f},0,-1,1 -281,nsIDOMCSSStyleRule,{a6cf90bf-15b3-11d2-932e-00805f8add32},0,-1,1 -282,nsIDOMClientInformation,{f8bbf8c3-c47b-465a-a221-22824449f689},0,-1,1 -283,nsIContentViewer,{08665a60-b398-11de-8a39-0800200c9a66},0,-1,1 -284,nsIDOMJSWindow,{14efb76c-5bd6-449e-b36f-0cbd22981f20},0,-1,1 -285,nsIDOMSVGAnimatedLengthList,{bfa6e42b-bc9d-404d-8688-729fdbfff801},0,-1,1 -286,nsIStreamConverterService,{f2b1ab53-f0bd-4adb-9365-e59b1701a258},0,-1,1 -287,nsIFastLoadReadControl,{652ecec6-d40b-45b6-afef-641d6c63a35b},0,-1,1 -288,nsIWebBrowserChrome2,{2585a7b1-7b47-43c4-bf17-c6bf84e09b7b},0,-1,1 -289,nsIBidiKeyboard,{0d8f8f10-c92d-4a6a-b2bb-e1921f3f4dda},0,-1,1 -290,nsIXPConnectWrappedJS,{bed52030-bca6-11d2-ba79-00805f8a5dd7},0,-1,0 -291,nsIHTMLInlineTableEditor,{eda2e65c-a758-451f-9b05-77cb8de74ed2},0,-1,1 -292,nsIAutoCompleteController,{46a86173-0ab5-44b2-ab51-722cb3db1b60},0,-1,1 -293,nsIDOMSVGAnimatedPreserveAspectRatio,{afcd7cd4-d74d-492f-b3b1-d71bfa36874f},0,-1,1 -294,nsIPrefBranch,{56c35506-f14b-11d3-99d3-ddbfac2ccf65},0,-1,1 -295,nsIBrowserHistory,{b333c6dd-3dbe-4c0b-8062-92ed92b7e7c9},0,-1,1 -296,nsISelectionListener,{a6cf90e2-15b3-11d2-932e-00805f8add32},0,-1,1 -297,nsIWebHandlerApp,{7521a093-c498-45ce-b462-df7ba0d882f6},0,-1,1 -298,nsIMIMEInputStream,{dcbce63c-1dd1-11b2-b94d-91f6d49a3161},0,-1,1 -299,jsdIScriptHook,{cf7ecc3f-361b-44af-84a7-4b0d6cdca204},0,-1,1 -300,nsIWindowDataSource,{3722a5b9-5323-4ed0-bb1a-8299f27a4e89},0,-1,1 -301,nsIDOMHTMLByteRanges,{992c540c-4d81-42df-80a6-f71ede2b59d8},0,-1,1 -302,nsIStreamLoaderObserver,{359f7990-d4e9-11d3-a1a5-0050041caf44},0,-1,1 -303,nsIDOMHTMLElement,{a6cf9085-15b3-11d2-932e-00805f8add32},0,-1,1 -304,nsIXTFElementFactory,{27c10dca-2efc-416b-ae36-9794380a661e},0,-1,1 -305,nsIXPInstallManager,{83fdd52f-2d34-4e22-981d-cf3c4ae76faa},0,-1,1 -306,nsIDOMHTMLMediaElement,{505b523e-4a27-4151-b0eb-750b7258760e},0,-1,1 -307,nsIDOMFileReader,{5db0ce80-de44-40c0-a346-e28aac4aa978},0,-1,1 -308,fuelIBookmarkFolder,{9f42fe20-52de-4a55-8632-a459c7716aa0},0,-1,1 -309,nsIBrowserHandler,{8d3f5a9d-118d-4548-a137-cf7718679069},0,-1,1 -310,nsIGeolocationPrompt,{2300c895-1bee-4297-912c-a57082f3e936},0,-1,1 -311,nsIInputStreamTee,{44e8b2c8-1ecb-4a63-8b23-3e3500c34f32},0,-1,1 -312,nsIDOMNodeSelector,{7cebc153-168a-416c-ba5a-56a8c2ddb2ec},0,-1,1 -313,nsIAbstractWorker,{b90b7561-b5e2-4545-84b0-280dbaaa94ea},0,-1,1 -314,nsIWritableVariant,{5586a590-8c82-11d5-90f3-0010a4e73d9a},0,-1,1 -315,nsIFontEnumerator,{924d98d9-3518-4cb4-8708-c74fe8e3ec3c},0,-1,1 -316,nsIDOMNode,{a6cf907c-15b3-11d2-932e-00805f8add32},0,-1,1 -317,nsIDOMSVGPathSegCurvetoCubicSmoothAbs,{5fa8fea8-bdd1-4315-ac44-a39b3ff347b5},0,-1,1 -318,nsIDOMDOMConfiguration,{cfb5b821-9016-4a79-9d98-87b57c3ea0c7},0,-1,1 -319,nsIPKCS11Module,{8a44bdf9-d1a5-4734-bd5a-34ed7fe564c2},0,-1,1 -320,nsIFormatConverter,{948a0023-e3a7-11d2-96cf-0060b0fb9956},0,-1,1 -321,nsIChannel,{c63a055a-a676-4e71-bf3c-6cfa11082018},0,-1,1 -322,nsIDOMDocumentFragment,{a6cf9076-15b3-11d2-932e-00805f8add32},0,-1,1 -323,nsIStreamListenerTee_1_9_2,{18b1e3d7-8083-4b19-a077-82ceea6fd296},0,-1,1 -324,nsIDOMParser,{5677f36e-1842-4c6f-a39c-2e5576ab8b40},0,-1,1 -325,imgILoader,{d2f50c69-1064-4ce3-a92d-01dc5f5b4842},0,-1,1 -326,nsIDOMCSSPageRule,{a6cf90bd-15b3-11d2-932e-00805f8add32},0,-1,1 -327,nsIDOMSVGAnimatedTransformList,{fd54c8c4-2eb4-4849-8df6-79985c2491da},0,-1,1 -328,nsISliderListener,{e5b3074e-ee18-4538-83b9-2487d90a2a34},0,-1,1 -329,nsIJSID,{baedc96a-9cee-4b6b-9160-90d257b3c8ef},0,-1,1 -330,nsIBrowserGlue,{781df699-17dc-4237-b3d7-876ddb7085e3},0,-1,1 -331,nsIExternalProtocolHandler,{0e61f3b2-34d7-4c79-bfdc-4860bc7341b7},0,-1,1 -332,nsIXTFElement,{4f144387-796d-4baf-8641-5db45dba1808},0,-1,1 -333,nsIFilePicker,{d24ef0aa-d555-4117-84af-9cbbb7406909},0,-1,1 -334,nsIPropertyElement,{283ee646-1aef-11d4-98b3-00c04fa0ce9a},0,-1,1 -335,nsIDOMGeoPositionErrorCallback,{7d9b09d9-4843-43eb-a7a7-67f7dda6b3c4},0,-1,1 -336,nsIStandardURL,{babd6cca-ebe7-4329-967c-d6b9e33caa81},0,-1,1 -337,nsIRDFPurgeableDataSource,{951700f0-fed0-11d2-bdd9-00104bde6048},0,-1,1 -338,nsIExtendedExpatSink,{0c2dc80f-7aa4-467a-9454-b89dba0e0779},0,-1,1 -339,nsIWorkerMessageEvent,{508f2d49-e9a0-4fe8-bd33-321820173b4a},0,-1,1 -340,nsISeekableStream,{8429d350-1040-4661-8b71-f2a6ba455980},0,-1,1 -341,nsIHandlerService,{53f0ad17-ec62-46a1-adbc-efccc06babcd},0,-1,1 -342,nsIScriptSecurityManager,{f8e350b9-9f31-451a-8c8f-d10fea26b780},0,-1,1 -343,nsIWindowMediator,{0659cb81-faad-11d2-8e19-b206620a657c},0,-1,1 -344,nsIMicrosummary,{6867dc21-077f-4462-937d-cd8b7c680e0c},0,-1,1 -345,nsIDocumentLoaderFactory,{5e7d2967-5a07-444f-95d5-25b533252d38},0,-1,1 -346,nsIProxiedChannel,{6238f134-8c3f-4354-958f-dfd9d54a4446},0,-1,1 -347,nsIUnicodeNormalizer,{b43a461f-1bcf-4329-820b-66e48c979e14},0,-1,1 -348,nsIStreamListenerTee,{fb683e76-d42b-41a4-8ae6-65a6c2b146e5},0,-1,1 -349,nsIDOM3Text,{bcca052e-46f4-4b8e-8859-a86776c2f1d7},0,-1,1 -350,nsIFeedGenerator,{0fecd56b-bd92-481b-a486-b8d489cdd385},0,-1,1 -351,nsISyncStreamListener,{7e1aa658-6e3f-4521-9946-9685a169f764},0,-1,1 -352,nsIDOMLSParserFilter,{10e8893d-ddf5-45d1-8872-615d72065fb4},0,-1,1 -353,nsIDOMNSDocument,{09a439ad-4079-46d5-a050-4d7015d1a108},0,-1,1 -354,nsIScriptError,{b0196fc7-1913-441a-882a-453c0d8b89b8},0,-1,1 -355,nsIXPConnectJSObjectHolder,{8916a320-d118-11d3-8f3a-0010a4e73d9a},0,-1,0 -356,nsIEditorMailSupport,{fdf23301-4a94-11d3-9ce4-9960496c41bc},0,-1,1 -357,nsIXULWindow,{c175a596-ee13-420a-aa74-13ad3a14deb1},0,-1,1 -358,nsIEventTarget,{4e8febe4-6631-49dc-8ac9-308c1cb9b09c},0,-1,1 -359,nsIURLParser,{7281076d-cf37-464a-815e-698235802604},0,-1,1 -360,nsIGeolocationUpdate,{b89d7227-9f04-4236-a582-25a3f2779d72},0,-1,1 -361,nsIX509CertValidity,{e701dfd8-1dd1-11b2-a172-ffa6cc6156ad},0,-1,1 -362,extIExtensions,{de281930-aa5a-11db-abbd-0800200c9a66},0,-1,1 -363,nsIModule,{7392d032-5371-11d3-994e-00805fd26fee},0,-1,1 -364,nsINativeAppSupport,{5fdf8480-1f98-11d4-8077-00600811a9c3},0,-1,1 -365,nsIDOMSVGMetadataElement,{94558064-140c-41a1-9cc9-4e9cdbf5c124},0,-1,1 -366,nsINavHistoryQueryOptions,{b3d5de06-f8ef-4433-84c2-b8b237403b2a},0,-1,1 -367,nsIRDFDate,{e13a24e1-c77a-11d2-80be-006097b76b8e},0,-1,1 -368,nsIDOMSVGFEDisplacementMapElement,{80e1ea9c-eff3-490a-8c98-918963d2e7e9},0,-1,1 -369,nsIDocCharset,{9c18bb4e-1dd1-11b2-bf91-9cc82c275823},0,-1,1 -370,nsISignatureVerifier,{dea87f65-e91e-4119-aa13-aaa2be80cac2},0,-1,0 -371,nsISocketTransport,{ef3f4993-cfbc-4e5a-9509-16deafe16549},0,-1,1 -372,nsIASN1Object,{ba8bf582-1dd1-11b2-898c-f40246bc9a63},0,-1,1 -373,nsIPrintProgress,{7e46bc35-fb7d-4b45-ab35-82fd61015380},0,-1,1 -374,nsIDOMXULElement,{30a4a815-b42a-4f0b-9c10-1e7f727cd135},0,-1,1 -375,nsIXPCWrappedJSObjectGetter,{254bb2e0-6439-11d4-8fe0-0010a4e73d9a},0,-1,1 -376,nsIDOMMimeType,{f6134682-f28b-11d2-8360-c90899049c3c},0,-1,1 -377,nsIDOMMouseEvent,{ff751edc-8b02-aae7-0010-8301838a3123},0,-1,1 -378,nsIAccessibleEvent,{ba448f0e-a761-48c8-a0f5-1f25e23d4fe4},0,-1,1 -379,nsIDOMNSRGBAColor,{742dc816-5134-4214-adfa-cad9dd3377cd},0,-1,1 -380,nsIInterfaceRequestor,{033a1470-8b2a-11d3-af88-00a024ffc08c},0,-1,1 -381,nsINestedURI,{6de2c874-796c-46bf-b57f-0d7bd7d6cab0},0,-1,1 -382,nsIServiceManager,{8bb35ed9-e332-462d-9155-4a002ab5c958},0,-1,1 -383,nsIDOMHTMLOptGroupElement,{a6cf9091-15b3-11d2-932e-00805f8add32},0,-1,1 -384,nsICommandManager,{080d2001-f91e-11d4-a73c-f9242928207c},0,-1,1 -385,nsIIDNService,{a592a60e-3621-4f19-a318-2bf233cfad3e},0,-1,1 -386,nsIDOMHTMLTitleElement,{a6cf9089-15b3-11d2-932e-00805f8add32},0,-1,1 -387,nsIMemoryReporter,{d298b942-3e66-4cd3-9ff5-46abc69147a7},0,-1,1 -388,nsITraceRefcnt,{273dc92f-0fe6-4545-96a9-21be77828039},0,-1,0 -389,nsITimelineService,{93276790-3daf-11d5-b67d-000064657374},0,-1,1 -390,nsIUnicharOutputStream,{2d00b1bb-8b21-4a63-bcc6-7213f513ac2e},0,-1,1 -391,nsIAppShell,{501403e9-a091-4780-ba55-cfd1e21287a1},0,-1,0 -392,nsIDataType,{4d12e540-83d7-11d5-90ed-0010a4e73d9a},0,-1,1 -393,nsIChromeRegistry,{249fb5ad-ae29-4e2c-a728-ba5cf464d188},0,-1,1 -394,nsIJSON,{45464c36-efde-4cb5-8e00-07480533ff35},0,-1,1 -395,nsINavHistoryVisitResultNode,{8e2c5a86-b33d-4fa6-944b-559af7e95fcd},0,-1,1 -396,nsIDOMCryptoDialogs,{1f8fe77e-1dd2-11b2-8dd2-e55f8d3465b8},0,-1,1 -397,nsIDOMSVGGradientElement,{988b2de4-137b-4bb8-a15e-fe94038e9cf3},0,-1,1 -398,nsIDOMSVGFEImageElement,{3250f5c9-9c76-4e77-96d8-5f0cc85f41c4},0,-1,1 -399,nsIInputStreamPump,{400f5468-97e7-4d2b-9c65-a82aecc7ae82},0,-1,1 -400,nsIDOMLSParser,{2a31a3a0-be68-40af-9f64-914192f0fba2},0,-1,1 -401,nsIDOMCSSStyleDeclaration,{a6cf90be-15b3-11d2-932e-00805f8add32},0,-1,1 -402,nsIOfflineCacheUpdateService,{6fd2030f-7b00-4102-a0e3-d73078821eb1},0,-1,1 -403,nsIRequest,{ef6bfbd2-fd46-48d8-96b7-9f8f0fd387fe},0,-1,1 -404,nsIJSIID,{e76ec564-a080-4705-8609-384c755ec91e},0,-1,1 -405,nsIDOMHTMLTableSectionElement,{a6cf90b5-15b3-11d2-932e-00805f8add32},0,-1,1 -406,nsIDirectoryEnumerator,{31f7f4ae-6916-4f2d-a81e-926a4e3022ee},0,-1,1 -407,imgICache,{f1b74aae-5661-4753-a21c-66dd644afebc},0,-1,1 -408,nsIDOMSVGZoomAndPan,{18967370-921a-4245-8158-a279b190abca},0,-1,1 -409,nsIContainerBoxObject,{35d4c04b-3bd3-4375-92e2-a818b4b4acb6},0,-1,1 -410,nsIProtocolProxyService,{e38ab577-786e-4a7f-936b-7ae4c7d877b2},0,-1,1 -411,nsIEventListenerInfo,{cbc2ea6e-4043-4435-ba8f-64cbf6638622},0,-1,1 -412,nsISupportsPRUint8,{dec2e4e0-4a1c-11d3-9890-006008962422},0,-1,1 -413,nsIDOMSVGStyleElement,{9af0d129-b366-4aa8-b7d8-8dce93148d91},0,-1,1 -414,nsIURILoader,{2f7e8051-f1c9-4bcc-8584-9cfd5849e343},0,-1,1 -415,nsIMIMEInfo,{1c21acef-c7a1-40c6-9d40-a20480ee53a1},0,-1,1 -416,nsIEditorLogging,{4805e681-49b9-11d3-9ce4-ed60bd6cb5bc},0,-1,1 -417,nsIIdentityInfo,{e9da87b8-b87c-4bd1-a6bc-5a9a2c7f6d8d},0,-1,1 -418,nsITransferable,{8b5314bc-db01-11d2-96ce-0060b0fb9956},0,-1,1 -419,nsIDOMNSEventTarget,{37ca0054-c715-42df-83c7-35c69e24a632},0,-1,1 -420,nsIEditingSession,{274cd32e-3675-47e1-9d8a-fc6504ded9ce},0,-1,1 -421,nsIDOMHTMLDocument,{a6cf9084-15b3-11d2-932e-00805f8add32},0,-1,1 -422,nsIStyleSheetService,{1f42a6a2-ab0a-45d4-8a96-396f58ea6c6d},0,-1,1 -423,nsIUrlClassifierUtils,{e4f0e59c-b922-48b0-a7b6-1735c1f96fed},0,-1,1 -424,nsIDOMSVGFESpecularLightingElement,{49c38287-a7c2-4895-a630-86d2b45df23c},0,-1,1 -425,nsIUrlListManager,{9c5598ec-9986-40cf-af40-b5e0d817a3a0},0,-1,1 -426,nsIDOMStorageWindow,{a44581fe-dd9b-4fd7-9893-00c4ab43f12e},0,-1,1 -427,imgIRequest,{a297d3fa-5e0c-4e59-9f30-a01c9d4f3f8b},0,-1,1 -428,nsILocaleService,{c2edc848-4219-4440-abbf-98119882c83f},0,-1,1 -429,nsIPluginDocument,{e4be1d0a-9f24-4d69-bec5-245726ab85fb},0,-1,0 -430,nsIRDFCompositeDataSource,{96343820-307c-11d2-bc15-00805f912fe7},0,-1,1 -431,nsIRequestObserver,{fd91e2e0-1481-11d3-9333-00104ba0fd40},0,-1,1 -432,nsIDOMSVGFEComponentTransferElement,{4de6b44a-f909-4948-bc43-5ee2ca6de55b},0,-1,1 -433,nsIRecyclingAllocator,{d064a04c-9cee-4319-be31-64d565bccba9},0,-1,1 -434,nsISelectionController,{b5c3ffc4-f48a-4f25-86e1-4cf79db1bcbb},0,-1,1 -435,nsIDOMSVGStylable,{ea8a6cb1-9176-45db-989d-d0e89f563d7e},0,-1,1 -436,nsIDOMHTMLIFrameElement,{a6cf90ba-15b3-11d2-932e-00805f8add32},0,-1,1 -437,nsIHttpAuthManager,{7ce8e9d1-8b4b-4883-a307-66fe12a50153},0,-1,1 -438,nsIXULBrowserWindow,{67a601df-f091-4894-a2e2-2e6cfebb35ea},0,-1,1 -439,nsIDOMSVGPointList,{4c12af24-0fc2-4fe7-b71d-5d6b41d463c1},0,-1,1 -440,nsIUserInfo,{6c1034f0-1dd2-11b2-aa14-e6657ed7bb0b},0,-1,1 -441,nsIDOMHTMLVideoElement,{edf468dc-42eb-4494-920b-56a315172640},0,-1,1 -442,nsICacheEntryDescriptor,{49c1a11d-f5d2-4f09-8262-551e64908ada},0,-1,1 -443,nsIHTMLAbsPosEditor,{91375f52-20e6-4757-9835-eb04fabe5498},0,-1,1 -444,nsIAutoCompleteObserver,{18c36504-9a4c-4ac3-8494-bd05e00ae27f},0,-1,1 -445,nsIFormHistory2,{5d7d84d1-9798-4016-bf61-a32acf09b29d},0,-1,1 -446,nsISecurityWarningDialogs,{1c399d06-1dd2-11b2-bc58-c87cbcacdb78},0,-1,1 -447,nsIImageDocument,{7b80eebc-c98e-4461-8bdb-6e3b6e828890},0,-1,1 -448,jsdIDebuggerService,{dc0a24db-f8ac-4889-80d0-6016545a2dda},0,-1,1 -449,nsITransport,{d8786c64-eb49-4a0b-b42c-0936a745fbe8},0,-1,1 -450,nsIMutable,{321578d0-03c1-4d95-8821-021ac612d18d},0,-1,1 -451,jsdICallHook,{191d2738-22e8-4756-b366-6c878c87d73b},0,-1,1 -452,nsIListBoxObject,{aa9def4e-2e59-412d-a6df-b76f52167795},0,-1,1 -453,nsIAccessibleScrollType,{05cd38b1-94b3-4cdf-8371-3935a9611405},0,-1,1 -454,nsICategoryManager,{3275b2cd-af6d-429a-80d7-f0c5120342ac},0,-1,1 -455,nsIBidirectionalIterator,{948defaa-1dd1-11b2-89f6-8ce81f5ebda9},0,-1,1 -456,nsIDOMDOMTokenList,{c6f1e160-eeeb-404a-98b0-6f1246520b6e},0,-1,1 -457,nsIURIClassifier,{2de5c563-1203-43dd-a212-f5d56d530b6f},0,-1,1 -458,nsIWindowMediatorListener,{2f276982-0d60-4377-a595-d350ba516395},0,-1,1 -459,nsISHistoryListener,{3b07f591-e8e1-11d4-9882-00c04fa02f40},0,-1,1 -460,nsIEditor,{96b60ba0-634a-41e4-928e-78ab0b3c4b46},0,-1,1 -461,nsIDOMHistory,{896d1d20-b4c4-11d2-bd93-00805f8ae3f4},0,-1,1 -462,nsIZipEntry,{e1c028bc-c478-11da-95a8-00e08161165f},0,-1,1 -463,nsIWebContentHandlerRegistrar,{e6a75410-c93e-42bf-84ca-a5c3ec34a2f1},0,-1,1 -464,mozIStorageStatementWrapper,{eee6f7c9-5586-4eaf-b35c-dca987c4ffd1},0,-1,1 -465,nsIDOMNodeList,{a6cf907d-15b3-11d2-932e-00805f8add32},0,-1,1 -466,nsIUnicharInputStream,{d5e3bd80-6723-4b92-b0c9-22f6162fd94f},0,-1,1 -467,rdfITripleVisitor,{aafea151-c271-4505-9978-a100d292800c},0,-1,1 -468,nsIDOMDOMImplementationLS,{e2c8b03c-a49a-4923-81b0-ba9a86da0e21},0,-1,1 -469,nsIDOMAbstractView,{f51ebade-8b1a-11d3-aae7-0010830123b4},0,-1,1 -470,nsIPopupBoxObject,{a41af368-9f73-4d73-a058-49dd7e41f9ea},0,-1,1 -471,nsIWorkerErrorEvent,{73d82c1d-05de-49c9-a23b-7121ff09a67a},0,-1,1 -472,nsIDOMXULSelectControlElement,{919d9808-8937-4cec-9390-91225eb8864b},0,-1,1 -473,nsIRDFLiteral,{e0c493d2-9542-11d2-8eb8-00805f29f370},0,-1,1 -474,nsIAccessible,{c81d8f8c-8585-4094-bc7c-71dd01494906},0,-1,1 -475,nsIDOMCanvasPattern,{21dea65c-5c08-4eb1-ac82-81fe95be77b8},0,-1,1 -476,nsIStreamBufferAccess,{ac923b72-ac87-4892-ac7a-ca385d429435},0,-1,0 -477,nsISupportsVoid,{464484f0-568d-11d3-baf8-00805f8a5dd7},0,-1,1 -478,nsIDOMCSSImportRule,{a6cf90cf-15b3-11d2-932e-00805f8add32},0,-1,1 -479,nsIDOMScrollAreaEvent,{b2f49035-4a2f-4e62-8fb0-deb68b0de4d9},0,-1,1 -480,jsdIContextEnumerator,{d96af02e-3379-4db5-885d-fee28d178701},0,-1,1 -481,nsIConsoleMessage,{41bd8784-1dd2-11b2-9553-8606958fffe1},0,-1,1 -482,imgILoad,{e6273acc-1dd1-11b2-a08b-824ad1b1628d},0,-1,1 -483,nsISAXLocator,{7a307c6c-6cc9-11da-be43-001422106990},0,-1,1 -484,nsIDOMHTMLSourceElement,{be281029-7dd9-4268-963e-96f5196acc19},0,-1,1 -485,nsIDOMSVGMaskElement,{fdd7039c-35b6-465a-b7a3-c98a815b583e},0,-1,1 -486,nsICookiePromptService,{72f8bb14-2810-4f38-8d0d-290c5401f54e},0,-1,1 -487,extIApplication,{e53d6610-7468-11dd-ad8b-0800200c9a66},0,-1,1 -488,nsIDOMHTMLCollection,{a6cf9083-15b3-11d2-932e-00805f8add32},0,-1,1 -489,nsIFeedPerson,{29cbd45f-f2d3-4b28-b557-3ab7a61ecde4},0,-1,1 -490,mozIStorageFunction,{9ff02465-21cb-49f3-b975-7d5b38ceec73},0,-1,1 -491,nsINavHistoryService,{437f539b-d541-4a0f-a200-6f9a6d45cce2},0,-1,1 -492,nsIDOMHTMLBRElement,{a6cf90a5-15b3-11d2-932e-00805f8add32},0,-1,1 -493,nsINonBlockingAlertService,{e800ef97-ae37-46b7-a46c-31fbe79657ea},0,-1,1 -494,nsICertificateDialogs,{a03ca940-09be-11d5-ac5d-000064657374},0,-1,1 -495,nsIInputIterator,{85585e12-1dd2-11b2-a930-f6929058269a},0,-1,1 -496,nsIGlobalHistory,{9491c383-e3c4-11d2-bdbe-0050040a9b44},0,-1,1 -497,mozIStorageStatementParams,{e65fe6e2-2643-463c-97e2-27665efe2386},0,-1,1 -498,fuelIWindow,{207edb28-eb5e-424e-a862-b0e97c8de866},0,-1,1 -499,nsIPref,{a22ad7b0-ca86-11d1-a9a4-00805f8a7ac4},0,-1,1 -500,nsIAsyncStreamCopier,{5a19ca27-e041-4aca-8287-eb248d4c50c0},0,-1,1 -501,nsIDOMSVGPathSegLinetoAbs,{5c7ba7b0-c7c5-4a7b-bc1c-2d784153be77},0,-1,1 -502,nsIDOMSVGAnimatedEnumeration,{73b101bd-797b-470f-9308-c24c64278bcd},0,-1,1 -503,nsIAutoCompleteSearch,{de8db85f-c1de-4d87-94ba-7844890f91fe},0,-1,1 -504,nsITimerCallback,{a796816d-7d47-4348-9ab8-c7aeb3216a7d},0,-1,1 -505,nsIDOMComment,{a6cf9073-15b3-11d2-932e-00805f8add32},0,-1,1 -506,nsISecretDecoderRingConfig,{01d8c0f0-0ccc-11d4-9fdd-000064657374},0,-1,1 -507,nsIXULTreeBuilderObserver,{57ced9a7-ec0b-4a0e-8aeb-5da32ebe951c},0,-1,1 -508,nsIXPTLoader,{368a15d9-17a9-4c2b-ac3d-a35b3a22b876},0,-1,1 -509,nsIContentFilter,{c18c49a8-62f0-4045-9884-4aa91e388f14},0,-1,1 -510,nsIASN1Tree,{c727b2f2-1dd1-11b2-95df-f63c15b4cd35},0,-1,1 -511,nsIHttpAuthenticator_1_9_2,{923e7c35-6e0c-448c-81a1-39c93db597d9},0,-1,1 -512,extISessionStorage,{0787ac44-29b9-4889-b97f-13573aec6971},0,-1,1 -513,nsIComponentManagerObsolete,{8458a740-d5dc-11d2-92fb-00e09805570f},0,-1,1 -514,mozIStorageStatementRow,{02eeaf95-c3db-4182-9340-222c29f68f02},0,-1,1 -515,nsIInterfaceInfo,{215dbe04-94a7-11d2-ba58-00805f8a5dd7},0,-1,0 -516,nsIShellService,{bb477da4-dddf-4106-a562-f06c85c7f9a8},0,-1,1 -517,mozISpellCheckingEngine,{43987f7b-0faa-4019-811e-42becac73fc5},0,-1,1 -518,nsIApplicationCacheContainer,{bbb80700-1f7f-4258-aff4-1743cc5a7d23},0,-1,1 -519,nsISound,{86b75b05-db60-4c3e-97a7-82b363a41a01},0,-1,1 -520,nsIJSContextStack,{c67d8270-3189-11d3-9885-006008962422},0,-1,0 -521,nsIWindowCreator2,{f673ec81-a4b0-11d6-964b-eb5a2bf216fc},0,-1,1 -522,nsIDOMNSHTMLFrameElement,{d67bd267-f984-4993-b378-95851b71f0a3},0,-1,1 -523,nsIProfile,{02b0625a-e7f3-11d2-9f5a-006008a6efe9},0,-1,1 -524,nsIDOMSVGPathSegMovetoRel,{58ca7e86-661a-473a-96de-89682e7e24d6},0,-1,1 -525,nsISystemProxySettings,{a9f3ae38-b769-4e0b-9317-578388e326c9},0,-1,1 -526,nsIPromptService,{1630c61a-325e-49ca-8759-a31b16c47aa5},0,-1,1 -527,nsIJARProtocolHandler,{92c3b42c-98c4-11d3-8cd9-0060b0fc14a3},0,-1,1 -528,nsIRefreshURI,{cb0ad623-6b46-4c09-a473-c1d6ca63d3c7},0,-1,1 -529,nsIDOMAttr,{a6cf9070-15b3-11d2-932e-00805f8add32},0,-1,1 -530,nsIDOMXPathExpression,{75506f82-b504-11d5-a7f2-ca108ab8b6fc},0,-1,1 -531,nsIVariant,{6c9eb060-8c6a-11d5-90f3-0010a4e73d9a},0,-1,1 -532,nsIDOMSVGAnimatedBoolean,{7e325385-cc82-4763-bd14-e2c92edd5462},0,-1,1 -533,jsdIFilterEnumerator,{e391ba85-9379-4762-b387-558e38db730f},0,-1,1 -534,nsITreeColumn,{ae835ecf-6b32-4660-9b43-8a270df56e02},0,-1,1 -535,nsIAutoCompletePopup,{1b9d7d8a-6dd0-11dc-8314-0800200c9a66},0,-1,1 -536,nsIAccessibleCaretMoveEvent,{b9076dce-4cd3-4e3d-a7f6-7f33a7f40c31},0,-1,1 -537,nsIContentPrefService,{ea7d29eb-7095-476e-b5d9-13263f3ae243},0,-1,1 -538,nsIDOMNSCSS2Properties,{8c31e4a6-8f3a-4bb9-b180-8385ac2a4080},0,-1,1 -539,nsIDOMPkcs11,{9fd42950-25e7-11d4-8a7d-006008c844c3},0,-1,1 -540,nsIDocumentEncoderNodeFixup,{c0da5b87-0ba7-4d7c-8cb3-fcb02af4253d},0,-1,1 -541,nsIToolkitProfile,{7422b090-4a86-4407-972e-75468a625388},0,-1,1 -542,nsIWebBrowserPrint,{9a7ca4b0-fbba-11d4-a869-00105a183419},0,-1,1 -543,nsIDOMNameList,{faaf1b80-1ddd-11d9-8c46-000a95dc234c},0,-1,1 -544,nsIGlobalHistory2,{cf777d42-1270-4b34-be7b-2931c93feda5},0,-1,1 -545,rdfIDataSource,{ebce86bd-1568-4a34-a808-9ccf9cde8087},0,-1,1 -546,nsIWebBrowserFindInFrames,{e0f5d182-34bc-11d5-be5b-b760676c6ebc},0,-1,1 -547,nsIDynamicContainer,{7e85d97b-4109-4ea7-afd8-bc2cd3840d70},0,-1,1 -548,nsISAXXMLFilter,{77a22cf0-6cdf-11da-be43-001422106990},0,-1,1 -549,nsINavHistoryFullVisitResultNode,{c49fd9d5-56e2-43eb-932c-f933f28cba85},0,-1,1 -550,nsIAddonSearchResult,{a549a714-2ada-4bb9-8a47-be26e73d49a5},0,-1,1 -551,nsIDirIndexListener,{fae4e9a8-1dd1-11b2-b53c-8f3aa1bbf8f5},0,-1,1 -552,nsISAXContentHandler,{2a99c757-dfee-4806-bff3-f721440412e0},0,-1,1 -553,nsIExternalHelperAppService,{9e456297-ba3e-42b1-92bd-b7db014268cb},0,-1,1 -554,nsIDOMSVGTitleElement,{524564b0-13a3-459b-bbec-ad66aea9f789},0,-1,1 -555,nsISocketProvider,{00b3df92-e830-11d8-d48e-0004e22243f8},0,-1,1 -556,nsIThreadObserver,{81d0b509-f198-4417-8020-08eb4271491f},0,-1,1 -557,nsIStringInputStream,{450cd2d4-f0fd-424d-b365-b1251f80fd53},0,-1,1 -558,nsIPhonetic,{bc6ea726-ab56-46b6-a21a-aa7b76d6818f},0,-1,1 -559,nsIDOMLoadStatus,{2cb53a8a-d2f4-4ddf-874f-3bc2d595c41a},0,-1,1 -560,nsIXPCScriptNotify,{b804504d-0025-4d6b-8ced-d94e41102a7f},0,-1,0 -561,nsIInterfaceInfoSuperManager,{0ee22850-bc6a-11d5-9134-0010a4e73d9a},0,-1,0 -562,nsIObjectLoadingContent_MOZILLA_1_9_2_BRANCH,{2725a137-db4b-4e43-a096-a084aeaa8b0b},0,-1,1 -563,nsIDOMCSSValue,{009f7ea5-9e80-41be-b008-db62f10823f2},0,-1,1 -564,nsICookieAcceptDialog,{3f2f0d2c-bdea-4b5a-afc6-fcf18f66b97e},0,-1,1 -565,nsIDOMSVGFEBlendElement,{8f4daf4c-de2d-450f-a373-449ad62e3800},0,-1,1 -566,nsIMenuBoxObject,{f5099746-5049-4e81-a03e-945d5110fee2},0,-1,1 -567,nsIDOMSVGFEFuncRElement,{85719a5d-9688-4c5f-bad5-c21847515200},0,-1,1 -568,nsIDOMNSEvent,{9be8096b-f795-4045-9664-0c275f36fe5b},0,-1,1 -569,nsIDOMSVGPathSegClosePath,{4970505f-2cc0-4afa-92e6-0cf4bdbf5a53},0,-1,1 -570,nsIDOMLSException,{1cc8e4b3-1dbb-4adc-a913-1527bf67748c},0,-1,1 -571,nsIDOMHTMLTimeRanges,{5c9995a1-9fce-44e8-aa7f-de52ff4c3f46},0,-1,1 -572,nsIDOMSVGFEGaussianBlurElement,{43ff8d42-3380-4dbd-a916-7c2daa3ed7f4},0,-1,1 -573,nsIDOMHTMLFieldSetElement,{a6cf9097-15b3-11d2-932e-00805f8add32},0,-1,1 -574,nsIDOMSVGLinearGradientElement,{7e15fce5-b208-43e1-952a-c570ebad0619},0,-1,1 -575,nsIDOMStorage,{43e5edad-1e02-42c4-9d99-c3d9dee22a20},0,-1,1 -576,nsIStreamLoader,{8ea7e890-8211-11d9-8bde-f66bad1e3f3a},0,-1,1 -577,nsIDOMWindowCollection,{a6cf906f-15b3-11d2-932e-00805f8add32},0,-1,1 -578,nsIBinaryInputStream,{7b456cb0-8772-11d3-90cf-0040056a906e},0,-1,1 -579,nsIDOMSVGFEConvolveMatrixElement,{42109b58-a8c1-4078-b44c-ec1d5d6b9574},0,-1,1 -580,nsISSLStatus,{cfede939-def1-49be-81ed-d401b3a07d1c},0,-1,1 -581,nsITextScroll,{067b28a0-877f-11d3-af7e-00a024ffc08c},0,-1,1 -582,nsIDOMSVGRadialGradientElement,{d0262ae1-31a4-44be-b82e-85e4cfe280fd},0,-1,1 -583,nsIBidirectionalEnumerator,{75f158a0-cadd-11d2-8cca-0060b0fc14a3},0,-1,0 -584,nsIVersionComparator,{e6cd620a-edbb-41d2-9e42-9a2ffc8107f3},0,-1,1 -585,nsIUrlClassifierLookupCallback,{f1dc83c6-ad43-4f0f-a809-fd43de7de8a4},0,-1,0 -586,nsIControllerCommandTable,{d1a47834-6ad4-11d7-bfad-000393636592},0,-1,1 -587,nsIWindowWatcher,{002286a8-494b-43b3-8ddd-49e3fc50622b},0,-1,1 -588,nsIDOMXPathException,{75506f89-b504-11d5-a7f2-ca108ab8b6fc},0,-1,1 -589,nsIDOMXULCommandEvent,{f9fa8205-a988-4828-9228-f3332d5475ac},0,-1,1 -590,nsISHistory,{9883609f-cdd8-4d83-9b55-868ff08ad433},0,-1,1 -591,nsIAutoCompleteBaseResult,{e6396544-921d-4776-aa62-8bf2dc1ae058},0,-1,0 -592,nsIDOMCrypto,{12b6d899-2aed-4ea9-8c02-2223ab7ab592},0,-1,1 -593,nsIDOMSVGFEDiffuseLightingElement,{2e9eb422-2398-4be9-a9b8-b1cc7aa9dd6f},0,-1,1 -594,nsIWorkerLocation,{17a005c3-4f2f-4bb6-b169-c181fa6873de},0,-1,1 -595,nsISimpleUnicharStreamFactory,{8238cd2e-e8e3-43e8-b556-56e21389c766},0,-1,1 -596,nsIDOMMutationEvent,{8e440d86-886a-4e76-9e59-c13b939c9a4b},0,-1,1 -597,nsIDOMSVGTextPositioningElement,{5d052835-8cb0-442c-9754-a8e616db1f89},0,-1,1 -598,nsIDOMSVGPathSegArcAbs,{c9e222e5-31fd-4083-ae1f-fcf013681340},0,-1,1 -599,nsIDOMNSHTMLAnchorElement,{a6cf911c-15b3-11d2-932e-00805f8add32},0,-1,1 -600,nsILocalHandlerApp,{9812be73-273c-478c-8170-c3e0db08ae7c},0,-1,1 -601,nsIComponentRegistrar,{2417cbfe-65ad-48a6-b4b6-eb84db174392},0,-1,1 -602,nsIFileChannel,{06169120-136d-45a5-b535-498f1f755ab7},0,-1,1 -603,nsIPluginHost,{30c7c529-b05c-4950-b5b8-9af673e46521},0,-1,1 -604,nsIDOMSVGPathElement,{2b19e692-3338-440f-a998-3cb1e8474999},0,-1,1 -605,nsIHttpAuthenticator,{0f331436-8bc8-4c68-a124-d0253a19d06f},0,-1,1 -606,nsIPlugin,{0937fb08-16e8-4365-babf-88e09e4e33a4},0,-1,0 -607,nsICacheListener,{638c3848-778b-4851-8ff3-9400f65b8773},0,-1,1 -608,mozIStorageResultSet,{18dd7953-076d-4598-8105-3e32ad26ab24},0,-1,1 -609,mozIStorageValueArray,{07b5b93e-113c-4150-863c-d247b003a55d},0,-1,1 -610,nsIStreamCipher,{1d507cd6-1630-4710-af1b-4012dbcc514c},0,-1,1 -611,nsIProtocolProxyService2,{dbd9565d-29b1-437a-bff5-2fc339e2c5df},0,-1,1 -612,nsIDOMDocumentEvent,{46b91d66-28e2-11d4-ab1e-0010830123b4},0,-1,1 -613,nsICMSMessageErrors,{f2aec680-60a0-49f0-afe5-6cf1d3f15e0d},0,-1,1 -614,nsICrashReporter,{44650737-59f7-4c9b-adbe-2b6d4dfee86a},0,-1,1 -615,nsIXULAppInfo,{a61ede2a-ef09-11d9-a5ce-001124787b2e},0,-1,1 -616,nsIProxiedProtocolHandler,{0a24fed4-1dd2-11b2-a75c-9f8b9a8f9ba7},0,-1,1 -617,nsISupportsString,{d79dc970-4a1c-11d3-9890-006008962422},0,-1,1 -618,nsIDOMNSFeatureFactory,{dc5ba787-b648-4b01-a8e7-b293ffb044ef},0,-1,1 -619,nsISafeOutputStream,{5f914307-5c34-4e1f-8e32-ec749d25b27a},0,-1,1 -620,inIDeepTreeWalker,{91fca0e9-99d6-406b-9d78-4c96f11e9ee4},0,-1,1 -621,nsIComponentManager,{a88e5a60-205a-4bb1-94e1-2628daf51eae},0,-1,1 -622,nsIDocShellTreeItem,{09b54ec1-d98a-49a9-bc95-3219e8b55089},0,-1,1 -623,nsIDOMCSSFontFaceRule,{a6cf90bb-15b3-11d2-932e-00805f8add32},0,-1,1 -624,nsIPrincipal,{b8268b9a-2403-44ed-81e3-614075c92034},0,-1,1 -625,nsIAlertsService,{e177399e-2e31-4019-aed3-cba63ce9fa99},0,-1,1 -626,nsITaggingService,{e39cea60-7e6d-4c8b-80a3-997af1c2cbcb},0,-1,1 -627,nsIXMLHttpRequestEventTarget,{6ce0a193-b033-4c3d-b748-f851b09261f5},0,-1,1 -628,nsICMSMessage2,{a99a3203-39e3-45e1-909c-175b0e471c2b},0,-1,0 -629,nsIAutoCompleteMdbResult,{f7e7b341-2d5c-4d04-9f51-496cb2ce178c},0,-1,0 -630,nsIPrefBranch2,{74567534-eb94-4b1c-8f45-389643bfc555},0,-1,1 -631,nsIDOMDragEvent,{d52cf140-fb90-44df-8d69-4b2bab4d461f},0,-1,1 -632,inISearchObserver,{46226d9b-e398-4106-8d9b-225d4d0589f5},0,-1,1 -633,nsIDOMSVGAnimatedLength,{a52f0322-7f4d-418d-af6d-a7b14abd5cdf},0,-1,1 -634,nsIPasswordManager,{173562f0-2173-11d5-a54c-0010a401eb10},0,-1,1 -635,nsISupportsID,{d18290a0-4a1c-11d3-9890-006008962422},0,-1,1 -636,nsIRollupListener,{0ca103e5-80d4-4b81-a310-be0708f8eaa9},0,-1,0 -637,nsIResProtocolHandler,{067ca872-e947-4bd6-8946-a479cb6ba5dd},0,-1,1 -638,nsIServerSocketListener,{836d98ec-fee2-4bde-b609-abd5e966eabd},0,-1,1 -639,nsIAccessNode,{71a3b4e7-e83d-45cf-a20e-9ce292bcf19f},0,-1,1 -640,nsIDOMSVGPathSegCurvetoQuadraticAbs,{b7aef0f0-2830-4145-b04f-fe05789ccf8a},0,-1,1 -641,nsIWebNavigation,{f5d9e7b0-d930-11d3-b057-00a024ffc08c},0,-1,1 -642,nsISupportsPRInt64,{e3cb0ff0-4a1c-11d3-9890-006008962422},0,-1,1 -643,nsIXPCComponents_ID,{7994a6e0-e028-11d3-8f5d-0010a4e73d9a},0,-1,1 -644,nsITooltipTextProvider,{b128a1e6-44f3-4331-8fbe-5af360ff21ee},0,-1,1 -645,nsIXPCComponents_Classes,{978ff520-d26c-11d2-9842-006008962422},0,-1,1 -646,nsIFastLoadService,{759e475e-0c23-4dbf-b1b8-78c9369e3072},0,-1,1 -647,jsdIProperty,{4491ecd4-fb6b-43fb-bd6f-5d1473f1df24},0,-1,1 -648,nsIDOMHTMLDListElement,{a6cf909b-15b3-11d2-932e-00805f8add32},0,-1,1 -649,nsIWorkerGlobalScope,{c111e7d3-8044-4458-aa7b-637696ffb841},0,-1,1 -650,nsIDOMHTMLLegendElement,{a6cf9098-15b3-11d2-932e-00805f8add32},0,-1,1 -651,nsIAutoConfig,{80db54ae-13f2-11d5-be44-00108335a220},0,-1,0 -652,nsIDOMNSHTMLAreaElement2,{1859b16a-7c16-4ab7-bdb9-52792ba16cc1},0,-1,1 -653,nsIDOMSVGDefsElement,{a2e86036-f04c-4013-9f74-e7090a0aac0a},0,-1,1 -654,nsIBaseWindow,{046bc8a0-8015-11d3-af70-00a024ffc08c},0,-1,1 -655,nsIFastLoadFileControl,{8a1e2c63-af50-4147-af7e-26289dc180dd},0,-1,1 -656,nsIPrefService,{decb9cc7-c08f-4ea5-be91-a8fc637ce2d2},0,-1,1 -657,nsIDOMLSProgressEvent,{b9a2371f-70e9-4657-b0e8-28e15b40857e},0,-1,1 -658,nsIMicrosummaryGenerator,{05b48344-d0a7-427e-934e-9a6e0d5ecced},0,-1,1 -659,mozIStorageRow,{62d1b6bd-cbfe-4f9b-aee1-0ead4af4e6dc},0,-1,1 -660,nsIDOMGeoPosition,{23e5269f-4dd7-41c4-b52a-75918694c2de},0,-1,1 -661,nsIDOMSVGPathSeg,{b9022da7-e26d-4df3-8c94-b45c4aedda7c},0,-1,1 -662,fuelIBrowserTab,{3073ceff-777c-41ce-9ace-ab37268147c1},0,-1,1 -663,nsISSLCertErrorDialog,{0729ce8e-8935-4989-ba72-a2d6307f2365},0,-1,1 -664,nsIThreadJSContextStack,{a1339ae0-05c1-11d4-8f92-0010a4e73d9a},0,-1,0 -665,nsIScriptChannel,{33234b99-9588-4c7d-9da6-86b8b7cba565},0,-1,1 -666,nsIDOMBarProp,{9eb2c150-1d56-11d3-8221-0060083a0bcf},0,-1,1 -667,nsIPluginInstanceOwner,{c4ed03f3-498b-4045-97c7-0b05838f886c},0,-1,0 -668,nsIDOMStorageList,{a4e9b257-5ccf-4b17-8721-23ac45c83128},0,-1,1 -669,nsIHttpHeaderVisitor,{0cf40717-d7c1-4a94-8c1e-d6c9734101bb},0,-1,1 -670,fuelIAnnotations,{335c9292-91a1-4ca0-ad0b-07d5f63ed6cd},0,-1,1 -671,nsIWindowProvider,{5119ac7f-81dd-4061-96a7-71f2cf5efee4},0,-1,1 -672,nsIPrintSettingsService,{841387c8-72e6-484b-9296-bf6eea80d58a},0,-1,1 -673,nsIDOMSVGFEColorMatrixElement,{0e966878-ebf1-4455-86fd-f4c7b1f24777},0,-1,1 -674,nsIPKCS11,{5743f870-958e-4f02-aef2-c0afeef67f05},0,-1,1 -675,nsIDOMSVGFEFuncAElement,{fa48511c-283a-437f-9507-c309ac6f0f57},0,-1,1 -676,nsIObjectInputStream,{6c248606-4eae-46fa-9df0-ba58502368eb},0,-1,1 -677,nsIDOMSVGFETileElement,{ed042a81-39fc-4c89-9385-75758a2434b5},0,-1,1 -678,nsIDOMGetSVGDocument,{b5d3074c-4f63-4936-bf39-49034efa26a5},0,-1,1 -679,nsIDirIndex,{23bbabd0-1dd2-11b2-86b7-aad68ae7d7e0},0,-1,1 -680,nsIPasswordManagerInternal,{a448531f-dc92-4dc1-9012-da841febcbe0},0,-1,1 -681,nsIDOMNSHTMLHRElement,{19b5879f-c125-447c-aaaf-719de3ef221a},0,-1,1 -682,nsIDOMSVGFEFloodElement,{2743af95-28c5-429d-9812-12b7b017887e},0,-1,1 -683,nsIFormFillController,{07f0a0dc-f6e9-4cdd-a55f-56d770523a4c},0,-1,1 -684,nsIRecentBadCertsService,{a5ae8b05-a76e-408f-b0ba-02a831265749},0,-1,1 -685,nsICommandHandler,{34a4fcf0-66fc-11d4-9528-0020183bf181},0,-1,1 -686,nsIDOMHTMLObjectElement,{a6cf90ac-15b3-11d2-932e-00805f8add32},0,-1,1 -687,nsIDOMLocation,{a6cf906d-15b3-11d2-932e-00805f8add32},0,-1,1 -688,nsIViewSourceChannel,{8b77d6e2-2ae9-11d5-be57-000064657374},0,-1,0 -689,nsISyncLoadDOMService,{8095998d-ae1c-4cfa-9b43-0973e5d77eb0},0,-1,1 -690,nsIDOMXULDescriptionElement,{c7b0b43c-1dd1-11b2-9e1c-ce5f6a660630},0,-1,1 -691,nsIURL,{d6116970-8034-11d3-9399-00104ba0fd40},0,-1,1 -692,nsIMultiplexInputStream,{a076fd12-1dd1-11b2-b19a-d53b5dffaade},0,-1,1 -693,nsIQueryContentEventResult,{4b4ba266-b51e-4f0f-8d0e-9f13cb2a0056},0,-1,1 -694,nsIThreadEventFilter,{a0605c0b-17f5-4681-b8cd-a1cd75d42559},0,-1,1 -695,nsIXPCSecurityManager,{31431440-f1ce-11d2-985a-006008962422},0,-1,0 -696,nsIDOMXULMenuListElement,{3d49950e-04f9-4e35-a9a0-ffd51356a674},0,-1,1 -697,nsIDocShellTreeNode,{37f1ab73-f224-44b1-82f0-d2834ab1cec0},0,-1,1 -698,nsIWebBrowserChrome,{ba434c60-9d52-11d3-afb0-00a024ffc08c},0,-1,1 -699,nsIFastLoadWriteControl,{2ad6e9e6-1379-4e45-a899-a54b27ff915c},0,-1,1 -700,nsITreeView,{c06dc4d3-63a2-4422-a0a3-5f2eddeca8c1},0,-1,1 -701,nsIHandlerApp,{8d298761-0963-4c90-99e2-6ea498825e82},0,-1,1 -702,nsIByteRangeRequest,{c1b1f426-7e83-4759-9f88-0e1b17f49366},0,-1,1 -703,nsIPrintStatusFeedback,{19855dff-3248-4902-b196-93ee4c477880},0,-1,1 -704,nsINetUtil,{a50d5516-5c0a-4f08-b427-703ca0c44ac3},0,-1,1 -705,nsPIPlacesDatabase,{8e6d4f8a-4b8e-4026-9fca-517c4494ddb7},0,-1,1 -706,nsIDOMRange,{a6cf90ce-15b3-11d2-932e-00805f8add32},0,-1,1 -707,nsIAccessibleStates,{7fe1ee90-edaa-43f1-9f3b-071099b51f08},0,-1,1 -708,nsIAtomService,{9c1f50b9-f9eb-42d4-a8cb-2c7600aeb241},0,-1,1 -709,nsIExceptionProvider,{0577744c-c1d2-47f2-8bcc-ce7a9e5a88fc},0,-1,1 -710,nsIDOMJSNavigator,{4b4f8316-1dd2-11b2-b265-9a857376d159},0,-1,1 -711,nsIScriptableDateFormat,{0c89efb0-1aae-11d3-9141-006008a6edf6},0,-1,1 -712,nsIDOM3EventTarget,{3e9c01a7-de97-4c3b-8294-b4bd9d7056d1},0,-1,1 -713,nsIDOMSVGAnimatedAngle,{c6ab8b9e-32db-464a-ae33-8691d44bc60a},0,-1,1 -714,nsIDOMXPathNSResolver,{75506f83-b504-11d5-a7f2-ca108ab8b6fc},0,-1,1 -715,nsIFTPChannel,{2315d831-8b40-446a-9138-fe09ebb1b720},0,-1,1 -716,nsIDOMCSSValueList,{8f09fa84-39b9-4dca-9b2f-db0eeb186286},0,-1,1 -717,nsIStackFrame,{91d82105-7c62-4f8b-9779-154277c0ee90},0,-1,1 -718,nsIDOMHTMLFontElement,{a6cf90a7-15b3-11d2-932e-00805f8add32},0,-1,1 -719,nsIEffectiveTLDService,{6852369e-baa9-4c9a-bbcd-5123fc54a297},0,-1,1 -720,imgIEncoder,{ba3a854b-fb8d-4881-8af9-5849df10e5e5},0,-1,1 -721,nsIToolkitChromeRegistry,{8727651c-9530-45a0-b81e-0e0690c30c50},0,-1,1 -722,nsIDOMSVGPathSegCurvetoQuadraticSmoothRel,{ac0b2007-04e4-4e70-a0e0-294f374b29c4},0,-1,1 -723,nsIPropertyBag,{bfcd37b0-a49f-11d5-910d-0010a4e73d9a},0,-1,1 -724,nsIFeedElementBase,{5215291e-fa0a-40c2-8ce7-e86cd1a1d3fa},0,-1,1 -725,nsIINIParserFactory,{ccae7ea5-1218-4b51-aecb-c2d8ecd46af9},0,-1,1 -726,nsIFormSigningDialog,{4fe04d6d-4b66-4023-a0bc-b43ce68b3e15},0,-1,1 -727,nsIDOMProgressEvent,{6af7022c-d7f8-414c-a11f-a7918f14052b},0,-1,1 -728,nsIAccessibleImage,{09086623-0f09-4310-ac56-c2cda7c29648},0,-1,1 -729,nsILiveTitleNotificationSubject,{f9e577a8-19d9-4ca0-a140-b9e43f014470},0,-1,1 -730,nsITypeAheadFind,{0749a445-19d3-4eb9-9d66-78eca8c6f604},0,-1,1 -731,nsIDOMFile_1_9_2_BRANCH,{fc41a294-8c9a-4639-b8ed-7c04f8017ef6},0,-1,1 -732,nsISSLStatusProvider,{8de811f0-1dd2-11b2-8bf1-e9aa324984b2},0,-1,1 -733,nsIProxyAutoConfig,{a42619df-0a1c-46fb-8154-0e9b8f8f1ea8},0,-1,1 -734,nsIMozIconURI,{1fb33f44-f522-4880-a225-4b75d09b04c6},0,-1,1 -735,nsIAuthPrompt2,{651395eb-8612-4876-8ac0-a88d4dce9e1e},0,-1,1 -736,nsIProfileChangeStatus,{2f977d43-5485-11d4-87e2-0010a4e75ef2},0,-1,1 -737,nsIDOMSVGComponentTransferFunctionElement,{cb615c0f-8d4a-4e30-9695-a3dd6f4216ee},0,-1,1 -738,nsISupportsArray,{791eafa0-b9e6-11d1-8031-006008159b5a},0,-1,1 -739,nsIThreadPoolListener,{ef194cab-3f86-4b61-b132-e5e96a79e5d1},0,-1,1 -740,nsIPromptFactory,{2532b748-75db-4732-9173-78d3bf34f694},0,-1,1 -741,nsIHttpActivityDistributor,{7c512cb8-582a-4625-b5b6-8639755271b5},0,-1,1 -742,nsIMemoryReporterManager,{7c62de18-1edd-40f8-9da2-a8c622763074},0,-1,1 -743,nsIWebBrowserPersist,{dd4e0a6a-210f-419a-ad85-40e8543b9465},0,-1,1 -744,nsIErrorService,{e72f94b2-5f85-11d4-9877-00c04fa0cf4a},0,-1,1 -745,nsIDOMCSSStyleSheet,{a6cf90c2-15b3-11d2-932e-00805f8add32},0,-1,1 -746,mozIPlacesAutoComplete,{a5ae8332-333c-412a-bb02-a35df8247714},0,-1,1 -747,nsIXULTemplateBuilder,{a583b676-5b02-4f9c-a0c9-cb850cb99818},0,-1,1 -748,nsIXPointerSchemeContext,{781f4aa1-ebb3-4667-b1c2-2b35e94c4281},0,-1,0 -749,nsISemanticUnitScanner,{9f620be4-e535-11d6-b254-00039310a47a},0,-1,1 -750,nsIAccessibleTableChangeEvent,{a9485c7b-5861-4695-8441-fab0235b205d},0,-1,1 -751,nsIDOMSVGTextPathElement,{5c29a76c-3489-48fe-b9ea-ea0f5b196dff},0,-1,1 -752,nsIDebug2,{9c9307ed-480a-4f2a-8f29-21378c03bcbc},0,-1,1 -753,nsIClientAuthDialogs,{fa4c7520-1433-11d5-ba24-00108303b117},0,-1,1 -754,nsIDOMBeforeUnloadEvent,{da19e9dc-dea2-4a1d-a958-9be375c9799c},0,-1,1 -755,nsIDOMNSHTMLElement,{7f142f9a-fba7-4949-93d6-cf08a974ac51},0,-1,1 -756,nsIDOMHTMLBodyElement,{a6cf908e-15b3-11d2-932e-00805f8add32},0,-1,1 -757,nsIEnumerator,{ad385286-cbc4-11d2-8cca-0060b0fc14a3},0,-1,1 -758,nsIBufferedInputStream,{616f5b48-da09-11d3-8cda-0060b0fc14a3},0,-1,1 -759,nsIX509CertList,{a539759b-e22d-462f-94ea-2915b11b33e8},0,-1,1 -760,nsICMSDecoder,{65244a06-a342-11d5-ba47-00108303b117},0,-1,0 -761,nsISMimeVerificationListener,{56310af6-dffc-48b4-abca-85eae4059064},0,-1,0 -762,nsIInputStreamChannel,{274c4d7a-2447-4ceb-a6de-80db1b83f5d2},0,-1,1 -763,nsISecurityInfoProvider,{b8cc9126-9319-4415-afd9-b82220d453ed},0,-1,1 -764,nsIDOMKeyEvent,{028e0e6e-8b01-11d3-aae7-0010838a3123},0,-1,1 -765,nsIGeolocationProvider,{701413ed-0f51-64f7-71c7-4369d8e07d6e},0,-1,1 -766,nsIDOMSVGForeignObjectElement,{fd9c9871-23fd-48eb-a65b-3842e9b0acbd},0,-1,1 -767,nsIThread,{9c889946-a73a-4af3-ae9a-ea64f7d4e3ca},0,-1,1 -768,nsICommandController,{ebe55080-c8a9-11d5-a73c-dd620d6e04bc},0,-1,1 -769,nsIIOService2,{d44fe6d4-ee35-4789-886a-eb8f0554d04e},0,-1,1 -770,nsIEditorBoxObject,{e3800a23-5b83-49aa-b18c-efa1ac5416e0},0,-1,1 -771,nsIPrintSession,{2f977d52-5485-11d4-87e2-0010a4e75ef2},0,-1,0 -772,nsIStreamTransportService,{8268d474-efbf-494f-a152-e8a8616f4e52},0,-1,1 -773,nsIDOMSVGFilterElement,{9e81d4ae-190c-4b9d-a076-ebc52a7bf231},0,-1,1 -774,nsIDownloadHistory,{202533cd-a8f1-4ee4-8d20-3a6a0d2c6c51},0,-1,1 -775,nsIDOMHTMLButtonElement,{a6cf9095-15b3-11d2-932e-00805f8add32},0,-1,1 -776,nsIDOMDataContainerEvent,{3600d66c-b9ac-4c22-b39a-d64cce619921},0,-1,1 -777,nsIDOMPaintRequestList,{01627136-fdd8-44b4-aac0-7d613608a3d4},0,-1,1 -778,nsIModuleLoader,{9b328e24-4d85-4a9c-9cb7-f25e66f430c3},0,-1,1 -779,nsIDOMNSHTMLInputElement,{2cb61f32-b21f-4b87-904c-8876d8bb5f33},0,-1,1 -780,nsIDOMSVGFEDistantLightElement,{02141672-7f2c-412a-a7d7-4caa194842e9},0,-1,1 -781,nsITransfer,{23c51569-e9a1-4a92-adeb-3723db82ef7c},0,-1,1 -782,nsIOfflineCacheUpdateObserver,{a28abeaf-a0b4-4440-b2fe-bc78249710ea},0,-1,1 -783,nsIDOMHTMLTableColElement,{a6cf90b4-15b3-11d2-932e-00805f8add32},0,-1,1 -784,nsIScriptEventManager,{b6427ace-dc77-495b-ab21-43baeb52bc27},0,-1,0 -785,mozIStorageProgressHandler,{a3a6fcd4-bf89-4208-a837-bf2a73afd30c},0,-1,1 -786,nsIDOMSVGPathSegCurvetoQuadraticRel,{c46eb661-9c05-4d46-9b2a-c2ae5b166060},0,-1,1 -787,nsIXMLHttpRequestUpload,{09ff3682-7759-4441-a765-f70e1a1fabcf},0,-1,1 -788,nsIDOMSVGTSpanElement,{4a23cb1f-cf1e-437e-9524-8756f7928b2e},0,-1,1 -789,nsIControllerContext,{47b82b60-a36f-4167-8072-6f421151ed50},0,-1,1 -790,nsIUrlClassifierStreamUpdater,{daf3038a-556c-47d3-a3d2-36caa9a762a0},0,-1,1 -791,nsIDOMSVGClipPathElement,{0c3f45a4-e6d0-44e7-a2f8-d128ecf1db9b},0,-1,1 -792,nsICertTree,{a8cd1c89-a901-4735-831b-7198b7b8b6b1},0,-1,1 -793,nsIUTF8StringEnumerator,{9bdf1010-3695-4907-95ed-83d0410ec307},0,-1,1 -794,nsIExpatSink,{f61c56b5-ea5b-42b4-ad3c-17416e72e238},0,-1,1 -795,nsIDocShell,{8adfb831-1053-4a19-884d-bcdad7277b4b},0,-1,1 -796,extIEvents,{3a8ec9d0-ab19-11db-abbd-0800200c9a66},0,-1,1 -797,nsIINIParser,{7eb955f6-3e78-4d39-b72f-c1bf12a94bce},0,-1,1 -798,nsIXBLAccessible,{3716eb86-166b-445b-a94a-9b522fee96e6},0,-1,1 -799,nsIDOMEventListener,{df31c120-ded6-11d1-bd85-00805f8ae3f4},0,-1,1 -800,nsPICertNotification,{42cd7162-ea4a-4088-9888-63ea5095869e},0,-1,0 -801,nsIPermission,{28f16d80-157b-11d5-a542-0010a401eb10},0,-1,1 -802,nsIDOMStorageObsolete,{18013cf9-b104-49cf-9484-c2a7a845457e},0,-1,1 -803,nsIEditorObserver,{a6cf9125-15b3-11d2-932e-00805f8add32},0,-1,1 -804,nsIPrefSecurityCheck,{c73c9a05-92ce-46e1-8f69-90a2a3a36104},0,-1,0 -805,nsICertVerificationListener,{6684bce9-50db-48e1-81b7-98102bf81357},0,-1,1 -806,nsIDOMMessageEvent,{98150805-6a15-4667-815a-1a8c87cb4bbc},0,-1,1 -807,nsIIOService,{bddeda3f-9020-4d12-8c70-984ee9f7935e},0,-1,1 -808,nsIDOMCanvasGradient,{bbb20a59-524e-4662-981e-5e142814b20c},0,-1,1 -809,nsIDOMEventGroup,{33347bee-6620-4841-8152-36091ae80c7e},0,-1,1 -810,nsISidebarExternal,{4350fb73-9305-41df-a669-11d26222d420},0,-1,1 -811,nsITooltipListener,{44b78386-1dd2-11b2-9ad2-e4eee2ca1916},0,-1,1 -812,nsIDOMNSHTMLTextAreaElement,{ca066b44-9ddf-11d3-bccc-0060b0fc76bd},0,-1,1 -813,nsIDOMSVGNumberList,{59364ec4-faf1-460f-bf58-e6a6a2769a3a},0,-1,1 -814,nsIAccessibleStateChangeEvent,{444db51a-05fd-4576-8a64-32dbb2a83884},0,-1,1 -815,nsIDOMSVGPathSegCurvetoQuadraticSmoothAbs,{ff5bbb58-b49a-450f-b91b-e50585c34b3d},0,-1,1 -816,nsISAXLexicalHandler,{23c26a56-adff-440c-8caf-95c2dc2e399b},0,-1,1 -817,nsISMimeCert,{66710f97-a4dd-49f1-a906-fe0ebc5924c0},0,-1,1 -818,nsIAppShellService,{361facd0-6e9a-4ff1-a0d4-450744cf0023},0,-1,1 -819,nsIDOMSVGPathSegArcRel,{49d0360d-bb66-4ab9-b9b0-f49b93398595},0,-1,1 -820,nsILoginInfo,{c41b7dff-6b9b-42fe-b78d-113051facb05},0,-1,1 -821,nsIDOMHTMLMetaElement,{a6cf908a-15b3-11d2-932e-00805f8add32},0,-1,1 -822,nsINavHistoryResultViewer,{af4ac418-a687-4775-8ffa-97c160196432},0,-1,1 -823,nsISaveAsCharset,{33b87f70-7a9c-11d3-915c-006008a6edf6},0,-1,1 -824,nsICMSSecureMessage,{14b4394a-1dd2-11b2-b4fd-ba4a194fe97e},0,-1,1 -825,nsIStringBundleService,{d85a17c0-aa7c-11d2-9b8c-00805f8a16d9},0,-1,1 -826,nsIXULOverlayProvider,{1d5b5b94-dc47-4050-93b7-ac092e383cad},0,-1,1 -827,nsIAuthModule,{6e35dbc0-49ef-4e2c-b1ea-b72ec64450a2},0,-1,0 -828,nsICommandHandlerInit,{731c6c50-67d6-11d4-9529-0020183bf181},0,-1,1 -829,nsINavHistoryResult,{d1562f6f-8d5a-4042-8524-72f747a51b18},0,-1,1 -830,nsIDOMDOMImplementation,{a6cf9074-15b3-11d2-932e-00805f8add32},0,-1,1 -831,nsIFastLoadFileIO,{715577db-d9c5-464a-a32e-0a40c29b22d4},0,-1,1 -832,nsICollation,{b0132cc0-3786-4557-9874-910d7def5f93},0,-1,1 -833,nsIDOMLSOutput,{757e9971-8890-478d-a53a-07f9f6f6e0d3},0,-1,1 -834,nsIGConfService,{5009acae-6973-48c3-b6d6-52c692cc5d9d},0,-1,1 -835,nsIDOMSVGAnimatedNumber,{716e3b11-b03b-49f7-b82d-5383922b0ab3},0,-1,1 -836,nsIProfileStartup,{048e5ca1-0eb7-4bb1-a9a2-a36f7d4e0e3c},0,-1,1 -837,nsIUUIDGenerator,{138ad1b2-c694-41cc-b201-333ce936d8b8},0,-1,1 -838,nsIControllerCommandGroup,{9f82c404-1c7b-11d5-a73c-eca43ca836fc},0,-1,1 -839,nsIXSLTProcessor,{4a91aeb3-4100-43ee-a21e-9866268757c5},0,-1,1 -840,nsIDialogParamBlock,{f76c0901-437a-11d3-b7a0-e35db351b4bc},0,-1,1 -841,nsISessionStore,{70592a0d-87d3-459c-8db7-dcb8d47af78e},0,-1,1 -842,nsIRDFBlob,{237f85a2-1dd2-11b2-94af-8122582fc45e},0,-1,1 -843,nsIDOMHTMLHeadElement,{a6cf9087-15b3-11d2-932e-00805f8add32},0,-1,1 -844,nsIXPCComponents_Exception,{5bf039c0-e028-11d3-8f5d-0010a4e73d9a},0,-1,1 -845,nsIASN1PrintableItem,{114e1142-1dd2-11b2-ac26-b6db19d9184a},0,-1,1 -846,nsIDOMNSHTMLButtonElement,{c914d7a4-63b3-4d40-943f-91a3c7ab0d4d},0,-1,1 -847,nsIDOMHTMLMapElement,{a6cf90af-15b3-11d2-932e-00805f8add32},0,-1,1 -848,nsISupportsDouble,{b32523a0-4ac0-11d3-baea-00805f8a5dd7},0,-1,1 -849,nsICrashReporter_MOZILLA_1_9_2_BRANCH,{e8fe590f-7c08-4128-a746-57eb6b427d8f},0,-1,1 -850,nsINSSErrorsService,{3a5c7a0f-f5da-4a8b-a748-d7c5a528f33b},0,-1,1 -851,nsIProtocolProxyCallback,{a9967200-f95e-45c2-beb3-9b060d874bfd},0,-1,1 -852,nsIApplicationCache,{663e2e2e-04a0-47b6-87b3-a122be46cb53},0,-1,1 -853,nsIXULSortService,{f29270c8-3be5-4046-9b57-945a84dff132},0,-1,1 -854,nsIUploadChannel2,{8821e259-7252-4464-b874-a55d8ef6b222},0,-1,1 -855,nsIDOMNSHTMLOptionCollection,{1181207b-2337-41a7-8ddf-fbe96461256f},0,-1,1 -856,nsIXULTreeBuilder,{06b31b15-ebf5-4e74-a0e2-6bc0a18a3969},0,-1,1 -857,nsIModifyableXPointerResult,{2dc3be2e-642d-4d7e-b3c5-f3dac51afbee},0,-1,0 -858,nsIHistoryEntry,{a41661d4-1417-11d5-9882-00c04fa02f40},0,-1,1 -859,nsIBrowserDOMWindow,{f9691a49-7fb3-4b54-bb11-a4f2e0b6eddb},0,-1,1 -860,nsIDOMXULImageElement,{f73f4d77-a6fb-4ab5-b41e-15045a0cc6ff},0,-1,1 -861,nsIAnnotationObserver,{63fe98e0-6889-4c2c-ac9f-703e4bc25027},0,-1,1 -862,nsIFileURL,{d26b2e2e-1dd1-11b2-88f3-8545a7ba7949},0,-1,1 -863,nsIFindService,{5060b801-340e-11d5-be5b-b3e063ec6a3c},0,-1,1 -864,nsIContentDispatchChooser,{456ca3b2-02be-4f97-89a2-08c08d3ad88f},0,-1,1 -865,nsIHandlerInfo,{325e56a7-3762-4312-aec7-f1fcf84b4145},0,-1,1 -866,nsIDOMHTMLOptionsCollection,{bce0213c-f70f-488f-b93f-688acca55d63},0,-1,1 -867,nsIDOMHTMLTableRowElement,{a6cf90b6-15b3-11d2-932e-00805f8add32},0,-1,1 -868,nsIClipboardHelper,{44073a98-1dd2-11b2-8600-d0ae854dbe93},0,-1,1 -869,nsIWebProgressListener,{570f39d1-efd0-11d3-b093-00a024ffc08c},0,-1,1 -870,nsIReadConfig,{ba5bc4c6-1dd1-11b2-bb89-b844c6ec0339},0,-1,0 -871,nsIUrlClassifierHashCompleter,{ade9b72b-3562-44f5-aba6-e63246be53ae},0,-1,1 -872,nsIDragService,{82b58ada-f490-4c3d-b737-1057c4f1d052},0,-1,1 -873,nsIDOMSVGException,{64e6f0e1-af99-4bb9-ab25-7e56012f0021},0,-1,1 -874,nsIDOMSVGTransformable,{b81f6e37-1842-4534-a546-1ab86e59a3c6},0,-1,1 -875,nsIDOMSVGFEMorphologyElement,{16154319-fb5f-4473-b360-5065b6096d33},0,-1,1 -876,nsILocale,{21035ee0-4556-11d3-91cd-00105aa3f7dc},0,-1,1 -877,nsIClipboardCommands,{b8100c90-73be-11d2-92a5-00105a1b0d64},0,-1,1 -878,nsIUpdateItem,{f559f340-5160-420f-abc8-19b251708e7e},0,-1,1 -879,nsICiter,{a6cf9102-15b3-11d2-932e-00805f8add32},0,-1,1 -880,nsIUrlClassifierUpdateObserver,{bbb33c65-e783-476c-8db0-6ddb91826c07},0,-1,1 -881,nsIXSLTException,{e06dfaea-92d5-47f7-a800-c5f5404d8771},0,-1,1 -882,nsIFormHistoryImporter,{9e811188-6a5b-4d96-a92d-1bac66a41898},0,-1,1 -883,nsISAXDTDHandler,{4d01f225-6cc5-11da-be43-001422106990},0,-1,1 -884,nsILivemarkService,{62a5fe00-d85c-4a63-aef7-176d8f1b189d},0,-1,1 -885,nsIDOMSVGDocument,{12d3b664-1dd2-11b2-a7cf-ceee7e90f396},0,-1,1 -886,nsIDOMHTMLLIElement,{a6cf909e-15b3-11d2-932e-00805f8add32},0,-1,1 -887,nsIDOMParserJS,{ba6bcd6c-63d8-49b3-bc8a-1e5e895645bc},0,-1,1 -888,nsIDOMHTMLUListElement,{a6cf9099-15b3-11d2-932e-00805f8add32},0,-1,1 -889,nsIDOMXULContainerElement,{bc07c626-4294-43ae-9b0a-e726de0adcad},0,-1,1 -890,nsIClipboardOwner,{5a31c7a1-e122-11d2-9a57-000064657374},0,-1,1 -891,nsIDOMSimpleGestureEvent,{cb68e879-f710-415d-a871-9a550860df01},0,-1,1 -892,nsIScriptableInterfaces,{01c78c65-31da-456b-90bf-da39d09fdcbf},0,-1,1 -893,nsIURI,{07a22cc0-0ce5-11d3-9331-00104ba0fd40},0,-1,1 -894,nsIDOMSVGMatrix,{ec2da3ef-5a99-49ed-aaef-b5af916c14ac},0,-1,1 -895,nsIChannelClassifier,{1481c5b5-9f6e-4995-8fe3-2aad5c06440d},0,-1,1 -896,nsIDOMHTMLTableElement,{a6cf90b2-15b3-11d2-932e-00805f8add32},0,-1,1 -897,nsIDOMSVGEvent,{13aed1cc-a505-45d5-bbc2-0052c6bf200f},0,-1,1 -898,nsIContextMenuListener2,{7fb719b3-d804-4964-9596-77cf924ee314},0,-1,1 -899,nsIIOUtil,{e8152f7f-4209-4c63-ad23-c3d2aa0c5a49},0,-1,1 -900,nsISimpleStreamListener,{a9b84f6a-0824-4278-bae6-bfca0570a26e},0,-1,1 -901,nsIDOMWindowUtils,{6a60fde5-a00a-4732-bbea-2787c174c04f},0,-1,1 -902,nsIDOMXULPopupElement,{c32390a8-2bd8-4d1b-bf9f-1b1d0a944d19},0,-1,1 -903,nsIDOMNSMouseEvent,{1b8e528d-7dca-44ee-8ee6-c44594ebcef1},0,-1,1 -904,mozIStorageBindingParamsArray,{e676e1a3-1dc6-4802-ac03-291fa9de7f93},0,-1,1 -905,nsICacheService,{de114eb4-29fc-4959-b2f7-2d03eb9bc771},0,-1,1 -906,nsIFileView,{60b320d2-1dd2-11b2-bd73-dc3575f78ddd},0,-1,1 -907,nsIConsoleService,{883472a0-ea9b-11da-8ad9-0800200c9a66},0,-1,1 -908,nsIDocShellTreeOwner,{bc0eb30e-656e-491e-a7ae-7f460b660c8d},0,-1,1 -909,nsIDOMHTMLOListElement,{a6cf909a-15b3-11d2-932e-00805f8add32},0,-1,1 -910,nsIContextMenuListener,{3478b6b0-3875-11d4-94ef-0020183bf181},0,-1,1 -911,nsIExceptionManager,{efc9d00b-231c-4feb-852c-ac017266a415},0,-1,1 -912,nsIDOMSVGViewSpec,{ede34b03-57b6-45bf-a259-3550b5697286},0,-1,1 -913,nsINativeTreeView,{38e0b44d-fa08-458c-83fb-3e10b12aeb45},0,-1,0 -914,nsIPluginTagInfo,{6d827df5-b5cd-416c-85cb-3cdd05c7aed1},0,-1,0 -915,nsIInlineSpellChecker,{07be036a-2355-4a92-b150-5c9b7e9fdf2f},0,-1,1 -916,nsIDOMSVGFEOffsetElement,{c080f191-b22c-4fc0-85d5-a79dc3fa7ec8},0,-1,1 -917,nsIJSRuntimeService,{e7d09265-4c23-4028-b1b0-c99e02aa78f8},0,-1,0 -918,nsIHelperAppLauncherDialog,{f3704fdc-8ae6-4eba-a3c3-f02958ac0649},0,-1,1 -919,xpcIJSModuleLoader,{89da3673-e699-4f26-9ed7-11a528011434},0,-1,1 -920,nsIPluginTag,{13a1b39e-72e5-442d-aa73-5905ffaf837b},0,-1,1 -921,nsIRDFInt,{e13a24e3-c77a-11d2-80be-006097b76b8e},0,-1,1 -922,nsIRDFInferDataSource,{2b04860f-4017-40f6-8a57-784a1e35077a},0,-1,1 -923,nsIDOMSVGCircleElement,{0f89f2a4-b168-4602-90f5-1874418c0a6a},0,-1,1 -924,nsIJSContextStackIterator,{c7e6b7aa-fc12-4ca7-b140-98c38b698961},0,-1,0 -925,nsIProperty,{6dcf9030-a49f-11d5-910d-0010a4e73d9a},0,-1,1 -926,nsIDOMStyleSheetList,{a6cf9081-15b3-11d2-932e-00805f8add32},0,-1,1 -927,nsIDNSRecord,{31c9c52e-1100-457d-abac-d2729e43f506},0,-1,1 -928,nsIDOMSVGPathSegCurvetoCubicSmoothRel,{dd5b4b00-edaa-493a-b477-bbc2576b4a98},0,-1,1 -929,nsIDOMCSSCharsetRule,{19fe78cc-65ff-4b1d-a5d7-9ea89692cec6},0,-1,1 -930,nsILoginManagerStorage,{e66c97cd-3bcf-4eee-9937-38f650372d77},0,-1,1 -931,nsIPrefetchService,{cba513eb-c457-4b93-832c-1a979e66edd1},0,-1,1 -932,nsIDOMNSDocumentStyle,{26311d10-7e24-4c7b-bb3d-17aad86f4d88},0,-1,1 -933,nsIObjectOutputStream,{92c898ac-5fde-4b99-87b3-5d486422094b},0,-1,1 -934,nsIDOMSVGAnimatedRect,{ca45959e-f1da-46f6-af19-1ecdc322285a},0,-1,1 -935,nsIDOMHTMLLabelElement,{a6cf9096-15b3-11d2-932e-00805f8add32},0,-1,1 -936,nsIResumableChannel,{4ad136fa-83af-4a22-a76e-503642c0f4a8},0,-1,1 -937,nsIScriptLoaderObserver,{7b787204-76fb-4764-96f1-fb7a666db4f4},0,-1,1 -938,nsIHttpChannelInternal,{0eb66361-faaa-4e52-8c7e-6c25f11f8e3c},0,-1,1 -939,nsICollationFactory,{04971e14-d6b3-4ada-8cbb-c3a13842b349},0,-1,1 -940,nsIXPointerResult,{d3992637-f474-4b65-83ed-323fe69c60d2},0,-1,1 -941,nsITXTToHTMLConv,{933355f6-1dd2-11b2-a9b0-d335b9e35983},0,-1,1 -942,mozIStorageError,{1f350f96-7023-434a-8864-40a1c493aac1},0,-1,1 -943,nsIRequestObserverProxy,{7df8845f-938a-4437-9ea4-b11b850048f1},0,-1,1 -944,nsIWorkerNavigator,{74fb665a-e477-4ce2-b3c6-c58b1b28b6c3},0,-1,1 -945,nsISAXXMLReader,{5556997e-d816-4218-8b54-803d4261206e},0,-1,1 -946,nsIDOMLSResourceResolver,{9e61c7c8-8698-4477-9971-0923513919bd},0,-1,1 -947,nsIWritablePropertyBag,{96fc4671-eeb4-4823-9421-e50fb70ad353},0,-1,1 -948,nsIDownloadManager,{bacca1ac-1b01-4a6f-9e91-c2ead1f7d2c0},0,-1,1 -949,nsIDOM3Document,{2e0e9ea1-72ab-4d9e-bdeb-ca64e1abeba4},0,-1,1 -950,nsIDOMPageTransitionEvent,{b712418b-376f-4f75-b156-5d9ad99fe51f},0,-1,1 -951,nsIArray,{114744d9-c369-456e-b55a-52fe52880d2d},0,-1,1 -952,nsIDOMDocumentView,{1acdb2ba-1dd2-11b2-95bc-9542495d2569},0,-1,1 -953,nsIOfflineCacheUpdate,{877261bb-b952-4d27-847e-859bdd47c0ec},0,-1,1 -954,nsIAccessibleRetrieval,{244e4c67-a1d3-44f2-9cab-cdaa31b68046},0,-1,1 -955,nsIDOMMimeTypeArray,{f6134683-f28b-11d2-8360-c90899049c3c},0,-1,1 -956,nsISidebar,{67cf6231-c303-4f7e-b9b1-a0e87772ecfd},0,-1,1 -957,nsIMutableArray,{af059da0-c85b-40ec-af07-ae4bfdc192cc},0,-1,1 -958,nsIDOMCSS2Properties,{529b987a-cb21-4d58-99d7-9586e7662801},0,-1,1 -959,nsIHashable,{17e595fa-b57a-4933-bd0f-b1812e8ab188},0,-1,1 -960,nsIDOMGeoPositionAddress_MOZILLA_1_9_2_BRANCH,{98808deb-c8e4-422c-ba97-08bf2031464c},0,-1,1 -961,nsIDOMNSUIEvent,{72c9f79c-98cd-4224-a467-86b59c0a38f7},0,-1,1 -962,fuelIBookmark,{808585b6-7568-4b26-8c62-545221bf2b8c},0,-1,1 -963,nsIDOMSVGMarkerElement,{6a3b7b40-e65a-4e9c-9ee7-ca03ed0a18c7},0,-1,1 -964,nsIDOMDOMConstructor,{0ccbcf19-d1b4-489e-984c-cd8c43672bb9},0,-1,1 -965,nsIDOMUIEvent,{a6cf90c3-15b3-11d2-932e-00805f8add32},0,-1,1 -966,nsIRDFResource,{fb9686a7-719a-49dc-9107-10dea5739341},0,-1,1 -967,nsIDOMFileException,{b52356e1-45c5-4d61-b61a-fb9bd91690e1},0,-1,1 -968,nsIXULTemplateResult,{ebea0230-36fa-41b7-8e31-760806057965},0,-1,1 -969,nsIDOMSVGLength,{2596325c-aed0-487e-96a1-0a6d589b9c6b},0,-1,1 -970,imgIContainerObserver,{e214c295-4b8e-4aa9-9907-45289e57295b},0,-1,1 -971,nsIDOMCSSRule,{a6cf90c1-15b3-11d2-932e-00805f8add32},0,-1,1 -972,nsIDOMSVGPreserveAspectRatio,{7ae42f27-4799-4e7c-86c6-e1dae6ad5157},0,-1,1 -973,nsIEditorDocShell,{3bdb8f01-f141-11d4-a73c-fba4aba8a3fc},0,-1,1 -974,nsIDocumentCharsetInfo,{2d40b291-01e1-11d4-9d0e-0050040007b2},0,-1,1 -975,nsIConsoleListener,{eaaf61d6-1dd1-11b2-bc6e-8fc96480f20d},0,-1,1 -976,nsIProgrammingLanguage,{ea604e90-40ba-11d5-90bb-0010a4e73d9a},0,-1,1 -977,nsIDOMNSHTMLImageElement,{a6cf90c7-15b3-11d2-932e-00805f8add32},0,-1,1 -978,nsIUnicharStreamLoader,{9037f476-7c08-4729-b690-3e425269802b},0,-1,1 -979,nsIFrameLoaderOwner,{641c2d90-4ada-4367-bdb1-80831614161d},0,-1,1 -980,nsIDOMHTMLAreaElement,{a6cf90b0-15b3-11d2-932e-00805f8add32},0,-1,1 -981,nsIKeyObject,{4b31f4ed-9424-4710-b946-79b7e33cf3a8},0,-1,1 -982,nsIMIMEService,{5b3675a1-02db-4f8f-a560-b34736635f47},0,-1,1 -983,nsIDOMWindow2,{73c5fa35-3add-4c87-a303-a850ccf4d65a},0,-1,1 -984,nsIDOMWindow,{a6cf906b-15b3-11d2-932e-00805f8add32},0,-1,1 -985,nsPISocketTransportService,{83123036-81c0-47cb-8d9c-bd85d29a1b3f},0,-1,1 -986,nsIDOMGeoPositionOptions,{453b72de-ea90-4f09-ae16-c2e7ee0dddc4},0,-1,1 -987,nsIURLFormatter,{4ab31d30-372d-11db-a98b-0800200c9a66},0,-1,1 -988,nsICacheEntryInfo,{fab51c92-95c3-4468-b317-7de4d7588254},0,-1,1 -989,imgIContainer,{1bcf7a25-1356-47a8-bf80-e284989ea38f},0,-1,1 -990,nsIDOMSVGPolylineElement,{7b6e15cf-9793-41ee-adcc-cc1c206c80e6},0,-1,1 -991,nsPIWindowWatcher,{8624594a-28d7-4bc3-8d12-b1c2b9eefd90},0,-1,0 -992,nsIFeedResult,{7a180b78-0f46-4569-8c22-f3d720ea1c57},0,-1,1 -993,nsIDOMPaintRequest,{4802360b-f1c0-4d84-bb9e-9d2ccb9de461},0,-1,1 -994,nsIDOMSVGSVGElement,{83b04425-9509-49f5-af75-1ae1f8f3e871},0,-1,1 -995,nsIFormSubmitObserver,{0787d64a-44bf-4273-8438-61ff13ebec0c},0,-1,1 -996,nsIDOMUserDataHandler,{91afebdd-a201-4db0-b728-9d59580f0cfd},0,-1,1 -997,nsIDOMXULTreeElement,{1f8111b2-d44d-4d11-845a-a70ae06b7d04},0,-1,1 -998,nsIDOMSVGTextContentElement,{87ad94bc-07c9-412b-b2d8-de245a2e84a5},0,-1,1 -999,nsIDOM3Node,{29fb2a18-1dd2-11b2-8dd9-a6fd5d5ad12f},0,-1,1 -1000,nsIDirectoryServiceProvider2,{2f977d4b-5485-11d4-87e2-0010a4e75ef2},0,-1,1 -1001,nsIWebPageDescriptor,{6f30b676-3710-4c2c-80b1-0395fb26516e},0,-1,1 -1002,nsINetworkLinkService,{61618a52-ea91-4277-a4ab-ebe10d7b9a64},0,-1,1 -1003,nsIDOMHTMLParamElement,{a6cf90ad-15b3-11d2-932e-00805f8add32},0,-1,1 -1004,jsdIValue,{9cab158f-dc78-41dd-9d11-79e05cb3f2bd},0,-1,1 -1005,nsIDOMSVGFESpotLightElement,{5515dd05-3d9d-4d6c-8460-a04aaf5afe15},0,-1,1 -1006,jsdIScript,{18e09893-f461-4b4b-94d3-776fb0069c6f},0,-1,1 -1007,nsIFaviconService,{66f6b992-e2d3-43da-ba2a-d966e34a7654},0,-1,1 -1008,nsIClassInfo,{986c11d0-f340-11d4-9075-0010a4e73d9a},0,-1,1 -1009,nsIDOMFileError,{4bdafb64-15e2-49c1-a090-4315a7884a56},0,-1,1 -1010,nsISOCKSSocketInfo,{8f755c44-1dd2-11b2-a613-91117453fa95},0,-1,1 -1011,nsISupportsPriority,{aa578b44-abd5-4c19-8b14-36d4de6fdc36},0,-1,1 -1012,nsIKeyObjectFactory,{264eb54d-e20d-49a0-890c-1a5986ea81c4},0,-1,1 -1013,nsIWifiListener,{bcd4bede-f4a5-4a62-9071-d7a60174e376},0,-1,1 -1014,nsIInputStream,{fa9c7f6c-61b3-11d4-9877-00c04fa0cf4a},0,-1,1 -1015,nsISecurityCheckedComponent,{0dad9e8c-a12d-4dcb-9a6f-7d09839356e1},0,-1,1 -1016,nsIDOMSVGAnimatedPoints,{ebf334b3-86ef-4bf3-8a92-d775c72defa4},0,-1,1 -1017,nsIDOMHTMLFormElement,{a6cf908f-15b3-11d2-932e-00805f8add32},0,-1,1 -1018,nsIDOMCanvasRenderingContext2D,{3e7d5d06-8846-4cff-8739-44756cbf494f},0,-1,1 -1019,nsIScriptableInterfacesByID,{c99cffac-5aed-4267-ad2f-f4a4c9d4a081},0,-1,1 -1020,nsIConverterOutputStream,{4b71113a-cb0d-479f-8ed5-01daeba2e8d4},0,-1,1 -1021,nsIDOMViewCSS,{0b9341f3-95d4-4fa4-adcd-e119e0db2889},0,-1,1 -1022,nsIEnvironment,{101d5941-d820-4e85-a266-9a3469940807},0,-1,1 -1023,nsITreeColumns,{f8a8d6b4-6788-438d-9009-7142798767ab},0,-1,1 -1024,nsIDOMHTMLHtmlElement,{a6cf9086-15b3-11d2-932e-00805f8add32},0,-1,1 -1025,nsIHttpProtocolHandler,{415d4087-79d3-40fe-b194-0ada8471f895},0,-1,1 -1026,nsIDOMSVGUnitTypes,{154b572f-3d0b-49c0-8b5d-8864d05bd3d1},0,-1,1 -1027,nsIImageLoadingContent,{e036857e-3417-4812-a5f2-89668a616781},0,-1,1 -1028,nsIRDFXMLSerializer,{8ae1fbf8-1dd2-11b2-bd21-d728069cca92},0,-1,1 -1029,nsICookie,{e9fcb9a4-d376-458f-b720-e65e7df593bc},0,-1,1 -1030,nsICMSEncoder,{a15789aa-8903-462b-81e9-4aa2cff4d5cb},0,-1,0 -1031,nsISelectElement,{35bd8ed5-5f34-4126-8c4f-38ba01681836},0,-1,0 -1032,nsIAddonRepository,{c4d2ac29-6edc-43cd-8dc8-e4cf213aa1be},0,-1,1 -1033,extIEventListener,{2dfe3a50-ab2f-11db-abbd-0800200c9a66},0,-1,1 -1034,nsIRDFContainer,{d4214e90-fb94-11d2-bdd8-00104bde6048},0,-1,1 -1035,nsIXPIInstallInfo,{5a4a775c-e452-4cf2-8ff8-d327ae24aec6},0,-1,1 -1036,nsINavBookmarksService,{3b6ff5c5-0ab4-4aab-b1be-d569763a6ce0},0,-1,1 -1037,nsIThreadManager,{056216f5-8803-46b4-9199-d95bc1f0446f},0,-1,1 -1038,nsIDOMLinkStyle,{24d89a65-f598-481e-a297-23cc02599bbd},0,-1,1 -1039,nsIDOMSVGPoint,{45f18f8f-1315-4447-a7d5-8aeca77bdcaf},0,-1,1 -1040,nsIXMLHttpRequest,{ad78bf21-2227-447e-8ed5-824a017c265f},0,-1,1 -1041,nsISupportsCString,{d65ff270-4a1c-11d3-9890-006008962422},0,-1,1 -1042,nsIDebug,{3bf0c3d7-3bd9-4cf2-a971-33572c503e1e},0,-1,1 -1043,IDispatch,{00020400-0000-0000-c000-000000000046},0,-1,1 -1044,nsIEntropyCollector,{6f883680-ab9d-11d4-9978-00b0d02354a0},0,-1,0 -1045,nsIDOMEvent,{a66b7b80-ff46-bd97-0080-5f8ae38add32},0,-1,1 -1046,nsIFeedResultListener,{4d2ebe88-36eb-4e20-bcd1-997b3c1f24ce},0,-1,1 -1047,nsIDOMTreeWalker,{400af3ca-1dd2-11b2-a50a-887ecca2e63a},0,-1,1 -1048,inICSSValueSearch,{e0d39e48-1dd1-11b2-81bd-9a0c117f0736},0,-1,1 -1049,nsIProcess,{3c09efde-5f49-42b8-8520-57be02a5f84e},0,-1,1 -1050,nsIWindowCreator,{30465632-a777-44cc-90f9-8145475ef999},0,-1,1 -1051,nsIScriptSecurityManager_1_9_2,{8229dd23-47c5-4601-a80b-0166d595a21e},0,-1,1 -1052,nsIDOMDocumentXBL,{1a38762b-4da5-4f61-80fb-9317e198cb92},0,-1,1 -1053,nsIObserverService,{d07f5192-e3d1-11d2-8acd-00105a1b8860},0,-1,1 -1054,nsIApplicationCacheService,{611161c8-37d0-450f-a4fe-457c47bbaf64},0,-1,1 -1055,nsIDBusHandlerApp,{1ffc274b-4cbf-4bb5-a635-05ad2cbb6534},0,-1,1 -1056,nsIDOMHTMLFrameSetElement,{a6cf90b8-15b3-11d2-932e-00805f8add32},0,-1,1 -1057,nsICertOverrideService,{31738d2a-77d3-4359-84c9-4be2f38fb8c5},0,-1,1 -1058,nsIPipe,{f4211abc-61b3-11d4-9877-00c04fa0cf4a},0,-1,1 -1059,nsINavHistoryBatchCallback,{5143f2bb-be0a-4faf-9acb-b0ed3f82952c},0,-1,1 -1060,nsIFactory,{00000001-0000-0000-c000-000000000046},0,-1,1 -1061,nsILoadContext,{314d8a54-1caf-4721-94d7-f6c82d9b82ed},0,-1,1 -1062,nsIProtectedAuthThread,{4bb27cb7-8984-4cee-8ce7-9b014c3d091b},0,-1,1 -1063,nsIFIXptrEvaluator,{50d28211-8fb8-4323-b93d-08a6e80e559e},0,-1,0 -1064,nsISupportsPRTime,{e2563630-4a1c-11d3-9890-006008962422},0,-1,1 -1065,nsIDOMSVGStopElement,{93169940-7663-4eab-af23-94a8a08c2654},0,-1,1 -1066,inISearchProcess,{d5fa765b-2448-4686-b7c1-5ff13acb0fc9},0,-1,1 -1067,nsIDOMSVGRect,{5b912111-c10e-498f-a44c-c713c1843007},0,-1,1 -1068,nsISecurityPref,{94afd973-8045-4c6c-89e6-75bdced4209e},0,-1,0 -1069,nsIFeedTextConstruct,{fc97a2a9-d649-4494-931e-db81a156c873},0,-1,1 -1070,nsIIncrementalDownload,{6687823f-56c4-461d-93a1-7f6cb7dfbfba},0,-1,1 -1071,nsIDocShellHistory,{89caa9f0-8b1c-47fb-b0d3-f0aef0bff749},0,-1,1 -1072,nsICacheSession,{ae9e84b5-3e2d-457e-8fcd-5bbd2a8b832e},0,-1,1 -1073,txIFunctionEvaluationContext,{0ecbb00c-6a78-11d9-9791-000a95dc234c},0,-1,1 -1074,nsIDOMHTMLEmbedElement,{123f90ab-15b3-11d2-456e-00805f8add32},0,-1,1 -1075,nsIDOMHTMLAnchorElement,{a6cf90aa-15b3-11d2-932e-00805f8add32},0,-1,1 -1076,nsICharsetConverterManager,{f5323a76-c8f7-4c65-8d0c-1250e969c7d5},0,-1,1 -1077,nsIApplicationCacheNamespace,{96e4c264-2065-4ce9-93bb-43734c62c4eb},0,-1,1 -1078,nsIProfileMigrator,{24ce8b9d-b7ff-4279-aef4-26e158f03e34},0,-1,1 -1079,nsIRDFPropagatableDataSource,{5a9b4770-9fcb-4307-a12e-4b6708e78b97},0,-1,1 -1080,mozISpellI18NUtil,{b075d5dc-1df1-441a-bebf-680d8caaa19c},0,-1,1 -1081,nsIGlobalHistory3,{24306852-c60e-49c3-a455-90f6747118ba},0,-1,1 -1082,nsIScriptEventHandler,{375f787f-8d3a-4344-b540-293d5645c22c},0,-1,0 -1083,nsIDOMChromeWindow,{09b86cbd-9784-4fe4-9be6-70b9bbca3a9c},0,-1,1 -1084,nsISupports,{00000000-0000-0000-c000-000000000046},0,-1,1 -1085,nsIFileProtocolHandler,{1fb25bd5-4354-4dcd-8d97-621b7b3ed2e4},0,-1,1 -1086,nsILoginManagerIEMigrationHelper,{8a59ea3d-b8d0-48af-a3e2-63e27a02cde7},0,-1,1 -1087,nsIMicrosummarySet,{7111e88d-fecd-4b17-b7a9-1fa74e23153f},0,-1,1 -1088,nsIFeedEntry,{31bfd5b4-8ff5-4bfd-a8cb-b3dfbd4f0a5b},0,-1,1 -1089,nsIDragSession_1_9_2,{fde41f6a-c710-46f8-a0a8-1ff76ca4ff57},0,-1,1 -1090,nsIURIClassifierCallback,{8face46e-0c96-470f-af40-0037dcd797bd},0,-1,1 -1091,nsIXPCComponents_Constructor,{88655640-e028-11d3-8f5d-0010a4e73d9a},0,-1,1 -1092,nsIXPCException,{cac29630-7bf2-4e22-811b-46855a7d5af0},0,-1,1 -1093,nsIRDFXMLSinkObserver,{eb1a5d30-ab33-11d2-8ec6-00805f29f370},0,-1,1 -1094,nsIDOMLSSerializer,{96ea4792-d362-4c28-a8c2-0337790d648a},0,-1,1 -1095,nsIDownloadProgressListener,{7acb07ea-cac2-4c15-a3ad-23aaa789ed51},0,-1,1 -1096,nsIOutputIterator,{7330650e-1dd2-11b2-a0c2-9ff86ee97bed},0,-1,1 -1097,nsIPluginStreamInfo,{3a5fa31d-1ac1-4ea7-b7a6-dc9db0000b79},0,-1,0 -1098,nsIDOMHTMLQuoteElement,{a6cf90a3-15b3-11d2-932e-00805f8add32},0,-1,1 -1099,nsIPlacesTransactionsService,{32eee5da-2bc7-4d18-8a54-a8ff0dec4d2a},0,-1,1 -1100,nsIX509Cert2,{5b62c61c-f898-4dab-8ace-51109bb459b4},0,-1,1 -1101,nsIFeedResultService,{950a829e-c20e-4dc3-b447-f8b753ae54da},0,-1,1 -1102,nsIMarkupDocumentViewer,{40b2282a-a882-4483-a634-dec468d88377},0,-1,1 -1103,txINodeSet,{15d424c0-6b47-11d9-9791-000a95dc234c},0,-1,1 -1104,nsIDOMSVGFEMergeNodeElement,{540c3447-4b07-4bd3-84df-30f66b68df14},0,-1,1 -1105,nsIAccelerometer,{4b04e228-0b33-43fc-971f-af60cedb1c21},0,-1,1 -1106,nsIDOMSVGPathSegMovetoAbs,{30cf7749-bf1f-4f9c-9558-8ee24da3a22c},0,-1,1 -1107,nsIScriptableInputStream,{a2a32f90-9b90-11d3-a189-0050041caf44},0,-1,1 -1108,nsIDOMLSInput,{165e7f61-5048-4c2c-b4bf-6b44bb617ee4},0,-1,1 -1109,nsIContentURIGrouper,{4bb38cb4-c3cb-4d17-9799-1b3132b39723},0,-1,1 -1110,nsICharsetConverterManager_1_9_BRANCH,{36982132-707c-4d77-b27f-958e76e022de},0,-1,1 -1111,nsIScriptableUnicodeConverter,{1ea19c6c-c59f-4fd7-9fc7-151e946baca0},0,-1,1 -1112,nsIEditorIMESupport,{57032dcb-e8c7-4eb6-8ec6-a0f8e300809d},0,-1,1 -1113,nsISelection2,{5d21d5fe-3691-4716-a334-4691eea54d29},0,-1,1 -1114,nsIDOMHTMLHeadingElement,{a6cf90a2-15b3-11d2-932e-00805f8add32},0,-1,1 -1115,nsIWebNavigationInfo,{62a93afb-93a1-465c-84c8-0432264229de},0,-1,1 -1116,nsIAccessibleDocument,{b7ae45bd-21e9-4ed5-a67e-86448b25d56b},0,-1,1 -1117,nsIStreamListener,{1a637020-1482-11d3-9333-00104ba0fd40},0,-1,1 -1118,nsIOutputStreamCallback,{40dbcdff-9053-42c5-a57c-3ec910d0f148},0,-1,1 -1119,jsdIScriptEnumerator,{5ba76b99-acb1-4ed8-a4e4-a716a7d9097e},0,-1,1 -1120,nsIWebProgress,{570f39d0-efd0-11d3-b093-00a024ffc08c},0,-1,1 -1121,nsIBoxObject,{ce572460-b0f2-4650-a9e7-c53a99d3b6ad},0,-1,1 -1122,nsIXULChromeRegistry,{2860e205-490e-4b06-90b6-87160d35a5a7},0,-1,1 -1123,nsIScreenManager,{b92319e6-9a84-4ca7-a2cc-eec22ea9854e},0,-1,1 -1124,nsIUpdateTimerManager,{0765c92c-6145-4253-9db4-594d8023087e},0,-1,1 -1125,nsIJSCID,{26b2a374-6eaf-46d4-acaf-1c6be152d36b},0,-1,1 -1126,nsIDOMNSElement,{c9da11bc-32d4-425e-a91f-7e0939c39251},0,-1,1 -1127,nsIHttpChannel,{9277fe09-f0cc-4cd9-bbce-581dd94b0260},0,-1,1 -1128,txIEXSLTRegExFunctions,{c180e993-aced-4839-95a0-ecd5ff138be9},0,-1,1 -1129,nsIPrinterEnumerator,{5e738fff-404c-4c94-9189-e8f2cce93e94},0,-1,1 -1130,mozISpellI18NManager,{aeb8936f-219c-4d3c-8385-d9382daa551a},0,-1,1 -1131,nsIPluginInstance,{67d606f4-1d6d-4fe2-a2d6-10bda65788e1},0,-1,0 -1132,nsIIdleService,{cc52f19a-63ae-4a1c-9cc3-e79eace0b471},0,-1,1 -1133,nsIDownload,{c891111e-92a6-47b8-bc46-874ebb61ac9d},0,-1,1 -1134,nsIObjectLoadingContent,{90ab443e-3e99-405e-88c9-9c42adaa3217},0,-1,1 -1135,nsIAuthPromptProvider,{bd9dc0fa-68ce-47d0-8859-6418c2ae8576},0,-1,1 -1136,nsISelection,{b2c7ed59-8634-4352-9e37-5484c8b6e4e1},0,-1,1 -1137,nsIAccessibleRole,{6793ca5c-c7cb-41db-9fb9-c16c0525f962},0,-1,1 -1138,mozIStorageBindingParams,{a8d4827c-641c-45e3-a9ea-493570b4106b},0,-1,1 -1139,nsIXPointerSchemeProcessor,{093d3559-b56b-44d0-8764-c25815715080},0,-1,0 -1140,nsIDOMSVGLengthList,{a8760fcd-3de5-446a-a009-5cf877e7a4df},0,-1,1 -1141,nsIRDFDelegateFactory,{a1b89470-a124-11d3-be59-0020a6361667},0,-1,1 -1142,nsIWebContentConverterService,{de7cc06e-e778-45cb-b7db-7a114e1e75b1},0,-1,1 -1143,nsIUrlClassifierHashCompleterCallback,{bbd6c954-7cb4-4447-bc55-8cefd1ceed89},0,-1,1 -1144,nsIX509CertDB2,{e0df4784-6560-45bf-b1b7-86076a0e8381},0,-1,1 -1145,nsIDOMTextMetrics,{2d01715c-ec7d-424a-ab85-e0fd70c8665c},0,-1,1 -1146,nsILoadGroup,{3de0a31c-feaf-400f-9f1e-4ef71f8b20cc},0,-1,1 -1147,nsIExtensionManager,{494e8302-8689-4a8a-a08d-0da17c649c7d},0,-1,1 -1148,nsICharsetResolver,{d143a084-b626-4614-845f-41f3ca43a674},0,-1,1 -1149,nsIEditActionListener,{b22907b1-ee93-11d2-8d50-000064657374},0,-1,1 -1150,nsIProperties,{78650582-4e93-4b60-8e85-26ebd3eb14ca},0,-1,1 -1151,nsIUserCertPicker,{06d018e0-d41b-4629-a4fc-daaa6029888e},0,-1,1 -1152,nsIAccessibilityService,{6a58f7e8-587c-40dd-b684-dc3e54f1342a},0,-1,0 -1153,nsIDOMSVGAElement,{35d3365a-3e6f-4cdf-983d-fdaed1564478},0,-1,1 -1154,nsIDOMSVGTransform,{29cc2e14-6d18-4710-bda9-a88d9d3bc8dc},0,-1,1 -1155,nsICommandLineRunner,{c1f4cfbf-a41f-4628-aa6c-9fb914478af8},0,-1,0 -1156,nsIPromptService2,{cf86d196-dbee-4482-9dfa-3477aa128319},0,-1,1 -1157,nsIDOMDocument,{a6cf9075-15b3-11d2-932e-00805f8add32},0,-1,1 -1158,nsIPluginStreamListener,{df055770-5448-11d2-8164-006008119d7a},0,-1,0 -1159,mozIStorageAggregateFunction,{763217b7-3123-11da-918d-000347412e16},0,-1,1 -1160,nsPIExternalAppLauncher,{d0b5d7d3-9565-403d-9fb5-e5089c4567c6},0,-1,1 -1161,nsIDOMProcessingInstruction,{a6cf907f-15b3-11d2-932e-00805f8add32},0,-1,1 -1162,nsITreeBoxObject,{64ba5199-c4f4-4498-bbdc-f8e4c369086c},0,-1,1 -1163,nsIDOMNSRange,{59188642-23b4-41d6-bde1-302c3906d1f0},0,-1,1 -1164,nsIDOMSVGAngle,{58b6190e-37b3-412a-ba02-1d5ad6c6ea7c},0,-1,1 -1165,nsIDOMXPathEvaluator,{75506f8a-b504-11d5-a7f2-ca108ab8b6fc},0,-1,1 -1166,nsIXPointerEvaluator,{addd0fe5-8555-45b7-b763-97d5898ce268},0,-1,0 -1167,nsISecretDecoderRing,{0ec80360-075c-11d4-9fd4-00c04f1b83d8},0,-1,1 -1168,nsIAutoCompleteMdbResult2,{148c9dc5-0fbb-408b-80fe-544f6a85b433},0,-1,0 -1169,nsIPrintOptions,{92597c2b-109b-40bb-8f93-9b9acfa31de8},0,-1,1 -1170,nsIHttpActivityObserver,{412880c8-6c36-48d8-bf8f-84f91f892503},0,-1,1 -1171,nsITraceableChannel,{68167b0b-ef34-4d79-a09a-8045f7c5140e},0,-1,1 -1172,nsIBrowserBoxObject,{db436f2f-c656-4754-b0fa-99bc353bd63f},0,-1,1 -1173,nsIAddonInstallListener,{2333b04c-f371-4dea-a2f1-d8fdb0c82866},0,-1,1 -1174,nsIDOMGeoPositionCoords,{b31702d0-6dac-4fa0-b93b-f043e71c8f9a},0,-1,1 -1175,nsIDOMElementCSSInlineStyle,{99715845-95fc-4a56-aa53-214b65c26e22},0,-1,1 -1176,nsIDOMSVGNumber,{98575762-a936-4ecf-a226-b74c3a2981b4},0,-1,1 -1177,nsICommandLine,{bc3173bd-aa46-46a0-9d25-d9867a9659b6},0,-1,1 -1178,nsIDOMModalContentWindow,{51aebd45-b979-4ec6-9d11-3a3fd3d5d59e},0,-1,1 -1179,nsIAccessibleTable,{035c0c0e-41e3-4985-8ad9-d9f14cdc667a},0,-1,1 -1180,nsICryptoHash,{1e5b7c43-4688-45ce-92e1-77ed931e3bbe},0,-1,1 -1181,nsIAnnotationService,{ba249b58-346f-42a9-a393-203ae34ec6c4},0,-1,1 -1182,nsIDOMHTMLStyleElement,{a6cf908d-15b3-11d2-932e-00805f8add32},0,-1,1 -1183,nsIDOMNSHTMLFormElement,{a6cf90c6-15b3-11d2-932e-00805f8add32},0,-1,1 -1184,nsIAuthPromptWrapper,{6228d644-17fe-11d4-8cee-0060b0fc14a3},0,-1,1 -1185,nsICollection,{83b6019c-cbc4-11d2-8cca-0060b0fc14a3},0,-1,1 -1186,nsIStringBundleOverride,{965eb278-5678-456b-82a7-20a0c86a803c},0,-1,1 -1187,nsIAuthPromptCallback,{bdc387d7-2d29-4cac-92f1-dd75d786631d},0,-1,1 -1188,nsIJSXMLHttpRequest,{423fdd3d-41c9-4149-8fe5-b14a1d3912a0},0,-1,1 -1189,nsIDOMSVGFEFuncGElement,{28555e78-c6c2-4a98-af53-bfc2c6944295},0,-1,1 -1190,nsIProgressEventSink,{d974c99e-4148-4df9-8d98-de834a2f6462},0,-1,1 -1191,nsIDOMSVGFETurbulenceElement,{77bc4d70-0d49-4c81-b7a7-7432f0fe3e04},0,-1,1 -1192,nsIDOMXULControlElement,{007b8358-1dd2-11b2-8924-d209efc3f124},0,-1,1 -1193,nsICacheDeviceInfo,{31d1c294-1dd2-11b2-be3a-c79230dca297},0,-1,1 -1194,imgITools,{c395d8f1-c616-4a1b-adfd-747b4b1b2cbe},0,-1,1 -1195,nsIContentViewerFile,{6317f32c-9bc7-11d3-bccc-0060b0fc76bd},0,-1,1 -1196,nsIDOMSVGPatternElement,{bc435244-b748-4e14-9e4c-219d5d3cb218},0,-1,1 -1197,nsIAccessibleCoordinateType,{c9fbdf10-619e-436f-bf4b-8566686f1577},0,-1,1 -1198,nsIConverterInputStream,{fc66ffb6-5404-4908-a4a3-27f92fa0579d},0,-1,1 -1199,nsIScreen,{f728830e-1dd1-11b2-9598-fb9f414f2465},0,-1,1 -1200,nsIDOMCSSPrimitiveValue,{e249031f-8df9-4e7a-b644-18946dce0019},0,-1,1 -1201,nsIDOMXULTextBoxElement,{71135b6c-294e-4634-a8e4-a72398f1e72a},0,-1,1 -1202,nsIDirIndexParser,{38e3066c-1dd2-11b2-9b59-8be515c1ee3f},0,-1,1 -1203,nsIDOMRGBColor,{6aff3102-320d-4986-9790-12316bb87cf9},0,-1,1 -1204,nsIDOMHTMLTableCaptionElement,{a6cf90b3-15b3-11d2-932e-00805f8add32},0,-1,1 -1205,nsIIFrameBoxObject,{30114c44-d398-44a5-9e01-b48b711291cd},0,-1,1 -1206,nsIPopupWindowManager,{3210a6aa-b464-4f57-9335-b22815567cf1},0,-1,1 -1207,extIEventItem,{05281820-ab62-11db-abbd-0800200c9a66},0,-1,1 -1208,nsIDOM3TypeInfo,{2a1088c7-499a-49a7-9d3b-1970d21532ab},0,-1,1 -1209,nsIDOMFileList,{3bfef9fa-8ad3-4e49-bd62-d6cd75b29298},0,-1,1 -1210,nsIWebContentHandlerInfo,{eb361098-5158-4b21-8f98-50b445f1f0b2},0,-1,1 -1211,nsIDOMNSHTMLFormControlList,{a6cf911a-15b3-11d2-932e-00805f8add32},0,-1,1 -1212,nsINavHistoryResultTreeViewer,{fa77e4e9-9fc8-45d2-9507-0fe4f0602505},0,-1,1 -1213,nsIXPCComponents_ClassesByID,{336a9590-4d19-11d3-9893-006008962422},0,-1,1 -1214,nsIDOM3Attr,{a2216ddc-1bcd-4ec2-a292-371e09a6c377},0,-1,1 -1215,nsIPrintingPromptService,{75d1553d-63bf-4b5d-a8f7-e4e4cac21ba4},0,-1,1 -1216,nsIDOMNSXPathExpression,{ce600ca8-e98a-4419-ad61-2f6d0cb0ecc8},0,-1,1 -1217,nsINavHistoryResultNode,{464ae28f-3a9c-4483-afb2-bb0fb0ddb893},0,-1,1 -1218,nsIDragSession,{15860d52-fe2c-4ddd-ac50-9c23e24916c4},0,-1,1 -1219,nsITransactionList,{97f863f3-f886-11d4-9d39-0060b0f8baff},0,-1,1 -1220,nsIDOMSVGPathSegCurvetoCubicRel,{0e661233-0c4f-4e0d-94d3-fbc460ad1f88},0,-1,1 -1221,nsIClipboardDragDropHookList,{876a2015-6b66-11d7-8f18-0003938a9d96},0,-1,1 -1222,nsIScrollable,{919e792a-6490-40b8-bba5-f9e9ad5640c8},0,-1,1 -1223,gfxIFormats,{96d086e6-1dd1-11b2-b6b2-b77b59390247},0,-1,1 -1224,nsISupportsPRBool,{ddc3b490-4a1c-11d3-9890-006008962422},0,-1,1 -1225,nsIDOMNodeFilter,{e4723748-1dd1-11b2-8ee6-866a532a6237},0,-1,1 -1226,nsISocketTransportService,{185b3a5d-8729-436d-9693-7bdccb9c2216},0,-1,1 -1227,nsIDOMNavigatorGeolocation,{9f218d6a-42ec-4b8a-aee9-e29ca96a4eae},0,-1,1 -1228,nsISelectionDisplay,{0ddf9e1c-1dd2-11b2-a183-908a08aa75ae},0,-1,1 -1229,nsIEventListenerService,{551cac0f-31ed-45e0-8d67-bc0d6e117b31},0,-1,1 -1230,nsIDOMNSEditableElement,{b33eb56c-3120-418c-892b-774b00c7dde8},0,-1,1 -1231,nsIClipboardDragDropHooks,{e03e6c5e-0d84-4c0b-8739-e6b8d51922de},0,-1,1 -1232,nsIGnomeVFSMimeApp,{66009894-9877-405b-9321-bf30420e34e6},0,-1,1 -1233,nsIPrintProgressParams,{ca89b55b-6faf-4051-9645-1c03ef5108f8},0,-1,1 -1234,nsIDOMCSSRuleList,{a6cf90c0-15b3-11d2-932e-00805f8add32},0,-1,1 -1235,nsIProtocolHandler,{15fd6940-8ea7-11d3-93ad-00104ba0fd40},0,-1,1 -1236,nsIHTMLObjectResizeListener,{27b00295-349c-429f-ad0c-87b859e77130},0,-1,1 -1237,nsIKeygenThread,{8712a243-5539-447c-9f47-8653f40c3a09},0,-1,1 -1238,nsIPersistentProperties,{1a180f60-93b2-11d2-9b8b-00805f8a16d9},0,-1,1 -1239,nsIXPCComponents_utils_Sandbox,{4f8ae0dc-d266-4a32-875b-6a9de71a8ce9},0,-1,1 -1240,nsIScriptableUnescapeHTML,{3ab244a9-f09d-44da-9e3f-ee4d67367f2d},0,-1,1 -1241,nsITransactionManager,{58e330c2-7b48-11d2-98b9-00805f297d89},0,-1,1 -1242,nsIURIRefObject,{2226927e-1dd2-11b2-b57f-faab47288563},0,-1,1 -1243,nsIDOMNSHTMLOptionElement,{e2dfc89c-7ae0-4651-8aee-7f5edc2aa626},0,-1,1 -1244,imgIDecoderObserver,{1dfc9189-6421-4281-83b2-d9c1c9ba4d1b},0,-1,1 -1245,nsICookieService,{2aaa897a-293c-4d2b-a657-8c9b7136996d},0,-1,1 -1246,nsIDOMEventTarget,{1c773b30-d1cf-11d2-bd95-00805f8ae3f4},0,-1,1 -1247,nsIWorkerScope,{5c55ea4b-e4ac-4ceb-bfeb-46bd5e521b8a},0,-1,1 -1248,nsIDOMSVGScriptElement,{bbe0d0ee-e9ed-4f84-a6e4-e58f66530caa},0,-1,1 -1249,nsIFTPEventSink,{455d4234-0330-43d2-bbfb-99afbecbfeb0},0,-1,1 -1250,nsIPermissionManager,{00708302-684c-42d6-a5a3-995d51b1d17c},0,-1,1 -1251,nsIXPCComponents,{155809f1-71f1-47c5-be97-d812ba560405},0,-1,1 -1252,nsIBlocklistService,{8439f9c0-da03-4260-8b21-dc635eed28fb},0,-1,1 -1253,nsIDOMEntity,{a6cf9079-15b3-11d2-932e-00805f8add32},0,-1,1 -1254,nsIWifiMonitor,{f289701e-d9af-4685-bc2f-e4226ff7c018},0,-1,1 -1255,nsIDOMHTMLBaseElement,{a6cf908b-15b3-11d2-932e-00805f8add32},0,-1,1 -1256,nsIFileInputStream,{e3d56a20-c7ec-11d3-8cda-0060b0fc14a3},0,-1,1 -1257,nsIDOMHTMLMenuElement,{a6cf909d-15b3-11d2-932e-00805f8add32},0,-1,1 -1258,nsIDOMHTMLDivElement,{a6cf90a0-15b3-11d2-932e-00805f8add32},0,-1,1 -1259,nsIPlacesImportExportService,{21c00314-fa63-11db-8314-0800200c9a66},0,-1,1 -1260,nsIRDFXMLSink,{eb1a5d31-ab33-11d2-8ec6-00805f29f370},0,-1,1 -1261,nsIDOMXULLabeledControlElement,{a457ea70-1dd1-11b2-9089-8fd894122084},0,-1,1 -1262,nsIZipWriter,{6d4ef074-206c-4649-9884-57bc355864d6},0,-1,1 -1263,nsIDOMSVGLineElement,{4ea07ef3-ed66-4b41-8119-4afc6d0ed5af},0,-1,1 -1264,nsIWifiAccessPoint,{e28e614f-8f86-44ff-bcf5-5f18225834a0},0,-1,1 -1265,nsISAXMutableAttributes,{8b1de83d-cebb-49fa-8245-c0fe319eb7b6},0,-1,1 -1266,nsIDOMXULSelectControlItemElement,{6aaaa30d-54ab-434a-8ae8-6d29a566d870},0,-1,1 -1267,nsIPrefBranchInternal,{d1d412d9-15d6-4a6a-9533-b949dc175ff5},0,-1,1 -1268,nsIDOMSVGPathSegList,{94a6db98-3f34-4529-a35f-89ef49713795},0,-1,1 -1269,nsISupportsPRUint16,{dfacb090-4a1c-11d3-9890-006008962422},0,-1,1 -1270,mozIStorageStatement,{20c45bdd-51d4-4f07-b70e-5feaa6302197},0,-1,1 -1271,nsIStringBundle,{d85a17c2-aa7c-11d2-9b8c-00805f8a16d9},0,-1,1 -1272,nsIDOMLSLoadEvent,{6c16a810-a37d-4859-b557-337341631aee},0,-1,1 -1273,nsIDOMNavigator,{777bd8a1-38c1-4b12-ba8f-ff6c2eb8c56b},0,-1,1 -1274,nsIDOMHTMLVoidCallback,{4a17c0e2-fdd5-4855-a71c-b4c509dffa13},0,-1,1 -1275,nsPIEditorTransaction,{4f18ada2-0ddc-11d5-9d3a-0060b0f8baff},0,-1,1 -1276,nsISearchSubmission,{58e4f602-a7c8-4cd1-9dca-716705e826ef},0,-1,1 -1277,nsIDOMWindowInternal,{c2f4433a-8b4c-4676-ab30-3bffd26fb29e},0,-1,1 -1278,nsIDOMSVGFilterPrimitiveStandardAttributes,{ab68567a-b830-4c46-9f2f-a28513a9e980},0,-1,1 -1279,nsIDOMSVGAnimatedString,{36f18f12-61a9-4529-8fa9-30050bd6ac00},0,-1,1 -1280,nsIDOMOfflineResourceList,{f394a721-66e9-46fc-bb24-b980bb732dd0},0,-1,1 -1281,nsISupportsInterfacePointer,{995ea724-1dd1-11b2-9211-c21bdd3e7ed0},0,-1,1 -1282,nsIFlavorDataProvider,{7e225e5f-711c-11d7-9fae-000393636592},0,-1,1 -1283,nsIDOMSVGSymbolElement,{86092181-a5db-4a89-be03-07dcc14d426e},0,-1,1 -1284,nsIRDFXMLParser,{1831dd2e-1dd2-11b2-bdb3-86b7b50b70b5},0,-1,1 -1285,nsIServerSocket,{a5b64be0-d563-46bb-ae95-132e46fcd42f},0,-1,1 -1286,nsIDOMXULDocument,{d55c39b4-b54a-4df5-9e68-09919e4538f9},0,-1,1 -1287,nsIEditorSpellCheck,{90c93610-c116-44ab-9793-62dccb9f43ce},0,-1,1 -1288,nsIDOMHTMLScriptElement,{a6cf90b1-15b3-11d2-932e-00805f8add32},0,-1,1 -1289,nsIWebBrowserChromeFocus,{d2206418-1dd1-11b2-8e55-acddcd2bcfb8},0,-1,1 -1290,nsIEntityConverter,{d14c7111-55e0-11d3-91d9-00105aa3f7dc},0,-1,1 -1291,nsISimpleEnumerator,{d1899240-f9d2-11d2-bdd6-000064657374},0,-1,1 -1292,nsIScriptableUnicodeConverter_1_9_BRANCH,{f7ed6618-5ff5-4f0b-bb83-48ce63eb289b},0,-1,1 -1293,nsIEmbeddingSiteWindow2,{e932bf55-0a64-4beb-923a-1f32d3661044},0,-1,1 -1294,nsIBufferedOutputStream,{6476378a-da09-11d3-8cda-0060b0fc14a3},0,-1,1 -1295,nsIDocumentEncoder,{f85c5a20-258d-11db-a98b-0800200c9a66},0,-1,1 -1296,nsIChannelEventSink,{6757d790-2916-498e-aaca-6b668a956875},0,-1,1 -1297,nsIXPCComponents_Utils,{da2267f2-d4cc-448f-9d70-1c7fe134d2fe},0,-1,1 -1298,nsINavHistoryContainerResultNode,{f9c8e1c1-e701-44ad-893c-8504c3956929},0,-1,1 -1299,nsIPrintingPrompt,{44e314ca-75b1-4f3d-9553-9b3507912108},0,-1,1 -1300,nsIDOMHTMLOptionElement,{a6cf9092-15b3-11d2-932e-00805f8add32},0,-1,1 -1301,nsISupportsPRInt32,{e36c5250-4a1c-11d3-9890-006008962422},0,-1,1 -1302,nsIDOMWindowUtils_1_9_2,{b0f803f7-98c0-4152-812c-d6678ba23049},0,-1,1 -1303,nsIFrameLoader,{d675c531-6bdc-417c-b176-635060105f07},0,-1,1 -1304,nsIDOMSVGPathSegLinetoVerticalRel,{d3ef2128-8de3-4aac-a6b4-13c7563119a6},0,-1,1 -1305,nsIDOMXULCommandDispatcher,{f3c50361-14fe-11d3-bf87-00105a1b0627},0,-1,1 -1306,nsIDOMGeoGeolocation,{37687daf-b85f-4e4d-8881-85a0ad24cf78},0,-1,1 -1307,nsIX509CertDB,{da48b3c0-1284-11d5-ac67-000064657374},0,-1,1 -1308,nsIDOMRangeException,{0f807301-39d2-11d6-a7f2-8f504ff870dc},0,-1,1 -1309,extIPreference,{2c7462e2-72c2-4473-9007-0e6ae71e23ca},0,-1,1 -1310,nsICryptoHMAC,{8feb4c7c-1641-4a7b-bc6d-1964e2099497},0,-1,1 -1311,nsILineInputStream,{c97b466c-1e6e-4773-a4ab-2b2b3190a7a6},0,-1,1 -1312,nsIWeakReference,{9188bc85-f92e-11d2-81ef-0060083a0bcf},0,-1,1 -1313,nsIGeolocationRequest,{f2aefde1-8e38-48b3-bbb8-bd6c4ae1ac8a},0,-1,1 -1314,nsIAccessibleHyperLink,{38c60bfa-6040-4bfe-93f2-acd6a909bb60},0,-1,1 -1315,nsILoginMetaInfo,{867407d5-10e0-43a0-bc81-a324740534ca},0,-1,1 -1316,nsIForwardIterator,{8da01646-1dd2-11b2-98a7-c7009045be7e},0,-1,1 -1317,inIFlasher,{7b4a099f-6f6e-4565-977b-fb622adbff49},0,-1,1 -1318,nsIBadCertListener2,{2c3d268c-ad82-49f3-99aa-e9ffddd7a0dc},0,-1,1 -1319,nsIDOMClientRectList,{917da19d-62f5-441d-b47e-9e35f05639c9},0,-1,1 -1320,nsIDOMSmartCardEvent,{52bdc7ca-a934-4a40-a2e2-ac83a70b4019},0,-1,1 -1321,nsIXULRuntime,{17311145-97da-49eb-b984-965bdee8879c},0,-1,1 -1322,nsIRemoteService,{a2240f6a-f1e4-4548-9e1a-6f3bc9b2426c},0,-1,1 -1323,nsIDOMXPathResult,{75506f84-b504-11d5-a7f2-ca108ab8b6fc},0,-1,1 -1324,nsIDOMSVGLocatable,{9cf4fc9c-90b2-4d66-88f5-35049b558aee},0,-1,1 -1325,nsIWebBrowserFind,{2f977d44-5485-11d4-87e2-0010a4e75ef2},0,-1,1 -1326,nsICryptoFIPSInfo,{99e81922-7318-4431-b3aa-78b3cb4119bb},0,-1,1 -1327,nsIDOMGeoPositionError,{ad9fa4c8-ec71-4b2d-8294-9adf06ddec32},0,-1,1 -1328,nsICertVerificationResult,{2fd0a785-9f2d-4327-8871-8c3e0783891d},0,-1,1 -1329,nsIRDFService,{bfd05261-834c-11d2-8eac-00805f29f370},0,-1,1 -1330,nsIDOMXULMultiSelectControlElement,{82c72eca-9886-473e-94cd-9de5694b3f88},0,-1,1 -1331,nsIMicrosummaryService,{d58143a2-74fa-4b13-94ed-113af8936d80},0,-1,1 -1332,nsIControllers,{f36e3ec1-9197-4ad8-8d4c-d3b1927fd6df},0,-1,1 -1333,jsdIErrorHook,{cea9ab1a-4b5d-416f-a197-9ffa7046f2ce},0,-1,1 -1334,nsIDOMHTMLInputElement,{a6cf9093-15b3-11d2-932e-00805f8add32},0,-1,1 -1335,mozIStorageStatementCallback,{29383d00-d8c4-4ddd-9f8b-c2feb0f2fcfa},0,-1,1 -1336,nsIDOMSVGGElement,{0bd57cbd-a090-44aa-a61b-2fb876841194},0,-1,1 -1337,nsIDOMPluginArray,{f6134680-f28b-11d2-8360-c90899049c3c},0,-1,1 -1338,nsICipherInfo,{028e2b2a-1f0b-43a4-a1a7-365d2d7f35d0},0,-1,1 -1339,nsIDOMNamedNodeMap,{a6cf907b-15b3-11d2-932e-00805f8add32},0,-1,1 -1340,nsIDOMHTMLBaseFontElement,{a6cf90a6-15b3-11d2-932e-00805f8add32},0,-1,1 -1341,nsIDOMXULCheckboxElement,{5afaba88-1dd2-11b2-9249-dd65a129d0e4},0,-1,1 -1342,nsIDOMHTMLMediaError,{7bd8c29f-8a76-453f-9373-79f820f2dc01},0,-1,1 -1343,nsIFormAutoComplete,{997c0c05-5d1d-47e5-9cbc-765c0b8ec699},0,-1,1 -1344,nsIDOMHTMLDirectoryElement,{a6cf909c-15b3-11d2-932e-00805f8add32},0,-1,1 -1345,nsIBrowserProfileMigrator,{f8365b4a-da55-4e47-be7a-230142360f62},0,-1,1 -1346,nsIDOMSVGSwitchElement,{7676f306-22c9-427e-bd71-2b1315851c93},0,-1,1 -1347,nsIDOMOrientationEvent,{1618546a-c176-40a2-9086-2d973acceeb1},0,-1,1 -1348,nsIURIChecker,{4660c1a1-be2d-4c78-9baf-c22984176c28},0,-1,1 -1349,nsIDOMNSHTMLAreaElement,{3dce9071-f3b9-4280-a6ee-776cdfe3dd9e},0,-1,1 -1350,nsIDOMDataTransfer,{34042440-60a8-4992-ae5c-798e69148955},0,-1,1 -1351,nsIDOMHTMLImageElement,{a6cf90ab-15b3-11d2-932e-00805f8add32},0,-1,1 -1352,nsILocalFileWin,{def24611-88a1-2cac-74fd-4b0b12bcaed5},0,-1,1 -1353,nsIDOMHTMLTextAreaElement,{a6cf9094-15b3-11d2-932e-00805f8add32},0,-1,1 -1354,nsIDOMCommandEvent,{37fb1798-0f76-4870-af6f-0135b4d973c8},0,-1,1 -1355,nsIFeedContainer,{577a1b4c-b3d4-4c76-9cf8-753e6606114f},0,-1,1 -1356,nsIDOMXULButtonElement,{6852d9a6-1dd2-11b2-a29d-cd7977a91b1b},0,-1,1 -1357,nsIXULTemplateQueryProcessor,{970f1c36-5d2e-4cbc-a1cf-e3327b50df71},0,-1,1 -1358,nsIEmbeddingSiteWindow,{3e5432cd-9568-4bd1-8cbe-d50aba110743},0,-1,1 -1359,nsIDOMSVGFEPointLightElement,{557f128a-026b-4fa8-a44c-605df7bfd62e},0,-1,1 -1360,nsIDOMSVGFitToViewBox,{089410f3-9777-44f1-a882-ab4225696434},0,-1,1 -1361,nsISearchableInputStream,{8c39ef62-f7c9-11d4-98f5-001083010e9b},0,-1,1 -1362,nsINavHistoryQuery,{6f5668f0-da8e-4069-a0de-6680e5cd8570},0,-1,1 -1363,nsIXPConnectWrappedNative,{f819a95a-6ab5-4a02-bda6-32861e859581},0,-1,0 -1364,nsIAcceleration,{1b406e32-cf42-471e-a470-6fd600bf4c7b},0,-1,1 -1365,nsIPK11Token,{51191434-1dd2-11b2-a17c-e49c4e99a4e3},0,-1,1 -1366,nsIControllerCommand,{0eae9a46-1dd2-11b2-aca0-9176f05fe9db},0,-1,1 -1367,nsIXSLTProcessorPrivate,{b8d727f7-67f4-4dc1-a318-ec0c87280816},0,-1,1 -1368,nsISessionStartup,{c0b185e7-0d21-46ac-8eee-7b5065ee7ecd},0,-1,1 -1369,nsIDOMNSHTMLAnchorElement2,{d7627eda-6ec0-4326-87c4-c3067fe6e324},0,-1,1 -1370,nsIWebBrowserStream,{86d02f0e-219b-4cfc-9c88-bd98d2cce0b8},0,-1,1 -1371,nsINativeTreeSelection,{1bd59678-5cb3-4316-b246-31a91b19aabe},0,-1,0 -1372,nsINSSCertCache,{1b75bdae-1757-4322-9d1e-cfcaa18cb710},0,-1,1 -1373,nsISocketProviderService,{8f8a23d0-5472-11d3-bbc8-0000861d1237},0,-1,1 -1374,nsIZipReaderCache,{52c45d86-0cc3-11d4-986e-00c04fa0cf4a},0,-1,1 -1375,nsIWebProgressListener2,{dde39de0-e4e0-11da-8ad9-0800200c9a66},0,-1,1 -1376,nsIDOMHTMLFrameElement,{a6cf90b9-15b3-11d2-932e-00805f8add32},0,-1,1 -1377,nsIAuthPrompt,{358089f9-ee4b-4711-82fd-bcd07fc62061},0,-1,1 -1378,jsdINestCallback,{88bea60f-9b5d-4b39-b08b-1c3a278782c6},0,-1,1 -1379,nsIHTTPIndex,{6f2bdbd0-58c3-11d3-be36-00104bde6048},0,-1,1 -1380,nsIDOMDocumentRange,{7b9badc6-c9bc-447a-8670-dbd195aed24b},0,-1,1 -1381,nsICMSMessage,{a4557478-ae16-11d5-ba4b-00108303b117},0,-1,0 -1382,nsIProfileUnlocker,{08923af1-e7a3-4fae-ba02-128502193994},0,-1,1 -1383,nsIDOMNodeIterator,{5af83f50-c8d5-4824-be29-1aa9d640bacb},0,-1,1 -1384,nsIDOMSVGAnimatedPathData,{6ef2b400-dbf4-4c12-8787-fe15caac5648},0,-1,1 -1385,nsIEncodedChannel,{30d7ec3a-f376-4652-9276-3092ec57abb6},0,-1,1 -1386,nsIXPTLoaderSink,{6e48c500-8682-4730-add6-7db693b9e7ba},0,-1,1 -1387,nsIDOMNSHTMLDocument,{79beb289-3644-4b54-9432-9fb993945629},0,-1,1 -1388,nsIAccessibleValue,{42a1e1dc-58cf-419d-bff0-ed3314c70016},0,-1,1 -1389,nsIAtom,{3d1b15b0-93b4-11d1-895b-006008911b81},0,-1,1 -1390,nsIAsyncOutputStream,{beb632d3-d77a-4e90-9134-f9ece69e8200},0,-1,1 -1391,nsIDOMEntityReference,{a6cf907a-15b3-11d2-932e-00805f8add32},0,-1,1 -1392,nsIXTFElementWrapper,{0ad87068-c6fd-4122-a515-ffe8c4773b10},0,-1,1 -1393,nsIJSRuntimeService_MOZILLA_1_9_2,{d23f5479-39a1-4127-8cdd-0f7cb7e8054d},0,-1,0 -1394,nsIDOMSVGRectElement,{1695ca39-e40d-44dc-81db-a51b6fd234fa},0,-1,1 -1395,mozITXTToHTMLConv,{77c0e42a-1dd2-11b2-8ebf-edc6606f2f4b},0,-1,1 -1396,nsIMicrosummaryObserver,{560b0980-be95-47e9-81cc-4428c073127c},0,-1,1 -1397,mozIJSSubScriptLoader,{8792d77e-1dd2-11b2-ac7f-9bc9be4f2916},0,-1,1 -1398,nsIDocShellLoadInfo,{92a0a637-373e-4647-9476-ead11e005c75},0,-1,1 -1399,nsIXPCComponents_Results,{2fc229a0-5860-11d3-9899-006008962422},0,-1,1 -1400,nsIPrintSettings,{343700dd-078b-42b6-a809-b9c1d7e951d0},0,-1,1 -1401,nsIContentViewerEdit,{1691a02f-53b2-4cb8-8769-48e7efc908b8},0,-1,1 -1402,nsISupportsPrimitive,{d0d4b136-1dd1-11b2-9371-f0727ef827c0},0,-1,1 -1403,nsIEditorStyleSheets,{4805e682-49b9-11d3-9ce4-ed60bd6cb5bc},0,-1,1 -1404,rdfISerializer,{f0edfcdd-8bca-4d32-9226-7421001396a4},0,-1,1 -1405,nsIDOMSVGPolygonElement,{9de04775-77c5-48b5-9f4a-8996a936bfb2},0,-1,1 -1406,nsIWritablePropertyBag2,{9cfd1587-360e-4957-a58f-4c2b1c5e7ed9},0,-1,1 -1407,nsIDocumentStateListener,{050cdc00-3b8e-11d3-9ce4-a458f454fcbc},0,-1,1 -1408,nsISHTransaction,{2edf705f-d252-4971-9f09-71dd0f760dc6},0,-1,1 -1409,nsIDOMHTMLIsIndexElement,{a6cf908c-15b3-11d2-932e-00805f8add32},0,-1,1 -1410,nsIASN1Sequence,{b6b957e6-1dd1-11b2-89d7-e30624f50b00},0,-1,1 -1411,nsIDOMHTMLAppletElement,{a6cf90ae-15b3-11d2-932e-00805f8add32},0,-1,1 -1412,nsIDOMToString,{2a72e20f-e337-4822-8994-2e35b5550d03},0,-1,1 -1413,nsIDOMScreen,{77947960-b4af-11d2-bd93-00805f8ae3f4},0,-1,1 -1414,nsICertTreeItem,{d0180863-606e-49e6-8324-cf45ed4dd891},0,-1,1 -1415,extIConsole,{ae8482e0-aa5a-11db-abbd-0800200c9a66},0,-1,1 -1416,nsISAXAttributes,{e347005e-6cd0-11da-be43-001422106990},0,-1,1 -1417,nsIXPConnect,{b76828b8-3ac5-469e-946d-3401c6a2104d},0,-1,0 -1418,nsIDOMSVGPathSegCurvetoCubicAbs,{380afecd-f884-4da7-a0d7-5ffc4531b70b},0,-1,1 -1419,nsIUploadChannel,{ddf633d8-e9a4-439d-ad88-de636fd9bb75},0,-1,1 -1420,nsIAccelerationListener,{3386bed8-7393-4704-8ffc-1eb2c35432ff},0,-1,1 -1421,nsIXPCFunctionThisTranslator,{039ef260-2a0d-11d5-90a7-0010a4e73d9a},0,-1,0 -1422,nsIController,{d5b61b82-1da4-11d3-bf87-00105a1b0627},0,-1,1 -1423,nsIDOMSVGURIReference,{8092b5f3-dc8a-459c-94f1-92f8011f2438},0,-1,1 -1424,nsIDOMStorageEvent,{fc540c28-8edd-4b7a-9c30-8638289b7a7d},0,-1,1 diff --git a/src/test/profile/selenium/ui-map/commons-pageset.xml b/src/test/profile/selenium/ui-map/commons-pageset.xml deleted file mode 100644 index 504536de024..00000000000 --- a/src/test/profile/selenium/ui-map/commons-pageset.xml +++ /dev/null @@ -1,334 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="dialog" description="Dialog links"> - <xpath-ui-element name="OK" xpath="//div[contains(@class, 'x-window')]//button[text()='OK']" description="a generic OK button in a dialog"/> - <xpath-ui-element name="Okay" xpath="//div[contains(@class, 'b_dialogbox')]//a[.//text()='Ok']" description="a generic Ok button in a dialog"/> - <xpath-ui-element name="Cancel" xpath="//a[.//text()='Cancel']" description="a generic Cancel button in a dialog"/> - <xpath-ui-element name="Yes" xpath="//div[contains(@class, 'b_dialogbox')]//a[.//text()='Yes']" description="a generic Yes button in a dialog"/> - <xpath-ui-element name="No" xpath="//div[contains(@class, 'b_dialogbox')]//a[.//text()='No']" description="a generic No button in a dialog"/> - <xpath-ui-element name="select" xpath="//div[contains(@class,'b_window')]//a[.//text()='Select']" description="The Select element of overlays"></xpath-ui-element> - </pageset> - <pageset name="commons" description="contains links that are used in several places within olat - hence commons"> - <pageset name="usertable" description="generic user table links including import, add users, remove, select all and the individual users in the table"> - <testcase-macro name="newgroupmembers"> - <call-macro name="login"/> - <selenium command="clickAndWait" target="tabs::groups"/> - <selenium command="clickAndWait" target="groups::toolbox_create_projectGroup"/> - <selenium command="type" target="group::content_description_groupDetails_groupName" value="commons-pageset-newgroupmembers-testgroup"/> - <selenium command="clickAndWait" target="commons::flexiForm_finishButton"/> - <selenium command="clickAndWait" target="group::content_members_tabMembers"/> - </testcase-macro> - - <xpath-ui-element name="addUsers" xpath="//a[contains(.//text(),'Add user(s)')]" description="add users, if only one usertable on this page"/> - - <pageset name="owners" description="handles special case of import and addusers button in an owner area"> - <!-- <xpath-ui-element xpath="//fieldset[./legend='Owners']//a[contains(.//text(),'Import')]" name="import" description="import users (Owners) button"/> asa unused --> - <xpath-ui-element name="addUsers" xpath="//fieldset[./legend='Owners']//a[contains(.//text(),'Add user(s)')]" description="import users (Owners) button"></xpath-ui-element> - </pageset> - <pageset name="members" description="handles special case of import and addusers button in an members area"> - <xpath-ui-element name="addUsers" xpath="//fieldset[./legend='Members']//a[contains(.//text(),'Add user(s)')]" description="import users (Members) button"></xpath-ui-element> - </pageset> - <pageset name="participants" description="handles special case of import and addusers button in a participants area"> - <xpath-ui-element name="import" xpath="//fieldset[./legend='Participants']//a[contains(.//text(),'Import')]" description="import users (Participants) button"></xpath-ui-element> - <xpath-ui-element name="addUsers" xpath="//fieldset[./legend='Participants']//a[contains(.//text(),'Add user(s)')]" description="import users (Participants) button"></xpath-ui-element> - <xpath-ui-element xpath="//fieldset[./legend='Participants' and .//a/@class='b_table_download']//input[@value='Remove']" name="remove" description="the remove button"></xpath-ui-element> - <xpath-ui-element xpath="//fieldset[./legend='Participants' and .//a/@class='b_table_download']//a[contains(.//text(),'Select all')]" name="selectAll" description="select-all button"/> - <!-- <xpath-ui-element xpath="//fieldset[./legend='Participants' and .//a/@class='b_table_download']//a[contains(.//text(),'Delete selection')]" name="deleteSelection" description="delete-selection button"/> asa unused --> - </pageset> - <pageset name="waitingList" description="handles special case of import and addusers button in the waiting list area"> - <xpath-ui-element name="selectAll" xpath="//fieldset[./legend='Waiting list' and .//a/@class='b_table_download']//a[contains(.//text(),'Select all')]" description="select-all button"/> - <!-- <xpath-ui-element xpath="//fieldset[./legend='Waiting list' and .//a/@class='b_table_download']//a[contains(.//text(),'Delete selection')]" name="deleteSelection" description="delete-selection button"/> asa unused --> - <xpath-ui-element name="remove" xpath="//fieldset[./legend='Waiting list' and .//a/@class='b_table_download']//input[@value='Remove']" description="the remove button"></xpath-ui-element> - </pageset> - <pageset name="userlist" description="result of a user search operation"> - <xpath-ui-element name="clickUserName" xpath="//div[.//a/@class='b_table_download']//table//tr//td//a[./text()='" + nameOfUser + "']" description="click on a user name in the user table (usually the column titled 'User name')"> - <parameter name="nameOfUser" description="the name of the user"/> - </xpath-ui-element> - <xpath-ui-element name="checkUsername" xpath="//table//tr[.//td//text()='" + nameOfUser + "']//input[@type='checkbox']" description="check the checkbox of a user in the user table (usually the column titled 'Check')"> - <parameter name="nameOfUser" description="the name of the user"/> - </xpath-ui-element> - <xpath-ui-element name="selectUserName" xpath="//div[.//a/@class='b_table_download']//table//tr[.//td//text()='" + nameOfUser + "']//a[.//text()='Select']" description="click on the 'Selct' link of a particular user in the user table (usually the column titled 'Action')"> - <parameter name="nameOfUser" description="the name of the user"/> - </xpath-ui-element> - <xpath-ui-element name="selectAll" xpath="//div[.//a/@class='b_table_download']//a[contains(.//text(),'Select all')]" description="select-all button" testcase="newgroupmembers/click(commons::usertable_selectAll)"/> - <!-- <xpath-ui-element xpath="//div[.//a/@class='b_table_download']//a[contains(.//text(),'Delete selection')]" name="deleteSelection" description="delete-selection button" testcase="newgroupmembers/click(commons::usertable_deleteSelection)"/> asa unused --> - </pageset> - <!-- <xpath-ui-element xpath="//fieldset[./legend and .//a/@class='b_table_download']//a[@class='b_table_download']" name="downloadTable" description="the downloda table button"></xpath-ui-element> asa unused --> - <xpath-ui-element name="remove" xpath="//fieldset[./legend and .//a/@class='b_table_download']//button[.//text()='Remove']" description="the remove button"></xpath-ui-element> - <xpath-ui-element name="selectAll" xpath="//fieldset[./legend and .//a/@class='b_table_download']//a[contains(.//text(),'Select all')]" description="select-all button" testcase="newgroupmembers/click(commons::usertable_selectAll)"/> - <xpath-ui-element name="deleteSelection" xpath="//fieldset[./legend and .//a/@class='b_table_download']//a[contains(.//text(),'Delete selection')]" description="delete-selection button" testcase="newgroupmembers/click(commons::usertable_deleteSelection)"/> - - <pageset name="adduser" description="handles special cases of user table within the add user wizard"> - <!-- <xpath-ui-element xpath="//fieldset[./legend='Search along with user attributes' and .//a/@class='b_table_download']//a[@class='b_table_download']" name="downloadTable" description="the downloda table button"></xpath-ui-element> asa unused --> - <xpath-ui-element name="checkUsername" xpath="//fieldset[./legend='Search along with user attributes' and .//a/@name='b_table']//table//tr[.//td//text()='" + nameOfUser + "']//input[@type='checkbox']" description="check the checkbox of a user in the user table (usually the column titled 'Check')"> - <parameter name="nameOfUser" description="the name of the user"/> - </xpath-ui-element> - <xpath-ui-element name="selectAll" xpath="//fieldset[./legend='Search along with user attributes' and .//a/@name='b_table']//a[contains(.//text(),'Select all')]" description="select-all button"></xpath-ui-element> - <!-- <xpath-ui-element name="deleteSelection" xpath="//fieldset[./legend='Search along with user attributes' and .//a/@name='b_table']//a[contains(.//text(),'Delete selection')]" description="delete-selection button"></xpath-ui-element> asa unused --> - <xpath-ui-element name="choose" xpath="//fieldset[./legend='Search along with user attributes' and .//a/@name='b_table']//input[@value='Choose']" description="choose button"></xpath-ui-element> - - <!-- <xpath-ui-element name="sendEmailHelp" xpath="//fieldset[./legend/text()='E-mail notification']//div[@class='b_contexthelp_wrapper']" description="help in the send-email part of the add user wizard"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='E-mail notification']//select[@name='sendMailSwitchElem']" name="sendEmailSwitch" description="the send-email yes/no switch of the add user wizard"></xpath-ui-element> unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='E-mail notification']//input[@name='subjectElem']" name="emailSubject" description="the email subject of the add user wizard"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='E-mail notification']//textarea[@name='bodyElem']" name="emailBody" description="the email body of the add user wizard"></xpath-ui-element> asa unused --> - <!-- TODO:LD: CHANGE LABEL!!! --> - <xpath-ui-element name="finish" xpath="//fieldset[./legend/text()='E-mail notification']//button[@value='Next']" description="the finish button of the add user wizard"></xpath-ui-element> - <xpath-ui-element name="cancel" xpath="//fieldset[./legend/text()='E-mail notification']//input[@value='Cancel']" description="the cancel button of the add user wizard"></xpath-ui-element> - <xpath-ui-element name="cancelWizard" xpath="//div[@class='b_button_group']//a[.//text()='Cancel Wizard']" description="cancel wizard button"></xpath-ui-element> - </pageset> - - <!-- <xpath-ui-element xpath="//fieldset[./legend and .//a/@class='b_table_download']//table//tr//td[.//a/text()='" + nameOfUser + "']" name="clickUserName" description="click on a user name in the user table (usually the column titled 'User name')"> - <parameter name="nameOfUser" description="the name of the user"/> - </xpath-ui-element> asa unused --> - <xpath-ui-element xpath="//fieldset[./legend and .//a/@class='b_table_download']//table//tr[.//td//a/text()='" + nameOfUser + "']//input[@type='checkbox']" name="checkUsername" description="check the checkbox of a user in the user table (usually the column titled 'Check')"> - <parameter name="nameOfUser" description="the name of the user"/> - </xpath-ui-element> - <xpath-ui-element name="checkUsernameToRemove" xpath="//div[.//a/@class='b_table_download']//table//tr[.//td//text()='" + nameOfUser + "']//input[@type='checkbox']" description="check the checkbox of a user in the user table (usually the column titled 'Check')"> - <parameter name="nameOfUser" description="the name of the user"/> - </xpath-ui-element> - <xpath-ui-element name="removeOwner" xpath="//input[@value='Remove']" description="the Remove button in the dialog Assign owners of this learning resource"></xpath-ui-element> - <!-- <xpath-ui-element xpath="//fieldset[./legend and .//a/@class='b_table_download']//table//tr[.//td//text()='" + nameOfUser + "']//a[.//text()='Choose']" name="chooseUserName" description="click on the 'Choose' link of a particular user in the user table (usually the column titled 'Action')"> - <parameter name="nameOfUser" description="the name of the user"/> - </xpath-ui-element> asa unused --> - <xpath-ui-element name="sendUserDeletionEmail" xpath="//input[@value='Send e-mail regarding the deletion of user accounts.']" description="Send e-mail regarding the deletion of user accounts input"></xpath-ui-element> - </pageset> - <pageset name="importUsersWizard" description="the import users wizard"> - <xpath-ui-element xpath="//form[@name='usersform']//textarea[@name='addusers']" name="user names textarea" description="the user names textarea"></xpath-ui-element> - </pageset> - <pageset name="createGroup" description="form fields create group"> - <!-- <xpath-ui-element xpath="//form[@name='createBuddygroupForm']//input[@value='Save']" name="save" description="save button create group"></xpath-ui-element> - <xpath-ui-element xpath="//form[@name='createBuddygroupForm']//input[@value='Cancel']" name="cancel" description="cancel button create group"></xpath-ui-element> asa unused --> - </pageset> - <pageset name="searchUsers" description="the Other users section under the home tab"> - <default-testcase testcase="login/home::menu_otherUsers" final-command="type(anything)" /> - <!-- <xpath-ui-element name="autoCompleter" xpath="//fieldset[./legend/text()='Search combined with auto-completion']//input[@class='b_form_auto_completer_input']" description="input field called 'search for olat user names, first name, last name or email'" /> asa unused --> - <!--<xpath-ui-element name="userName" xpath="//fieldset[./legend/text()='Search along with user attributes']//input[@id='login']" description="input field 'user name'" /> unused --> - <!-- <xpath-ui-element name="firstName" xpath="//fieldset[./legend/text()='Search along with user attributes']//input[@id='firstName']" description="input field 'first name'" /> - <xpath-ui-element name="lastName" xpath="//fieldset[./legend/text()='Search along with user attributes']//input[@id='lastName']" description="input field 'last name'" /> - <xpath-ui-element name="email" xpath="//fieldset[./legend/text()='Search along with user attributes']//input[@id='email']" description="input field 'email'" /> - <xpath-ui-element name="institutionalName" xpath="//fieldset[./legend/text()='Search along with user attributes']//input[@id='institutionalName']" description="input field 'institution'" /> - <xpath-ui-element name="institutionalUserIdentifier" xpath="//fieldset[./legend/text()='Search along with user attributes']//input[@id='institutionalUserIdentifier']" description="input field 'institution identifier'" /> - <xpath-ui-element name="institutionalEmail" xpath="//fieldset[./legend/text()='Search along with user attributes']//input[@id='institutionalEmail']" description="input field 'institutional email'" /> asa unused --> - <!--<xpath-ui-element name="search" xpath="//fieldset[./legend/text()='Search along with user attributes']//input[@value='Search']" description="the search button" testcase="login/home::menu_otherUsers/type(commons::searchUsers_userName,foo)/commons::searchUsers_search" /> unused --> - </pageset> - - <!-- todo: testcase --> - <xpath-ui-element name="start" xpath="//div[@class='b_button_group']//a[@class='b_button'][contains(descendant::text(), 'Start')]" description="Click 'Start' button"/> - <xpath-ui-element name="save" xpath="//div[@class='b_button_group']//button[@value='Save']" description="Save button"/> - <xpath-ui-element name="cancelButton" xpath="//div[@class='b_button_group']//button[@value='Cancel']" description="cancel button"/> - <xpath-ui-element name="saveInput" xpath="//div[@class='b_button_group']//input[@value='Save']" description="save form input"/> - <xpath-ui-element name="saveLink" xpath="//div[@class='b_button_group']//a[//text()='Save']" description="save link"></xpath-ui-element> - <xpath-ui-element name="anyLink" xpath="//a[contains(.//text(),'" + linkText + "')]" description="a generic link with any identified by its label text"> - <parameter name="linkText" description="the text of the label"/> - </xpath-ui-element> - <pageset name="tinyMce" description="RichtTextElement"> - <xpath-ui-element name="styledTextArea" xpath="//body[@id='tinymce']" description="styled text area in iframe"/> - <xpath-ui-element name="insertEditImage" xpath="//a[@title='Insert/edit image']" description="insert edit image"/> - <xpath-ui-element name="browse" xpath="//a[@id='srcbrowser_link']" description="browse image"></xpath-ui-element> - </pageset> - <pageset name="flexiForm" description="flexiforms elements"> - <xpath-ui-element name="labeledTextInput" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='" + formElementLabel + "']//div[@class='b_form_element']//input[@type='text']" description="text form element with the given label"> - <parameter name="formElementLabel" description="the label of the form element"/> - </xpath-ui-element> - <xpath-ui-element name="labeledPasswordInput" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='" + formElementLabel + "']//div[@class='b_form_element']//input[@type='password']" description="password form element with the given label"> - <parameter name="formElementLabel" description="the label of the form element"/> - </xpath-ui-element> - <xpath-ui-element name="labeledTextArea" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='" + formElementLabel + "']//div[@class='b_form_element']//textarea" description="text area form element with the given label"> - <parameter name="formElementLabel" description="the label of the form element"/> - </xpath-ui-element> - <xpath-ui-element name="labeledCheckbox" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='" + formElementLabel + "']//div[@class='b_form_element']//input[@type='checkbox']" description="checkbox form element with the given label"> - <parameter name="formElementLabel" description="the label of the form element"/> - </xpath-ui-element> - <xpath-ui-element name="disabledTextInput" xpath="//div[@class='b_form_element']//input[@value='" + inputValue + "']" description="disabled text form element with the given value"> - <parameter name="inputValue" description="the label of the form element"/> - </xpath-ui-element> - <xpath-ui-element name="disabledLabeledTextInput" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='" + formElementLabel + "']//div[@class='b_form_element']//input[@disabled='disabled']" description="disabled text form element with the given label"> - <parameter name="formElementLabel" description="the label of the form element"/> - </xpath-ui-element> - <xpath-ui-element name="finishButton" xpath="//div[@class='b_form_element']//button[@value='Finish']" description="the finish button of the flexi form"/> - <xpath-ui-element name="saveButton" xpath="//div[@class='b_form_element']//button[@value='Save']" description="the save button of the flexi form"/> - <xpath-ui-element name="genericButton" xpath="//div[@class='b_form_element']//button[@value='" + buttonLabel + "']" description="button with a given label"> - <parameter name="buttonLabel" description="the label of the form element"/> - </xpath-ui-element> - <xpath-ui-element name="genericLink" xpath="//div[@class='b_form_element']//a[.//text()='" + buttonLabel + "']" description="link of a button class with a given label"> - <parameter name="buttonLabel" description="the label of the form element"/> - </xpath-ui-element> - <xpath-ui-element name="saveButtonVertical" xpath="//div[@class='b_form_element b_form_vertical']//button[@value='Save']" description="the save button of the flexi form, vertical layout"/> - <xpath-ui-element name="createButton" xpath="//div[@class='b_form_element']//button[@value='Create']" description="the Create button of the flexi form"/> - <xpath-ui-element name="formErrorMsg" xpath="//div[@class='b_form_error_msg']" description="form error message, e.g. at invalid input"></xpath-ui-element> - <xpath-ui-element name="cancelButton" xpath="//button[.//text()='Cancel']" description="cancel button"></xpath-ui-element> - - <pageset name="wizzard" description="the flexiform wizzard (steps)"> - <link-ui-element name="next" link="Next" description="The Next button"/> - <link-ui-element name="back" link="Back" description="The Back button"/> - <link-ui-element name="finish" link="Finish" description="The Finish button"/> - <link-ui-element name="cancel" link="Cancel" description="The Cancel button"/> - <xpath-ui-element name="close" xpath="//a[contains(@class, 'b_link_close')]" description="The close icon"/> - </pageset> - </pageset> - - <pageset name="table" description="a table"> - <xpath-ui-element name="showAll" xpath="//div[@class='b_table_page_all']//a[./text()='[Show all]']" description="the [Show all] link"/> - <xpath-ui-element name="selectNextPage" xpath="//div[@class='b_table_page']/a[@class='b_table_forward']" description="click on forward button in table pagination"></xpath-ui-element> - </pageset> - <xpath-ui-element name="backLink" xpath="//a[@class='b_link_back']" description="back link"></xpath-ui-element> - </pageset> - - <pageset name="wiki" description="the wiki module"> - <pageset name="sideNavigation" description="wiki side navigation"> - <xpath-ui-element name="index" xpath="//fieldset/legend[.//text()='Navigation']/..//a[.//text()='Index']" description="Wiki navigation: Index page" /> - <xpath-ui-element name="from-a-z" xpath="//fieldset/legend[.//text()='Navigation']/..//a[.//text()='From A-Z']" description="Wiki navigation: From A-Z" /> - <xpath-ui-element name="clickAWikiPage" xpath="//div[@class='o_wikimod-article-box']//a[./text()='"+nameOfWikiPage+"']" description="the name of the wiki page to click"> - <parameter name="nameOfWikiPage" description="the name of the wiki page"/> - </xpath-ui-element> - - <!-- <xpath-ui-element name="recentChanges" xpath="//fieldset/legend[.//text()='Navigation']/..//a[contains(.//text(),'Recent')]" description="Wiki navigation: Recent changes" /> asa unused --> - <xpath-ui-element name="editWikiMenu" xpath="//fieldset/legend[.//text()='Wiki menu']/..//a[.//text()='Modify']" description="Wiki navigation: Edit wiki menu" /> - <xpath-ui-element name="createInput" xpath="//fieldset[legend[contains(.//text(),'Create article')]]//form//input[@type='text']" description="Wiki navigation: Create article input field" /> - <xpath-ui-element name="createButton" xpath="//fieldset[legend[contains(.//text(),'Create article')]]//form//button[@value='Create']" description="Create article button"></xpath-ui-element> - <xpath-ui-element name="searchInput" xpath="//fieldset[legend[contains(.//text(),'Search')]]//form//input[@type='text']" description="Wiki navigation: Search article input field" /> - <xpath-ui-element name="searchButton" xpath="//fieldset[legend[contains(.//text(),'Search')]]//form//a[.//text()='Search']" description="search button"></xpath-ui-element> - <!-- <xpath-ui-element name="export" xpath="//fieldset/legend[.//text()='Tools']/..//a[.//text()='Export as CP']" description="Wiki Tools: Export" /> asa unused --> - </pageset> - <pageset name="topNavigation" description=""> - <xpath-ui-element xpath="//div[@class='b_tabbedpane_wrapper']//a[.//text()='Article']" - name="article" description="article tab" /> - <!-- <xpath-ui-element xpath="//div[@class='b_tabbedpane_wrapper']//a[.//text()='Discussion']" - name="discussion" description="discussion tab" /> asa unused --> - <xpath-ui-element xpath="//div[@class='b_tabbedpane_wrapper']//a[.//text()='Edit page']" - name="editPage" description="edit page tab" /> - <xpath-ui-element xpath="//div[@class='b_tabbedpane_wrapper']//a[.//text()='Versions/authors']" - name="versions" description="versions tab" /> - </pageset> - <pageset name="edit" description="wiki edit view"> - <xpath-ui-element name="editFormTextarea" xpath="//div[@class='o_wikimod_editform_wrapper']//textarea" - description="the wiki edit form text area" /> - <!-- <xpath-ui-element name="editFormSaveButton" xpath="//form[@name='wikieditform']//input[@type='submit'][@value='Save']" - description="the wiki edit form save button" /> asa unused --> - <xpath-ui-element name="deletePage" xpath="//div[./h1/@class='o_wikimod_heading']//a[.//text()='Delete page']" - description="the delete page button" /> - <!-- <xpath-ui-element name="insertLinkButton" xpath="//div[@class='o_wikimod_linkchooser']//input[@value='Insert link']" - description="the insert button for links" /> asa unused --> - <xpath-ui-element name="insertFileButton" xpath="//div[@class='o_wikimod_filechooser']//input[@value='Insert file']" - description="the insert button for files" /> - <xpath-ui-element name="uploadFileButton" xpath="//a[@id='o_wikimod_uploaderOpener']/b" - description="the upload button for files" /> - </pageset> - <pageset name="article" description="wiki article view"> - <link-ui-element name="testLink" description="create a wiki page with name test" link="test"/> - <!-- <xpath-ui-element xpath="//div[@class='o_wikimod-article-box']" name="articleBox" description="wiki article box" /> asa unused --> - </pageset> - <pageset name="versions" description="versions view"> - <link-ui-element name="compare" description="compare version 0 with 1" link="0 to 1"/> - </pageset> - </pageset> - <pageset name="overlay" description="overlay specific elements"> - <xpath-ui-element xpath="//a[@class='b_link_close']" name="overlayClose" description="closes an overlay" /> - </pageset> - - <pageset name="courseChat" description="the groupchat which works with external chat server"> - <xpath-ui-element name="openCourseChat" xpath="//a[@class='b_toolbox_link' and contains(./span/text(), 'course chat')]" - description="open the course chat window" /> - <xpath-ui-element name="withinCourseChat" xpath="//a[@class='b_toolbox_link' and contains(.//text(), 'Enter course chat')]" description="within course chat"/> - <xpath-ui-element name="toggleAnonymous" xpath="//form//input[@name='toggle']" - description="toggle from anonymous to username" /> - <xpath-ui-element name="sendMsgInputField" xpath="//div[@class='o_groupchat_chat_form']//form//input[@type='text']" - description="send message input field" /> - <xpath-ui-element name="labeledSendMsgInputField" xpath="//div[@class=' x-window x-window-plain x-resizable-pinned'][descendant::text()='" + label + "']//div[@class='o_groupchat_chat_form']//form//input[@type='text']" - description="send message input field" > - <parameter name="label" description="chat room label"/> - </xpath-ui-element> - <xpath-ui-element name="sendMsgButton" xpath="//div[@class='o_groupchat_chat_form']//form//a[contains(@class, 'b_button')]" - description="the send button " /> - <xpath-ui-element name="labeledSendMsgButton" xpath="//div[@class=' x-window x-window-plain x-resizable-pinned'][descendant::text()='" + label + "']//div[@class='o_groupchat_chat_form']//form//a[contains(@class, 'b_button')]" - description="the send button" > - <parameter name="label" description="chat room label"/> - </xpath-ui-element> - <xpath-ui-element name="participant" xpath="//div[@class='o_groupchat_roster']//li[contains(.//text(),'" + participantName + "')]" description="participant in the chatroom"> - <parameter name="participantName" description="participant username or partial label of a user - e.g. anonym"/> - <!-- <parameter name="chatroomLabel" description="chatroomLabel"></parameter> --> - </xpath-ui-element> - </pageset> - <pageset name="buddiesChat" description="buddies chat"> - <xpath-ui-element name="closeExtWindow" xpath="//div[contains(@class, 'x-window')]//div[contains(@class, 'x-tool-close')]" - description="closes the floating window"/> - <xpath-ui-element name="closeLabeledExtWindow" xpath="//div[@class=' x-window x-window-plain x-resizable-pinned'][descendant::text()='" + label + "']//div[contains(@class, 'x-window')]//div[contains(@class, 'x-tool-close')]" - description="closes the floating window"> - <parameter name="label" description="chat room label"/> - </xpath-ui-element> - <xpath-ui-element name="openStatusChanger" xpath="//div[@id='b_topnav']//a[contains(@href, 'cmd.status')]" - description="opens the status changer window" /> - <xpath-ui-element name="openOnlineUserList" xpath="//div[@id='b_footer_user']//a[contains(.//text(), 'People')]" description="xy People are online - left, down side of the page"/> - <xpath-ui-element name="showOnlineBuddies" xpath="//li[@id='o_topnav_imclient']//a[@class='']" description="show online buddies"/> - <xpath-ui-element name="onlineBuddy" xpath="//a[@class='o_instantmessaging_available_icon' and contains(.//text(), '" + fullName + "')]" description="online buddy"> - <parameter name="fullName" description="user first and lastname"></parameter> - </xpath-ui-element> - <xpath-ui-element name="sendMsgInputField" xpath="//div[@class='o_instantmessaging_chat_form']//form//input[@type='text']" description="input chat message field"/> - <xpath-ui-element name="sendMsgButton" xpath="//div[@class='o_instantmessaging_chat_form']//form//a[contains(@class, 'b_button')]" - description="the send button " /> - </pageset> - <pageset name="projectGroupChat" description="chat in project groups"> - <xpath-ui-element name="enterChatroom" xpath="//a[contains(.//text(), 'Enter chatroom')]" description="enter chatroom button for the chat menu item of a project group"/> - </pageset> - - - <pageset name="windowTopNav" description="Elements in the top navigation of any OLAT window"> - <!-- <xpath-ui-element xpath="//li[@id='o_topnav_close']//a" - name="closeWindow" description="close the auxiliary window" /> asa unused --> - </pageset> - - <pageset name="briefCase" description="everything in the briefcase"> - <xpath-ui-element name="clickBriefcaseEntry" xpath="//table[@class='b_briefcase_filetable']//td[@class='b_first_child']/a[.//text()='" + linkText + "']" - description="Click on a folder- or file name in the briefcase"> - <parameter name="linkText" description="The text of the link"/> - </xpath-ui-element> - <xpath-ui-element name="selectBriefcaseCheckBox" xpath="//table[@class='b_briefcase_filetable']//td[@class='b_first_child']/input[@value='" + linkText + "']" - description="Click on a check box in the briefcase"> - <parameter name="linkText" description="The text of the link"/> - </xpath-ui-element> - <xpath-ui-element name="editMetadata" xpath="//table[@class='b_briefcase_filetable']//td[@class='b_first_child']/input[@value='" + linkText + "']/../..//td[@class='b_last_child']//a[@class=' b_small_icon b_briefcase_edit_meta_icon']" description="edit metadata for a folder entry"> - <parameter name="linkText" description="folder or file name"></parameter> - </xpath-ui-element> - <xpath-ui-element name="editFile" xpath="//table[@class='b_briefcase_filetable']//td[@class='b_first_child']/input[@value='" + linkText + "']/../..//td[@class='b_last_child']//a[@class='b_small_icon b_briefcase_edit_file_icon']" description="edit file"> - <parameter name="linkText" description="folder or file name"></parameter> - </xpath-ui-element> - <xpath-ui-element name="buttonDelete" xpath="//div[@class='b_briefcase_commandbuttons b_button_group']/input[@name='.actiondel']" - description="Click on the Delete button"/> - <!-- <xpath-ui-element name="buttonMove" xpath="//div[@class='b_briefcase_commandbuttons b_button_group']/input[@name='.actionmove']" - description="Click on the Move button"/> - <xpath-ui-element name="buttonCopy" xpath="//div[@class='b_briefcase_commandbuttons b_button_group']/input[@name='.actioncopy']" - description="Click on the Copy button"/> asa unused --> - <xpath-ui-element name="buttonZip" xpath="//div[@class='b_briefcase_commandbuttons b_button_group']/input[@name='.actionzip']" - description="Click on the Zip button"/> - <!-- <xpath-ui-element name="buttonUnzip" xpath="//div[@class='b_briefcase_commandbuttons b_button_group']/input[@name='.actionunzip']" - description="Click on the Unzip button"/> asa unused --> - <xpath-ui-element name="uploadFile" xpath="//div[@class='b_briefcase_createactions b_clearfix']//a[.//text()='Upload file']" - description="Link to upload a file"/> - <xpath-ui-element name="createFolder" xpath="//div[@class='b_briefcase_createactions b_clearfix']//a[.//text()='Create folder']" - description="Link to create a folder"/> - <xpath-ui-element name="createFile" xpath="//div[@class='b_briefcase_createactions b_clearfix']//a[.//text()='Create document']" - description="Link to create a file"/> - <xpath-ui-element name="createFileName" xpath="//div[.//text()='Create new document']//div[@class='b_form_element' and .//text()='index.html, info.txt, mystyles.css']//input[@type='text']" - description="input field for the new file name"/> - <xpath-ui-element name="htmlEditorSave" xpath="//div[@id='b_htmleditor_save']//a[.//text()='Save']" description="save edited text at create file"></xpath-ui-element> - <xpath-ui-element name="htmlEditorSaveAndClose" xpath="//div[@id='b_htmleditor_save']//a[.//text()='Save and close']" description="save edited text at create file, and close overlay"></xpath-ui-element> - <!-- <xpath-ui-element name="editQuota" xpath="//a[.//text()='Edit quota']" description="edit quota button"></xpath-ui-element> asa unused --> - <xpath-ui-element name="folderComponent" xpath="//div[@class='b_briefcase_foldercomp']" description="folder component div"></xpath-ui-element> - <xpath-ui-element name="selectAll" xpath="//div[@class='b_togglecheck']//a[.//input[@checked='checked']]" description="select all from folder filetable"></xpath-ui-element> - <xpath-ui-element name="zipFiles" xpath="//button[@value='Zip files']" description="zip files button"></xpath-ui-element> - </pageset> - - <pageset name="search" description="search"> - <xpath-ui-element name="topnavSearchInput" xpath="//li[@id='o_topnav_search']//div[@class='b_form_element b_form_horizontal']//input" description="topnav search input "/> - <xpath-ui-element name="topnavSubmitSearch" xpath="//li[@id='o_topnav_search']//div[@class='b_form_element b_form_horizontal']//a" description="topnav search sumbit button"></xpath-ui-element> - <xpath-ui-element name="searchFormInput" xpath="//div[@id='o_local_fulltextsearch']//div[@class='b_form_element b_form_horizontal']//input[@type='text']" description="Simple Search form - input element"></xpath-ui-element> - <xpath-ui-element name="searchButton" xpath="//div[@id='o_local_fulltextsearch']//div[@class='b_form_element b_form_horizontal']//a[contains(.//text(), 'Search')]" description="Simple Search button"></xpath-ui-element> - </pageset> - - <pageset name="upload" description="Upload file"> - <xpath-ui-element name="submit" xpath="//div[@class='b_button_group']//button[@value='Upload']" description="Submit button on upload resource"/> - <xpath-ui-element name="fileChooser" xpath="//div[@class='b_fileinput']//input[@class='b_fileinput_realchooser']" description="the file choose input field"/> - </pageset> -</ui-map-include> diff --git a/src/test/profile/selenium/ui-map/course-pageset.xml b/src/test/profile/selenium/ui-map/course-pageset.xml deleted file mode 100644 index dade3986e76..00000000000 --- a/src/test/profile/selenium/ui-map/course-pageset.xml +++ /dev/null @@ -1,322 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - - <pageset name="course" description="An opened course"> - - <pageset name="menu" description="the left hand menu"> - <xpath-ui-element name="root" - xpath="//a[contains(.//text(),'" + nameOfCourse + "')]" - description="The root link (named after the short title of the course, with tooltip title)"> - <parameter name="nameOfCourse" description="the name of the course"> - <defaultValue value="Demo course wiki"/> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="link" xpath="//div[@class='b_tree']//a[.//text()='" + link + "']" description="a course node link in the courserun, containing the linkText" > - <parameter name="link" description="The text of the link"/> - </xpath-ui-element> - <xpath-ui-element name="forum" - xpath="//div[@class='b_tree']//a[descendant::text()='Forum']" - description="Course node 'Forum'"/> - <xpath-ui-element name="structureNode" - xpath="//div[@class='b_tree']//a[contains(descendant::text(), 'Structure')]" - description="Course node 'Structure'"/> - <!-- ld: courseNode replaces the structureNode and forum, fix test cases before removal! --> - <xpath-ui-element name="courseNode" - xpath="//div[@class='b_tree']//a[contains(descendant::text(), '" + titleOfNode + "')]" - description="Click on the course node with the given title"> - <parameter name="titleOfNode" description="the title of the course node"> - <defaultValue value="Structure"/> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="positionedCourseElem" xpath="//div[@class='b_tree']//ul[contains(@class,'b_tree_l1')]/li[" + index + "]//a" description="course element identified by the index value"> - <parameter name="index" description="root's child index"/> - </xpath-ui-element> - </pageset> - - <!--TODO se evtl. xpath-ui-element links?--> - - <pageset name="toolbox" description="the toolbox area to the right"> - <pageset name="courseTools" description="the course tools toolbox"> - <link-ui-element name="courseEditor" link="Course editor" - description="Course editor Link"/> - <link-ui-element name="groupManagement" link="Group management" - description="Group Management link"/> - <link-ui-element name="rightsManagement" link="Rights management" - description="Rights Management link"/> - <!-- <link-ui-element name="archiveTool" link="Archive tool" - description="Archive Tool link"/> asa unused --> - <link-ui-element name="assessmentTool" link="Assessment tool" - description="Assessment tool link"/> - </pageset> - - <pageset name="generalTools" description="general course tools toolbox"> - <!-- <link-ui-element name="calendar" link="Calendar" - description="Calendar link"/> asa unused --> - <!-- <link-ui-element name="glossary" link="Glossary" - description="Glossary link"/> asa unused --> - <link-ui-element name="detailedView" link="Detailed view" - description="Detailed view link"/> - <!-- <link-ui-element name="personalNotes" link="Personal notes" - description="Personal notes link"/> asa unused --> - <link-ui-element name="setBookmark" link="Set bookmark" - description="Set bookmark link"/> - <!-- <xpath-ui-element xpath="//div[@class='b_toolbox'][descendant::text()='General']//a[.//text()='Enter course chat...']" - name="enterCourseChat" description="the Enter Course Chat link"/> asa unused --> - </pageset> - - <pageset name="myGroupsTools" description="group links toolbox"> - <xpath-ui-element name="tutoredGroups" - xpath="//div[@class='b_toolbox']//a[@class='b_toolbox_link' and descendant::text()='" + nameOfGroup + "']" - description="tutored groups"> - <parameter name="nameOfGroup" description="the name of the group"/> - </xpath-ui-element> - <xpath-ui-element name="myLearningGroups" - xpath="//div[@class='b_toolbox'][descendant::text()='My learning groups']//a[contains(descendant::text(), '" + nameOfGroup + "')]" - description="my learning groups"> - <parameter name="nameOfGroup" description="the name of the group"/> - </xpath-ui-element> - </pageset> - </pageset> - - <pageset name="content" description="the (center) content area"> - <xpath-ui-element name="contentElement" xpath="//div[@class='o_course_run']" description="content of the course element"/> - <pageset name="forum" description="forum in content area"> - <xpath-ui-element name="displayForum" - xpath="//div[@class='b_button_group']//a[.//text()='Display forum']" - description="Display forum after node selection"/> - - <xpath-ui-element name="newTopic" xpath="link=Open new topic" - description="Open new topic"/> - <!-- <xpath-ui-element name="archiveForum" xpath="link=Archive forum" - description="Archive forum"/> asa unused --> - <xpath-ui-element name="replyWithQuotation" xpath="link=Reply with quotation" - description="Reply with quot. to forum message"/> - <xpath-ui-element name="replyWithoutQuotation" xpath="link=Reply without quotation" - description="Reply w/o quot. to forum message"/> - <xpath-ui-element name="delete" xpath="link=Delete" - description="Delete forum message"/> - <xpath-ui-element name="deleteYes" xpath="link=Yes" - description="Confirm Yes delete forum message"/> - <!-- <xpath-ui-element name="deleteNo" xpath="link=No" - description="Confirm No delete forum message"/> asa unused --> - <xpath-ui-element name="edit" xpath="link=Edit" description="Edit forum message"/> - <xpath-ui-element name="deleteFile" xpath="//table//tr/td[contains(descendant::text(), '" + nameOfFile + "')]/../td//a[.//text()='Delete']" - description="delete file from forum message"> - <parameter name="nameOfFile" description="the name of the file"/> - </xpath-ui-element> - <xpath-ui-element name="typeMsgTitle" - xpath="//div[@class='b_form_element b_form_vertical']//input[@type='text']" - description="Forum - enter message title text"/> - <xpath-ui-element name="clickMsgBody" - xpath="//body[@id='tinymce']" - description="Forum - enter message body text"/> - <!-- <xpath-ui-element name="cancel" - xpath="//div[@class='b_button_group']//input[@value='Cancel']" - description="Forum - cancel message"/> asa unused --> - <xpath-ui-element name="save" - xpath="//div[@class='b_button_group']//button[@value='Save']" - description="Forum - save message"/> - <xpath-ui-element name="collectAsArtefact" xpath="//*[ @class and contains( concat( ' ', normalize-space(@class), ' ' ), ' b_eportfolio_add ' ) ]" - description="Collect post as artefact for ePortfolio"/> - <!-- <xpath-ui-element name="archiveThread" xpath="link=Archive thread" - description="Archive forum thread"/> asa unused --> - <!-- <xpath-ui-element name="closeDiscussion" xpath="link=Close discussion" - description="Close discussion"/> asa unused --> - <!-- <xpath-ui-element name="hideDiscussion" xpath="link=Hide discussion" - description="Hide discussion"/> asa unused --> - <!-- <xpath-ui-element name="showDiscussion" xpath="link=Show discussion" - description="Show discussion"/> asa unused --> - - <xpath-ui-element name="viewTopic" - xpath="//form[contains(@name, 'tb_ms')]//a[.//text()='"+nameOfTopic+"']" - description="Click on discussion topic"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - <!--TODO se - <xpath-ui-element name="showPreview" xpath="link=Show preview" description="Show preview of forum message"/> - --> - - </pageset> - - <pageset name="enrollment" description="the entrolment content area"> - <xpath-ui-element name="enrolOnGroup" - xpath="//form/div/table/tbody/tr[./td//text()='" + nameOfGroup + "']//a[.//text()='Enrol']" - description="enrol on a particular group"> - <parameter name="nameOfGroup" description="the name of the group"/> - </xpath-ui-element> - <xpath-ui-element name="enrolledOrNot" - xpath="//form/div/table/tbody/tr[./td//text()='" + nameOfGroup + "']//td[.//text()='enrolled' or .//text()='Not enrolled']" - description="enrolled on a particular group"> - <parameter name="nameOfGroup" description="the name of the group"/> - </xpath-ui-element> - <xpath-ui-element name="cancelEnrolment" - xpath="//form/div/table/tbody/tr[./td//text()='" + nameOfGroup + "']//a[contains(.//text(),'Cancel')]" - description="cancel enrolment on a particular group"> - <parameter name="nameOfGroup" description="the name of the group"/> - </xpath-ui-element> - <xpath-ui-element name="enrolmentType" - xpath="//div[@class='o_course_run_statusinfo' or @class='o_course_run_groupinfo']" - description="Course element of the type Enrolment - info"/> - - </pageset> - <pageset name="fileDialog" description="the file dialog content area"> - <xpath-ui-element - xpath="//div[@class='b_titled_wrapper o_course_run']//a[.//text()='Upload file']" - name="uploadFile" description="the upload button for files"> - </xpath-ui-element> - </pageset> - <!-- new for 6.3--> - <pageset name="blog" description="the blog content area"> - <!-- links in blog run--> - <xpath-ui-element xpath="//div[@class='b_button_group']//a[.//text()='Edit blog']" name="editBlog" description="the edit blog button"/> - <xpath-ui-element xpath="//div[@class='b_button_group']//a[.//text()='Create your own entries']" name="createOwnEntries" description="the create own entries button"/> - <xpath-ui-element xpath="//div[@class='b_button']//a[.//text()='Include an external blog already existing']" name="includeExtBlog" description="the include an external blog button"/> - <xpath-ui-element xpath="//div[@class='b_form_element']//a[.//text()='URL']" name="blogURL" description="URL field"/> - - <xpath-ui-element xpath="//div[@class='b_form_element']//a[.//text()='Title']" name="entryTitle" description="entry title field"/> - <!-- LD: how to define these two fields? - <xpath-ui-element xpath="'Description'" name="entryDescription" description="entry description field"/> - <xpath-ui-element xpath="'Content'" name="entryContent" description="entry content field"/> - --> - <xpath-ui-element xpath="//div[@class='b_button_group']//a[.//text()='Publish']" name="publishEntry" description="the publish entry button"/> - <xpath-ui-element xpath="//div[@class='b_button_group']//a[.//text()='Save draft']" name="saveDraft" description="the save draft button"/> - <xpath-ui-element xpath="//div[@class='b_button_group']//a[.//text()='Cancel']" name="cancel" description="the cancel button"/> - - - <xpath-ui-element xpath="//div[@class='b_button_group']//a[.//text()='Create new entry']" name="createEntry" description="the create new entry button"/> - <xpath-ui-element xpath="//div[@class='b_button b_xsmall']//a[.//text()='Edit entry']" name="editEntry" description="the edit entry button"/> - <xpath-ui-element xpath="//div[@class='b_button_b_xsmall']//a[.//text()='Delete']" name="deleteEntry" description="the delete button"/> - <!-- LD: how to define these links? - <xpath-ui-element xpath="'Read more']" name="readMore" description="the read more link"/> - // ld: comment function same for podcast, xpath Comments(0) with counter of number of comments - <xpath-ui-element xpath="'Comments']" name="comments" description="the comments link"/> - <xpath-ui-element xpath="'Add your comment']" name="addComment" description="the add your comment link"/> - --> - <xpath-ui-element xpath="//div[@class='b_button_b_xsmall']//a[.//text()='Reply']" name="reply" description="the reply button"/> - <xpath-ui-element xpath="//div[@class='b_button_b_xsmall']//a[.//text()='Delete']" name="deleteComment" description="the delete button"/> - <!-- LD: im ui:commons? - <xpath-ui-element xpath="'Save']" name="saveComment" description="the save comment button"/> - <xpath-ui-element xpath="'Cancel']" name="cancelComment" description="the cancel comment button"/> - --> - </pageset> - - <pageset name="scorm" description="scorm"> - <xpath-ui-element name="scormPreview" - xpath="//div[@class='b_form_element']//button[@value='Show SCORM learning content']" - description="show SCORM content button"> - </xpath-ui-element> - <link-ui-element name="back" link="Back" description="The Back button"/> - </pageset> - <pageset name="assessment" description="assessment course element"> - <xpath-ui-element name="summaryOfScore" - xpath="//div[@class='o_course_run_scoreinfo' and .//text()='Summary of score']" - description="Summary of score title"/> - </pageset> - <pageset name="lti" description="lti xpaths"> - <xpath-ui-element name="launch" xpath="//input[@name='ext_basiclti_submit']" description="launch button"/> - </pageset> - <!-- for test see qti-pageset.xml--> - <xpath-ui-element name="passedFailedStatus" - xpath="//div[@class='o_course_run_scoreinfo']//td[contains(descendant::text(), 'Status')]/../td[2]/span/text()" - description="course scoreEvaluation info: Passed/Failed"/> - </pageset> - - <pageset name="assessment" description="AssessmentTool links"> - <xpath-ui-element name="tableFilterForm" xpath="//div[@class='b_table_filter']//form[@name='tablefilter']" description="The Assessment overview table filter"/> - <xpath-ui-element name="selectType" - xpath="//div[@class='b_tree']//a[./text()='" + text + "']" - description="select the left hand menu link with the given text"> - <parameter name="text" description="the text of the left hand menu link"> - <defaultValue value="As per user"/> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="selectUser" - xpath="//table//a[./text()='" + username + "']" - description="select the user with the given username"> - <parameter name="username" description="username"> - <defaultValue value="test"/> - </parameter> - </xpath-ui-element> - <!-- It is assumed that each course element has a unique title within the current course --> - <xpath-ui-element name="scoreInTable" - xpath="//td[contains(descendant::text(), '" + title + "')]/../td[4]/text()" - description="score xpath for the specified test course element in the assessment overview"> - <parameter name="title" description="the title of the test course node"> - <defaultValue value="Test"/> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="attemptsInTable" - xpath="//td[contains(descendant::text(), '" + title + "')]/../td[3]/text()" - description="attempts xpath for the specified test course element in the assessment overview"> - <parameter name="title" description="the title of the test course node"> - <defaultValue value="Test"/> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="passedStatusInTable" - xpath="//td[contains(descendant::text(), '" + title + "')]/../td[5]//text()" - description="passed/failed xpath for the specified test course element in the assessment overview"> - <parameter name="title" description="the title of the test course node"> - <defaultValue value="Test"/> - </parameter> - </xpath-ui-element> - - <xpath-ui-element name="selectAssessmentCourseNode" - xpath="//td[contains(descendant::text(), '" + title + "')]/../td[6]/a[.//text()='Select']" - description="'Select' link of the asssessment course node"> - <parameter name="title" description="the title of the test course node"> - <defaultValue value="Bewertung"/> - </parameter> - </xpath-ui-element> - <!-- AssessementForm start --> - <xpath-ui-element name="setPassedNoInfo" - xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Passed']//div[@class='b_form_element']//input[@name='passed' and @value='undefined']" - description="'Passed' no information"/> - <xpath-ui-element name="setPassedYes" - xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Passed']//div[@class='b_form_element']//input[@name='passed' and @value='true']" - description="'Passed' Yes"/> - <xpath-ui-element name="setPassedNo" - xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Passed']//div[@class='b_form_element']//input[@name='passed' and @value='false']" - description="'Passed' no information"/> - <xpath-ui-element name="minMaxScore" - xpath="//div[@class='b_form_element_wrapper b_clearfix' and .//text()='" + title + "']//div[@class='b_form_element']//span/text()" - description="Minimum/maximum score in AssessmentForm"> - <parameter name="title" description="the label: Minimum score or Maximum score"> - <defaultValue value="Minimum score:"/> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="coachComment" xpath="//div[@class='b_form_element']//textarea[@name='coachcomment']" description="Comments for other coaches textarea"/> - <!-- AssessementForm end --> - <xpath-ui-element name="startBulkAssessment" - xpath="//a[contains(descendant::text(), 'Start bulk assessment')]" - description="Start bulk assessment wizard"/> - <xpath-ui-element name="selectAssessmentCourseNodeInWizard" - xpath="//td[descendant::text()='" + title + "']/../td[2]/a[contains(descendant::text(), 'Select')]" - description="'Select' link of the course node"> - <parameter name="title" description="the title of the test course node"> - <defaultValue value="Bewertung"/> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="bulkAssessmentValues" - xpath="//div[@class='b_form_element']//textarea" - description="username and score values"/> - <xpath-ui-element name="closeBulkAssessmentWizard" - xpath="//fieldset[./legend[contains(.//text(),'Step 6')]]//a[contains(descendant::text(), 'Close')]" - description="close wizard"/> - - <xpath-ui-element xpath="//div[@class='b_toolbox'][descendant::text()='Assessment tool']//a[descendant::text()='Close']" - name="closeAssessmentTool" description="close the assessment tool"></xpath-ui-element> - - <!-- mmw: beispiel bitte stehen lassen. sonst marions notizbuch entsprechend anpassen --> - <xpath-ui-element xpath="link=Close" name="alsoCloseAssessmentTool" description="plan B of close the assessment tool"></xpath-ui-element> - - </pageset> - - <pageset name="disposed" description="disposed course"> - <xpath-ui-element name="closeAndRestart" xpath="//a[descendant::text()='Close course and restart']" description="Comments for users textarea"/> - </pageset> - - </pageset> - -</ui-map-include> diff --git a/src/test/profile/selenium/ui-map/courseEditor-pageset.xml b/src/test/profile/selenium/ui-map/courseEditor-pageset.xml deleted file mode 100644 index c29da58d8a8..00000000000 --- a/src/test/profile/selenium/ui-map/courseEditor-pageset.xml +++ /dev/null @@ -1,928 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="courseEditor" description="A course opened in the editor"> - <pageset name="menu" description="the left hand menu"> - <xpath-ui-element name="link" xpath="//div[@class='b_tree']//a[contains(.//text(),'" + link + "')]" description="a course node link in the courseeditor, containing the linkText" > - <parameter name="link" description="The text of the link"/> - </xpath-ui-element> - </pageset> - <pageset name="content" description="the (center) content area"> - <pageset name="TitleDescription" description="tab title and description"> - <!-- <xpath-ui-element name="tabTitleDescription" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Title and description']" - description="Tab Title and description"/> asa unused --> - <xpath-ui-element name="shortTitle" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Short title']//div[@class='b_form_element']//input[@type='text']" - description="The Short title input field"/> - <!-- <xpath-ui-element name="title" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Title']//div[@class='b_form_element']//input[@type='text']" - description="The Title input field"/> asa unused --> - <xpath-ui-element name="save" - xpath="//div[@class='b_form_element']//button[.//text()='Save']" - description="The Save button"/> - </pageset> - <pageset name="visibility" description="tab visibility"> - <xpath-ui-element name="tabVisibility" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Visibility']" - description="Tab visibility"/> - - <xpath-ui-element name="blockedForLearners" - xpath="//fieldset[./legend/text()='Visibility']//input[@name='coachExclusive']" - description="Checkbox blocked for learners"/> - <xpath-ui-element name="dependingDate" - xpath="//fieldset[./legend/text()='Visibility']//input[@name='dateSwitch']" - description="Checkbox depending on date"/> - <xpath-ui-element name="startDate" - xpath="//div[@class='b_form_subform']//div[@class='b_form_element_wrapper b_clearfix' and .//text()='from']//input" - description="Start date field"/> - <xpath-ui-element name="endDate" - xpath="//div[@class='b_form_subform']//div[@class='b_form_element_wrapper b_clearfix' and .//text()='to']//input" - description="End date field"/> - <xpath-ui-element name="dependingGroup" - xpath="//fieldset[./legend/text()='Visibility']//input[@name='groupSwitch']" - description="Checkbox depending on group"/> - <!-- <xpath-ui-element name="learningGroup" - xpath="//fieldset[./legend/text()='Visibility']//div[./div/div/div/label/text()='Only for learning groups']//input" - description="form field learning group"/> asa unused --> - - <!-- <xpath-ui-element name="createLearningGroup" - xpath="//fieldset[./legend/text()='Visibility']//div[./div/div/div/label/text()='Only for learning groups']//a[./span/text()='Create']" - description="create a new learning group"/> asa unused --> - <xpath-ui-element name="selectLearningGroup" - xpath="//fieldset[./legend/text()='Visibility']//div[./div/div/div/label/text()='Only for learning groups']//a[./span/text()='Select']" - description="select an existing learning group"/> - <!-- <xpath-ui-element name="learningArea" - xpath="//fieldset[./legend/text()='Visibility']//div[./div/div/div/label/text()='Only for learning areas']//input" - description="form field learning area"/> asa unused --> - <!-- <xpath-ui-element name="createLearningArea" - xpath="//fieldset[./legend/text()='Visibility']//div[./div/div/div/label/text()='Only for learning areas']//a[./span/text()='Create']" - description="create a new learning area"/> asa unused --> - <!-- <xpath-ui-element name="selectLearningArea" - xpath="//fieldset[./legend/text()='Visibility']//div[./div/div/div/label/text()='Only for learning areas']//a[./span/text()='Select']" - description="select an existing learning area"/> asa unused --> - - <xpath-ui-element name="dependingAssessment" - xpath="//fieldset[./legend/text()='Visibility']//input[@name='assessmentSwitch']" - description="Checkbox depending on assessment"/> - <xpath-ui-element name="selectElement" - xpath="//fieldset[./legend/text()='Visibility']//select[@name='nodePassed_SELBOX']" - description="Dropdown select course elment"/> - <!-- <xpath-ui-element name="valueCheck" - xpath="//fieldset[./legend/text()='Visibility']//input[@name='assessmentTypeSwitch' and @value='score']" - description="Radio Button value check with value 'passed'"/> asa unused --> - <!-- <xpath-ui-element name="passedCheck" - xpath="//fieldset[./legend/text()='Visibility']//input[@name='assessmentTypeSwitch' and @value='passed']" - description="Radio Button value check with value 'score'"/> asa unused --> - <!-- <xpath-ui-element name="passingScore" - xpath="//fieldset[./legend/text()='Visibility']//div[./div/div/div/label/text()='Passing score']//input" - description="Field passing score"/> asa unused --> - <!-- <xpath-ui-element name="applyRulesForOwners" - xpath="//fieldset[./legend/text()='Visibility']//input[@name='applyRulesForCoach']" - description="Checkbox apply rules also for owners and tutors"/> asa unused --> - <xpath-ui-element name="save" - xpath="//fieldset[./legend/text()='Visibility']//button[@value='Save']" - description="save button tab visibility"/> - <xpath-ui-element name="saveInfo" - xpath="//fieldset[./legend/text()='Information if visible and no access']//button[@value='Save']" - description="save button info field"/> - - </pageset> - <pageset name="access" description="tab access"> - <!-- TODO sr/ki add links--> - <xpath-ui-element name="tabAccess" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Access']" - description="Tab access"/> - <xpath-ui-element name="save" - xpath="//fieldset[./legend/text()='Access']//button[@value='Save']" - description="general save button tab visibility"/> - <xpath-ui-element name="blockedForLearnersReadAndWrite" - xpath="//fieldset[./legend/text()='Read and write (up/download)']//input[@name='coachExclusive']" - description="Checkbox blocked for learners in field Read and write (up and download)"/> - <xpath-ui-element name="saveReadAndWrite" - xpath="//fieldset[./legend/text()='Read and write (up/download)']//button[@value='Save']" - description="save button tab access read and write"/> - <xpath-ui-element name="blockedForLearnersReadOnly" - xpath="//fieldset[./legend/text()='Read only (download)']//input[@name='coachExclusive']" - description="Checkbox blocked for learners in field Read only (download)"/> - - <xpath-ui-element name="blockedForLearners" - xpath="//fieldset[./legend/text()='" + fieldsetLegend + "']//input[@name='coachExclusive']" - description="Checkbox blocked for learners in field Read only (download)"> - <parameter name="fieldsetLegend" description="fieldset legend text"/> - </xpath-ui-element> - <xpath-ui-element name="saveAccess" xpath="//fieldset[./legend/text()='" + fieldsetLegend + "']//button[@value='Save']" description="save access"> - <parameter name="fieldsetLegend" description="save access for the specified fieldset"></parameter> - </xpath-ui-element> - - <xpath-ui-element name="saveReadOnly" - xpath="//fieldset[./legend/text()='Read only (download)']//button[@value='Save']" - description="save button tab access read only"/> - - <xpath-ui-element name="dependingDate" - xpath="//fieldset[./legend/text()='Access']//input[@name='dateSwitch']" - description="Checkbox depending on date"/> - <xpath-ui-element name="startDate" - xpath="//div[@class='b_form_subform']//div[@class='b_form_element_wrapper b_clearfix' and .//text()='from']//input" - description="Start date field"/> - <xpath-ui-element name="endDate" - xpath="//div[@class='b_form_subform']//div[@class='b_form_element_wrapper b_clearfix' and .//text()='to']//input" - description="End date field"/> - <xpath-ui-element name="dependingGroup" - xpath="//fieldset[./legend/text()='Access']//input[@name='groupSwitch']" - description="Checkbox depending on group"/> - <!-- <xpath-ui-element name="learningGroup" - xpath="//fieldset[./legend/text()='Access']//div[./div/div/div/label/text()='Only for learning groups']//input" - description="form field learning group"/> asa unused --> - - <!-- <xpath-ui-element name="createLearningGroup" - xpath="//fieldset[./legend/text()='Access']//div[./div/div/div/label/text()='Only for learning groups']//a[./span/text()='Create']" - description="create a new learning group"/> asa unused --> - <xpath-ui-element name="selectLearningGroup" - xpath="//fieldset[./legend/text()='Access']//div[./div/div/div/label/text()='Only for learning groups']//a[./span/text()='Select']" - description="select an existing learning group"/> - <!-- <xpath-ui-element name="learningArea" - xpath="//fieldset[./legend/text()='Access']//div[./div/div/div/label/text()='Only for learning areas']//input" - description="form field learning area"/> asa unused --> - <!-- <xpath-ui-element name="createLearningArea" - xpath="//fieldset[./legend/text()='Access']//div[./div/div/div/label/text()='Only for learning areas']//a[./span/text()='Create']" - description="create a new learning area"/> asa unused --> - <!-- <xpath-ui-element name="selectLearningArea" - xpath="//fieldset[./legend/text()='Access']//div[./div/div/div/label/text()='Only for learning areas']//a[./span/text()='Select']" - description="select an existing learning area"/> asa unused --> - - <!-- <xpath-ui-element name="dependingAssessment" - xpath="//fieldset[./legend/text()='Access']//input[@name='assessmentSwitch']" - description="Checkbox depending on assessment"/> asa unused --> - <!-- <xpath-ui-element name="selectElement" - xpath="//fieldset[./legend/text()='Access']//select[@name='nodePassed_SELBOX']" - description="Dropdown select course elment"/> asa unused --> - <!-- <xpath-ui-element name="valueCheck" - xpath="//fieldset[./legend/text()='Access']//input[@name='assessmentTypeSwitch' and @value='score']" - description="Radio Button value check with value 'passed'"/> asa unused --> - <!-- <xpath-ui-element name="passedCheck" - xpath="//fieldset[./legend/text()='Access']//input[@name='assessmentTypeSwitch' and @value='passed']" - description="Radio Button value check with value 'score'"/> asa unused --> - <!-- <xpath-ui-element name="passingScore" - xpath="//fieldset[./legend/text()='Access']//div[./div/div/div/label/text()='Passing score']//input" - description="Field passing score"/> asa unused --> - <!-- <xpath-ui-element name="applyRulesForOwners" - xpath="//fieldset[./legend/text()='Access']//input[@name='applyRulesForCoach']" - description="Checkbox apply rules also for owners and tutors"/> asa unused --> - - - </pageset> - <pageset name="visibilityOrAccess" description="common paths for visibility or access"> - <xpath-ui-element name="displayExpertMode" xpath="//a[.//text()='Display expert mode']" description="display expert mode button"/> - <xpath-ui-element name="displaySimpleMode" xpath="//a[.//text()='Display simple mode']" description="display simple mode button"/> - <xpath-ui-element name="saveVisibilityExpertRule" xpath="//fieldset[./legend/text()='Visibility']//button[@value='Save']" description="save visibility expert rule"/> - <xpath-ui-element name="saveAccessExpertRule" xpath="//fieldset[./legend/text()='Access']//button[@value='Save']" description="save accesss expert rule"/> - </pageset> - <pageset name="bbStructure" description="configuration of structure"> - <xpath-ui-element name="scoreTab" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Score']" - description="score tab link"/> - <xpath-ui-element name="minimumScore" - xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Minimum score']//div[@class='b_form_element']//input[@type='text']" - description="minimum score input form element"/> - </pageset> - <pageset name="bbSinglePage" description="configuration of single page"> - <!-- TODO sr/ki add links--> - <xpath-ui-element name="tabPageContent" - xpath="//div[preceding-sibling::h4[contains(@class,'o_sp_icon')]]//div[@class='b_tabbedpane_tabs']//a[.//text()='Page content']" - description="Tab page content (single page)"/> - <xpath-ui-element name="replacePage" - xpath="//div[contains(@class, 'b_tabbedpane_content_inner')]//a[contains(@href, 'command.changefile')]" - description="Replace HTML-page"/> - <!-- <xpath-ui-element name="openPageInEditor" - xpath="//div[contains(@class, 'b_tabbedpane_content_inner')]//a[contains(@href, 'command.edit')]" - description="Open page in editor"/> asa unused --> - <xpath-ui-element name="previewSinglePage" - xpath="//div[contains(@class, 'b_tabbedpane_content_inner')]//a[contains(@href, 'command.preview')]" - description="Show preview of attached single page"/> - <xpath-ui-element name="selectOrCreatePage" - xpath="//div[contains(@class, 'b_tabbedpane_content_inner')]//a[contains(@href, 'command.choosecreatefile')]" - description="Select or create page"/> - <xpath-ui-element name="saveAndClose" xpath="//a[.//text()='Save and close']" description="Save and close button"/> - - </pageset> - <pageset name="bbExternalPage" description="configuration of external page"> - <!-- TODO sr/ki add links--> - <!-- <xpath-ui-element name="tabPageContent" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Page content']" - description="Tab page content (external page)"/> asa unused --> - </pageset> - <pageset name="bbCP" description="configuration of CP"> - <xpath-ui-element name="tabLearningContentCP" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Learning content']" - description="Tab learning content (CP)"/> - <xpath-ui-element name="selectCreateImportCP" - xpath="//fieldset[./legend/text()='Select CP learning content']//a[@class='b_button b_small']" - description="button select, create or import CP"/> - </pageset> - <pageset name="bbForum" description="configuration of SCORM"> - <!-- TODO sr/ki add links--> - <!-- <xpath-ui-element name="tabLearningContentScorm" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Learning content']" - description="Tab learning content (Scorm)"/> asa unused --> - </pageset> - <pageset name="bbWiki" description="configuration of wiki "> - <xpath-ui-element name="tabWikiLearningContent" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Wiki learning content']" - description="Tab wiki learning content"/> - <xpath-ui-element name="chooseWiki" - xpath="//fieldset[./legend/text()='Select Wiki']//a[@class='b_button b_small']" - description="button choose wiki"/> - <!-- <xpath-ui-element name="replaceWiki" - xpath="//fieldset[./legend/text()='Select Wiki']//a[.//text()='Replace Wiki ']" - description="button replace wiki"/> asa unused --> - - <!-- TODO se evtl auslagern da dieser search screen auch bei anderen bausteinen (test, fragebogen) kommt --> - - - </pageset> - <pageset name="bbFileDialog" description="configuration of file dialog"> - <!-- TODO sr/ki add links--> - <!-- <xpath-ui-element name="tabForumStorage" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Forum/storage configuration']" - description="Tab Forum/storage configuration"/> asa unused --> - </pageset> - <pageset name="bbFolder" description="configuration of folder"> - <!-- TODO sr/ki add links--> - <xpath-ui-element name="tabFolderConfiguration" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Folder configuration']" - description="Tab folder configuration)"/> - </pageset> - <pageset name="bbAssessment" description="configuration of assessment"> - <!-- TODO sr/ki add links--> - <xpath-ui-element name="tabAssessment" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Assessment']" - description="Tab assessment"/> - </pageset> - <pageset name="bbTask" description="configuration of task"> - <!-- TODO sr/ki add links--> - <!-- <xpath-ui-element name="tabSubElements" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Sub-elements']" - description="Tab sub-elements"/> asa unused --> - <!-- <xpath-ui-element name="tabAssignment" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Assignment']" - description="Tab assignment"/> asa unused --> - <!-- <xpath-ui-element name="tabHandingIn" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Handing in']" - description="Tab handing in"/> asa unused --> - <!-- <xpath-ui-element name="tabAssessment" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Assessment']" - description="Tab assessment"/> asa unused --> - <!-- <xpath-ui-element name="tabSampleSolution" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Sample solution']" - description="Tab sample solution"/> asa unused --> - </pageset> - <pageset name="bbTest" description="configuration of test"> - <xpath-ui-element name="tabTestConfiguration" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Test configuration']" - description="Tab test configuration"/> - <xpath-ui-element name="chooseFile" - xpath="//fieldset[./legend/text()='Test']//a[.//text()='Choose, create or import file']" - description="Button choose file"/> - <pageset name="layoutParameters" description="section layout parameters"> - <xpath-ui-element name="limitNumOfAttempts" xpath="//div[@class='b_form_element']//input[@name='limitAttempts']" description="limit number of attempts checkbox"/> - <xpath-ui-element name="showMenuNavigation" xpath="//div[@class='b_form_element']//input[@name='qti_displayMenu']" description="showMenuNavigation checkbox"/> - <xpath-ui-element name="allowMenuNavigation" xpath="//div[@class='b_form_element']//input[@name='qti_enableMenu']" description="allowMenuNavigation checkbox"/> - <xpath-ui-element name="allowCancel" xpath="//div[@class='b_form_element']//input[@name='qti_enableCancel']" description="allowCancel checkbox"/> - <xpath-ui-element name="allowSuspend" xpath="//div[@class='b_form_element']//input[@name='qti_enableSuspend']" description="allowSuspend checkbox"/> - <xpath-ui-element name="displayResultsOnTestHomepage" xpath="//div[@class='b_form_element']//input[@name='qti_enableResultsOnHomePage']" description="displayResultsOnTestHomepage checkbox"/> - - <!-- <xpath-ui-element name="allowMenuNavigationYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableMenu' and @value='y']" - description="Radio Button (Yes) allow menu navigation"/> - <xpath-ui-element name="allowMenuNavigationNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableMenu' and @value='n']" - description="Radio Button (No) allow menu navigation"/> - <xpath-ui-element name="showMenuNavigationYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayMenu' and @value='y']" - description="Radio Button (Yes) show menu navigation"/> - <xpath-ui-element name="showMenuNavigationNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayMenu' and @value='n']" - description="Radio Button (No) show menu navigation"/> - <xpath-ui-element name="clusteringOfQuestions" - xpath="//select[@name='qti_form_sequence']" - description="Dropdown clustering of questions"/> - <xpath-ui-element name="showNrOfQuestionsYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableQuestionProgress' and @value='y']" - description="Radio Button (Yes) show number of questions"/> - <xpath-ui-element name="showNrOfQuestionsNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableQuestionProgress' and @value='n']" - description="Radio Button (No) show number of questions"/> - <xpath-ui-element name="showQuestionTitleYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayQuestionTitle' and @value='y']" - description="Radio Button (Yes) show question title"/> - <xpath-ui-element name="showQuestionTitleNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayQuestionTitle' and @value='n']" - description="Radio Button (No) show question title"/> - <xpath-ui-element name="allowCancelYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableCancel' and @value='y']" - description="Radio Button (Yes) allow to cancel"/> - <xpath-ui-element name="allowCancelNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableCancel' and @value='n']" - description="Radio Button (No) allow to cancel"/> - <xpath-ui-element name="allowSuspendYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableSuspend' and @value='y']" - description="Radio Button (Yes) allow to suspend"/> - <xpath-ui-element name="allowSuspendNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableSuspend' and @value='n']" - description="Radio Button (No) allow to suspend"/> - <xpath-ui-element name="maximumNrOfApproach" - xpath="//select[@name='qti_form_attempts']" - description="Dropdown max number of approaches"/> - <xpath-ui-element name="showScoreInTestYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableScoreProgress' and @value='y']" - description="Radio Button (Yes) show score in test"/> - <xpath-ui-element name="showScoreInTestNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableScoreProgress' and @value='n']" - description="Radio Button (No) show score in test"/> - <xpath-ui-element name="displayScoreOnTestHomepageYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_scoreInfo' and @value='y']" - description="Radio Button (Yes) display score on test homepage"/> - <xpath-ui-element name="displayScoreOnTestHomepageNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_scoreInfo' and @value='n']" - description="Radio Button (No) display score on test homepage"/> - <xpath-ui-element name="showResultsAfterTestSubmittedYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableResultsOnFinish' and @value='y']" - description="Radio Button (Yes) display results after test has been submitted"/> - <xpath-ui-element name="showResultsAfterTestSubmittedNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableResultsOnFinish' and @value='n']" - description="Radio Button (No) display results after test has been submitted"/> - <xpath-ui-element name="displayresultsOnTestHomepageYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableResultsOnHomePage' and @value='y']" - description="Radio Button (Yes) display results on test homepage"/> - <xpath-ui-element name="displayresultsOnTestHomepageNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableResultsOnHomePage' and @value='n']" - description="Radio Button (No) display results on test homepage"/> - <xpath-ui-element name="displayDependingDateYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_showresult' and @value='y']" - description="Radio Button (Yes) display depending on date"/> - <xpath-ui-element name="displayDependingDateNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_showresult' and @value='n']" - description="Radio Button (No) display depending on date"/> - <xpath-ui-element name="overviewResults" - xpath="//select[@name='qti_form_summary']" - description="Dropdown overview results"/> - <xpath-ui-element name="save" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@value='Save']" - description="save button layout parameters"/> --> - <!-- <xpath-ui-element name="startDate" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti.form.date.start']" - description="Field start date"/> asa unused --> - <!-- <xpath-ui-element name="endDate" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti.form.date.end']" - description="Field end date"/> asa unused --> - </pageset> - </pageset> - <pageset name="bbSelfTest" description="configuration of self-test"> - <xpath-ui-element name="tabSelfTestConfiguration" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Self-test configuration']" - description="Tab self-test configuration"/> - <xpath-ui-element name="chooseFile" - xpath="//fieldset[./legend/text()='Self-test']//a[.//text()='Choose, create or import file']" - description="Button choose file"/> - <!-- <pageset name="layoutParameters" description="section layout parameters"> - <xpath-ui-element name="allowMenuNavigationYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableMenu' and @value='y']" - description="Radio Button (Yes) allow menu navigation"/> - <xpath-ui-element name="allowMenuNavigationNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableMenu' and @value='n']" - description="Radio Button (No) allow menu navigation"/> - <xpath-ui-element name="showMenuNavigationYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayMenu' and @value='y']" - description="Radio Button (Yes) show menu navigation"/> - <xpath-ui-element name="showMenuNavigationNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayMenu' and @value='n']" - description="Radio Button (No) show menu navigation"/> - <xpath-ui-element name="clusteringOfQuestions" - xpath="//select[@name='qti_form_sequence']" - description="Dropdown clustering of questions"/> - <xpath-ui-element name="showNrOfQuestionsYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableQuestionProgress' and @value='y']" - description="Radio Button (Yes) show number of questions"/> - <xpath-ui-element name="showNrOfQuestionsNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableQuestionProgress' and @value='n']" - description="Radio Button (No) show number of questions"/> - <xpath-ui-element name="showQuestionTitleYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayQuestionTitle' and @value='y']" - description="Radio Button (Yes) show question title"/> - <xpath-ui-element name="showQuestionTitleNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayQuestionTitle' and @value='n']" - description="Radio Button (No) show question title"/> - <xpath-ui-element name="allowCancelYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableCancel' and @value='y']" - description="Radio Button (Yes) allow to cancel"/> - <xpath-ui-element name="allowCancelNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableCancel' and @value='n']" - description="Radio Button (No) allow to cancel"/> - <xpath-ui-element name="allowSuspendYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableSuspend' and @value='y']" - description="Radio Button (Yes) allow to suspend"/> - <xpath-ui-element name="allowSuspendNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableSuspend' and @value='n']" - description="Radio Button (No) allow to suspend"/> - <xpath-ui-element name="showScoreInTestYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableScoreProgress' and @value='y']" - description="Radio Button (Yes) show score in test"/> - <xpath-ui-element name="showScoreInTestNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableScoreProgress' and @value='n']" - description="Radio Button (No) show score in test"/> - <xpath-ui-element name="displayScoreOnTestHomepageYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_scoreInfo' and @value='y']" - description="Radio Button (Yes) display score on test homepage"/> - <xpath-ui-element name="displayScoreOnTestHomepageNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_scoreInfo' and @value='n']" - description="Radio Button (No) display score on test homepage"/> - <xpath-ui-element name="showResultsAfterTestSubmittedYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableResultsOnFinish' and @value='y']" - description="Radio Button (Yes) display results after test has been submitted"/> - <xpath-ui-element name="showResultsAfterTestSubmittedNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableResultsOnFinish' and @value='n']" - description="Radio Button (No) display results after test has been submitted"/> - <xpath-ui-element name="displayresultsOnTestHomepageYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableResultsOnHomePage' and @value='y']" - description="Radio Button (Yes) display results on test homepage"/> - <xpath-ui-element name="displayresultsOnTestHomepageNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableResultsOnHomePage' and @value='n']" - description="Radio Button (No) display results on test homepage"/> - <xpath-ui-element name="displayDependingDateYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_showresult' and @value='y']" - description="Radio Button (Yes) display depending on date"/> - <xpath-ui-element name="displayDependingDateNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_showresult' and @value='n']" - description="Radio Button (No) display depending on date"/> - <xpath-ui-element name="overviewResults" - xpath="//select[@name='qti_form_summary']" - description="Dropdown overview results"/> - <xpath-ui-element name="save" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@value='Save']" - description="save button layout parameters"/> - <xpath-ui-element name="startDate" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti.form.date.start']" - description="Field start date"/> - <xpath-ui-element name="endDate" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti.form.date.end']" - description="Field end date"/> - </pageset>--> - </pageset> - <pageset name="bbQuestionnaire" description="configuration of questionnaire"> - <xpath-ui-element name="tabQuestionnaireConfiguration" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Questionnaire configuration']" - description="Tab questionnaire configuration"/> - <xpath-ui-element name="chooseFile" - xpath="//fieldset[./legend/text()='Questionnaire']//a[@class='b_button b_small']" - description="Button choose file"/> - <!-- <pageset name="layoutParameters" description="section layout parameters"> - <xpath-ui-element name="allowMenuNavigationYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableMenu' and @value='y']" - description="Radio Button (Yes) allow menu navigation"/> - <xpath-ui-element name="allowMenuNavigationNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableMenu' and @value='n']" - description="Radio Button (No) allow menu navigation"/> - <xpath-ui-element name="showMenuNavigationYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayMenu' and @value='y']" - description="Radio Button (Yes) show menu navigation"/> - <xpath-ui-element name="showMenuNavigationNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayMenu' and @value='n']" - description="Radio Button (No) show menu navigation"/> - <xpath-ui-element name="clusteringOfQuestions" - xpath="//select[@name='qti_form_sequence']" - description="Dropdown clustering of questions"/> - <xpath-ui-element name="showNrOfQuestionsYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableQuestionProgress' and @value='y']" - description="Radio Button (Yes) show number of questions"/> - <xpath-ui-element name="showNrOfQuestionsNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableQuestionProgress' and @value='n']" - description="Radio Button (No) show number of questions"/> - <xpath-ui-element name="showQuestionTitleYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayQuestionTitle' and @value='y']" - description="Radio Button (Yes) show question title"/> - <xpath-ui-element name="showQuestionTitleNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_displayQuestionTitle' and @value='n']" - description="Radio Button (No) show question title"/> - <xpath-ui-element name="allowCancelYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableCancel' and @value='y']" - description="Radio Button (Yes) allow to cancel"/> - <xpath-ui-element name="allowCancelNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableCancel' and @value='n']" - description="Radio Button (No) allow to cancel"/> - <xpath-ui-element name="allowSuspendYes" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableSuspend' and @value='y']" - description="Radio Button (Yes) allow to suspend"/> - <xpath-ui-element name="allowSuspendNo" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@name='qti_enableSuspend' and @value='n']" - description="Radio Button (No) allow to suspend"/> - <xpath-ui-element name="save" - xpath="//fieldset[./legend/text()='Layout parameters']//input[@value='Save']" - description="save button layout parameters"/> - </pageset> --> - </pageset> - <pageset name="bbEnrolment" description="configuration of enrolment"> - <xpath-ui-element name="tabConfiguration" - xpath="//div[contains(./h4/@class, 'o_en_icon')]//div[@class='b_tabbedpane_tabs']//a[.//text()='Configuration']" - description="Tab configuration"/> - <!-- <xpath-ui-element name="learningGroup" - xpath="//div[contains(./h4/@class, 'o_en_icon')]//div[./div/div/div/label/text()='Learning groups']//input" - description="form field learning group"/> asa unused --> - <!-- <xpath-ui-element name="learningArea" - xpath="//div[contains(./h4/@class, 'o_en_icon')]//div[./div/div/div/label/text()='Learning areas']//input" - description="form field learning area"/> asa unused --> - - <!-- <xpath-ui-element name="createLearningGroup" - xpath="//div[contains(./h4/@class, 'o_en_icon')]//div[./div/div/div/label/text()='Learning groups']//a[./span/text()='Create']" - description="create a new learning group"/> asa unused --> - <xpath-ui-element name="selectLearningGroup" - xpath="//div[contains(./h4/@class, 'o_en_icon')]//div[./div/div/div/label/text()='Learning groups']//a[./span/text()='Select']" - description="select an existing learning group"/> - <!-- <xpath-ui-element name="createLearningArea" - xpath="//div[contains(./h4/@class, 'o_en_icon')]//div[./div/div/div/label/text()='Learning areas']//a[./span/text()='Create']" - description="create a new learning area"/> asa unused --> - <xpath-ui-element name="selectLearningArea" - xpath="//div[contains(./h4/@class, 'o_en_icon')]//div[./div/div/div/label/text()='Learning areas']//a[./span/text()='Select']" - description="select an existing learning area"/> - <!-- <xpath-ui-element name="enableCancelEnroll" - xpath="//div[contains(./h4/@class, 'o_en_icon')]//input[@name='enableCancelEnroll']" - description="enable Cancel Enroll"/> asa unused --> - <xpath-ui-element name="save" - xpath="//div[contains(./h4/@class, 'o_en_icon')]//button[@value='Save']" - description="save button tab configuration"/> - - <pageset name="selectLearningGroupDialog" - description="the select learning group dialog"> - <!-- <xpath-ui-element name="create" - xpath="//div[@class='b_window']//a[.//text()='Create']" - description="create button - create a new learning group"/> asa unused --> - <xpath-ui-element name="checkGroup" - xpath="//div[@class='b_window']//input[@class='b_checkbox' and @value='" + nameOfGroup + "']" - description="check a learning group"> - <parameter name="nameOfGroup" description="the name of the group"/> - </xpath-ui-element> - <xpath-ui-element name="apply" - xpath="//div[@class='b_window']//button[.//text()='Apply']" - description="create button - create a new learning group"/> - <!-- <xpath-ui-element name="cancel" - xpath="//div[@class='b_window']//button[.//text()='Cancel']" - description="create button - create a new learning group"/> asa unused --> - </pageset> - - <pageset name="createLearningGroupDialog" - description="the create learning group dialog"> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='groupForm']//input[@id='fe_bgName']" - name="groupName" description="form field group name"/> asa unused --> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='groupForm']//textarea[@name='fe_bgWkDescription']" - name="groupDescription" description="form field group description"/> asa unused --> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='groupForm']//input[@id='fe_bgMax']" - name="maxParticipants" description="form field max participants"/> asa unused --> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='groupForm']//input[@name='enableWaitinglist']" - name="waitingList" description="form field waiting list"/> asa unused --> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='groupForm']//input[@name='enableAutoCloseRanks']" - name="moveUpAutomatically" description="form field move up automatically"/> asa unused --> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='groupForm']//input[@value='Save']" - name="save" description="save button description"/> asa unused --> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='groupForm']//input[@value='Cancel']" - name="cancel" description="cancel button description"/> asa unused --> - </pageset> - - <pageset name="createLearningAreaDialog" - description="the create learning area dialog"> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='areaForm']//input[@id='name']" - name="name" description="form field learning area name"/> asa unused --> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='areaForm']//textarea[@name='description']" - name="description" description="form field description"/> asa unused --> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='areaForm']//input[@value='Save']" - name="save" description="save button description"/> asa unused --> - <!-- <xpath-ui-element - xpath="//div[@class='b_window']//form[@name='areaForm']//input[@value='Cancel']" - name="cancel" description="cancel button description"/> asa unused --> - </pageset> - - </pageset> - <pageset name="bbContactForm" description="configuration of contact form"> - <!-- TODO sr/ki add links--> - <!-- <xpath-ui-element name="tabRecipient" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Recipient']" - description="Tab recipient"/> asa unused --> - </pageset> - <!-- new for 6.3--> - <pageset name="bbBlog" description="configuration of blog"> - <xpath-ui-element name="tabBlogLearningContent" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Blog learning content']" - description="Tab blog learning content"/> - <xpath-ui-element name="selectCreateImportBlog" - xpath="//fieldset[./legend/text()='Select blog']//a[@class='b_button b_small']" - description="button select, create or import blog"/> - <xpath-ui-element name="editBlog" - xpath="//fieldset[./legend/text()='Select blog']//a[@class='b_button b_small' and .//text()='Edit']" - description="button edit blog"/> - <xpath-ui-element name="replaceBlog" - xpath="//fieldset[./legend/text()='Select blog']//a[@class='b_button b_small' and .//text()='Replace blog']" - description="button replace blog"/> - <xpath-ui-element name="create" xpath="//a[.//text()='Create']" description="create blog button"/> - </pageset> - <pageset name="bbPodcast" description="configuration of podcast"> - <xpath-ui-element name="tabPodcastLearningContent" - xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Podcast learning content']" - description="Tab podcast content"/> - <xpath-ui-element name="selectCreateImportPodcast" - xpath="//fieldset[./legend[contains(.//text(),'Select')]]//a[@class='b_button b_small']" - description="button select, create or import podcast"/> - <xpath-ui-element name="editPodcast" - xpath="//fieldset[./legend/text()='Select podcast']//a[@class='b_button b_small'][descendant::text()='Edit']" - description="button edit podcast"/> - <xpath-ui-element name="replacePodcast" - xpath="//fieldset[./legend/text()='Select Podcast']//a[.//text()='Replace Podcast']" - description="button replace podcast"/> - <xpath-ui-element name="create" xpath="//a[.//text()='Create']" description="create podcast button"/> - </pageset> - <pageset name="bbTopicAssignment" description="topic assignment links"> - <xpath-ui-element name="tabConfig" xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Configuration']" description="configutation tab"/> - <xpath-ui-element name="topicsPerParticipant" xpath="//input[@name='form.options.number.of.topics.per.participant']" description="Limit topics per participant: yes or no"/> - <xpath-ui-element name="howManyTopicsPerParticipant" xpath="//div[@class='b_form_element_wrapper b_clearfix']//div[@class='b_form_element']//input[@type='text']" description="if limited topics per participant, how many?"/> - <xpath-ui-element name="topicSelectionAccept" xpath="//input[@name='form.options.selection.accept']" description="topic authors have to accept participants"/> - <xpath-ui-element name="onlyOneTopicAllowed" xpath="//input[@name='form.options.auto.sign.out']" description="only one topic allowed"/> - <xpath-ui-element name="saveConfig" xpath="//fieldset[./legend='Configuration']//button[@value='Save']" description="save configuration - cannot use generic button"></xpath-ui-element> - <xpath-ui-element name="tabPersons" xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Persons in charge']" description="tab persons in charge"/> - </pageset> - <pageset name="lti" description="lti xpaths"> - <xpath-ui-element name="tabPageContent" - xpath="//div[preceding-sibling::h4[contains(@class,'o_lti_icon')]]//div[@class='b_tabbedpane_tabs']//a[.//text()='Page content']" - description="Tab page content (single page)"/> - </pageset> - <pageset name="assessmentElemConfig" description="configuration of assessment course element"> - <xpath-ui-element name="scoreGranted" - xpath="//input[@name='form.score']" - description="Score granted - Yes/No"/> - <xpath-ui-element name="minimumScore" - xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Minimum score']//div[@class='b_form_element']//input[@type='text']" - description="set minimum score"/> - <xpath-ui-element name="maximumScore" - xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Maximum score']//div[@class='b_form_element']//input[@type='text']" - description="set maximum score"/> - <xpath-ui-element name="passedTypeAuto" - xpath="//input[@name='form.passed.type' and @value='true']" - description="Type of display - Automatic"/> - <!-- <xpath-ui-element name="passedTypeManual" - xpath="//input[@name='form.passed.type' and @value='false']" - description="Type of display - Manual by tutor"/> asa unused --> - <xpath-ui-element name="passedCutValue" - xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Passed cut value']//div[@class='b_form_element']//input[@type='text']" - description="set Passed cut value"/> - <xpath-ui-element name="passedCutValueErr" - xpath="//div[@class='b_form_element_wrapper b_form_error b_clearfix'][descendant::text()='Passed cut value']//div[@class='b_form_element']//input[@type='text']" - description="set Passed cut value"/> - </pageset> - <xpath-ui-element name="undeleteCourseElement" xpath="//a[.//text()='Restore course element']" description="Restore course element button"/> - </pageset> - - <pageset name="toolbox" description="the toolbox area to the right"> - <pageset name="editorTools" description="the editor tools toolbox"> - <link-ui-element name="storageFolder" link="Storage folder" - description="The Storage folder link"/> - <link-ui-element name="coursePreview" link="Course preview" - description="The Course previewlink"/> - <link-ui-element name="publish" link="Publish" description="The Publish link"/> - <link-ui-element name="closeEditor" link="Close editor" - description="The close editor link"/> - </pageset> - <pageset name="insertCourseElements" description="the insert course elements toolbox"> - <xpath-ui-element name="insertStructure" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Structure']" - description="Insert Structure course element"/> - <xpath-ui-element name="insertSinglePage" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Single page']" - description="Insert single page course element"/> - <xpath-ui-element name="insertExternalPage" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='External page']" - description="Insert external page course element"/> - <xpath-ui-element name="insertCP" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='CP learning content']" - description="Insert cp course element"/> - <xpath-ui-element name="insertSCORM" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='SCORM learning content']" - description="Insert scorm course element"/> - <xpath-ui-element name="insertForum" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Forum']" - description="Insert forum course element"/> - <xpath-ui-element name="insertWiki" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Wiki']" - description="Insert wiki course element"/> - <xpath-ui-element name="insertFileDialog" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='File dialog']" - description="Insert file dialog course element"/> - <xpath-ui-element name="insertFolder" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Folder']" - description="Insert folder course element"/> - <xpath-ui-element name="insertAssessment" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Assessment']" - description="Insert assessment course element"/> - <xpath-ui-element name="insertTask" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Task']" - description="Insert task course element"/> - <xpath-ui-element name="insertTest" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Test']" - description="Insert test course element"/> - <xpath-ui-element name="insertSelfTest" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Self-test']" - description="Insert self-test course element"/> - <xpath-ui-element name="insertQuestionnaire" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Questionnaire']" - description="Insert questionnaire course element"/> - <xpath-ui-element name="insertEnrolment" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Enrolment']" - description="Insert enrolment course element"/> - <xpath-ui-element name="insertContactForm" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='E-mail']" - description="Insert contact form course element"/> - <!-- new elements for 6.3--> - <xpath-ui-element name="insertBlog" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Blog']" - description="Insert contact form course element"/> - <xpath-ui-element name="insertPodcast" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Podcast']" - description="Insert contact form course element"/> - <xpath-ui-element name="insertTopicAssignment" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Topic assignment']" - description="Insert contact form course element"/> - <xpath-ui-element name="insertCalendar" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Calendar']" - description="Insert contact form course element"/> - <xpath-ui-element name="insertLTIPage" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='LTI page']" - description="Insert LTI page course element"/> - <xpath-ui-element name="insertInfoMessagePage" - xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[@class='o_infomsg_icon']" - description="Insert info message course element"/> - - <xpath-ui-element name="insertAsRootsFirstChild" - xpath="//div[@class='b_selectiontree_content']//input[@class='b_radio']" - description="Choose first child of root"/> - <xpath-ui-element name="insertAsRootsLastChild" - xpath="//div[@class='b_selectiontree_item'][last()]//div[@class='b_selectiontree_content']//input[@class='b_radio']" - description="Choose last child of root"/> - <xpath-ui-element name="insertAsElementsFirstChild" - xpath="//div[@class='b_selectiontree_item' and .//text()='" + title +"']/following-sibling::div[1]//input[@class='b_radio']" - description="Choose first child of the element with the given title"> - <parameter name="title" description="the title of the course element"/> - </xpath-ui-element> - <xpath-ui-element name="insertAsElementsFollowingSibling" - xpath="//div[@class='b_selectiontree_item' and .//text()='" + title +"']/following-sibling::div[2]//input[@class='b_radio']" - description="Choose first child of the element with the given title"> - <parameter name="title" description="the title of the course element"/> - </xpath-ui-element> - - <xpath-ui-element name="clickInsertCourseElement" - xpath="//button[.//text()='Insert course element']" - description="Click Insert course element"/> - - <!-- <xpath-ui-element name="cancel" xpath="//button[.//text()='Cancel']" - description="Cancel Insert course element"/> asa unused --> - </pageset> - <pageset name="modifyTools" description="the modify course elements toolbox"> - <link-ui-element name="delete" link="Delete" description="The Delete link"/> - <link-ui-element name="move" link="Move " description="The Move link"/> - <link-ui-element name="copy" link="Copy" description="The Copy link"/> - </pageset> - <!--TODO se xpaths stimmen nicht <pageset name="modifyTools" description="the modify course elements toolbox"> - <xpath-ui-element name="delete" xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Delete']" description="Delete course element"/> - <xpath-ui-element name="move" xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Move']" description="Move course element"/> - <xpath-ui-element name="copy" xpath="//div[@class='b_toolbox'][2]//div[@class='b_toolbox_content']//a[.//text()='Copy']" description="Copy course element"/> - </pageset>--> - </pageset> - <pageset name="preview" description="the course preview wizard"> - <link-ui-element name="closePreview" link="Close preview" description="The Close Preview link"/> - <xpath-ui-element name="selectRole" xpath="//input[@value='" + role + "']" description="select role"> - <parameter name="role" description="the title of the course element"/> - </xpath-ui-element> - <!-- TODO se: better xpath --> - <xpath-ui-element name="showCoursePreview" xpath="//button[@value='Show course preview']" - description="the show course preview button"/> - </pageset> - <pageset name="publishDialog" description="the publish dialog"> - <pageset name="howToPublish" description="The first page 'How to publish'"> - <xpath-ui-element name="firstTreeCheckbox" xpath="//input[@name='seltree']" - description="the first element of the tree - Checkbox"/> - </pageset> - <xpath-ui-element name="selectall" xpath="//a[descendant::text()='Select all']" description="The Select all Link"/> - <link-ui-element name="next" link="Next" description="The Next button"/> - <link-ui-element name="back" link="Back" description="The Back button"/> - <link-ui-element name="finish" link="Finish" description="The Finish button"/> - <link-ui-element name="cancel" link="Cancel" description="The Cancel button"/> - - <xpath-ui-element name="courseAccessDropDown" xpath="//select[contains(@name,'access') and contains(@name,'SELBOX')]" - description="The Course Access Drop-Down"/> - - - </pageset> - <pageset name="commons" description="common ui elements of course Editor"> - <pageset name="chooseLr" description="overlay choose learning resources search form"> - <!-- <xpath-ui-element name="allEntries" - xpath="//div[h3/text()='Search for referenceable learning resources']//a[.//text()='All entries']" - description="link all entries"/> asa unused --> - <xpath-ui-element name="myEntries" - xpath="//div[h3/text()='Search for referenceable learning resources']//a[.//text()='My entries']" - description="link my entries"/> - <xpath-ui-element name="search" - xpath="//div[h3/text()='Search for referenceable learning resources']//a[.//text()='Search']" - description="Search link"/> - <!-- <xpath-ui-element name="fieldTitle" - xpath="//form[@name='searchform']//input[@name='cif_displayname']" - description="field title"/> asa unused --> - <!-- <xpath-ui-element name="fieldAuthor" - xpath="//form[@name='searchform']//input[@name='cif_author']" - description="field author"/> asa unused --> - <!-- <xpath-ui-element name="fieldDescription" - xpath="//form[@name='searchform']//input[@name='cif_description']" - description="field description"/> asa unused --> - <!-- <xpath-ui-element name="fieldID" - xpath="//form[@name='searchform']//input[@name='cif_id']" description="field ID"/> asa unused --> - <!-- <xpath-ui-element name="searchButton" - xpath="//form[@name='searchform']//input[@value='Search']" - description="search button"/> asa unused --> - <xpath-ui-element name="chooseWiki" - xpath="//div[div//a[@class='b_table_download']]//table//tr[.//a/text()='" + nameOfWiki +"']//a[contains(text(), 'Choose Wiki')]" - description="link choose wiki after wiki entry"> - <parameter name="nameOfWiki" description="the name of the wiki"/> - </xpath-ui-element> - <xpath-ui-element name="chooseTest" - xpath="//div[div//a[@class='b_table_download']]//table//tr[.//a/text()='" + nameOfTest +"']//a[contains(text(), 'Choose test')]" - description="link choose test or self test after test entry"> - <parameter name="nameOfTest" description="the name of the test"/> - </xpath-ui-element> - <xpath-ui-element name="chooseQuestionnaire" - xpath="//div[div//a[@class='b_table_download']]//table//tr[.//a/text()='" + nameOfQuestionnaire +"']//a[contains(text(), 'Choose questionnaire')]" - description="link choose questionnaire after questionnaire entry"> - <parameter name="nameOfQuestionnaire" - description="the name of the questionnaire"/> - </xpath-ui-element> - <xpath-ui-element name="chooseCP" - xpath="//div[div//a[@class='b_table_download']]//table//tr[.//a/text()='" + name +"']//a[contains(text(), 'Choose CP learning content')]" - description="link choose CP"> - <parameter name="name" description="the name of the CP"/> - </xpath-ui-element> - <!-- new for 6.3--> - <xpath-ui-element name="chooseBlog" - xpath="//div[div//a[@class='b_table_download']]//table//tr[.//a/text()='" + nameOfBlog +"']//a[contains(text(), 'Select blog')]" - description="link choose blog after blog entry"> - <parameter name="nameOfBlog" description="the name of the blog"/> - </xpath-ui-element> - <xpath-ui-element name="choosePodcast" - xpath="//div[div//a[@class='b_table_download']]//table//tr[.//a/text()='" + nameOfPodcast +"']//a[contains(text(), 'Select Podcast')]" - description="link choose podcast after podcast entry"> - <parameter name="nameOfPodcast" description="the name of the podcast"/> - </xpath-ui-element> - </pageset> - <pageset name="informationHTMLPage" description="section information (HTML page) in test, questionnaire selftest and structure tabs"> - <!-- <xpath-ui-element name="selectCreatePage" - xpath="//fieldset[./legend/text()='Information (HTML page)']//a[.//text()='Select or create page']" - description="Button select or create page"/> asa unused --> - <!-- <xpath-ui-element name="openPageInEditor" - xpath="//fieldset[./legend/text()='Information (HTML page)']//a[.//text()='Open page in editor']" - description="Button open page in editor"/> asa unused --> - <!-- <xpath-ui-element name="replacePage" - xpath="//fieldset[./legend/text()='Information (HTML page)']//a[.//text()='Replace page']" - description="Button replace page"/> asa unused --> - <!-- TODO se overlay to create new page - <xpath-ui-element name="newHTMLpage" xpath="" description="Field new HTML page"/> - <xpath-ui-element name="createPage" xpath="" description="Button create html page "/> - <xpath-ui-element name="selectPage" xpath="" description="Button select page from storage folder"/> - <xpath-ui-element name="choosePage" xpath="" description="Radio Button before name of page"/> - <xpath-ui-element name="selectThisPage" xpath="" description="Button select this page"/> - --> - </pageset> - <pageset name="securitySettings" description="security settings when choosing html page for test, selftest, questionnaire or structure"> - <!-- <xpath-ui-element name="allowLinksStorageFolderYes" - xpath="//fieldset[./legend/text()='Security setting']//input[@name='allowRelativeLinks' and @value='true']" - description="Radio Button (Yes) allow links in the entire storage folder"/> asa unused --> - <!-- <xpath-ui-element name="allowLinksStorageFolderNo" - xpath="//fieldset[./legend/text()='Security setting']//input[@name='allowRelativeLinks' and @value='false']" - description="Radio Button (No) allow links in the entire storage folder"/> asa unused --> - <!-- <xpath-ui-element name="save" - xpath="//fieldset[./legend/text()='Security setting']//input[@value='Save']" - description="save button security setting"/> asa unused --> - </pageset> - <pageset name="groupBulk" description="group bulk paths"> - <xpath-ui-element name="createGroups" xpath="//div[@class='b_form_element_wrapper b_form_error b_clearfix'][descendant::text()='Learning groups']//div[@class='b_form_element']//a[@class='b_button']" description="create several groups"></xpath-ui-element> - <xpath-ui-element name="selectGroupsIfError" xpath="//div[@class='b_form_element_wrapper b_form_error b_clearfix'][descendant::text()='Learning groups']//div[@class='b_form_element']//input[@type='text']" description="select a bunch of groups if error message"></xpath-ui-element> - </pageset> - - </pageset> - - - </pageset> - - - -</ui-map-include> diff --git a/src/test/profile/selenium/ui-map/dmz-pageset.xml b/src/test/profile/selenium/ui-map/dmz-pageset.xml deleted file mode 100644 index ba1f1057425..00000000000 --- a/src/test/profile/selenium/ui-map/dmz-pageset.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="dmz" description="DMZ links"> - <xpath-ui-element name="login" xpath="//button[@value='Login']" description="login button" testcase="dmz/type(dmz::username,foo)/type(dmz::username,bar)/clickAndWait(dmz::login)"/> - - <xpath-ui-element name="disclaimerCheckbox" xpath="//input[@name='acknowledge_checkbox']" description="terms of use disclaimer - checkbox" /> - <xpath-ui-element name="acceptDisclaimer" xpath="//button[@value='" + acceptLabel + "']" description="terms of use disclaimer - accept button"> - <parameter name="acceptLabel" description="the name of the label"> - <defaultValue value="Accept"/> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="loginErrorOK" xpath="//button[.//text()='OK']" description="login error OK button"></xpath-ui-element> - <xpath-ui-element name="wayf" xpath="//div[@id='wayf_div']" description="wayf div"></xpath-ui-element> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/group-pageset.xml b/src/test/profile/selenium/ui-map/group-pageset.xml deleted file mode 100644 index 84e38c4dd72..00000000000 --- a/src/test/profile/selenium/ui-map/group-pageset.xml +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="group" description="configuration of a group"> - <pageset name="menu" description="group menu"> - <!-- default-testcase testcase="login/tabs::groups/groups::toolbox_create_projectGroup/type(groups::creategroup_groupName,tst)/type(groups::creategroup_groupDescription,tst)/groups::creategroup_save/tabs::closeGroup(nameOfGroup=tst)/groups::content_clickGroupEntry(nameOfGroup=tst)" final-command="clickAndWait"/--> - <xpath-ui-element name="course" xpath="//div[@class='b_tree']//a[contains(.//text(),'Course')]" description="course link in the group"></xpath-ui-element> - <xpath-ui-element name="startCourse" xpath="//div[@class='b_toolbox_content']//a[contains(.//text(),'Start')]" description="link to start course out of group"></xpath-ui-element> - <!--@TODO <xpath-ui-element xpath="" name="topLevelGroupMenu" description="top level node of group menu"> </xpath-ui-element>--> - <xpath-ui-element name="information" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Information']" description="information link in the group"></xpath-ui-element> - <xpath-ui-element name="calendar" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Calendar']" description="calendar link in the group"></xpath-ui-element> - <pageset name="calendar" description="calendar"> - <xpath-ui-element name="readOnly" xpath="//div[@class='o_cal_config_readonly' and @title='(Read only)']" description="read only element"/> - </pageset> - <xpath-ui-element name="members" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Members']" description="members link in the group"></xpath-ui-element> - <xpath-ui-element name="email" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='E-mail']" description="e-mail link in the group"></xpath-ui-element> - - <xpath-ui-element name="folder" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Folder']" description="folder link in the group"></xpath-ui-element> - <xpath-ui-element name="forum" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Forum']" description="forum link in the group"></xpath-ui-element> - <xpath-ui-element name="chat" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Chat']" description="chat link in the group"></xpath-ui-element> - <xpath-ui-element name="wiki" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Wiki']" description="wiki link in the group"></xpath-ui-element> - <xpath-ui-element name="portfolio" xpath="//div[@class='b_tree']//a[contains(@class, 'o_ep_icon')]" description="portfolio link in the group"></xpath-ui-element> - <xpath-ui-element name="administration" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Administration']" description="administration link in the group"></xpath-ui-element> - </pageset> - <pageset name="content" description="content edit group"> - <pageset name="description" description="description of project group"> - <xpath-ui-element xpath="//div[@class='b_tabbedpane_tabs']//a[contains(.//text(),'Description')]" name="tabDescription" description="tab description"></xpath-ui-element> - <pageset name="groupDetails" description="paragraph details"> - <xpath-ui-element name="groupName" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Group name']//div[@class='b_form_element']//input[@type='text']" description="flexi form element - group name"></xpath-ui-element> - <!-- <xpath-ui-element xpath="//form[@name='businessGroupForm' or @name='createBuddygroupForm']//input[@value='Save']" name="save" description="save button description"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element xpath="//form[@name='businessGroupForm' or @name='createBuddygroupForm']//input[@value='Cancel']" name="cancel" description="cancel button description"></xpath-ui-element> asa unused --> - </pageset> - </pageset> - <pageset name="tools" description="tools of project group"> - <xpath-ui-element xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Tools']" name="tabTools" description="tab tools"></xpath-ui-element> - <pageset name="collaborationTools" description="paragraph collaboration tools"> - <xpath-ui-element name="information" xpath="//div[@class='b_form_selection_element' and descendant::text()='Information for members']//input[@type='checkbox']" description="information checkbox"></xpath-ui-element> - <xpath-ui-element name="contactForm" xpath="//div[@class='b_form_selection_element' and descendant::text()='E-mail']//input[@type='checkbox']" description="contact form checkbox"></xpath-ui-element> - <xpath-ui-element name="calendar" xpath="//div[@class='b_form_selection_element' and descendant::text()='Calendar']//input[@type='checkbox']" description="calendar checkbox"></xpath-ui-element> - <xpath-ui-element name="folder" xpath="//div[@class='b_form_selection_element' and descendant::text()='Folder']//input[@type='checkbox']" description="folder checkbox"></xpath-ui-element> - <xpath-ui-element name="forum" xpath="//div[@class='b_form_selection_element' and descendant::text()='Forum']//input[@type='checkbox']" description="forum checkbox"></xpath-ui-element> - <xpath-ui-element name="chat" xpath="//div[@class='b_form_selection_element' and descendant::text()='Chat']//input[@type='checkbox']" description="chat checkbox"></xpath-ui-element> - <xpath-ui-element name="wiki" xpath="//div[@class='b_form_selection_element' and descendant::text()='Wiki']//input[@type='checkbox']" description="wiki checkbox"></xpath-ui-element> - <xpath-ui-element name="portfolio" xpath="//div[@class='b_form_selection_element' and descendant::text()='ePortfolio']//input[@type='checkbox']" description="eportfolio checkbox"></xpath-ui-element> - </pageset> - <pageset name="informationForMembers" description="paragraph information for members"> - <xpath-ui-element name="formFieldInformationMembers" xpath="//body[@id='tinymce']" description="form field information for members"></xpath-ui-element> - <xpath-ui-element name="save" xpath="//fieldset[./legend='Information for members']//div[@class='b_form_element']//button[@value='Save']" description="save button information for members"></xpath-ui-element> - </pageset> - <pageset name="calendarAccess" description="paragraph calendar access configuration"> - <xpath-ui-element name="calendarAccess" xpath="//div[@class='b_form_selection_element' and descendant::text()='" + label + "']//input[@type='radio']" description="calendar access"> - <parameter name="label" description="radio label"></parameter> - </xpath-ui-element> - <xpath-ui-element name="save" xpath="//fieldset[legend[text()='Configure calendar write permission']]//button[@value='Save']" description="save button calendar access"></xpath-ui-element> - </pageset> - </pageset> - <pageset name="members" description="members of project group"> - <xpath-ui-element xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Members']" name="tabMembers" description="tab members"></xpath-ui-element> - <pageset name="displayMembers" description="paragraph display members"> - <!-- <xpath-ui-element xpath="ShowOwners" name="membersSeeOwners" description="checkbox members can see owners"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element xpath="ShowPartips" name="membersSeeParticipants" description="checkbox members can see participants"></xpath-ui-element> asa unused --> - - <!-- <xpath-ui-element xpath="//form[contains(@name, 'dmsForm')]//button[.//text()='Save']" name="save" description="save button"></xpath-ui-element> asa unused --> - - </pageset> - <!--@TODO evtl. auslagern commons <pageset name="owners" description="paragraph owners"> - <xpath-ui-element xpath="" name="" description="import user"></xpath-ui-element> - <xpath-ui-element xpath="" name="" description="add user(s)"></xpath-ui-element> - <xpath-ui-element xpath="" name="" description="remove button"></xpath-ui-element> - </pageset> - <pageset name="participants" description="paragraph participants"> - <xpath-ui-element xpath="" name="" description="import user"></xpath-ui-element> - <xpath-ui-element xpath="" name="" description="add user(s)"></xpath-ui-element> - <xpath-ui-element xpath="" name="" description="remove button"></xpath-ui-element> - </pageset>--> - </pageset> - <xpath-ui-element name="startCourse" xpath="//td//a[.//text()='Start']" description="starts first course in table"></xpath-ui-element> - </pageset> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/groupAdministration-pageset.xml b/src/test/profile/selenium/ui-map/groupAdministration-pageset.xml deleted file mode 100644 index 3b939b29656..00000000000 --- a/src/test/profile/selenium/ui-map/groupAdministration-pageset.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="groupAdministration" description="the group administration tab"> - - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/groupManagement-pageset.xml b/src/test/profile/selenium/ui-map/groupManagement-pageset.xml deleted file mode 100644 index db91c8d2b4a..00000000000 --- a/src/test/profile/selenium/ui-map/groupManagement-pageset.xml +++ /dev/null @@ -1,114 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="groupManagement" description="the group management of a course"> - <pageset name="menu" description="the left hand menu of the group management of a course"> - <!-- <xpath-ui-element name="groupManagement" xpath="//div[@class='b_tree']//ul/li//a[./text()='Group management']" description="left navigation link 'Group management'"/> asa unused --> - <!-- <xpath-ui-element name="administration" xpath="//div[@class='b_tree']//ul/li//a[./text()='Administration']" description="left navigation link 'Administration'"/> asa unused --> - <xpath-ui-element name="allLearningGroups" xpath="//div[@class='b_tree']//ul/li//a[./text()='All learning groups']" description="left navigation link 'All learning groups'"/> - <xpath-ui-element name="allLearningAreas" xpath="//div[@class='b_tree']//ul/li//a[./text()='All learning areas']" description="left navigation link 'All learning areas'"/> - <xpath-ui-element name="allMembers" xpath="//div[@class='b_tree']//ul/li//a[./text()='All members']" description="left navigation link 'All members'"/> - </pageset> - - <pageset name="content" description="the content area of the group management of a course"> - <pageset name="learningAreaTable" description="the learning area table"> - <xpath-ui-element name="editLearningArea" xpath="//div[.//a/@class='b_table_download']//table//tr[.//td//text()='" + nameOfLearningArea + "']//a[.//text()='Edit']" description="Click on the Edit link of a particular learning area"> - <parameter name="nameOfLearningArea" description="the name of the learning area"/> - </xpath-ui-element> - <xpath-ui-element name="deleteLearningArea" xpath="//div[.//a/@class='b_table_download']//table//tr[.//td//text()='" + nameOfLearningArea + "']//a[.//text()='Delete']" description="Click on the Delete link of a particular learning area"> - <parameter name="nameOfLearningArea" description="the name of the learning area"/> - - </xpath-ui-element> - </pageset> - <pageset name="learningGroupTable" description="the learning group table"> - <xpath-ui-element name="editLearningGroup" xpath="//div[.//a/@class='b_table_download']//table//tr[.//td//text()='" + nameOfLearningGroup + "']//a[.//text()='Edit']" description="Click on the Edit link of a particular learning group"> - <parameter name="nameOfLearningGroup" description="the name of the learning group"/> - </xpath-ui-element> - <xpath-ui-element name="deleteLearningGroup" xpath="//div[.//a/@class='b_table_download']//table//tr[.//td//text()='" + nameOfLearningGroup + "']//a[.//text()='Delete']" description="Click on the Delete link of a particular learning group"> - <parameter name="nameOfLearningGroup" description="the name of the learning group"/> - </xpath-ui-element> - <xpath-ui-element name="selectGroup" xpath="//form//table//tr//td//a[descendant::text()='" + nameOfGroup + "']" description="select this group"> - <parameter name="nameOfGroup" description="the name of the group"/> - </xpath-ui-element> - </pageset> - - <pageset name="learningGroupsEditor" description="the learning groups editor"> - <!-- <xpath-ui-element xpath="descendant::node()[@class='b_with_small_icon_left b_group_icon' and contains(text(),'group')]/following-sibling::div//input[@name='fe_bgName']" name="name" description="the name of the learning group - input field"/> asa unused --> - <!-- <xpath-ui-element xpath="descendant::node()[@class='b_with_small_icon_left b_group_icon' and contains(text(),'group')]/following-sibling::div//textarea[@name='fe_bgWkDescription']" name="description" description="the description of the learning group - input field"/> asa unused --> - <xpath-ui-element name="maxParticipants" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::label[contains(text(),'Maximum')]]//div[@class='b_form_element']//input[@type='text']" description="the max number field of the learning group editor"/> - - <xpath-ui-element name="enableWaitinglist" xpath="//div[@class='b_form_selection_element'][descendant::text()='Waiting list']//input[@type='checkbox']" description="the enableWaitinglist checkbox of the learning group editor"/> - - <xpath-ui-element name="moveUpAutomatically" xpath="//div[@class='b_form_selection_element'][descendant::text()='Moving up automatically']//input[@type='checkbox']" description="the moveUpAutomatically checkbox of the learning group editor"/> - - <!-- <xpath-ui-element xpath="descendant::node()[@class='b_with_small_icon_left b_group_icon' and contains(text(),'group')]/following-sibling::div//input[@value='Save']" name="save" description="the save button of the learning group editor"/> asa unused --> - <!-- <xpath-ui-element xpath="descendant::node()[@class='b_with_small_icon_left b_group_icon' and contains(text(),'group')]/following-sibling::div//input[@value='Cancel']" name="cancel" description="the cancel button of the learning group editor"/> asa unused --> - - <pageset name="addMembers" description="add member to learning group"> - <xpath-ui-element name="addTutor" xpath="//fieldset[contains(./legend/text(),'Tutors')]//a[descendant::text()='Add user(s)']" description="add tutor to group"/> - <xpath-ui-element name="checkUser" xpath="//fieldset[contains(./legend/text(),'Search along with user attributes')]//form//table//tr//td[.//text()='" + username + "']/../td[1]//input[@type='checkbox']" description="add tutor to group"> - <parameter name="username" description="username"/> - </xpath-ui-element> - </pageset> - </pageset> - <pageset name="learningAreaEditor" description="the learning area editor"> - <!-- <xpath-ui-element xpath="descendant::node()[@class='b_with_small_icon_left b_group_icon' and contains(text(),'area')]/following-sibling::div//input[@name='name']" name="name" description="the name of the learning area - input field"/> asa unused --> - <!-- <xpath-ui-element xpath="descendant::node()[@class='b_with_small_icon_left b_group_icon' and contains(text(),'area')]/following-sibling::div//textarea[@name='description']" name="description" description="the description of the learning area - input field"/> asa unused --> - <!-- <xpath-ui-element xpath="descendant::node()[@class='b_with_small_icon_left b_group_icon' and contains(text(),'area')]/following-sibling::div//input[@value='Save']" name="save" description="the save button of the learning area editor"/> asa unused --> - <!-- <xpath-ui-element xpath="descendant::node()[@class='b_with_small_icon_left b_group_icon' and contains(text(),'area')]/following-sibling::div//input[@value='Cancel']" name="cancel" description="the cancel button of the learning area editor"/> asa unused --> - - <pageset name="tabs" description="tabs within learningAreaEditor"> - <!-- <xpath-ui-element name="description" xpath="//div[contains(./h4/@class, 'b_group_icon')]//div[@class='b_tabbedpane_tabs']//a[.//text()='Description']" description="tab group assignment"/> asa unused --> - <xpath-ui-element name="groupAssignment" xpath="//div[contains(./h4/@class, 'b_group_icon')]//div[@class='b_tabbedpane_tabs']//a[.//text()='Group assignment']" description="tab group assignment"/> - </pageset> - - <pageset name="groupAssignment" description="group assignment"> - <xpath-ui-element name="checkLearningGroup" xpath="//form[contains(@name, 'groupsChoice')]/table/tbody/tr[./td/text()='"+nameOfGroup+"']/td/input[@type='checkbox']" description="checkbox for selecting learning groups"> - <parameter name="nameOfGroup" description="the name of the learning group"/> - </xpath-ui-element> - <xpath-ui-element name="save" xpath="//form[contains(@name, 'groupsChoice')]/table/tbody/tr/td/div/input[@value='Save']" description="save button of the learning area group assignment"/> - <!-- <xpath-ui-element name="cancel" xpath="//form[contains(@name, 'groupsChoice')]/table/tbody/tr/td/div/input[@value='Cancel']" description="cancel button of the learning area group assignment"/> asa unused --> - </pageset> - </pageset> - <pageset name="userDetails" description="user details table"> - <xpath-ui-element name="removeFromGroup" xpath="//table[..//text()='Supervised groups']//tr[./td[2]='" + nameOfGroup + "']//a[.//text()='Remove']" - description="remove this user from a group"> - <parameter name="nameOfGroup" description="the name of the group"></parameter> - </xpath-ui-element> - </pageset> - </pageset> - <pageset name="toolbox" description="the toolbox area to the right"> - <pageset name="groupManagement" description="group management toolbox"> - <xpath-ui-element name="newLearningGroup" xpath="//div[@class='b_toolbox'][descendant::text()='Group management']//a[descendant::text()='New learning group']" description="Create new learning group link"/> - <pageset name="formNewLearningGroup" description="create new learning group"> - <xpath-ui-element name="name" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Group name']//div[@class='b_form_element']//input[@type='text']" description="the name of the learning group - input field"/> - <xpath-ui-element name="maxParticipants" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::label[contains(text(),'Maximum')]]//div[@class='b_form_element']//input[@type='text']" description="the max number field of the new learning group"/> - <xpath-ui-element name="enableWaitinglist" xpath="//div[@class='b_form_selection_element'][descendant::text()='Waiting list']//input[@type='checkbox']" description="the enableWaitinglist checkbox of the new learning group"/> - <xpath-ui-element name="moveUpAutomatically" xpath="//div[@class='b_form_selection_element'][descendant::text()='Moving up automatically']//input[@type='checkbox']" description="the moveUpAutomatically checkbox of the new learning group"/> - <xpath-ui-element name="save" xpath="//button[@value='Finish']" description="the finish button of the new learning group"/> - <!-- TODO:ld - cancel - has been changed --> - <!-- <xpath-ui-element name="cancel" xpath="//form[@name='groupForm']//input[@value='Cancel']" description="the cancel button of the new learning group"/> asa unused --> - </pageset> - <xpath-ui-element name="newLearningArea" xpath="//div[@class='b_toolbox'][descendant::text()='Group management']//a[descendant::text()='New learning area']" description="Create new learning area link"/> - <pageset name="formNewLearningArea" description="create new learning area"> - <xpath-ui-element name="name" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Name of learning area ']//div[@class='b_form_element']//input[@type='text']" description="the name of the learning area - input field"/> - </pageset> - - <xpath-ui-element name="close" xpath="//div[@class='b_toolbox'][descendant::text()='Group management']//a[descendant::text()='Close']" description="Close Group Management"/> - - </pageset> - <pageset name="createLists" description="create lists toolbox"> - <!-- <xpath-ui-element name="participantsInGroup" xpath="//div[@class='b_toolbox'][descendant::text()='Create lists']//a[descendant::text()='Participants in groups']" description="Create list with participants in group link"/> asa unused --> - <!-- <xpath-ui-element name="participantsInLearningAreas" xpath="//div[@class='b_toolbox'][descendant::text()='Create lists']//a[descendant::text()='Participants in learning areas']" description="Create list with participants in learning areas"/> asa unused --> - </pageset> - <pageset name="actions" description="actions group toolbox"> - <!-- <xpath-ui-element name="eMailToMember" xpath="//div[@class='b_toolbox'][descendant::text()='Actions group']//a[descendant::text()='E-mail to members']" description="E-Mail to members link"/> asa unused --> - <!-- <xpath-ui-element name="start" xpath="//div[@class='b_toolbox'][descendant::text()='Actions group']//a[descendant::text()='Start']" description="Start link"/> asa unused --> - <!-- <xpath-ui-element name="copy" xpath="//div[@class='b_toolbox'][descendant::text()='Actions group']//a[descendant::text()='Copy']" description="Copy link"/> asa unused --> - <!-- <xpath-ui-element name="copyMoreThanOnce" xpath="//div[@class='b_toolbox'][descendant::text()='Actions group']//a[descendant::text()='Copy more than once']" description="Copy more than once link"/> asa unused --> - <!-- <xpath-ui-element name="delete" xpath="//div[@class='b_toolbox'][descendant::text()='Actions group']//a[descendant::text()='Delete']" description="Delete link"/> asa unused --> - </pageset> - </pageset> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/groups-pageset.xml b/src/test/profile/selenium/ui-map/groups-pageset.xml deleted file mode 100644 index e9d1315a427..00000000000 --- a/src/test/profile/selenium/ui-map/groups-pageset.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="groups" description="Groups"> - <pageset name="menu" description="the left hand menu"> - <!-- <xpath-ui-element name="groups" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_groups']]//div[@class='b_tree']//a[descendant-or-self::text()='Groups']" description="left navigation link 'Groups'"/> asa unused --> - <xpath-ui-element name="myProjectGroups" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_groups']]//div[@class='b_tree']//a[descendant-or-self::text()='My project groups']" description="left navigation link 'My project groups'"/> - <!-- <xpath-ui-element name="myLearningGroups" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_groups']]//div[@class='b_tree']//a[descendant-or-self::text()='My learning groups']" description="left navigation link 'My learning groups'"/> asa unused --> - <!-- <xpath-ui-element name="myRightGroups" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_groups']]//div[@class='b_tree']//a[descendant-or-self::text()='My right groups']" description="left navigation link 'My right groups'"/> asa unused --> - </pageset> - - <pageset name="toolbox" description="the toolbox to the right"> - <pageset name="create" description="the 'create' toolbox to the right"> - <xpath-ui-element name="projectGroup" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[descendant::text()='Project group']" description="Create Project Group link"/> - </pageset> - <pageset name="delete" description="the 'delete' toolbox to the right"> - <!-- <xpath-ui-element name="projectGroups" xpath="//div[@class='b_toolbox'][descendant::text()='Delete']//a[descendant::text()='Project groups']" description="Delete Project Group link"/> asa unused --> - </pageset> - </pageset> - <!-- (se:) Diese Links sollten auch fuer Lerngruppen und Rechtegruppen funktionieren --> - <pageset name="content" description="content groups"> - <xpath-ui-element xpath="//tr[.//a[text()='" + nameOfGroup + "']]//a[contains(@href, 'Launch')]" name="clickGroupEntry" description="link of name of group"> - <parameter name="nameOfGroup" description="name of the group"><defaultValue value="test"/></parameter> - </xpath-ui-element> - <xpath-ui-element xpath="//tr[.//a[text()='" + nameOfGroup + "']]//a[contains(@href, 'Leave')]" name="leaveGroup" description="leave group"> - <parameter name="nameOfGroup" description="name of the group"/> - </xpath-ui-element> - <xpath-ui-element xpath="//tr[.//a[text()='" + nameOfGroup + "']]//a[contains(@href, 'Delete')]" name="deleteGroup" description="delete group"> - <parameter name="nameOfGroup" description="name of the group"/> - </xpath-ui-element> - <xpath-ui-element xpath="//div[contains(.//text(), 'If you leave')]/..//a[.//text()='Yes']" name="leaveYes" description="confirm yes of dialog when leaving group"></xpath-ui-element> - <!-- <xpath-ui-element xpath="//div[contains(.//text(), 'If you leave')]/..//a[.//text()='No']" name="leaveNo" description="confirm no dialog when leaving group"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element xpath="//div[contains(.//text(), 'If you leave')]/../../../..//a[@class='b_link_close']" name="leaveClose" description="close overlay dialog when leaving group"></xpath-ui-element> asa unused --> - <xpath-ui-element xpath="//div[contains(.//text(), 'Do you really want to delete')]/..//a[.//text()='Yes']" name="deleteYes" description="confirm yes of dialog when deleting group"></xpath-ui-element> - <!-- <xpath-ui-element xpath="//div[contains(.//text(), 'Do you really want to delete')]/..//a[.//text()='No']" name="deleteNo" description="confirm no dialog when deleting group"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element xpath="//div[contains(.//text(), 'Do you really want to delete')]/../../../..//a[@class='b_link_close']" name="deleteClose" description="close overlay dialog when deleting group"></xpath-ui-element> asa unused --> - - <xpath-ui-element xpath="//div[contains(.//text(), 'Do you really want to delete')]/..//a[.//text()='Yes']" name="deleteYesLs" description="confirm yes of dialog when deleting learning resource"></xpath-ui-element> - - <xpath-ui-element xpath="//div[contains(@class, 'b_table_wrapper')]//tr[1]/td[contains(.//text(), 'Delete')]//a" name="deleteFirstGroup" description="Delete the first group in the table"/> - </pageset> - - - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/home-pageset.xml b/src/test/profile/selenium/ui-map/home-pageset.xml deleted file mode 100644 index f9ec3b7b384..00000000000 --- a/src/test/profile/selenium/ui-map/home-pageset.xml +++ /dev/null @@ -1,202 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="home" description="The home page"> - <pageset name="menu" description="the left hand menu"> - <default-testcase testcase="login" final-command="clickAndWait"/> - <!-- <xpath-ui-element name="home" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Home']" description="left navigation link 'Home'"/> asa unused --> - <xpath-ui-element name="settings" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Settings']" description="left navigation link 'Settings'"/> - <xpath-ui-element name="einstellungen" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Einstellungen']" description="left navigation link 'Einstellungen'" testcase=""/> <!-- testcase only works in German... --> - <!-- <xpath-ui-element name="calendar" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Calendar']" description="left navigation link 'Calendar'"/> asa unused --> - <!-- <xpath-ui-element name="notifications" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Notifications']" description="left navigation link 'Notifications'"/> asa unused --> - <!-- <xpath-ui-element name="bookmarks" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Bookmarks']" description="left navigation link 'Bookmarks'"/> asa unused --> - <xpath-ui-element name="personalFolder" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Personal folder']" description="left navigation link 'Personal folder'"/> - <!-- <xpath-ui-element name="notes" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Notes']" description="left navigation link 'Notes'"/> asa unused --> - <xpath-ui-element name="evidencesOfAchievement" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Evidences of achievement']" description="left navigation link 'Evidences of achievement'"/> - <xpath-ui-element name="otherUsers" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='Other users']" description="left navigation link 'Other users'"/> - <xpath-ui-element name="ePortfolio" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='ePortfolio']" description="left navigation link 'ePortfolio'"/> - </pageset> - <pageset name="content" description="the (center) content area"> - - <!-- 'einstellungen' is only used for switching to English --> - <pageset name="einstellungen" description="the einstellungen content area"> - <pageset name="tabs" description="the einstellungen tabs"> - <xpath-ui-element name="system" xpath="//div[./h4/text()='Einstellungen']//div[@class='b_tabbedpane_tabs']//a[.//text()='System']" description="the Einstellungen-System tab"/> - </pageset> - <pageset name="system" description="system panel"> - <xpath-ui-element name="sprache" xpath="//fieldset[legend/text()='Allgemeine Systemeinstellungen']//select[@name='form.language_SELBOX']" description="language checkbox"/> - <xpath-ui-element name="speichern" xpath="//fieldset[legend/text()='Allgemeine Systemeinstellungen']//button[@value='Speichern']" description="The save button of the general system settings area"/> - </pageset> - </pageset> - - <pageset name="settings" description="the settings content area"> - <pageset name="tabs" description="the settings tabs"> - <default-testcase testcase="login/tabs::home/home::menu_settings/" final-command="clickAndWait"/> - <xpath-ui-element name="profile" xpath="//div[./h4/text()='Settings']//div[@class='b_tabbedpane_tabs']//a[.//text()='Profile']" description="the Settings-Profile tab" testcase="login/tabs::home/home::menu_settings/home::content_settings_tabs_system/home::content_settings_tabs_profile"/> - - <xpath-ui-element name="system" xpath="//div[./h4/text()='Settings']//div[@class='b_tabbedpane_tabs']//a[.//text()='System']" description="the Settings-System tab"/> - <xpath-ui-element name="password" xpath="//div[./h4/text()='Settings']//div[@class='b_tabbedpane_tabs']//a[.//text()='Password']" description="the Settings-Password tab"/> - <xpath-ui-element name="instantMessaging" xpath="//div[./h4/text()='Settings']//div[@class='b_tabbedpane_tabs']//a[.//text()='Instant Messaging']" description="the Settings-Instant Messaging tab"/> - </pageset> - <pageset name="profile" description="profile panel"> - <default-testcase testcase="login/home::menu_settings/" final-command="type(foo)"/> - <xpath-ui-element name="help" xpath="//a[@class='b_contexthelp']" description="help in user profile" testcase="login/home::menu_settings/click(home::content_settings_profile_help)"/> - <!-- <xpath-ui-element name="eMailAddress" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='E-mail address']//div[@class='b_form_element']//input[@type='text']" description="e-mail address field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="birthDate" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Date of birth']//div[@class='b_form_element']//input[@type='text']" description="date of birth field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="gender" xpath="//fieldset[./legend/text()='User profile']//select[@name='gender']" description="gender field" testcase=""></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="phonePrivate" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Phone number private']//div[@class='b_form_element']//input[@type='text']" description="phone private field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="phoneMobile" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Phone number mobile']//div[@class='b_form_element']//input[@type='text']" description="phone mobile field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="phoneOffice" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Phone number office']//div[@class='b_form_element']//input[@type='text']" description="phone office field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="skype" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Skype ID']//div[@class='b_form_element']//input[@type='text']" description="skype id field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="homepage" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Homepage']//div[@class='b_form_element']//input[@type='text']" description="homepage field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="street" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Street']//div[@class='b_form_element']//input[@type='text']" description="street field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="extraAddress" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Extra address line']//div[@class='b_form_element']//input[@type='text']" description="extra address field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="poBox" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='P.O. Box']//div[@class='b_form_element']//input[@type='text']" description="PO box field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="zipCode" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Zip code']//div[@class='b_form_element']//input[@type='text']" description="zip code field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="region" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Region/canton']//div[@class='b_form_element']//input[@type='text']" description="region field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="city" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='City']//div[@class='b_form_element']//input[@type='text']" description="city field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="country" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Country']//div[@class='b_form_element']//input[@type='text']" description="country field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="save" xpath="//fieldset[./legend/text()='User profile']//input[@value='Save']" description="save button" testcase=""></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="cancel" xpath="//fieldset[./legend/text()='User profile']//input[@value='Cancel']" description="cancel button" testcase=""></xpath-ui-element> asa unused --> - <xpath-ui-element name="yesLink" xpath="//a[contains(.//text(),'Yes')]" description="Yes link, at confirm change email"></xpath-ui-element> - </pageset> - <!--<pageset name="myVisitingCard" description="visiting card panel"> - <testcase-macro name="goToMyVisitingCard"> - <call-macro name="login"/> - <selenium command="clickAndWait" target="home::menu_settings()"/> - <selenium command="clickAndWait" target="ui=home::content_settings_tabs_myVisitingCard"/> - </testcase-macro> - <default-testcase testcase="goToMyVisitingCard" final-command="check"/> - <xpath-ui-element name="help" xpath="//fieldset[./legend/text()='Configuration of visiting card']//div[@class='b_contexthelp_wrapper']" description="help in user profile" testcase="goToMyVisitingCard/click(home::content_settings_myVisitingCard_help)"/> - <xpath-ui-element name="firstName" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='firstName']" description="first name" testcase="goToMyVisitingCard/check(home::content_settings_myVisitingCard_firstName)"></xpath-ui-element> - <xpath-ui-element name="lastName" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='lastName']" description="last name"></xpath-ui-element> - <xpath-ui-element name="eMailAddress" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='email']" description="email address"></xpath-ui-element> - <xpath-ui-element name="birthDate" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='birthDay']" description="date of birth"></xpath-ui-element> - <xpath-ui-element name="gender" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='gender']" description="gender"></xpath-ui-element> - <xpath-ui-element name="phonePrivate" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='telPrivate']" description="phone private"></xpath-ui-element> - <xpath-ui-element name="phoneMobile" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='telMobile']" description="phone mobile"></xpath-ui-element> - <xpath-ui-element name="phoneOffice" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='telOffice']" description="phone office"></xpath-ui-element> - <xpath-ui-element name="skype" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='skype']" description="skype id"></xpath-ui-element> - <xpath-ui-element name="homepage" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='homepage']" description="homepage"></xpath-ui-element> - <xpath-ui-element name="street" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='street']" description="street"></xpath-ui-element> - <xpath-ui-element name="extraAddress" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='extendedAddress']" description="extra address"></xpath-ui-element> - <xpath-ui-element name="poBox" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='poBox']" description="PO box"></xpath-ui-element> - <xpath-ui-element name="zipCode" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='zipCode']" description="zip code"></xpath-ui-element> - <xpath-ui-element name="region" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='region']" description="region"></xpath-ui-element> - <xpath-ui-element name="city" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='city']" description="city"></xpath-ui-element> - <xpath-ui-element name="country" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='country']" description="country"></xpath-ui-element> - <xpath-ui-element name="institution" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='institutionalName']" description="institution"></xpath-ui-element> - <xpath-ui-element name="institutionID" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='institutionalUserIdentifier']" description="institution id"></xpath-ui-element> - <xpath-ui-element name="institutionMail" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='institutionalEmail']" description="institution e-mail"></xpath-ui-element> - <xpath-ui-element name="orgUnit" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='orgUnit']" description="organizational unit"></xpath-ui-element> - <xpath-ui-element name="studyField" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='studySubject']" description="field of studies"></xpath-ui-element> - <xpath-ui-element name="personalText" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@name='textAboutMe']" description="personal text" testcase="goToMyVisitingCard/type(home::content_settings_myVisitingCard_firstName, foo)"></xpath-ui-element> - <xpath-ui-element name="save" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@value='Save']" description="save button" testcase="goToMyVisitingCard/home::content_settings_myVisitingCard_save"></xpath-ui-element> - <xpath-ui-element name="cancel" xpath="//fieldset[./legend/text()='Configuration of visiting card']//input[@value='Cancel']" description="cancel button" testcase="goToMyVisitingCard/home::content_settings_myVisitingCard_cancel"></xpath-ui-element> - - <xpath-ui-element name="fileUploadInput" xpath="//fieldset[contains(./legend/text(),'Published image')]//input[@title='Select file']" description="file upload text input" testcase="goToMyVisitingCard/type(home::content_settings_myVisitingCard_fileUploadInput, foo)"></xpath-ui-element> - <xpath-ui-element name="submit" xpath="//fieldset[contains(./legend/text(),'Published image')]//button[@value='Submit']" description="sumbit button" testcase="goToMyVisitingCard/home::content_settings_myVisitingCard_submit"></xpath-ui-element> - </pageset>--> - <pageset name="system" description="system panel"> - <testcase-macro name="goToSystem"> - <call-macro name="login"/> - <selenium command="clickAndWait" target="home::menu_settings()"/> - <selenium command="clickAndWait" target="ui=home::content_settings_tabs_system"/> - </testcase-macro> - <pageset name="general" description="the general system settings area"> - <xpath-ui-element name="help" xpath="//fieldset[./legend/text()='General system settings']//div[@class='b_contexthelp_wrapper']" description="help in general system settings" testcase="goToSystem/click(home::content_settings_system_general_help)"/> - <xpath-ui-element name="language" xpath="//fieldset[legend/text()='General system settings']//div[@id='ber_languagepreferencesform']//select" description="language checkbox" testcase="goToSystem/select(home::content_settings_system_general_language,English)"/> - <xpath-ui-element name="fontSize" xpath="//fieldset[legend/text()='General system settings']//div[@id='ber_fontsizepreferencesform']//select" description="the character set used in download-combobox" testcase="goToSystem/select(home::content_settings_system_general_fontSize,Large)"/> - <xpath-ui-element name="characterSet" xpath="//fieldset[legend/text()='General system settings']//div[@id='ber_selectionpreferencesform']//select" description="the font size combobox" testcase="goToSystem/select(home::content_settings_system_general_characterSet,ISO-8859-2)"/> - <xpath-ui-element name="save" xpath="//fieldset[legend/text()='General system settings']//input[@value='Save']" description="The save button of the general system settings area" testcase="goToSystem/home::content_settings_system_general_save"/> - <xpath-ui-element name="cancel" xpath="//fieldset[legend/text()='General system settings']//input[@value='Cancel']" description="The cancel button of the general system settings area" testcase="goToSystem/home::content_settings_system_general_cancel"/> - </pageset> - <pageset name="ajax" description="the web 2.0/ajax settings area"> - <xpath-ui-element name="help" xpath="//fieldset[contains(./legend/text(),'WEB 2.0 / AJAX')]//div[@class='b_contexthelp_wrapper']//a" description="help in ajax section" testcase="goToSystem/click(home::content_settings_system_ajax_help)"/> - <xpath-ui-element name="mode" xpath="//fieldset[contains(./legend/text(),'WEB 2.0 / AJAX')]//input[@name='ajaxon']" description="ajax mode" testcase="goToSystem/check(home::content_settings_system_ajax_mode)"/> - <xpath-ui-element name="save" xpath="//fieldset[contains(./legend/text(),'WEB 2.0 / AJAX')]//input[@value='Save']" description="The save button of the ajax area" testcase="goToSystem/home::content_settings_system_ajax_save"/> - </pageset> - <pageset name="accessibility" description="the accessibility settings area"> - <xpath-ui-element name="web2amode" xpath="//fieldset[contains(./legend/text(),'Accessibility')]//input[@name='web2aModeOn']" description="web 2.a mode" testcase="goToSystem/check(home::content_settings_system_accessibility_web2amode)"/> - <xpath-ui-element name="save" xpath="//fieldset[contains(./legend/text(),'Accessibility')]//input[@value='Save']" description="The save button of the accessibility area" testcase="goToSystem/home::content_settings_system_accessibility_save"/> - </pageset> - <pageset name="replayMode" description="the replay mode settings area"> - <xpath-ui-element name="web2amode" xpath="//fieldset[contains(./legend/text(),'Replay mode')]//input[@name='checkbox']" description="web 2.a mode" testcase="goToSystem/check(home::content_settings_system_replayMode_web2amode)"/> - </pageset> - </pageset> - <pageset name="password" description="password panel"> - <testcase-macro name="goToPassword"> - <call-macro name="login"/> - <selenium command="clickAndWait" target="home::menu_settings()"/> - <selenium command="clickAndWait" target="ui=home::content_settings_tabs_password"/> - </testcase-macro> - <xpath-ui-element name="oldPassword" xpath="//fieldset[./legend/text()='Change your OLAT password']//input[@name='passwordold']" description="old OLAT password" testcase="goToPassword/type(home::content_settings_password_oldPassword,tst)"></xpath-ui-element> - <xpath-ui-element name="newPassword" xpath="//fieldset[./legend/text()='Change your OLAT password']//input[@name='passwordnew1']" description="new OLAT password" testcase="goToPassword/type(home::content_settings_password_newPassword,tst)"></xpath-ui-element> - <xpath-ui-element name="newPasswordConfirm" xpath="//fieldset[./legend/text()='Change your OLAT password']//input[@name='passwordnew2']" description="confirm new OLAT password" testcase="goToPassword/type(home::content_settings_password_newPasswordConfirm,tst)"></xpath-ui-element> - <xpath-ui-element name="save" xpath="//fieldset[./legend/text()='Change your OLAT password']//input[@value='Save']" description="save button" testcase="goToPassword/home::content_settings_password_save"></xpath-ui-element> - <xpath-ui-element name="cancel" xpath="//fieldset[./legend/text()='Change your OLAT password']//input[@value='Cancel']" description="cancel button" testcase="goToPassword/home::content_settings_password_cancel"></xpath-ui-element> - </pageset> - <pageset name="instantMessaging" description="instant messaging panel"> - <testcase-macro name="goToInstantMessaging"> - <call-macro name="login"/> - <selenium command="clickAndWait" target="home::menu_settings()"/> - <selenium command="clickAndWait" target="ui=home::content_settings_tabs_instantMessaging"/> - </testcase-macro> - <pageset name="userlist" description="the online user list section of the instant messaging panel"> - <xpath-ui-element name="userNameVisible" xpath="//fieldset[./legend/text()='Online user list (Click to start chat)']//input[@name='onlineList' and @value='true']" description="user name visible (true) radio box" testcase="goToInstantMessaging/click(home::content_settings_instantMessaging_userlist_userNameVisible)"></xpath-ui-element> - <xpath-ui-element name="userNameInvisible" xpath="//fieldset[./legend/text()='Online user list (Click to start chat)']//input[@name='onlineList' and @value='false']" description="user name visible (false) radio box" testcase="goToInstantMessaging/click(home::content_settings_instantMessaging_userlist_userNameInvisible)"></xpath-ui-element> - <xpath-ui-element name="onlineTimeVisible" xpath="//fieldset[./legend/text()='Online user list (Click to start chat)']//select[@name='onlineTime']" description="online time visible" testcase="goToInstantMessaging/select(home::content_settings_instantMessaging_userlist_onlineTimeVisible,Yes)"></xpath-ui-element> - <xpath-ui-element name="courseNameVisible" xpath="//fieldset[./legend/text()='Online user list (Click to start chat)']//select[@name='courseName']" description="course visible" testcase="goToInstantMessaging/select(home::content_settings_instantMessaging_userlist_courseNameVisible,Yes)"></xpath-ui-element> - <!-- <xpath-ui-element name="save" xpath="//fieldset[./legend/text()='COnline user list (Click to start chat)']//input[@value='Save']" description="save button"/> asa unused --> - <!-- <xpath-ui-element name="cancel" xpath="//fieldset[./legend/text()='COnline user list (Click to start chat)']//input[@value='Cancel']" description="cancel button"/> asa unused --> - </pageset> - <pageset name="roster" description="the roster section of the instant messaging panel"> - <default-testcase testcase="goToInstantMessaging" final-command="clickAndWait"/> - <xpath-ui-element name="statusAvailable" xpath="//fieldset[./legend/text()='Roster']//input[@type='radio' and @value='available']" description="the Available status" testcase="goToInstantMessaging/click(home::content_settings_instantMessaging_roster_statusAvailable)"/> - <xpath-ui-element name="statusChatWithMePlease" xpath="//fieldset[./legend/text()='Roster']//input[@type='radio' and @value='chat']" description="the I would like to chat status" testcase="goToInstantMessaging/click(home::content_settings_instantMessaging_roster_statusChatWithMePlease)"/> - <xpath-ui-element name="statusAbsent" xpath="//fieldset[./legend/text()='Roster']//input[@type='radio' and @value='away']" description="the Absent status" testcase="goToInstantMessaging/click(home::content_settings_instantMessaging_roster_statusAbsent)"/> - <xpath-ui-element name="statusLongAbsent" xpath="//fieldset[./legend/text()='Roster']//input[@type='radio' and @value='xa']" description="the Absent for longer status" testcase="goToInstantMessaging/click(home::content_settings_instantMessaging_roster_statusLongAbsent)"/> - <xpath-ui-element name="statusDoNotDisturb" xpath="//fieldset[./legend/text()='Roster']//input[@type='radio' and @value='dnd']" description="the Please do not disturb status" testcase="goToInstantMessaging/click(home::content_settings_instantMessaging_roster_statusDoNotDisturb)"/> - <xpath-ui-element name="statusNotAvailable" xpath="//fieldset[./legend/text()='Roster']//input[@type='radio' and @value='unavailable']" description="the Not available status" testcase="goToInstantMessaging/click(home::content_settings_instantMessaging_roster_statusNotAvailable)"/> - <!-- <xpath-ui-element name="save" xpath="//fieldset[./legend/text()='Roster']//input[@value='Save']" description="save button"/> asa unused --> - <!-- <xpath-ui-element name="cancel" xpath="//fieldset[./legend/text()='Roster']//input[@value='Cancel']" description="cancel button"/> asa unused --> - </pageset> - </pageset> - </pageset> - <pageset name="evidencesOfAchievement" description="the evidencesOfAchievement content area"> - <xpath-ui-element name="passedStatus" xpath="//tr//td[contains(descendant::text(),'" + title + "')]/../td/span[@class='o_passed' or @class='o_notpassed']/text()" description="the Passed/Failed status"> - <parameter name="title" description="the title of the course"/> - </xpath-ui-element> - <xpath-ui-element name="selectDetails" xpath="//form//td[contains(descendant::text(),'" + title + "')]/../td/a[./text()='Show']" description="selects Details link"> - <parameter name="title" description="the title of the course"> - <defaultValue value="AssessmentTool"/> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="startCourse" xpath="//tr//td[contains(descendant::text(),'" + title + "')]/../td/a[./text()='Start course']" description="Start course"> - <parameter name="title" description="the title of the course"/> - </xpath-ui-element> - <xpath-ui-element name="delete" xpath="//form//td[contains(descendant::text(),'" + title + "')]/../td/a[./text()='Delete']" description="Start course"> - <parameter name="title" description="the title of the course"/> - </xpath-ui-element> - <xpath-ui-element name="evidenceOfAchievement" xpath="//div[@class='o_efficiencystatement' and .//text()='Evidence of achievement']" description="the Evidence of achievement div"/> - </pageset> - <pageset name="portlets" description="portlets"> - <var-link-ui-element name="myBookmarks" linkparam="nameOfBookmark" description="Start bookmark from portlet"/> - <var-link-ui-element name="myGroups" linkparam="nameOfGroup" description="Start group from portlet"/> - <var-link-ui-element name="myNotifications" linkparam="nameOfNotification" description="Start notification from portlet"/> - <var-link-ui-element name="myEvidenceOfAchievement" linkparam="nameOfEvidenceOfAchievement" description="Start evidence of achievement from portlet"/> - <var-link-ui-element name="myNotes" linkparam="nameOfNote" description="Start note from portlet"/> - </pageset> - </pageset> - <pageset name="topNav" description="Top Navigation"> - <xpath-ui-element name="olatHelp" xpath="//div[@id='b_topnav']//a[@target='_help']" description="Starts the OLAT help"></xpath-ui-element> - </pageset> - <pageset name="config" description="Home configurator"> - <xpath-ui-element name="editConfig" xpath="//a[.//text()='Configure page']" description="start editing Home configuration"></xpath-ui-element> - <xpath-ui-element name="endConfig" xpath="//a[.//text()='End configuration']" description="end editing Home configuration"></xpath-ui-element> - <xpath-ui-element name="autoConfigMyGroups" xpath="//div[@class='b_portlet b_portlet_edit o_portlet_groups']//a[@class='b_portlet_edit_sort_auto']" description="start automatically config wizard"></xpath-ui-element> - <xpath-ui-element name="autoConfigMyBookmarks" xpath="//div[@class='b_portlet b_portlet_edit o_portlet_bookmark']//a[@class='b_portlet_edit_sort_auto']" description="start automatically config wizard for the bookmark portlet"/> - </pageset> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/infoMessage-pageset.xml b/src/test/profile/selenium/ui-map/infoMessage-pageset.xml deleted file mode 100644 index 03e2452f4f1..00000000000 --- a/src/test/profile/selenium/ui-map/infoMessage-pageset.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <!-- Info message --> - <pageset name="infoMessage" description="Info message links"> - <xpath-ui-element name="createMessage" xpath="//div[@class='b_float_right o_infomsg_create_button']//a[@class='b_button']" description="create message button"/> - <xpath-ui-element name="finishMessage" xpath="//a[@class='b_button b_wizard_button_finish']" description="finish message button"/> - <!-- ltere Mitteilungen anzeigen --> - <xpath-ui-element name="olderMessage" xpath="//a[contains(.//text(),'Show older messages')]" description="show older messages"></xpath-ui-element> - <xpath-ui-element name="currentMessage" xpath="//a[contains(.//text(),'Show new messages')]" description="show current messages"></xpath-ui-element> - - <xpath-ui-element name="messageTitle" xpath="//div[@class='o_infomsg b_clearfix']//h5[descendant::text()='" + titleOfMessage + "']" description="title of the message"> - <parameter name="titleOfMessage" description="title of the message"/> - </xpath-ui-element> - - <xpath-ui-element name="editFirstMessage" xpath="//div[@class='o_infomsg b_clearfix'][1]//a[contains(.//text(),'Edit')]" description="edit first messages"></xpath-ui-element> - <xpath-ui-element name="deleteFirstMessage" xpath="//div[@class='o_infomsg b_clearfix'][1]//a[contains(.//text(),'Delete')]" description="delete first messages"></xpath-ui-element> - - <xpath-ui-element name="messageInEdition" xpath="//div[@class='b_window_content_wrapper']//legend[contains(.//text(),'Create message')]" description="is message edited"></xpath-ui-element> - <xpath-ui-element name="messageAlreadyEdited" xpath="//span[contains(.//text(),'This message is being edited by user')]" description="edit first messages"></xpath-ui-element> - - - </pageset> - -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/learningResources-pageset.xml b/src/test/profile/selenium/ui-map/learningResources-pageset.xml deleted file mode 100644 index 11afc0f5f67..00000000000 --- a/src/test/profile/selenium/ui-map/learningResources-pageset.xml +++ /dev/null @@ -1,254 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="learningResources" description="Learning Resources"> - <pageset name="menu" description="the left hand menu"> - <default-testcase testcase="login/tabs::learningResources" final-command="clickAndWait"/> - <!-- <xpath-ui-element name="learningResources" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Learning resources']" description="left navigation link 'Learning resources'"/> asa unused --> - <xpath-ui-element name="catalog" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Catalog']" description="left navigation link 'Catalog'"/> - <xpath-ui-element name="searchForm" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Search form']" description="left navigation link 'Search form'"/> - <xpath-ui-element name="myEntries" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='My entries']" description="left navigation link 'My entries'"/> - <xpath-ui-element name="courses" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Courses']" description="left navigation link 'Courses'"/> - <xpath-ui-element name="coursesMenuItemSelected" xpath="//a[@class=' b_tree_selected b_tree_l1' and descendant-or-self::text()='Courses']" description="menu item courses is selected"/> - <!-- <xpath-ui-element name="tests" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Tests']" description="left navigation link 'Tests'"/> asa unused --> - <!-- <xpath-ui-element name="questionnaires" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Questionnaires']" description="left navigation link 'Questionnaires'"/> asa unused --> - <!-- <xpath-ui-element name="cpLearningContent" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='CP learning content']" description="left navigation link 'CP learning content'"/> asa unused --> - <!-- <xpath-ui-element name="scormLearningContent" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='SCORM learning content']" description="left navigation link 'SCORM learning content'"/> asa unused --> - <!-- <xpath-ui-element name="resourceFolder" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Resource folder']" description="left navigation link 'Resource folder'"/> asa unused --> - <xpath-ui-element name="wikis" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Wikis']" description="left navigation link 'Wikis'"/> - <!-- <xpath-ui-element name="glossary" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Glossary']" description="left navigation link 'Glossary'"/> asa unused --> - <!-- new lrs for 6.3--> - <xpath-ui-element name="blog" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Blogs']" description="left navigation link 'Blogs'"/> - <xpath-ui-element name="podcast" xpath="//body[//*[@class='b_nav_site b_nav_active o_site_repository']]//div[@class='b_tree']//a[descendant-or-self::text()='Podcasts']" description="left navigation link 'Podcasts'"/> - - </pageset> - - <pageset name="content" description="the (center) content area"> - <testcase-macro name="login"> - <call-macro name="login"/> - </testcase-macro> - <testcase-macro name="listDemoCourse"> - <selenium command="clickAndWait" target="tabs::learningResources"/> - <selenium command="clickAndWait" target="learningResources::menu_searchForm"/> - <selenium command="type" target="learningResources::content_searchForm_titleField" value="Demo Course"/> - <selenium command="clickAndWait" target="learningResources::content_searchForm_search"/> - </testcase-macro> - <xpath-ui-element name="firstLearningResourceInTable" xpath="//div[h4/text()='Learning resources']//table//tr[1]//td[5]//a" description="refers to the first learning resource click in the table"/> - <!-- se clickCourseEntry sollte gelöscht werden --> - <xpath-ui-element name="clickCourseEntry" xpath="//a[contains(text(), '" + nameOfCourse + "')]" description="Click on the title of a course" testcase="login/listDemoCourse/learningResources::content_clickCourseEntry(nameOfCourse=Demo Course)"> - <parameter name="nameOfCourse" description="the name of the course"/> - </xpath-ui-element> - <xpath-ui-element name="clickLearningResource" xpath="//table//a[contains(text(), '" + nameOfLearningResource + "')]" description="Click on the title of a Learning resource" testcase="login/listDemoCourse/learningResources::content_clickLearningResource(nameOfLearningResource=Demo Course)"> - <parameter name="nameOfLearningResource" description="the name of the Learning resource"> - <defaultValue value="Demo Course" /> - <defaultValue value="Demo course wiki" /> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="clickCatalogEntry" xpath="//table//a[contains(*//text(), '" + nameOfLearningResource + "')]" description="Click on the title of a Learning resource" testcase="login/listDemoCourse/learningResources::content_clickLearningResource(nameOfLearningResource=Demo Course)"> - <parameter name="nameOfLearningResource" description="the name of the Learning resource" /> - </xpath-ui-element> - <!-- ki <xpath-ui-element name="goToContentOfLearningResource" xpath="//a[descendant-or-self::text()='" + nameOfLearningResource + "']/../..//a[descendant-or-self::text()='Go to content']" description="The Go to content link in a Learning Resources Table"> - <parameter name="nameOfLearningResource" description="the name of the Learning resource"> - <defaultValue value="Demo Course" /> - <defaultValue value="Demo course wiki" /> - </parameter> - </xpath-ui-element>--> - - <xpath-ui-element name="showDetailedView" xpath="//a[starts-with(text(), '" + nameOfLearningResource + "')]/../..//a[descendant-or-self::text()='Detailed view']" description="The Detailed view link in a Learning Resources Table, for the resource starting-with nameOfLearningResource"> - <parameter name="nameOfLearningResource" description="the name of the Learning resource"> - <defaultValue value="Demo Course" /> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="showContent" xpath="//a[descendant-or-self::text()='Show content' and @class='b_button']" description="The Show Content button in a Course Detailed View"/> - <xpath-ui-element name="selectedAccessLabel" xpath="//div[contains(.//label/text(), 'Access have')]//div[contains(@class,'b_form_selection_element')][.//input[@checked='checked']]//label" description="The label with the selected access rule" /> - <!-- <link-ui-element name="additionalInformation" link="Additional information" description="Additional Information Link"/> asa unused --> - <pageset name="searchForm" description="learning resources search form"> - <!-- <xpath-ui-element name="titleField" xpath="//form[@name='searchform']//input[@name='cif_displayname']" description="title of learning resource field"></xpath-ui-element> unused --> - <!-- <xpath-ui-element name="authorField" xpath="//form[@name='searchform']//input[@name='cif_author']" description="author of learning resource field"></xpath-ui-element> unused --> - <xpath-ui-element name="courseType" xpath="//input[@type='checkbox' and @value='CourseModule']" description="course type checkbox"/> - <!-- <xpath-ui-element name="descriptionField" xpath="//form[@name='searchform']//input[@name='cif_description']" description="description of learning resource field"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element name="search" xpath="//form[@name='searchform']//input[@value='Search']" description="search button learning resources search map"></xpath-ui-element> unused --> - </pageset> - <pageset name="courseTable" description="courses table"> - <xpath-ui-element name="selectCourse" xpath="//form//table//tr[" + index + "]/td[2]//a" description="select course in table"> - <parameter name="index" description="row in table"/> - </xpath-ui-element> - </pageset> - </pageset> - - <pageset name="toolbox" description="the toolbox area to the right"> - <pageset name="import" description="the import toolbox to the right"> - <default-testcase testcase="login/tabs::learningResources/learningResources::menu_myEntries" final-command="clickAndWait"/> - <xpath-ui-element name="course" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='Course']" description="the import course link in the import toolbox"/> - <xpath-ui-element name="cpLearningContent" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='CP learning content']" description="the import CP learning content link in the import toolbox"/> - <!-- <xpath-ui-element name="scormLearningContent" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='SCORM learning content']" description="the import SCORM learning content link in the import toolbox"/> asa unused --> - <!-- <xpath-ui-element name="test" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='Test']" description="the import Test link in the import toolbox"/> asa unused --> - <!-- <xpath-ui-element name="questionnaire" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='Questionnaire']" description="the import questionnaire link in the import toolbox"/> asa unused --> - <!-- <xpath-ui-element name="wiki" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='Wiki']" description="the import Wiki link in the import toolbox"/> asa unused --> - <!-- <xpath-ui-element name="glossary" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='Glossary']" description="the import glossary link in the import toolbox"/> asa unused --> - <!-- <xpath-ui-element name="otherFormats" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='Other formats']" description="the import other formats link in the import toolbox"/> asa unused --> - <!-- new for 6.3--> - <xpath-ui-element name="blog" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='Blog']" description="the import blog link in the create toolbox"/> - <xpath-ui-element name="podcast" xpath="//div[@class='b_toolbox'][descendant::text()='Import']//a[descendant::text()='Podcast']" description="the import podcast link in the create toolbox"/> - </pageset> - <pageset name="create" description="the create toolbox to the right"> - <default-testcase testcase="login/tabs::learningResources/learningResources::menu_myEntries" final-command="clickAndWait"/> - <xpath-ui-element name="course" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[descendant::text()='Course']" description="the create course link in the create toolbox"/> - <xpath-ui-element name="test" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[contains(descendant::text(), 'Test')]" description="the create test link in the create toolbox"/> - <xpath-ui-element name="questionnaire" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[descendant::text()='Questionnaire']" description="the create questionnaire link in the create toolbox"/> - <xpath-ui-element name="resourceFolder" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[descendant::text()='Resource folder']" description="the create resource folder link in the create toolbox"/> - <xpath-ui-element name="wiki" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[descendant::text()='Wiki']" description="the create wiki link in the create toolbox"/> - <xpath-ui-element name="glossary" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[descendant::text()='Glossary']" description="the create glossary link in the create toolbox"/> - <!-- new for 6.3--> - <xpath-ui-element name="blog" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[descendant::text()='Blog']" description="the create blog link in the create toolbox"/> - <xpath-ui-element name="podcast" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[descendant::text()='Podcast']" description="the create podcast link in the create toolbox"/> - <xpath-ui-element name="createCP" xpath="//div[@class='b_toolbox'][descendant::text()='Create']//a[contains(./text(), 'CP')]" description="create CP link"/> - </pageset> - <pageset name="delete" description="the delete toolbox to the right"> - <!-- <xpath-ui-element name="learningResources" xpath="//div[@class='b_toolbox'][descendant::text()='Delete']//a[descendant::text()='Learning resources']" description="the delete learning resources link in the create toolbox"/> asa unused --> - </pageset> - <pageset name="category" description="the catagory toolbox to the right, menu catalog"> - <!-- <xpath-ui-element name="modifyData" xpath="//div[@class='b_toolbox'][descendant::text()='Category']//a[descendant::text()='Modify data']" description="the modify data link in the catagory toolbox"/> asa unused --> - <!-- <xpath-ui-element name="nominateAdministrator" xpath="//div[@class='b_toolbox'][descendant::text()='Category']//a[descendant::text()='Nominate administrator']" description="the nominate administrator link in the catagory toolbox"/> asa unused --> - <!-- <xpath-ui-element name="contactAdministrator" xpath="//div[@class='b_toolbox'][descendant::text()='Category']//a[descendant::text()='Contact administrator']" description="the contact administrator link in the catagory toolbox"/> asa unused --> - </pageset> - <pageset name="add" description="the add toolbox to the right, menu catalog"> - <!-- <xpath-ui-element name="subCategory" xpath="//div[@class='b_toolbox'][descendant::text()='Add']//a[descendant::text()='Sub-category']" description="the sub-category link in the add toolbox"/> asa unused --> - <!-- <xpath-ui-element name="learningResource" xpath="//div[@class='b_toolbox'][descendant::text()='Add']//a[descendant::text()='Learning resource']" description="the learning resource link in the add toolbox"/> asa unused --> - </pageset> - <pageset name="learningResource" description="the Learning resource toolbox to the right"> - <!-- <xpath-ui-element name="showContent" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Show content']" description="the show content link in the learning resource toolbox"/> asa unused --> - <xpath-ui-element name="exportContent" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Export content']" description="the edit content link in the learning resource toolbox"/> - <!-- <xpath-ui-element name="setBookmark" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Set bookmark']" description="the set bookmark link in the learning resource toolbox"/> asa unused --> - <xpath-ui-element name="editContent" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Edit content']" description="the edit content link in the learning resource toolbox"/> - <!-- <xpath-ui-element name="modifyDescription" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Modify description']" description="the modify description link in the learning resource toolbox"/> asa unused --> - <xpath-ui-element name="modifyProperties" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Modify settings']" description="the modify properties link in the learning resource toolbox"/> - <xpath-ui-element name="copy" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Copy']" description="the copy link in the learning resource toolbox"/> - <xpath-ui-element name="delete" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Delete']" description="the delete link in the learning resource toolbox"/> - <xpath-ui-element name="assignOwners" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Manage owners']" description="the Assign owners link in the learning resource toolbox"/> - <xpath-ui-element name="addToCatalog" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Add to catalog']" description="Add the learning resource to catalog" /> - <!-- <xpath-ui-element name="closeDetailedView" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Close detailed view']" description="the close detailed view link in the learning resource toolbox"/> asa unused --> - <xpath-ui-element name="closeCourse" xpath="//div[@class='b_toolbox'][descendant::text()='Learning resource']//a[descendant::text()='Close']" description="Close the course" /> - <pageset name="assignOwners" description="Assign owners of a learning resource"> - <xpath-ui-element name="addOwner" xpath="//a[contains(descendant::text(), 'Add user(s)')]" description="add user to owner list" /> - </pageset> - </pageset> - </pageset> - - <pageset name="dialog" description="all dialogs in learning resources"> - <xpath-ui-element name="title" xpath="//fieldset[./legend='Information on this entry']//input[@type='text']" description="title input field"/> - <xpath-ui-element name="description" xpath="//body[@id='tinymce']" description="description input field"/> - <!-- <xpath-ui-element name="next" xpath="//div[@class='b_button_group']//input[@value='Next']" description="Course title and description - next"/> asa unused --> - <xpath-ui-element name="buttonNext" xpath="//button[.//text()='Next']" description="Course title and description - next"/> - <xpath-ui-element xpath="//div[contains(.//text(), 'Do you want to start the editor?')]/..//a[.//text()='Yes']" name="startYes" description="confirm yes of dialog when starting the editor"></xpath-ui-element> - <xpath-ui-element xpath="//div[contains(.//text(), 'Do you want to start the editor?')]/..//a[.//text()='No']" name="startNo" description="confirm no of dialog when not starting the editor"></xpath-ui-element> - <!-- <xpath-ui-element xpath="//div[contains(.//text(), 'Do you really want to delete this learning resource?')]/..//a[.//text()='Yes']" name="deleteYes" description="confirm yes of dialog when deleting a learning resource"></xpath-ui-element> asa unused --> - <!-- <xpath-ui-element xpath="//div[contains(.//text(), 'Do you really want to delete this learning resource?')]/..//a[.//text()='No']" name="deleteNo" description="confirm no of dialog when deleting a learning resource"></xpath-ui-element> asa unused --> - - <xpath-ui-element name="yes" xpath="//div[@class='b_button_group']//a[descendant::text()='Yes']" description="the Yes button on the 'Configuration changed' dialog"/> - <xpath-ui-element name="catalogRoot" xpath="//div[contains(@class, 'b_modal_area')]//div[@id='extdd-1']//a[contains(@class, 'x-tree-node-anchor')]" description="Select the catalog root for inserting course" /> - </pageset> - - <pageset name="courseImport" description="the course import dialog"> - <xpath-ui-element name="uploadFile" xpath="//a[contains(./span/text(),'Upload file')]" description="the upload file button"/> - <xpath-ui-element name="fileChooser" xpath="//fieldset[//text()='File upload']//input[@class='b_fileinput_realchooser']" description="the file choose input field"/> - <!-- <xpath-ui-element name="fileChooserSave" xpath="//fieldset[./legend/text()='File upload']//input[@value='Save']" description="the save button under the file chooser input field"/> asa unused --> - <xpath-ui-element name="importReferencesImport" xpath="//div[./h4/text()='Learning resource of type Add course']//ul/li//a[.//text()='Import']" description="the import button in the import-reference dialog"/> - <xpath-ui-element name="importReferencesContinue" xpath="//div[@class='b_window' and .//text()='Learning resource of type Add course']//a[./span/text()='Continue course import']" description="the continue course import button in the import-reference dialog"/> - <xpath-ui-element name="wizardShowDetailsView" xpath="//input[@value='dv']" description="show detail view radio button"></xpath-ui-element> - <xpath-ui-element name="wizardStartCourseEditor" xpath="//input[@value='ce']" description="start course editor radio button"></xpath-ui-element> - </pageset> - <pageset name="courseWizard" description="the course wizard dialog"> - <xpath-ui-element name="selectWizardRadio" xpath="//input[@value='sw']" description="start the course wizard" /> - <xpath-ui-element name="createSinglePage" xpath="//input[@value='sp']" description="create a single page" /> - <xpath-ui-element name="createEnrollment" xpath="//input[@value='en']" description="create an enrollment" /> - <xpath-ui-element name="editEnrollmentLink" xpath="//div[@class='b_wizard']//table//a[span/text()='Edit']" description="edit the enrollment" /> - <xpath-ui-element name="createDownloadFolder" xpath="//input[@value='bc']" description="create a download folder" /> - <xpath-ui-element name="createForum" xpath="//input[@value='fo']" description="create a forum" /> - <xpath-ui-element name="createContactForm" xpath="//input[@value='co']" description="create a contact form" /> - <pageset name="editEnrollment" description="the Overlay for editing the enrollment"> - <xpath-ui-element name="number_learningGroups" xpath="//div[contains(@class,'b_modal_area')]//form//input[@type='text']" description="textfield for number of learning groups" /> - <xpath-ui-element name="number_learningGroups" xpath="//div[contains(@class,'b_modal_area')]//form//input[@type='text' and @value='25']" description="textfield for number participants" /> - <xpath-ui-element name="accessLimit" xpath="//input[@name='accessLimit']" description="checkbox for setting only registered users" /> - <xpath-ui-element name="selectSP" xpath="//input[@value='Information page']" description="select information page" /> - <xpath-ui-element name="selectBC" xpath="//input[@value='Download folder']" description="select download folder" /> - <xpath-ui-element name="selectFO" xpath="//input[@value='Forum']" description="select information page" /> - <xpath-ui-element name="selectCO" xpath="//input[@value='E-mail']" description="select information page" /> - </pageset> - <xpath-ui-element name="catalogRoot" xpath="//div[contains(@class, 'b_wizard')]//a[contains(@class, 'x-tree-node-anchor') and //text()='CATALOG ROOT']" description="Select the catalog root for inserting course" /> - </pageset> - <pageset name="closeCourseWizard" description="The Wizard to close a course"> - <xpath-ui-element name="cleanCatalog" xpath="//input[contains(@value,'form.clean.catalog')]" description="The checkbox to clean catalog" /> - <xpath-ui-element name="cleanGroup" xpath="//input[contains(@value,'form.clean.groups')]" description="the checkbox to clean groups" /> - </pageset> - - </pageset> - <pageset name="learningResourcesModifieProperties" description="modifie properties of a learing resource"> - <!-- <xpath-ui-element name="repoEntryAccess" xpath="//select[@name='cif_access']" description="repo entry access dropdown" /> unused --> - <xpath-ui-element name="accessOnlyOwners" xpath="//fieldset[./legend='Settings regarding learning resources']//input[@class='b_radio' and @name='cif_access' and @value='1']" description="access - only owners radio button"/> - <xpath-ui-element name="accessOwnersAndAuthors" xpath="//fieldset[./legend='Settings regarding learning resources']//input[@class='b_radio' and @name='cif_access' and @value='2']" description="access - owners and authors radio button"/> - <xpath-ui-element name="accessAllRegistered" xpath="//fieldset[./legend='Settings regarding learning resources']//input[@class='b_radio' and @name='cif_access' and @value='3']" description="access - all registered users radio button"/> - <xpath-ui-element name="accessRegisteredAndGuests" xpath="//fieldset[./legend='Settings regarding learning resources']//input[@class='b_radio' and @name='cif_access' and @value='4']" description="access - registered users and guests radio button"/> - <xpath-ui-element name="evidenceOfAchievement" xpath="//a[descendant::text()='Evidence of achievement']" description="select Evidence of achievement tab" /> - <xpath-ui-element name="evidenceOfAchievementEnabled" xpath="//input[@name='isOn']" description="Evidence of achievement enabled/disabled checkbox" /> - </pageset> - - <pageset name="blog" description="blog resource links"> - <xpath-ui-element name="create" xpath="//a[@class='b_button' and .//text()='Create your own entries']" description="create your own entries"/> - <xpath-ui-element name="createNewEntry" xpath="//a[.//text()='Create new entry']" description="Create new entry"/> - <xpath-ui-element name="editEntry" xpath="//a[contains(.//text(),'Edit entry') and ancestor::div//h5[contains(.//text(),'" + entryTitle + "')]]" description="edit entry"> - <parameter name="entryTitle" description="entry title"/> - </xpath-ui-element> - <xpath-ui-element name="draft" xpath="//div[@class='o_post b_clearfix o_draft']//h5[contains(.//text(),'" + entryTitle + "')]" description="draft with title"> - <parameter name="entryTitle" description="entry title"/> - </xpath-ui-element> - <xpath-ui-element name="addComment" xpath="//a[@class='b_comments' and ancestor::div//h5[contains(.//text(),'" + entryTitle + "')]]" description="comments link"> - <parameter name="entryTitle" description="comments link label"/> - </xpath-ui-element> - <xpath-ui-element name="includeExternal" xpath="//a[contains(.//text(),'Include an')]" description="include an external already existing blog"></xpath-ui-element> - <xpath-ui-element name="edit" xpath="//a[@class='b_button b_small' and .//text()='Edit blog']" description="edit blog button"></xpath-ui-element> - <xpath-ui-element name="blogEntryDescriptionFrame" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Description']//div[@class='b_form_element']//iframe" description="description textarea of the blog"/> - <xpath-ui-element name="blogEntryContentFrame" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Content']//div[@class='b_form_element']//iframe" description="content textarea of the blog"/> - </pageset> - - <pageset name="podcast" description="podcast resource links"> - <xpath-ui-element name="create" xpath="//a[@class='b_button' and .//text()='Create your own episode']" description="create your own entries"></xpath-ui-element> - <xpath-ui-element name="addEpisode" xpath="//a[.//text()='Add episode']" description="Add episode button"/> - <!-- <xpath-ui-element name="editEpisode" xpath="//a[contains(.//text(),'Create') and ancestor::div[contains(@class,'o_podcast_episode')]//h5[contains(.//text(),'" + episodeTitle + "')]]" description="create or edit podcast episode"> - <parameter name="episodeTitle" description=""></parameter> - </xpath-ui-element>--> - <xpath-ui-element name="editEpisode" xpath="//a[contains(.//text(),'Create')]" description="create or edit episode"></xpath-ui-element> - <xpath-ui-element name="addComment" xpath="//a[@class='b_comments' and ancestor::div//h5[contains(.//text(),'" + entryTitle + "')]]" description="comments link"> - <parameter name="entryTitle" description="comments link label"/> - </xpath-ui-element> - <xpath-ui-element name="includeExternal" xpath="//a[contains(.//text(),'Include an')]" description="include an external already existing blog"></xpath-ui-element> - <xpath-ui-element name="edit" xpath="//a[@class='b_button b_small' and .//text()='Edit Podcast']" description="edit blog button"></xpath-ui-element> - </pageset> - - <pageset name="cpEditor" description="content package editor paths"> - <xpath-ui-element name="menuTreeLink" xpath="//div[@class='o_cpeditor_menu_tree']//a[./span/text()='" + link + "']" description="a page node link in the cp editor, containing the linkText" > - <parameter name="link" description="The text of the link"/> - </xpath-ui-element> - <xpath-ui-element name="selectedTreeNodeExpanded" xpath="//div[@class='x-tree-node-el x-unselectable x-tree-node-expanded x-tree-selected']//a[./span/text()='" + link + "']" description="a selected expanded node link in the cp editor, containing the linkText" > - <parameter name="link" description="The text of the link"/> - </xpath-ui-element> - <xpath-ui-element name="selectedTreeNodeLeaf" xpath="//div[@class='x-tree-node-el x-tree-node-leaf x-unselectable x-tree-selected']//a[./span/text()='" + link + "']" description="a selected leaf node link in the cp editor, containing the linkText" > - <parameter name="link" description="The text of the link"/> - </xpath-ui-element> - <xpath-ui-element name="addPage" xpath="//a[@class='o_cpeditor_new']" description="add page button"></xpath-ui-element> - <xpath-ui-element name="editPageProperties" xpath="//a[@class='o_cpeditor_edit']" description="edit page properties button"></xpath-ui-element> - <xpath-ui-element name="metadataTitleInput" xpath="//fieldset[//text()='Edit metadata']//input[@type='text']" description="metadata title input field"></xpath-ui-element> - <xpath-ui-element name="saveAndClose" xpath="//a[@class='b_button' and contains(.//text(),'Save and close')]" description="save and close button"></xpath-ui-element> - <xpath-ui-element name="copyPage" xpath="//a[@class='o_cpeditor_copy']" description="copy page button"></xpath-ui-element> - <xpath-ui-element name="importPage" xpath="//a[@class='o_cpeditor_import']" description="import page button"></xpath-ui-element> - <xpath-ui-element name="deletePage" xpath="//a[@class='o_cpeditor_delete']" description=" delete page button"></xpath-ui-element> - <xpath-ui-element name="preview" xpath="//a[@class='o_cpeditor_preview']" description="preview page button"></xpath-ui-element> - <xpath-ui-element name="dragAndDropSrcObject" xpath="//ul[@class='x-tree-node-ct']//a[contains(.//text(),'" + link + "')]" description="locator of object to be drag"> - <parameter name="link" description="link title"></parameter> - </xpath-ui-element> - <xpath-ui-element name="uploadFile" xpath="//a[contains(./span/text(),'Upload file')]" description="the upload file button"/> - <xpath-ui-element name="imageDescription" xpath="//input[@id='alt']" description="image description"/> - <xpath-ui-element name="insertImage" xpath="//input[@id='insert']" description="insert image button"/> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/olat-ui-map.xml b/src/test/profile/selenium/ui-map/olat-ui-map.xml deleted file mode 100644 index aa538b92ab5..00000000000 --- a/src/test/profile/selenium/ui-map/olat-ui-map.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map> - <testcase-macro name="login"> - <call-macro name="adminlogin"/> - </testcase-macro> - <testcase-macro name="loginDeutsch"> - <call-macro name="adminloginDeutsch"/> - </testcase-macro> - - <include file="dmz-pageset.xml"/> - <include file="tabs-pageset.xml"/> - <include file="home-pageset.xml"/> - <include file="groups-pageset.xml"/> - <include file="group-pageset.xml"/> - <include file="groupManagement-pageset.xml"/> - <include file="learningResources-pageset.xml"/> - <include file="commons-pageset.xml"/> - <include file="course-pageset.xml"/> - <include file="courseEditor-pageset.xml"/> - <include file="testEditor-pageset.xml"/> - <include file="groupAdministration-pageset.xml"/> - <include file="userAdministration-pageset.xml"/> - <include file="qti-pageset.xml"/> - <include file="systemAdministration-pageset.xml"/> - <include file="projectBroker-pageset.xml"/> - <include file="infoMessage-pageset.xml"/> - <include file="portfolio-pageset.xml"/> - <include file="rightsManagement-pageset.xml" /> -</ui-map> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/portfolio-pageset.xml b/src/test/profile/selenium/ui-map/portfolio-pageset.xml deleted file mode 100644 index 7e0d907abcb..00000000000 --- a/src/test/profile/selenium/ui-map/portfolio-pageset.xml +++ /dev/null @@ -1,79 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - - <pageset name="epCollectDialog" description="the collect dialog"> - - <xpath-ui-element xpath="//div[@class='b_wizard']//input" name="title" description="title field"/> - <xpath-ui-element xpath="//div[@class='b_wizard']//textarea" name="description" description="textarea field"/> - - <!-- mark: to use tag-component, leave away wizard-path --> - <xpath-ui-element xpath="//div[@class='b_wizard_steps_current']//div[@class and contains( concat( ' ', normalize-space(@class), ' ' ), ' holder ' )]//input[@class and contains( concat( ' ', normalize-space(@class), ' ' ), ' maininput ' )]" name="taginput" description="input field for tags"/> - <xpath-ui-element xpath="//div[@class='b_wizard_steps_current']//ul[@class='feed']/li[1]" name="taginputFeed" description="first element of the autocompletion feed"/> - <xpath-ui-element xpath="//div[@class='b_wizard_steps_current']//div[@class='b_form_selection_element']//input" name="copyrightCheckbox" description="checkbox for copyright"/> - - </pageset> - - <pageset name="epMenu" description="the left hand menu"> - <!-- todo: rh: fix as soon as epf is translated to EN --> - <xpath-ui-element name="ePortfolioArtefacts" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='My artefacts']" description="left navigation link 'eportfolio / my artefacts'"/> - <xpath-ui-element name="ePortfolioMyMaps" xpath="//div[contains(@class, 'o_home')]//div[@class='b_tree']//a[text()='My accumulative folders']" description="left navigation link 'eportfolio / my maps'"/> - </pageset> - - <pageset name="epArtefacts" description="artefact page"> - <xpath-ui-element xpath="//div[@class='b_artefact_count']" name="artefactCount" description="text containing artefact count"/> - <xpath-ui-element xpath="//div[@class='b_ep_add_artefact']//a" name="addArtefactLink" description="button to add artefact"/> - <xpath-ui-element xpath="//div[@class='b_ext_tooltip_wrapper']//li[1]//a" name="createTextArtefactLink" description="link to create a text-artefact"/> - <xpath-ui-element xpath="//div[@class='b_segments']//li[3]//a" name="artefactSearch" description="segmented view - artefact search"/> - </pageset> - - <pageset name="epArtefactSearch" description="search segment in artefact extension"> - <xpath-ui-element xpath="//div[@class='b_ep_filter b_float_left']//div[2]//div[2]/div/span[6]/a" name="textartefact" description="filter for text artefacts"/> - <xpath-ui-element xpath="//div[@class='b_subcl']/../../div[1]//a[contains(@class, 'b_delete_icon')]" name="deleteFirstArtefactLink" description="delete link of first left artefact"/> - <xpath-ui-element xpath="//div[@class='b_subcl']/../../div[1]//div[contains(@class, 'b_actions')]//a" name="firstArtefactChooseLink" description="link to choose an artefact"/> - <xpath-ui-element xpath="//div[contains(@class, 'b_ep_viewmode')]//input[@value='details']" name="viewModeDetails" description="radio for details mode"/> - </pageset> - - <pageset name="epMap" description="the map view"> - <xpath-ui-element xpath="//div[@class='b_ep_add_artefact']//a" name="addMapLink" description="button to add a map"/> - <xpath-ui-element xpath="//div[@class='b_ext_tooltip_wrapper']//li[1]//a" name="createDefaultMap" description="link to create a default map"/> - <xpath-ui-element xpath="//div[@class='b_ext_tooltip_wrapper']//li[2]//a" name="createMapFromTemplate" description="link to create a default map from a given template"/> - <xpath-ui-element xpath="//div[@id='o_addMapBox']//div/input" name="createMapTitle" description="input field for map title"/> - <xpath-ui-element xpath="//div[@id='o_addMapBox']//div/textarea" name="createMapDescription" description="input field for map description"/> - <xpath-ui-element xpath="//div[@id='o_addMapBox']//button" name="createMapSaveButton" description="save button"/> - - <xpath-ui-element xpath="//div[@class='b_pagination']//li[2]//a" name="firstPageLink" description="link in tab to first page"/> - <xpath-ui-element xpath="//div[@class='b_eportfolio_add_link']//a" name="addPageLink" description="link to add a page"/> - <xpath-ui-element xpath="//div[@class='b_eportfolio_page']//span[2]/a[contains(@class, 'b_eportfolio_add_link')]" name="addStructLink" description="link to add a structure"/> - <xpath-ui-element xpath="//div[@class='b_eportfolio_page']/div[1]//span[1]/a[contains(@class, 'b_eportfolio_add_link')]" name="attachArtefactToPageLink" description="link to add a artefact"/> - <xpath-ui-element xpath="//div[@class='b_eportfolio_structure'][1]//span[1]/a[contains(@class, 'b_eportfolio_add_link')]" name="attachArtefactToStructLink" description="link to add a artefact"/> - - <xpath-ui-element name="openMap" xpath="//ul[@class='b_eportfolio_maps']//li/h4[contains(text(), '" + titleOfMap + "')]/..//span[1]/a" description="get link to a map"> - <parameter name="titleOfMap" description="the title of the map"/> - </xpath-ui-element> - - <xpath-ui-element name="shareMap" xpath="//ul[@class='b_eportfolio_maps']//li/h4[contains(text(), '" + titleOfMap + "')]/..//span[2]/a" description="get link to share a map"> - <parameter name="titleOfMap" description="the title of the map"/> - </xpath-ui-element> - - <xpath-ui-element xpath="//div[@class='b_eportfolio']//span[text()='Open Editor']/.." name="openEditor" description="open the map editor"/> - <xpath-ui-element xpath="//div[@class='b_eportfolio']//span[text()='Close Editor']/.." name="closeEditor" description="close the map editor"/> - </pageset> - - <pageset name="epMapEditor" description="the map editor"> - <xpath-ui-element xpath="//div[contains(@class, 'o_ep_struct_editor')]//input[@type='text']" name="elTitle" description="title input element"/> - <xpath-ui-element xpath="//div[contains(@class, 'o_ep_struct_editor')]//div/textarea" name="elDescription" description="description for this element"/> - <xpath-ui-element xpath="//div[contains(@class, 'o_ep_struct_editor')]//button" name="saveEditor" description="save form"/> - <xpath-ui-element xpath="//a[contains(@class, 'b_delete_icon')]" name="deleteButton" description="delete active element"/> - </pageset> - - <pageset name="epShare" description="the map share view"> - <xpath-ui-element xpath="//div[contains(@id, 'o_shareBox' )]//form//div[2]//a" name="createRule" description="create rule button"/> - <xpath-ui-element xpath="//div[@class and contains( concat( ' ', normalize-space(@class), ' ' ), ' holder ' )]//input[@class and contains( concat( ' ', normalize-space(@class), ' ' ), ' maininput ' )]" name="nameInput" description="input field for usernames"/> - <xpath-ui-element xpath="//ul[@class='feed']/li[1]" name="nameInputSelect" description="select entry from input field for usernames"/> - <xpath-ui-element xpath="//div[@class='b_button_group']//button" name="saveShare" description="save form"/> - </pageset> - - -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/projectBroker-pageset.xml b/src/test/profile/selenium/ui-map/projectBroker-pageset.xml deleted file mode 100644 index f7548f5a6ae..00000000000 --- a/src/test/profile/selenium/ui-map/projectBroker-pageset.xml +++ /dev/null @@ -1,86 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> -<!-- aka Topic assignment --> - <pageset name="projectBroker" description="project broker links"> - <xpath-ui-element name="createTopic" xpath="//a[.//text()='Create Topic']" description="create topic button"/> - <!-- use commons::flexiForm_labeledTextInput for registration and due date starting dates --> - <xpath-ui-element name="registrationDeadline" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Deadline'][1]//div[@class='b_form_element']//input[@type='text']" description="registration deadline input field"></xpath-ui-element> - <xpath-ui-element name="dueDeadline" xpath="//div[@class='b_form_element_wrapper b_clearfix'][descendant::text()='Deadline'][2]//div[@class='b_form_element']//input[@type='text']" description="due date deadline"></xpath-ui-element> - <!-- <xpath-ui-element name="deleteTopic" xpath="//a[.//text()='Delete Topic']" description="detele topic button"></xpath-ui-element> asa unused --> - - <xpath-ui-element name="doLimitVacancies" xpath="//input[@type='checkbox' and @name='detailsform.max.candidates.label']" description="do you want to limit the vacancies - checkbox"/> - <xpath-ui-element name="vacanciesNumber" xpath="//input[@type='text' and @size='3']" description="number of vacancies"/> - - <!-- topic table --> - <xpath-ui-element name="topicLink" xpath="//form//table//a[descendant::text()='" + nameOfTopic + "']" description="topic link in topic table"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - <xpath-ui-element name="selectTopic" xpath="//td[@class='b_align_normal b_first_child']//a[descendant::text()='" + nameOfTopic + "']/../..//td/a[descendant::text()='Select']" description="select topic with the given name"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - <xpath-ui-element name="hasVacancies" xpath="//td[@class='b_align_normal b_first_child']//a[descendant::text()='" + nameOfTopic + "']/../..//td[descendant::text()='Vacancies']" description="topic has vacancies"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - - <xpath-ui-element name="filled" xpath="//td[@class='b_align_normal b_first_child']//a[descendant::text()='" + nameOfTopic + "']/../..//td[descendant::text()='Filled']" description="topic is filled"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - <xpath-ui-element name="temporaryRegistration" xpath="//td[@class='b_align_normal b_first_child']//a[descendant::text()='" + nameOfTopic + "']/../..//td[descendant::text()='Temporary registration']" description="Temporary registration"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - <xpath-ui-element name="isRegistered" xpath="//td[@class='b_align_normal b_first_child']//a[descendant::text()='" + nameOfTopic + "']/../..//td[descendant::text()='Positive registration']" description="Positive registration"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - <xpath-ui-element name="checkParticipants" xpath="//td[@class='b_align_normal b_first_child']//a[descendant::text()='" + nameOfTopic + "']/../..//td[descendant::text()='Check participants']" description="Check participants"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - <xpath-ui-element name="participantsAccepted" xpath="//td[@class='b_align_normal b_first_child']//a[descendant::text()='" + nameOfTopic + "']/../..//td[descendant::text()='Participants accepted']" description="Participants accepted"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - - <xpath-ui-element name="deselectTopic" xpath="//td[@class='b_align_normal b_first_child']//a[descendant::text()='" + nameOfTopic + "']/../..//td/a[descendant::text()='Deselect']" description="deselect topic with the given name"> - <parameter name="nameOfTopic" description="the name of the topic"/> - </xpath-ui-element> - - <pageset name="folder" description="folder specifics"> - <xpath-ui-element name="folderTab" xpath="//a[descendant::text()='Folder']" description="folder tab"/> - <xpath-ui-element name="dropboxDiv" xpath="//div[@class='o_course_run_dropbox']" description="dropbox div"/> - <xpath-ui-element name="dropBoxFolderLink" xpath="//div[@class='o_course_run_dropbox']//a[text()='" + folderName + "']" description="drop box folder link"> - <parameter name="folderName" description="user name"/> - </xpath-ui-element> - <xpath-ui-element name="uploadFile" xpath="//a[.//text()='Upload file']" description="Link to upload a file"/> - <xpath-ui-element name="uploadFileInOverlay" xpath="//div[@class='b_window_content']//a[.//text()='Upload file']" description="the upload file in an overlay"/> - <xpath-ui-element name="returnboxDiv" xpath="//div[@class='o_course_run_returnbox']" description="returnbox div"/> - <xpath-ui-element name="returnboxFolderCheckbox" xpath="//div[@class='o_course_run_returnbox']//input[@value='" + folderName + "']" description="folder in return box"> - <parameter name="folderName" description="The name of the folder"></parameter> - </xpath-ui-element> - <xpath-ui-element name="returnBoxFolderLink" xpath="//div[@class='o_course_run_returnbox']//a[text()='" + folderName + "']" description="return box folder link"> - <parameter name="folderName" description="user name"/> - </xpath-ui-element> - </pageset> - - <pageset name="administrationOfParticipants" description="Administration of participants tab"> - <xpath-ui-element name="adminTab" xpath="//div[@class='b_tabbedpane_tabs']//a[contains(.//text(),'Administration')]" description="Administration of participants tab link"/> - <pageset name="candidates" description="candidates table"> - <xpath-ui-element name="checkUser" xpath="//fieldset[legend[contains(.//text(),'Candidates')]]//tr[./td//text()='" + userName + "']//input[@type='checkbox']" description="check candidate"> - <parameter name="userName" description="user name"/> - </xpath-ui-element> - <xpath-ui-element name="moveToParticipants" xpath="//input[@name='move.user.waitinglist']" description="Transfer as participant"/> - </pageset> - <pageset name="participants" description="participants table"> - <xpath-ui-element name="checkUser" xpath="//fieldset[legend[contains(.//text(),'Participants accepted')]]//tr[./td//text()='" + userName + "']//input[@type='checkbox']" description="check participant"> - <parameter name="userName" description="userName"/> - </xpath-ui-element> - </pageset> - <pageset name="authors" description="authors table"> - <xpath-ui-element name="checkUser" xpath="//fieldset[legend[contains(.//text(),'Topic authors')]]//tr[./td//text()='" + userName + "']//input[@type='checkbox']" description="check author"> - <parameter name="userName" description="userName"/> - </xpath-ui-element> - </pageset> - </pageset> - </pageset> - - -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/qti-pageset.xml b/src/test/profile/selenium/ui-map/qti-pageset.xml deleted file mode 100644 index f925023d252..00000000000 --- a/src/test/profile/selenium/ui-map/qti-pageset.xml +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="qti" description="Test run links"> - <xpath-ui-element name="showHideResults" xpath="//div[@class='o_course_run_scoreinfo']/..//a[@class='b_button' and descendant::text()='" + text + "']" description="Show/Hide results button on test start page"> - <parameter name="text" description="the text of button"> - <defaultValue value="Show results" /> - <defaultValue value="Hide results" /> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="menuItem" xpath="//div[@class='o_qti_menu_item']//a[@title='" + titleOfItem + "']" description="Click on qti menu item with the given title"> - <parameter name="titleOfItem" description="the title of the qti menu item"> - <defaultValue value="Single Choice" /> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="saveAnswer" xpath="//input[@value='Save answer ']" description="Click 'Save answer ' button"/> - <xpath-ui-element name="finishTest" xpath="//div[@id='o_qti_run']//a[@class='b_button'][contains(descendant::text(), 'Finish test ')]" description="Click 'Finish test' button"/> - <xpath-ui-element name="cancelTest" xpath="//div[@id='o_qti_run']//a[@class='b_button'][contains(descendant::text(), 'Cancel test ')]" description="button cancel test"/> - <xpath-ui-element name="suspendTest" xpath="//div[@id='o_qti_run']//a[@class='b_button'][contains(descendant::text(), 'Suspend test ')]" description="button suspend test"/> - <xpath-ui-element name="achievedScore" xpath="//td[contains(descendant::text(), 'Achieved score')]/../td[3]/text()" description="find the score xpath - at the end of test run - before close test"/> - <xpath-ui-element name="closeTest" xpath="//div[@id='o_qti_run']//a[@class='b_button'][contains(descendant::text(), 'Close')]" description="Click 'Close' button in test"/> - <xpath-ui-element name="yourScore" xpath="//td[contains(descendant::text(), 'Your score: ')]/../td[2]/text()" description="find the score xpath - test course node selected"/> - <xpath-ui-element name="yourStatus" xpath="//td[contains(descendant::text(), 'Status: ')]/../td[2]/span/text()" description="find the status xpath - test course node selected"/> - <xpath-ui-element name="commentFromTutor" xpath="//td[contains(descendant::text(), 'Comment')]/../td[2]/text()" description="find the status xpath - test course node selected"/> - - <xpath-ui-element name="finishQuestionnaire" xpath="//div[@id='o_qti_run']//a[@class='b_button'][contains(descendant::text(), 'Finish questionnaire')]" description="Click 'Finish questionnaire' button"/> - <xpath-ui-element name="cancelQuestionnaire" xpath="//div[@id='o_qti_run']//a[@class='b_button'][contains(descendant::text(), 'Cancel questionnaire')]" description="button cancel questionnaire"/> - <xpath-ui-element name="suspendQuestionnaire" xpath="//div[@id='o_qti_run']//a[@class='b_button'][contains(descendant::text(), 'Suspend questionnaire ')]" description="button suspend questionnaire"/> - <!-- <xpath-ui-element name="closeQuestionnaire" xpath="//div[@id='o_qti_run']//a[@class='b_button'][contains(descendant::text(), 'Close')]" description="Click 'Close' button in questionnaire"/> asa unused --> - <xpath-ui-element name="testItemFormElement" xpath="//div[@class='o_qti_item_choice']/div[@class='o_qti_item_choice_option']/div[@class='o_qti_item_choice_option_value' and .//text()='" + text + "']/../div[@class='o_qti_item_choice_option_input']/input" description="select the form element with the given text"> - <parameter name="text" description="the text of the form element"> - <defaultValue value="Antwort 1" /> - </parameter> - </xpath-ui-element> - <link-ui-element name="next" link="Next" description="The next link"/> - - <xpath-ui-element name="testKprimItemFormElementPlus" xpath="//table[@class='o_qti_item_kprim']//tr//td[descendant::text()='" + text + "']/..//td[1]/input[@class='b_radio']" - description="the text of the kprim item plus"> - <parameter name="text" description="the text of the kprim element"> - <defaultValue value="Antwort 1" /> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="testKprimItemFormElementMinus" xpath="//table[@class='o_qti_item_kprim']//tr//td[descendant::text()='" + text + "']/..//td[2]/input[@class='b_radio']" - description="the text of the kprim item minus"> - <parameter name="text" description="the text of the kprim element"> - <defaultValue value="Antwort 1" /> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="testGapItemFormElement" xpath="//div[@class='o_qti_item']//span[@class='o_qti_item_mattext' and descendant::text()='" + text + "']/following-sibling::input[1]" description="type in gap"> - <parameter name="text" description="the text that precedes the gap"> - <defaultValue value="abc" /> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="questionnaireEssayTextArea" xpath="//div[@class='o_qti_item']//textarea" description="the textarea for the essay"/> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/resources/gen_olat-ui-map.xsl b/src/test/profile/selenium/ui-map/resources/gen_olat-ui-map.xsl deleted file mode 100644 index 1e43cf15c6c..00000000000 --- a/src/test/profile/selenium/ui-map/resources/gen_olat-ui-map.xsl +++ /dev/null @@ -1,476 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<xsl:stylesheet version="2.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> - - <xsl:output method="text"/> - - <xsl:template match="ui-map"> - <xsl:text> -// -// OLAT-UI-MAP.JS -// ============== -// This file contains the mappings of xpaths/links to selenium-understood javascript which can then -// be used in Selenium IDE and Selenium RC for testing. -// -// -// Note: This file is generatd using the ui-map/gen_olat-ui-map.xsl with the actual mappings stored in -// --> ui-map/olat-ui-map.xml -// - - -// INSTALL NOTE FOR SELENIUM IDE -// ----------------------------- -// -// add the following line to Selenium IDE>Options>Options...>Selenium Core extensions (user-extensions.js): -// -// chrome://selenium-ide/content/ui-element.js, C:\eclipse\workspace\seleniumtesting\src\olat-ui-map.js - - -var myMap = new UIMap(); - -</xsl:text> - <xsl:apply-templates select="pageset"/> - </xsl:template> - - -<!-- - - -// -// -// ================== -// The main OLAT tabs -// ================== -// -// -myMap.addPageset({ - name: 'tabs' - , description: 'main OLAT tabs' - , pathRegexp: '.*' -}); - - --> - <xsl:template match="pageset"> - <xsl:if test="count(ancestor::pageset)=0"> - <xsl:if test="count(@description)=0 or @description=''"> - <xsl:message terminate="no"> - <xsl:text> - -------------------------------- -Syntax Error in olat-ui-map.xml -------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>you must specify a description! Pageset=</xsl:text> - <xsl:value-of select="@name"/> - </xsl:message> - </xsl:if> - <xsl:text> -// -// -// ====== -// PAGESET: </xsl:text> - <xsl:value-of select="@name"/> - <xsl:text> -// ====== -// -// -myMap.addPageset({ - name: '</xsl:text><xsl:value-of select="@name"/><xsl:text>' -</xsl:text> - <xsl:if test="@description"> - <xsl:text> , description: "</xsl:text> - <xsl:value-of select="@description"/> - <xsl:text>" -</xsl:text> - </xsl:if> - <xsl:text> , pathRegexp: '.*' -}); - -</xsl:text> - - </xsl:if> - <xsl:apply-templates select="pageset"/> - <xsl:apply-templates select="xpath-ui-element"/> - <xsl:apply-templates select="link-ui-element"/> - <xsl:apply-templates select="var-link-ui-element"/> - </xsl:template> - -<!-- - -// ADMINISTRATION -myMap.addElement('tabs', { - name: 'administration' - , description: 'main tab "Administration"' - , xpath: "//a[span/text()='Administration']" - , testcase1: { - xhtml: '<a expected-result="1"><span>Administration</span></a>' - } -}); - - --> -<!-- - -// CLOSE AN OPENED COURSE -myMap.addElement('tabs', { - name: 'closeCourse' - , description: 'close a course' - , args: [ - { - name: 'nameOfCourse' - , description: 'the name of the course' - , defaultValues: [ 'Demo Course', 'Demo course wiki' ] - } - ] - , getLocator: function(args) { - var nameOfCourse = args['nameOfCourse']; - return "//a[contains(@class, 'b_nav_tab_close') and ../..//@title='"+nameOfCourse+"']"; - } -}); - - - --> - <xsl:template match="xpath-ui-element"> - <xsl:variable name="name"> - <xsl:for-each select="ancestor::pageset[count(ancestor::pageset)!=0]"> - <xsl:value-of select="@name"/> - <xsl:text>_</xsl:text> - </xsl:for-each> - <xsl:value-of select="@name"/> - </xsl:variable> - <xsl:if test="count(@description)=0 or @description=''"> - <xsl:message terminate="no"> - <xsl:text> - -------------------------------- -Syntax Error in olat-ui-map.xml -------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>you must specify a description! Element=</xsl:text> - <xsl:value-of select="ancestor-or-self::pageset[count(ancestor::pageset)=0]/@name"/> - <xsl:text>::</xsl:text> - <xsl:value-of select="$name"/> - </xsl:message> - </xsl:if> - <!-- a newline first --> - <xsl:text> -</xsl:text> - - <!-- // USERNAME input field --> - <xsl:if test="@description"> - <xsl:text>// </xsl:text> - <xsl:value-of select="@description"/> - <xsl:text> -</xsl:text> - </xsl:if> - - <!-- myMap.addElement('dialog', { --> - <xsl:text>myMap.addElement('</xsl:text> - <xsl:value-of select="ancestor-or-self::pageset[count(ancestor::pageset)=0]/@name"/> - <xsl:text>', { -</xsl:text> - - <!-- name: 'OK' --> - <xsl:text> name: '</xsl:text> - <xsl:value-of select="$name"/> - <xsl:text>' -</xsl:text> - - <!-- , description: 'OK Button in Dialog Popup Window' --> - <xsl:if test="@description"> - <xsl:text> , description: "</xsl:text> - <xsl:value-of select="@description"/> - <xsl:text>" -</xsl:text> - </xsl:if> - - <xsl:choose> - <xsl:when test="count(parameter)>0"> -<!-- - , args: [ - { - name: 'nameOfCourse' - , description: 'the name of the course' - , defaultValues: [ 'Demo Course', 'Demo course wiki' ] - } - ] - , getLocator: function(args) { - var nameOfCourse = args['nameOfCourse']; - return "//a[contains(@class, 'b_nav_tab_close') and ../..//@title='"+nameOfCourse+"']"; - } - --> - <xsl:text> , args: [ - {</xsl:text> - <xsl:for-each select="parameter"> - <xsl:text> - name: '</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>' - , defaultValues: [ </xsl:text> - <xsl:if test="count(defaultValue)=0"> - <xsl:text> "Foo", "Bar" </xsl:text> - </xsl:if> - <xsl:for-each select="defaultValue"> - <xsl:if test="position()!=1"> - <xsl:text>, </xsl:text> - </xsl:if> - <xsl:text>"</xsl:text> - <xsl:value-of select="@value"/> - <xsl:text>"</xsl:text> - </xsl:for-each> - <xsl:text> ] -</xsl:text> - <xsl:if test="@description"> - <xsl:text> , description: "</xsl:text> - <xsl:value-of select="@description"/> - <xsl:text>" -</xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text> } - ] - , getLocator: function(args) { -</xsl:text> - <!-- var nameOfCourse = args['nameOfCourse']; - --> - <xsl:for-each select="parameter"> - <xsl:text> var </xsl:text> - <xsl:value-of select="@name"/> - <xsl:text> = args['</xsl:text> - <xsl:value-of select="@name"/> - <xsl:text>']; -</xsl:text> - </xsl:for-each> - - <!-- return "//a[contains(@class, 'b_nav_tab_close') and ../..//@title='"+nameOfCourse+"']"; - --> - <xsl:text> return "</xsl:text> - <xsl:value-of select="@xpath"/> - <xsl:text>"; - } -}); -</xsl:text> - </xsl:when> - <xsl:otherwise> - <!-- , xpath: '//div[contains(@class, "x-window")]//button[text()="OK"]' --> - <xsl:text> , xpath: "</xsl:text> - <xsl:value-of select="@xpath"/> - <xsl:text>" -}); -</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - - -<!-- - -// ADMINISTRATION -myMap.addElement('tabs', { - name: 'administration' - , description: 'main tab "Administration"' - , xpath: "//a[span/text()='Administration']" - , testcase1: { - xhtml: '<a expected-result="1"><span>Administration</span></a>' - } -}); - - --> - <xsl:template match="link-ui-element"> - <xsl:variable name="name"> - <xsl:for-each select="ancestor::pageset[count(ancestor::pageset)!=0]"> - <xsl:value-of select="@name"/> - <xsl:text>_</xsl:text> - </xsl:for-each> - <xsl:value-of select="@name"/> - </xsl:variable> - <xsl:if test="count(@description)=0 or @description=''"> - <xsl:message terminate="no"> - <xsl:text> - -------------------------------- -Syntax Error in olat-ui-map.xml -------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>you must specify a description! Element=</xsl:text> - <xsl:value-of select="ancestor-or-self::pageset[count(ancestor::pageset)=0]/@name"/> - <xsl:text>::</xsl:text> - <xsl:value-of select="$name"/> - </xsl:message> - </xsl:if> - <!-- a newline first --> - <xsl:text> -</xsl:text> - - <!-- // USERNAME input field --> - <xsl:if test="@description"> - <xsl:text>// </xsl:text> - <xsl:value-of select="@description"/> - <xsl:text> -</xsl:text> - </xsl:if> - - <!-- myMap.addElement('dialog', { --> - <xsl:text>myMap.addElement('</xsl:text> - <xsl:value-of select="ancestor-or-self::pageset[count(ancestor::pageset)=0]/@name"/> - <xsl:text>', { -</xsl:text> - - <!-- name: 'OK' --> - <xsl:text> name: '</xsl:text> - <xsl:value-of select="$name"/> - <xsl:text>' -</xsl:text> - - <!-- , description: 'OK Button in Dialog Popup Window' --> - <xsl:if test="@description"> - <xsl:text> , description: "</xsl:text> - <xsl:value-of select="@description"/> - <xsl:text>" -</xsl:text> - </xsl:if> - - <!-- , xpath: '//a[.//text()="Close detailed view"]' --> - <xsl:text> , xpath: "//a[.//text()='</xsl:text> - <xsl:value-of select="@link"/> - <xsl:text>']" -}); -</xsl:text> - </xsl:template> - - -<!-- - -// CLOSE AN OPENED COURSE -myMap.addElement('tabs', { - name: 'closeCourse' - , description: 'close a course' - , args: [ - { - name: 'nameOfCourse' - , description: 'the name of the course' - , defaultValues: [ 'Demo Course', 'Demo course wiki' ] - } - ] - , getLocator: function(args) { - var nameOfCourse = args['nameOfCourse']; - return "//a[contains(@class, 'b_nav_tab_close') and ../..//@title='"+nameOfCourse+"']"; - } -}); - - - --> - <xsl:template match="var-link-ui-element"> - <xsl:variable name="name"> - <xsl:for-each select="ancestor::pageset[count(ancestor::pageset)!=0]"> - <xsl:value-of select="@name"/> - <xsl:text>_</xsl:text> - </xsl:for-each> - <xsl:value-of select="@name"/> - </xsl:variable> - <xsl:if test="count(@description)=0 or @description=''"> - <xsl:message terminate="no"> - <xsl:text> - -------------------------------- -Syntax Error in olat-ui-map.xml -------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>you must specify a description! Element=</xsl:text> - <xsl:value-of select="ancestor-or-self::pageset[count(ancestor::pageset)=0]/@name"/> - <xsl:text>::</xsl:text> - <xsl:value-of select="$name"/> - </xsl:message> - </xsl:if> - <!-- a newline first --> - <xsl:text> -</xsl:text> - - <!-- // USERNAME input field --> - <xsl:if test="@description"> - <xsl:text>// </xsl:text> - <xsl:value-of select="@description"/> - <xsl:text> -</xsl:text> - </xsl:if> - - <!-- myMap.addElement('dialog', { --> - <xsl:text>myMap.addElement('</xsl:text> - <xsl:value-of select="ancestor-or-self::pageset[count(ancestor::pageset)=0]/@name"/> - <xsl:text>', { -</xsl:text> - - <!-- name: 'OK' --> - <xsl:text> name: '</xsl:text> - <xsl:value-of select="$name"/> - <xsl:text>' -</xsl:text> - - <!-- , description: 'OK Button in Dialog Popup Window' --> - <xsl:if test="@description"> - <xsl:text> , description: "</xsl:text> - <xsl:value-of select="@description"/> - <xsl:text>" -</xsl:text> - </xsl:if> - -<!-- - , args: [ - { - name: 'nameOfCourse' - , description: 'the name of the course' - , defaultValues: [ 'Demo Course', 'Demo course wiki' ] - } - ] - , getLocator: function(args) { - var nameOfCourse = args['nameOfCourse']; - return "//a[contains(@class, 'b_nav_tab_close') and ../..//@title='"+nameOfCourse+"']"; - } - --> - <xsl:text> , args: [ - {</xsl:text> - <xsl:text> - name: '</xsl:text> - <xsl:value-of select="@linkparam"/> - <xsl:text>' - , defaultValues: [ "none" ] - , description: "the link parameter" - } - ] - , getLocator: function(args) { -</xsl:text> - <!-- var nameOfCourse = args['nameOfCourse']; - --> - <xsl:text> var linkparam = args['</xsl:text> - <xsl:value-of select="@linkparam"/> - <xsl:text>']; -</xsl:text> - - <!-- return "//a[contains(@class, 'b_nav_tab_close') and ../..//@title='"+nameOfCourse+"']"; - --> - <xsl:text> return "link="+linkparam; - } -}); -</xsl:text> - </xsl:template> - - -</xsl:stylesheet> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/resources/gen_selenium-map-tests.xsl b/src/test/profile/selenium/ui-map/resources/gen_selenium-map-tests.xsl deleted file mode 100644 index 6910acc061b..00000000000 --- a/src/test/profile/selenium/ui-map/resources/gen_selenium-map-tests.xsl +++ /dev/null @@ -1,694 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<xsl:stylesheet version="2.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> - - <xsl:param name="mode"/> - <xsl:output method="text"/> - - <xsl:template match="ui-map"> - <xsl:choose> - <xsl:when test="$mode='fast'"> - <xsl:call-template name="fastmode"/> - </xsl:when> - <xsl:when test="$mode='slow'"> - <xsl:apply-templates select="pageset"/> - </xsl:when> - <xsl:otherwise> - <xsl:message terminate="no"> - <xsl:text> - --------------------------------- -Error in seleniumtests/build.xml --------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>Must set parameter $mode to 'slow' or 'fast' when calling gen_selenium-map-tests.xsl! Shame on you!</xsl:text> - </xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template name="fastmode"> - <xsl:variable name="testclassname" select="'GenerateFastdOlatMapTest'"/> - <xsl:variable name="testmethodname" select="'generatedOlatMapTest'"/> - <xsl:variable name="filename" select="concat($testclassname, '.java')"/> - <xsl:result-document href="{$filename}"> - <xsl:text> -package org.olat.test.generated; - -import org.olat.test.util.selenium.OlatLoginHelper; -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -@Test(groups = {"generated"}) -/** - * This test was generated from the olat-ui-map.xml by gen_selenium-map-tests.xsl. - * - * This variant is the result of mode=fast in which everything happens within the - * same browser to speed up things considerably. every testcase does a logout at the - * end. the downside of this approach is, when something fails, it stops the test - * and you don't see any results of the subsequent tests. - * - * Therefore you probably want to run in mode=slow until everything is fixed, - * then you want to switch to mode=fast until something breaks again. - * - * Happy Selenium-Map-Testing, Mate! - **/ -public class </xsl:text> - <xsl:value-of select="$testclassname"/> - <xsl:text> extends BaseSeleneseTestCase { - - @Test - public void test_</xsl:text> - <xsl:value-of select="$testmethodname"/> - <xsl:text>() throws Exception { -</xsl:text> - - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - selenium = context.createSeleniumAndLogin(); - - <xsl:apply-templates select="pageset"/> - <xsl:text> - } - -} -</xsl:text> - - </xsl:result-document> - </xsl:template> - - <xsl:template match="pageset"> - <xsl:apply-templates select="pageset"/> - <xsl:apply-templates select="xpath-ui-element"/> - <xsl:apply-templates select="link-ui-element"/> - <xsl:apply-templates select="var-link-ui-element"/> - </xsl:template> - - <xsl:template match="xpath-ui-element"> - <xsl:call-template name="ui-element"/> - </xsl:template> - - <xsl:template match="link-ui-element"> - <xsl:call-template name="ui-element"/> - </xsl:template> - - <xsl:template match="var-link-ui-element"> - <xsl:call-template name="ui-element"/> - </xsl:template> - - <!-- this template creates the actual test class for the ui-element at which we're at --> - <xsl:template name="ui-element"> - <xsl:variable name="fullUiElementName"> - <xsl:value-of select="ancestor-or-self::pageset[count(ancestor::pageset)=0]/@name"/> - <xsl:text>_</xsl:text> - <xsl:for-each select="ancestor::pageset[count(ancestor::pageset)!=0]"> - <xsl:value-of select="@name"/> - <xsl:text>_</xsl:text> - </xsl:for-each> - <xsl:value-of select="@name"/> - </xsl:variable> - <xsl:variable name="fullUiElementName_SeleniumSyntax"> - <xsl:value-of select="ancestor-or-self::pageset[count(ancestor::pageset)=0]/@name"/> - <xsl:text>::</xsl:text> - <xsl:for-each select="ancestor::pageset[count(ancestor::pageset)!=0]"> - <xsl:value-of select="@name"/> - <xsl:text>_</xsl:text> - </xsl:for-each> - <xsl:value-of select="@name"/> - </xsl:variable> - - <xsl:variable name="defaultTestCaseDef" select="../default-testcase"/> - - <xsl:choose> - <!-- this ui-element explicitly has testcase="" set, meaning that we dont generate a testcase here --> - <xsl:when test="@testcase and @testcase=''"> - <!-- nothing --> - </xsl:when> - - <!-- this ui-element has its own testcase defined, so use this one --> - <xsl:when test="@testcase and @testcase!=''"> - <xsl:call-template name="gen-testcase"> - <xsl:with-param name="testcase" select="@testcase"/> - <xsl:with-param name="fullUiElementName" select="$fullUiElementName"/> - </xsl:call-template> - </xsl:when> - - <!-- this ui-element doesn't have its own testcase defined. take the nearest <default-testcase/> --> - <xsl:when test="count($defaultTestCaseDef)=1"> - <xsl:if test="not($defaultTestCaseDef/@testcase) or $defaultTestCaseDef/@testcase='' or not($defaultTestCaseDef/@final-command) or $defaultTestCaseDef/@final-command=''"> - <xsl:message terminate="no"> - <xsl:text> - -------------------------------- -Syntax Error in olat-ui-map.xml -------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>a default-testcase is not properly configured (testcase or final-command missing). </xsl:text> - <xsl:value-of select="$fullUiElementName"/> - </xsl:message> - </xsl:if> - - <xsl:choose> - <xsl:when test="contains($defaultTestCaseDef/@final-command, '(') and contains($defaultTestCaseDef/@final-command, ')')"> - <!-- special case: the final-command contains (foobar) --> - <!-- convert that into: final-command(ui-elemen,foobar) --> - <xsl:variable name="rawFinalCommand" select="substring-before($defaultTestCaseDef/@final-command, '(')"/> - <xsl:variable name="secondFuncParam" select="substring-before(substring-after($defaultTestCaseDef/@final-command, '('), ')')"/> - <xsl:if test="$secondFuncParam=''"> - <xsl:message terminate="no"> - <xsl:text> - -------------------------------- -Syntax Error in olat-ui-map.xml -------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>a default-testcase is not properly configured (final-command must not contain () but no params. either (param) or without brackets in the first place). </xsl:text> - <xsl:value-of select="$fullUiElementName"/> - </xsl:message> - </xsl:if> - <xsl:call-template name="gen-testcase"> - <xsl:with-param name="testcase" select="concat($defaultTestCaseDef/@testcase, '/', $rawFinalCommand, '(', $fullUiElementName_SeleniumSyntax,',',$secondFuncParam,')')"/> - <xsl:with-param name="fullUiElementName" select="$fullUiElementName"/> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <!-- this is the normal case: the final-command does not contain () --> - <xsl:call-template name="gen-testcase"> - <xsl:with-param name="testcase" select="concat($defaultTestCaseDef/@testcase, '/', $defaultTestCaseDef/@final-command, '(', $fullUiElementName_SeleniumSyntax,')')"/> - <xsl:with-param name="fullUiElementName" select="$fullUiElementName"/> - </xsl:call-template> - </xsl:otherwise> - </xsl:choose> - - </xsl:when> - - <xsl:otherwise> - <!-- nothing else yet... allow ui-elements without testcase for now... we might want to restrict this and issue a warn here later --> - - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template name="gen-testcase"> - <xsl:param name="testcase"/> - <xsl:param name="fullUiElementName"/> - - <xsl:text> - -// Testcase: </xsl:text> - <xsl:value-of select="$testcase"/> - <xsl:text> -// FullUiElementName: </xsl:text> - <xsl:value-of select="$fullUiElementName"/> - - <xsl:variable name="testclassname" select="concat('GeneratedOlatMapTest_', $fullUiElementName)"/> - <xsl:variable name="testmethodname" select="concat('generatedOlatMapTest_', $fullUiElementName)"/> - <xsl:variable name="filename" select="concat($testclassname, '.java')"/> - - <xsl:choose> - <xsl:when test="$mode='slow'"> - <xsl:result-document href="{$filename}"> - <xsl:text> -package org.olat.test.generated; - -import org.olat.test.util.selenium.BaseSeleneseTestCase; -import org.olat.test.util.setup.SetupType; -import org.olat.test.util.setup.context.Context; -import org.testng.annotations.Test; - -@Test(groups = {"generated"}) -/** - * This test was generated from the olat-ui-map.xml by gen_selenium-map-tests.xsl. - * - * It's testing the ui-element: </xsl:text><xsl:value-of select="$fullUiElementName"/><xsl:text>. - * - * The testcase is generated from this string: </xsl:text><xsl:value-of select="$testcase"/><xsl:text>. - **/ -public class </xsl:text> - <xsl:value-of select="$testclassname"/> - <xsl:text> extends BaseSeleneseTestCase { - - @Test - public void test_</xsl:text> - <xsl:value-of select="$testmethodname"/> - <xsl:text>() throws Exception { -</xsl:text> - <xsl:call-template name="code-for-expression"> - <xsl:with-param name="expr" select="$testcase"/> - </xsl:call-template> - <xsl:text> - } - -} -</xsl:text> - </xsl:result-document> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="code-for-expression"> - <xsl:with-param name="expr" select="$testcase"/> - </xsl:call-template> - - <xsl:text> - - // Cleanup at the end of an individual link-test - if (selenium.isElementPresent("ui=tabs::logOut()")) { - System.out.println("[CLEANUP] Clicking logOut now..."); - selenium.click("ui=tabs::logOut()"); - selenium.waitForPageToLoad("30000"); - System.out.println("[CLEANUP] Done with logOut."); - } else if (!"OLAT - Online Learning And Training".equals(selenium.getTitle())) { - System.out.println("[CLEANUP] Can't click logOut, there is no logOut link available..."); - // emergency - System.out.println("[CLEANUP] EMERGENCY HERE: opening the original url again: "+context.getStandardAdminOlatLoginInfos().getFullOlatServerUrl()); - selenium.open(context.getStandardAdminOlatLoginInfos().getFullOlatServerUrl()); - System.out.println("[CLEANUP] Did that, now let's wait a few sec... like 5 or so should be fine"); - Thread.sleep(5000); - } - System.out.println("[CLEANUP] Title now: "+selenium.getTitle()); - assertEquals("We're now in DMZ - did the logOut now work?", "OLAT - Online Learning And Training", selenium.getTitle()); - // Done with Cleanup - -</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template name="code-for-expression"> - <xsl:param name="expr"/> - - <xsl:choose> - <xsl:when test="contains($expr, '/')"> - <xsl:variable name="step" select="substring-before($expr, '/')"/> - <xsl:call-template name="code-for-expression"> - <xsl:with-param name="expr" select="$step"/> - </xsl:call-template> - <xsl:variable name="remainder" select="substring-after($expr, '/')"/> - <xsl:call-template name="code-for-expression"> - <xsl:with-param name="expr" select="$remainder"/> - </xsl:call-template> - </xsl:when> - <xsl:when test="$expr=''"> - <!-- do nothing --> - </xsl:when> - - <xsl:otherwise> - <xsl:choose> - <xsl:when test="(not(contains($expr, '(')) and contains($expr, '::'))"> - <!-- then it's a selenium clickAndWait command --> - <xsl:text> - // Step-Start: selenium.clickAndWait("</xsl:text> - <xsl:value-of select="$expr"/> - <xsl:text>()"); -</xsl:text> - <xsl:text> selenium.click("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="$expr"/> - </xsl:call-template> - <xsl:text>"); - selenium.waitForPageToLoad("30000"); - // Step-End -</xsl:text> - </xsl:when> - <xsl:when test="(contains(substring-before($expr, '('), '::'))"> - <!-- then it's a selenium clickAndWait command --> - <xsl:text> - // Step-Start: selenium.clickAndWait("</xsl:text> - <xsl:value-of select="$expr"/> - <xsl:text>"); -</xsl:text> - <xsl:text> selenium.click("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="$expr"/> - </xsl:call-template> - <xsl:text>"); - selenium.waitForPageToLoad("30000"); - // Step-End -</xsl:text> - </xsl:when> - <xsl:when test="contains($expr, '(')"> - <!-- then it's a direct selenium command --> - <xsl:text> - // Step-Start: selenium.</xsl:text> - <xsl:value-of select="$expr"/> - <xsl:text> -</xsl:text> - <xsl:call-template name="expandDirectSeleniumCommand"> - <xsl:with-param name="expr" select="$expr"/> - <xsl:with-param name="node" select="."/> - </xsl:call-template> - <xsl:text> // Step-End -</xsl:text> - </xsl:when> - <xsl:otherwise> - <!-- then it's a macro call --> - <xsl:call-template name="resolveMacro"> - <xsl:with-param name="macro" select="$expr"/> - <xsl:with-param name="node" select="."/> - </xsl:call-template> - </xsl:otherwise> - </xsl:choose> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template name="expandDirectSeleniumCommand"> - <xsl:param name="expr"/> - <xsl:param name="node"/> - <xsl:choose> - <xsl:when test="starts-with($expr, 'type(') and ends-with($expr, ')')"> - <!-- type(dmz::username,foo) --> - <!-- selenium.type("ui=dmz::username()", username); --> - <xsl:text> selenium.type("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="substring-before(substring-after($expr, 'type('),',')"/> - </xsl:call-template> - <xsl:text>", "</xsl:text> - <xsl:value-of select="substring-before(substring-after($expr, ','),')')"/> - <xsl:text>"); -</xsl:text> - </xsl:when> - <xsl:when test="starts-with($expr, 'click(') and ends-with($expr, ')')"> - <!-- clickAndWait(dmz::login) --> - <!-- selenium.click("ui=tabs::learningResources()"); --> - <!-- selenium.waitForPageToLoad("30000"); --> - <xsl:text> selenium.click("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="substring-before(substring-after($expr, 'click('),')')"/> - </xsl:call-template> - <xsl:text>"); -</xsl:text> - </xsl:when> - <xsl:when test="starts-with($expr, 'check(') and ends-with($expr, ')')"> - <!-- clickAndWait(dmz::login) --> - <!-- selenium.click("ui=tabs::learningResources()"); --> - <!-- selenium.waitForPageToLoad("30000"); --> - <xsl:text> selenium.check("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="substring-before(substring-after($expr, 'check('),')')"/> - </xsl:call-template> - <xsl:text>"); -</xsl:text> - </xsl:when> - <xsl:when test="starts-with($expr, 'clickAndWait(') and ends-with($expr, ')')"> - <!-- clickAndWait(dmz::login) --> - <!-- selenium.click("ui=tabs::learningResources()"); --> - <!-- selenium.waitForPageToLoad("30000"); --> - <xsl:text> selenium.click("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="substring-before(substring-after($expr, 'clickAndWait('),')')"/> - </xsl:call-template> - <xsl:text>"); - selenium.waitForPageToLoad("30000"); -</xsl:text> - </xsl:when> - <xsl:when test="starts-with($expr, 'select(') and ends-with($expr, ')')"> - <!-- select(dmz::language,English) --> - <!-- selenium.select("ui=dmz::language()", "English"); --> - <xsl:text> selenium.select("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="substring-before(substring-after($expr, 'select('),',')"/> - </xsl:call-template> - <xsl:text>", "</xsl:text> - <xsl:value-of select="substring-before(substring-after($expr, ','),')')"/> - <xsl:text>"); -</xsl:text> - </xsl:when> - - <xsl:otherwise> - <xsl:message terminate="no"> - <xsl:text> - -------------------------------- -Syntax Error in olat-ui-map.xml -------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>Selenium-Shortcut not defined in gen_selenium-map.test.xsl: </xsl:text> - <xsl:value-of select="$expr"/> - <xsl:text> in element=</xsl:text> - <xsl:value-of select="name($node)"/> - <xsl:for-each select="$node/@*"> - <xsl:text> attribute: </xsl:text> - <xsl:value-of select="name()"/> - <xsl:text>=</xsl:text> - <xsl:value-of select="."/> - </xsl:for-each> - </xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template name="resolveMacro"> - <xsl:param name="macro"/> - <xsl:param name="node"/> - - <xsl:text> - // Step-Start: MACRO: </xsl:text> - <xsl:value-of select="$macro"/> - - <xsl:choose> - <xsl:when test="$macro='adminlogin'"> - <xsl:call-template name="macroAdminLogin"/> - </xsl:when> - <xsl:when test="$macro='adminloginDeutsch'"> - <xsl:call-template name="macroAdminLoginDeutsch"/> - </xsl:when> - <xsl:when test="$macro='dmz'"> - <xsl:call-template name="macroDmz"/> - </xsl:when> - <xsl:otherwise> - - <xsl:variable name="macrodef" select="$node/ancestor::*[testcase-macro/@name=$macro][1]/testcase-macro[@name=$macro]"/> - - <xsl:if test="count($macrodef)=0"> - <xsl:message terminate="no"> - <xsl:text> - -------------------------------- -Syntax Error in olat-ui-map.xml -------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>Macro not defined: </xsl:text> - <xsl:value-of select="$macro"/> - <xsl:text> in scope of: element=</xsl:text> - <xsl:value-of select="name($node)"/> - <xsl:for-each select="$node/@*"> - <xsl:text> attribute: </xsl:text> - <xsl:value-of select="name()"/> - <xsl:text>=</xsl:text> - <xsl:value-of select="."/> - </xsl:for-each> - </xsl:message> - </xsl:if> - - <xsl:for-each select="$macrodef"> - <xsl:if test="count(child::*)=0"> - <xsl:text> // (!!EMPTY MACRO!!) -</xsl:text> - </xsl:if> - <xsl:for-each select="child::*"> - <xsl:choose> - <xsl:when test="name()='selenium'"> - <xsl:call-template name="macro-step-selenium"/> - </xsl:when> - <xsl:when test="name()='call-macro' and @name=$macro"> - <xsl:call-template name="resolveMacro"> - <xsl:with-param name="macro" select="@name"/> - <xsl:with-param name="node" select="$node/.."/> - </xsl:call-template> - </xsl:when> - <xsl:when test="name()='call-macro' and @name!=$macro"> - <xsl:call-template name="resolveMacro"> - <xsl:with-param name="macro" select="@name"/> - <xsl:with-param name="node" select="$node"/> - </xsl:call-template> - </xsl:when> - </xsl:choose> - </xsl:for-each> - </xsl:for-each> - </xsl:otherwise> - </xsl:choose> - <xsl:text> // Step-End -</xsl:text> - - </xsl:template> - - <xsl:template name="macro-step-selenium"> - - <xsl:text> - // Step-Start: SELENIUM: </xsl:text> - - - <xsl:text>command=</xsl:text> - <xsl:value-of select="@command"/> - - <xsl:text>, target=</xsl:text> - <xsl:value-of select="@target"/> - - <xsl:text>, value=</xsl:text> - <xsl:value-of select="@value"/> - - <xsl:text> -</xsl:text> - - <xsl:choose> - <xsl:when test="@command='click'"> - <xsl:text> selenium.click("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="@target"/> - </xsl:call-template> - <xsl:text>"); -</xsl:text> - </xsl:when> - <xsl:when test="@command='clickAndWait'"> - <xsl:text> selenium.click("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="@target"/> - </xsl:call-template> - <xsl:text>"); - selenium.waitForPageToLoad("30000"); -</xsl:text> - </xsl:when> - <xsl:when test="@command='type'"> - <xsl:text> selenium.type("</xsl:text> - <xsl:call-template name="normalizeUiElement"> - <xsl:with-param name="uielement" select="@target"/> - </xsl:call-template> - <xsl:text>","</xsl:text> - <xsl:value-of select="@value"/> - <xsl:text>"); -</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:message terminate="no"> - <xsl:text> - ----------------------------------------------------------------- -Missing API in gen_selenium-map-tests.xsl used by olatui-map.xml ----------------------------------------------------------------- - - -</xsl:text> - </xsl:message> - <xsl:message terminate="yes"> - <xsl:text>selenium command not yet defined for translation: </xsl:text> - <xsl:value-of select="@command"/> - <xsl:text> called with target=</xsl:text> - <xsl:value-of select="@target"/> - </xsl:message> - </xsl:otherwise> - </xsl:choose> - - </xsl:template> - - <xsl:template name="normalizeUiElement"> - <xsl:param name="uielement"/> - <xsl:choose> - <xsl:when test="not(contains($uielement, '::'))"> - <xsl:value-of select="$uielement"/> - </xsl:when> - <xsl:when test="starts-with($uielement, 'ui=') and ends-with($uielement, ')')"> - <xsl:value-of select="$uielement"/> - </xsl:when> - <xsl:when test="not(starts-with($uielement, 'ui=')) and ends-with($uielement, ')')"> - <xsl:text>ui=</xsl:text> - <xsl:value-of select="$uielement"/> - </xsl:when> - <xsl:when test="starts-with($uielement, 'ui=') and not(ends-with($uielement, ')'))"> - <xsl:value-of select="$uielement"/> - <xsl:text>()</xsl:text> - </xsl:when> - <xsl:when test="not(starts-with($uielement, 'ui=')) and not(ends-with($uielement, ')'))"> - <xsl:text>ui=</xsl:text> - <xsl:value-of select="$uielement"/> - <xsl:text>()</xsl:text> - </xsl:when> - </xsl:choose> - </xsl:template> - - <xsl:template name="macroAdminLogin"> - <!-- system macro --> - <xsl:choose> - <xsl:when test="$mode='slow'"> - <xsl:text> - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - selenium = context.createSeleniumAndLogin(); - assertEquals("OLAT - Home", selenium.getTitle()); -</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text> - OlatLoginHelper.olatLogin(selenium, context.getStandardAdminOlatLoginInfos()); - assertEquals("OLAT - Home", selenium.getTitle()); -</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template name="macroAdminLoginDeutsch"> - <!-- system macro --> - <xsl:choose> - <xsl:when test="$mode='slow'"> - <xsl:text> - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - OlatLoginInfos loginInfos = context.getStandardAdminOlatLoginInfos(); - loginInfos.setLanguage("Deutsch"); - selenium = context.createSeleniumAndLogin(loginInfos); - assertEquals("OLAT - Home", selenium.getTitle()); -</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text> - OlatLoginInfos loginInfos = context.getStandardAdminOlatLoginInfos(); - loginInfos.setLanguage("Deutsch"); - OlatLoginHelper.olatLogin(selenium, loginInfos); - assertEquals("OLAT - Home", selenium.getTitle()); -</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template name="macroDmz"> - <!-- system macro --> - <xsl:choose> - <xsl:when test="$mode='slow'"> - <xsl:text> - Context context = Context.setupContext(getFullName(), SetupType.SINGLE_VM); - selenium = context.createSelenium(); - assertEquals("OLAT - Online Learning And Training", selenium.getTitle()); -</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text> - if (selenium.isElementPresent("ui=tabs::logOut()")) { - selenium.click("ui=tabs::logOut()"); - selenium.waitForPageToLoad("30000"); - } - assertEquals("OLAT - Online Learning And Training", selenium.getTitle()); -</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/resources/olat-ui-map-include.dtd b/src/test/profile/selenium/ui-map/resources/olat-ui-map-include.dtd deleted file mode 100644 index 6b09e3bbcf4..00000000000 --- a/src/test/profile/selenium/ui-map/resources/olat-ui-map-include.dtd +++ /dev/null @@ -1,72 +0,0 @@ -<!-- - The document root. The root is a simple <ui-map> element ---> - -<!ELEMENT ui-map-include (pageset*|testcase-macro*|include*)+> - -<!ELEMENT include EMPTY> - -<!ATTLIST include - file CDATA #REQUIRED> - -<!ELEMENT pageset (pageset*|default-testcase*|testcase-macro*|xpath-ui-element*|link-ui-element*|var-link-ui-element*)*> - -<!ATTLIST pageset - name CDATA #REQUIRED - description CDATA #REQUIRED> - -<!ELEMENT default-testcase EMPTY> - -<!ATTLIST default-testcase - testcase CDATA #REQUIRED - final-command CDATA #REQUIRED> - -<!ELEMENT testcase-macro (call-macro*|selenium*)+> - -<!ATTLIST testcase-macro - name CDATA #REQUIRED> - -<!ELEMENT call-macro EMPTY> - -<!ATTLIST call-macro - name CDATA #REQUIRED> - -<!ELEMENT selenium EMPTY> - -<!ATTLIST selenium - command CDATA #REQUIRED - target CDATA #REQUIRED - value CDATA #IMPLIED> - -<!ELEMENT xpath-ui-element (parameter*)> - -<!ATTLIST xpath-ui-element - xpath CDATA #REQUIRED - name CDATA #REQUIRED - description CDATA #REQUIRED - testcase CDATA #IMPLIED> - -<!ELEMENT link-ui-element EMPTY> - -<!ATTLIST link-ui-element - link CDATA #REQUIRED - name CDATA #REQUIRED - description CDATA #REQUIRED> - -<!ELEMENT var-link-ui-element EMPTY> - -<!ATTLIST var-link-ui-element - name CDATA #REQUIRED - linkparam CDATA #REQUIRED - description CDATA #REQUIRED> - -<!ELEMENT parameter (defaultValue*)> - -<!ATTLIST parameter - name CDATA #REQUIRED - description CDATA #REQUIRED> - -<!ELEMENT defaultValue EMPTY> - -<!ATTLIST defaultValue - value CDATA #REQUIRED> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/resources/olat-ui-map.dtd b/src/test/profile/selenium/ui-map/resources/olat-ui-map.dtd deleted file mode 100644 index 56da9b0ffa5..00000000000 --- a/src/test/profile/selenium/ui-map/resources/olat-ui-map.dtd +++ /dev/null @@ -1,72 +0,0 @@ -<!-- - The document root. The root is a simple <ui-map> element ---> - -<!ELEMENT ui-map (pageset*|testcase-macro*|include*)+> - -<!ELEMENT include EMPTY> - -<!ATTLIST include - file CDATA #REQUIRED> - -<!ELEMENT pageset (pageset*|default-testcase*|testcase-macro*|xpath-ui-element*|link-ui-element*|var-link-ui-element*)*> - -<!ATTLIST pageset - name CDATA #REQUIRED - description CDATA #REQUIRED> - -<!ELEMENT default-testcase EMPTY> - -<!ATTLIST default-testcase - testcase CDATA #REQUIRED - final-command CDATA #REQUIRED> - -<!ELEMENT testcase-macro (call-macro*|selenium*)+> - -<!ATTLIST testcase-macro - name CDATA #REQUIRED> - -<!ELEMENT call-macro EMPTY> - -<!ATTLIST call-macro - name CDATA #REQUIRED> - -<!ELEMENT selenium EMPTY> - -<!ATTLIST selenium - command CDATA #REQUIRED - target CDATA #REQUIRED - value CDATA #IMPLIED> - -<!ELEMENT xpath-ui-element (parameter*)> - -<!ATTLIST xpath-ui-element - xpath CDATA #REQUIRED - name CDATA #REQUIRED - description CDATA #REQUIRED - testcase CDATA #IMPLIED> - -<!ELEMENT link-ui-element EMPTY> - -<!ATTLIST link-ui-element - link CDATA #REQUIRED - name CDATA #REQUIRED - description CDATA #REQUIRED> - -<!ELEMENT var-link-ui-element EMPTY> - -<!ATTLIST var-link-ui-element - name CDATA #REQUIRED - linkparam CDATA #REQUIRED - description CDATA #REQUIRED> - -<!ELEMENT parameter (defaultValue*)> - -<!ATTLIST parameter - name CDATA #REQUIRED - description CDATA #REQUIRED> - -<!ELEMENT defaultValue EMPTY> - -<!ATTLIST defaultValue - value CDATA #REQUIRED> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/resources/resolve_includes.xsl b/src/test/profile/selenium/ui-map/resources/resolve_includes.xsl deleted file mode 100644 index 9de4bf9cd6c..00000000000 --- a/src/test/profile/selenium/ui-map/resources/resolve_includes.xsl +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<xsl:stylesheet version="2.0" - xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> - - <xsl:output method="xml" indent="yes" /> - - <!-- XSLT Template to copy anything, priority="-1" --> - <xsl:template match="@*|node()|text()|comment()|processing-instruction()" priority="-1"> - <xsl:call-template name="copyall"/> - </xsl:template> - - <xsl:template name="copyall"> - <xsl:copy> - <xsl:apply-templates select="@*|node()|text()|comment()|processing-instruction()"/> - </xsl:copy> - </xsl:template> - - <xsl:template match="include"> - <xsl:apply-templates select="document(@file)/ui-map-include/child::*" /> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/resources/rollups.js b/src/test/profile/selenium/ui-map/resources/rollups.js deleted file mode 100644 index 17f804c9996..00000000000 --- a/src/test/profile/selenium/ui-map/resources/rollups.js +++ /dev/null @@ -1,35 +0,0 @@ - -// -// ROLLUPS.JS -// ========== -// This file contains rollup definitions used in OLAT. It is attached into -// build/classes/user-extensions.js in the build.xml -// - -var myRollupManager = new RollupManager(); - -myRollupManager.addRollupRule({ - name: 'replace_click_with_clickAndWait' - , description: 'replaces commands where a click was detected with clickAndWait instead' - , alternateCommand: 'clickAndWait' - , commandMatchers: [ - { - command: 'click' - , target: 'ui=(tabs|home|groups|learningResources|course|courseEditor|group|groupManagement|qti|testEditor|userManagement)::.+\\(.*\\)' - } - ] - , expandedCommands: [] -}); - -myRollupManager.addRollupRule({ - name: 'replace_click_login_with_clickAndWait' - , description: 'replaces commands where a click was detected with clickAndWait instead' - , alternateCommand: 'clickAndWait' - , commandMatchers: [ - { - command: 'click' - , target: 'ui=dmz::login\\(.*\\)' - } - ] - , expandedCommands: [] -}); diff --git a/src/test/profile/selenium/ui-map/resources/ui-element.js b/src/test/profile/selenium/ui-map/resources/ui-element.js deleted file mode 100644 index cb087c8148f..00000000000 --- a/src/test/profile/selenium/ui-map/resources/ui-element.js +++ /dev/null @@ -1,1627 +0,0 @@ -//****************************************************************************** -// Globals, including constants - -var UI_GLOBAL = { - UI_PREFIX: 'ui' - , XHTML_DOCTYPE: '<!DOCTYPE html PUBLIC ' - + '"-//W3C//DTD XHTML 1.0 Strict//EN" ' - + '"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' - , XHTML_XMLNS: 'http://www.w3.org/1999/xhtml' -}; - -//***************************************************************************** -// Exceptions - -function UIElementException(message) -{ - this.message = message; - this.name = 'UIElementException'; -} - -function UIArgumentException(message) -{ - this.message = message; - this.name = 'UIArgumentException'; -} - -function PagesetException(message) -{ - this.message = message; - this.name = 'PagesetException'; -} - -function UISpecifierException(message) -{ - this.message = message; - this.name = 'UISpecifierException'; -} - -function CommandMatcherException(message) -{ - this.message = message; - this.name = 'CommandMatcherException'; -} - -//***************************************************************************** -// UI-Element core - -/** - * The UIElement object. This has been crafted along with UIMap to make - * specifying UI elements using JSON as simple as possible. Object construction - * will fail if 1) a proper name isn't provided, 2) a faulty args argument is - * given, or 3) getLocator() returns undefined for a valid permutation of - * default argument values. See ui-doc.html for the documentation on the - * builder syntax. - * - * @param uiElementShorthand an object whose contents conform to the - * UI-Element builder syntax. - * - * @return a new UIElement object - * @throws UIElementException - */ -function UIElement(uiElementShorthand) -{ - // a shorthand object might look like: - // - // { - // name: 'topic' - // , description: 'sidebar links to topic categories' - // , args: [ - // { - // name: 'name' - // , description: 'the name of the topic' - // , defaultValues: topLevelTopics - // } - // ] - // , getLocator: function(args) { - // return this._listXPath + - // "/a[text()=" + args.name.quoteForXPath() + "]"; - // } - // , getGenericLocator: function() { - // return this._listXPath + '/a'; - // } - // // maintain testcases for getLocator() - // , testcase1: { - // // defaultValues used if args not specified - // args: { name: 'foo' } - // , xhtml: '<div id="topiclist">' - // + '<ul><li><a expected-result="1">foo</a></li></ul>' - // + '</div>' - // } - // // set a local element variable - // , _listXPath: "//div[@id='topiclist']/ul/li" - // } - // - // name cannot be null or an empty string. Enforce the same requirement for - // the description. - - /** - * Recursively returns all permutations of argument-value pairs, given - * a list of argument definitions. Each argument definition will have - * a set of default values to use in generating said pairs. If an argument - * has no default values defined, it will not be included among the - * permutations. - * - * @param args a list of UIArguments - * @param opt_inDocument (optional) - * @return a list of associative arrays containing key value pairs - */ - this.permuteArgs = function(args, opt_inDocument) { - var permutations = []; - for (var i = 0; i < args.length; ++i) { - var arg = args[i]; - var defaultValues = (arguments.length > 1) - ? arg.getDefaultValues(opt_inDocument) - : arg.getDefaultValues(); - - // skip arguments for which no default values are defined - if (defaultValues.length == 0) { - continue; - } - for (var j = 0; j < defaultValues.length; ++j) { - var value = defaultValues[j]; - var nextPermutations = this.permuteArgs(args.slice(i+1)); - if (nextPermutations.length == 0) { - var permutation = {}; - permutation[arg.name] = value + ''; // make into string - permutations.push(permutation); - } - else { - for (var k = 0; k < nextPermutations.length; ++k) { - nextPermutations[k][arg.name] = value + ''; - permutations.push(nextPermutations[k]); - } - } - } - break; - } - return permutations; - } - - - - /** - * Returns a list of all testcases for this UIElement. - */ - this.getTestcases = function() - { - return this.testcases; - } - - - - /** - * Run all unit tests, stopping at the first failure, if any. Return true - * if no failures encountered, false otherwise. See the following thread - * regarding use of getElementById() on XML documents created by parsing - * text via the DOMParser: - * - * http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/2b1b82b3c53a1282/ - */ - this.test = function() - { - var parser = new DOMParser(); - var testcases = this.getTestcases(); - testcaseLoop: for (var i = 0; i < testcases.length; ++i) { - var testcase = testcases[i]; - var xhtml = UI_GLOBAL.XHTML_DOCTYPE + '<html xmlns="' - + UI_GLOBAL.XHTML_XMLNS + '">' + testcase.xhtml + '</html>'; - var doc = parser.parseFromString(xhtml, "text/xml"); - if (doc.firstChild.nodeName == 'parsererror') { - safe_alert('Error parsing XHTML in testcase "' + testcase.name - + '" for UI element "' + this.name + '": ' + "\n" - + doc.firstChild.firstChild.nodeValue); - } - - // we're no longer using the default locators when testing, because - // args is now required - var locator = parse_locator(this.getLocator(testcase.args)); - var results; - if (locator.type == 'xpath' || (locator.type == 'implicit' && - locator.string.substring(0, 2) == '//')) { - // try using the javascript xpath engine to avoid namespace - // issues. The xpath does have to be lowercase however, it - // seems. - results = eval_xpath(locator.string, doc, - { allowNativeXpath: false, returnOnFirstMatch: true }); - } - else { - // piece the locator back together - locator = (locator.type == 'implicit') - ? locator.string - : locator.type + '=' + locator.string; - results = eval_locator(locator, doc); - } - if (results.length && results[0].hasAttribute('expected-result')) { - continue testcaseLoop; - } - - // testcase failed - if (is_IDE()) { - var msg = 'Testcase "' + testcase.name - + '" failed for UI element "' + this.name + '":'; - if (!results.length) { - msg += '\n"' + locator + '" did not match any elements!'; - } - else { - msg += '\n' + results[0] + ' was not the expected result!'; - } - safe_alert(msg); - } - return false; - } - return true; - }; - - - - /** - * Creates a set of locators using permutations of default values for - * arguments used in the locator construction. The set is returned as an - * object mapping locators to key-value arguments objects containing the - * values passed to getLocator() to create the locator. - * - * @param opt_inDocument (optional) the document object of the "current" - * page when this method is invoked. Some arguments - * may have default value lists that are calculated - * based on the contents of the page. - * - * @return a list of locator strings - * @throws UIElementException - */ - this.getDefaultLocators = function(opt_inDocument) { - var defaultLocators = {}; - if (this.args.length == 0) { - defaultLocators[this.getLocator({})] = {}; - } - else { - var permutations = this.permuteArgs(this.args, opt_inDocument); - if (permutations.length != 0) { - for (var i = 0; i < permutations.length; ++i) { - var args = permutations[i]; - var locator = this.getLocator(args); - if (!locator) { - throw new UIElementException('Error in UIElement(): ' - + 'no getLocator return value for element "' + name - + '"'); - } - defaultLocators[locator] = args; - } - } - else { - // try using no arguments. If it doesn't work, fine. - try { - var locator = this.getLocator(); - defaultLocators[locator] = {}; - } - catch (e) { - safe_log('debug', e.message); - } - } - } - return defaultLocators; - }; - - - - /** - * Validate the structure of the shorthand notation this object is being - * initialized with. Throws an exception if there's a validation error. - * - * @param uiElementShorthand - * - * @throws UIElementException - */ - this.validate = function(uiElementShorthand) - { - var msg = "UIElement validation error:\n" + print_r(uiElementShorthand); - if (!uiElementShorthand.name) { - throw new UIElementException(msg + 'no name specified!'); - } - if (!uiElementShorthand.description) { - throw new UIElementException(msg + 'no description specified!'); - } - if (!uiElementShorthand.locator - && !uiElementShorthand.getLocator - && !uiElementShorthand.xpath - && !uiElementShorthand.getXPath) { - throw new UIElementException(msg + 'no locator specified!'); - } - }; - - - - this.init = function(uiElementShorthand) - { - this.validate(uiElementShorthand); - - this.name = uiElementShorthand.name; - this.description = uiElementShorthand.description; - - // construct a new getLocator() method based on the locator property, - // or use the provided function. We're deprecating the xpath property - // and getXPath() function, but still allow for them for backwards - // compatability. - if (uiElementShorthand.locator) { - this.getLocator = function(args) { - return uiElementShorthand.locator; - }; - } - else if (uiElementShorthand.getLocator) { - this.getLocator = uiElementShorthand.getLocator; - } - else if (uiElementShorthand.xpath) { - this.getLocator = function(args) { - return uiElementShorthand.xpath; - }; - } - else { - this.getLocator = uiElementShorthand.getXPath; - } - - if (uiElementShorthand.genericLocator) { - this.getGenericLocator = function() { - return uiElementShorthand.genericLocator; - }; - } - else if (uiElementShorthand.getGenericLocator) { - this.getGenericLocator = uiElementShorthand.getGenericLocator; - } - - if (uiElementShorthand.getOffsetLocator) { - this.getOffsetLocator = uiElementShorthand.getOffsetLocator; - } - - // get the testcases and local variables - this.testcases = []; - var localVars = {}; - for (var attr in uiElementShorthand) { - if (attr.match(/^testcase/)) { - var testcase = uiElementShorthand[attr]; - if (uiElementShorthand.args && - uiElementShorthand.args.length && !testcase.args) { - safe_alert('No args defined in ' + attr + ' for UI element ' - + this.name + '! Skipping testcase.'); - continue; - } - testcase.name = attr; - this.testcases.push(testcase); - } - else if (attr.match(/^_/)) { - this[attr] = uiElementShorthand[attr]; - localVars[attr] = uiElementShorthand[attr]; - } - } - - // create the arguments - this.args = [] - this.argsOrder = []; - if (uiElementShorthand.args) { - for (var i = 0; i < uiElementShorthand.args.length; ++i) { - var arg = new UIArgument(uiElementShorthand.args[i], localVars); - this.args.push(arg); - this.argsOrder.push(arg.name); - - // if an exception is thrown when invoking getDefaultValues() - // with no parameters passed in, assume the method requires an - // inDocument parameter, and thus may only be invoked at run - // time. Mark the UI element object accordingly. - try { - arg.getDefaultValues(); - } - catch (e) { - this.isDefaultLocatorConstructionDeferred = true; - } - } - - } - - if (!this.isDefaultLocatorConstructionDeferred) { - this.defaultLocators = this.getDefaultLocators(); - } - }; - - - - this.init(uiElementShorthand); -} - -// hang this off the UIElement "namespace". This is a composite strategy. -UIElement.defaultOffsetLocatorStrategy = function(locatedElement, pageElement) { - var strategies = [ - UIElement.linkXPathOffsetLocatorStrategy - , UIElement.preferredAttributeXPathOffsetLocatorStrategy - , UIElement.simpleXPathOffsetLocatorStrategy - ]; - - for (var i = 0; i < strategies.length; ++i) { - var strategy = strategies[i]; - var offsetLocator = strategy(locatedElement, pageElement); - - if (offsetLocator) { - return offsetLocator; - } - } - - return null; -}; - -UIElement.simpleXPathOffsetLocatorStrategy = function(locatedElement, - pageElement) -{ - if (is_ancestor(locatedElement, pageElement)) { - var xpath = ""; - var recorder = Recorder.get(locatedElement.ownerDocument.defaultView); - var locatorBuilders = recorder.locatorBuilders; - var currentNode = pageElement; - - while (currentNode != null && currentNode != locatedElement) { - xpath = locatorBuilders.relativeXPathFromParent(currentNode) - + xpath; - currentNode = currentNode.parentNode; - } - - var results = eval_xpath(xpath, locatedElement.ownerDocument, - { contextNode: locatedElement }); - - if (results.length > 0 && results[0] == pageElement) { - return xpath; - } - } - - return null; -}; - -UIElement.linkXPathOffsetLocatorStrategy = function(locatedElement, pageElement) -{ - if (pageElement.nodeName == 'A' && is_ancestor(locatedElement, pageElement)) - { - var text = pageElement.textContent - .replace(/^\s+/, "") - .replace(/\s+$/, ""); - - if (text) { - var xpath = '/descendant::a[normalize-space()=' - + text.quoteForXPath() + ']'; - - var results = eval_xpath(xpath, locatedElement.ownerDocument, - { contextNode: locatedElement }); - - if (results.length > 0 && results[0] == pageElement) { - return xpath; - } - } - } - - return null; -}; - -// compare to the "xpath:attributes" locator strategy defined in the IDE source -UIElement.preferredAttributeXPathOffsetLocatorStrategy = - function(locatedElement, pageElement) -{ - // this is an ordered listing of single attributes - var preferredAttributes = [ - 'name' - , 'value' - , 'type' - , 'action' - , 'alt' - , 'title' - , 'class' - , 'src' - , 'href' - , 'onclick' - ]; - - if (is_ancestor(locatedElement, pageElement)) { - var xpathBase = '/descendant::' + pageElement.nodeName.toLowerCase(); - - for (var i = 0; i < preferredAttributes.length; ++i) { - var name = preferredAttributes[i]; - var value = pageElement.getAttribute(name); - - if (value) { - var xpath = xpathBase + '[@' + name + '=' - + value.quoteForXPath() + ']'; - - var results = eval_xpath(xpath, locatedElement.ownerDocument, - { contextNode: locatedElement }); - - if (results.length > 0 && results[0] == pageElement) { - return xpath; - } - } - } - } - - return null; -}; - - - -/** - * Constructs a UIArgument. This is mostly for checking that the values are - * valid. - * - * @param uiArgumentShorthand - * @param localVars - * - * @throws UIArgumentException - */ -function UIArgument(uiArgumentShorthand, localVars) -{ - /** - * @param uiArgumentShorthand - * - * @throws UIArgumentException - */ - this.validate = function(uiArgumentShorthand) - { - var msg = "UIArgument validation error:\n" - + print_r(uiArgumentShorthand); - - // try really hard to throw an exception! - if (!uiArgumentShorthand.name) { - throw new UIArgumentException(msg + 'no name specified!'); - } - if (!uiArgumentShorthand.description) { - throw new UIArgumentException(msg + 'no description specified!'); - } - if (!uiArgumentShorthand.defaultValues && - !uiArgumentShorthand.getDefaultValues) { - throw new UIArgumentException(msg + 'no default values specified!'); - } - }; - - - - /** - * @param uiArgumentShorthand - * @param localVars a list of local variables - */ - this.init = function(uiArgumentShorthand, localVars) - { - this.validate(uiArgumentShorthand); - - this.name = uiArgumentShorthand.name; - this.description = uiArgumentShorthand.description; - - if (uiArgumentShorthand.defaultValues) { - var defaultValues = uiArgumentShorthand.defaultValues; - this.getDefaultValues = - function() { return defaultValues; } - } - else { - this.getDefaultValues = uiArgumentShorthand.getDefaultValues; - } - - for (var name in localVars) { - this[name] = localVars[name]; - } - } - - - - this.init(uiArgumentShorthand, localVars); -} - - - -/** - * The UISpecifier constructor is overloaded. If less than three arguments are - * provided, the first argument will be considered a UI specifier string, and - * will be split out accordingly. Otherwise, the first argument will be - * considered the path. - * - * @param uiSpecifierStringOrPagesetName a UI specifier string, or the pageset - * name of the UI specifier - * @param elementName the name of the element - * @param args an object associating keys to values - * - * @return new UISpecifier object - */ -function UISpecifier(uiSpecifierStringOrPagesetName, elementName, args) -{ - /** - * Initializes this object from a UI specifier string of the form: - * - * pagesetName::elementName(arg1=value1, arg2=value2, ...) - * - * into its component parts, and returns them as an object. - * - * @return an object containing the components of the UI specifier - * @throws UISpecifierException - */ - this._initFromUISpecifierString = function(uiSpecifierString) { - var matches = /^(.*)::([^\(]+)\((.*)\)$/.exec(uiSpecifierString); - if (matches == null) { - throw new UISpecifierException('Error in ' - + 'UISpecifier._initFromUISpecifierString(): "' - + this.string + '" is not a valid UI specifier string'); - } - this.pagesetName = matches[1]; - this.elementName = matches[2]; - this.args = (matches[3]) ? parse_kwargs(matches[3]) : {}; - }; - - - - /** - * Override the toString() method to return the UI specifier string when - * evaluated in a string context. Combines the UI specifier components into - * a canonical UI specifier string and returns it. - * - * @return a UI specifier string - */ - this.toString = function() { - // empty string is acceptable for the path, but it must be defined - if (this.pagesetName == undefined) { - throw new UISpecifierException('Error in UISpecifier.toString(): "' - + this.pagesetName + '" is not a valid UI specifier pageset ' - + 'name'); - } - if (!this.elementName) { - throw new UISpecifierException('Error in UISpecifier.unparse(): "' - + this.elementName + '" is not a valid UI specifier element ' - + 'name'); - } - if (!this.args) { - throw new UISpecifierException('Error in UISpecifier.unparse(): "' - + this.args + '" are not valid UI specifier args'); - } - - uiElement = UIMap.getInstance() - .getUIElement(this.pagesetName, this.elementName); - if (uiElement != null) { - var kwargs = to_kwargs(this.args, uiElement.argsOrder); - } - else { - // probably under unit test - var kwargs = to_kwargs(this.args); - } - - return this.pagesetName + '::' + this.elementName + '(' + kwargs + ')'; - }; - - // construct the object - if (arguments.length < 2) { - this._initFromUISpecifierString(uiSpecifierStringOrPagesetName); - } - else { - this.pagesetName = uiSpecifierStringOrPagesetName; - this.elementName = elementName; - this.args = (args) ? clone(args) : {}; - } -} - - - -function Pageset(pagesetShorthand) -{ - /** - * Returns true if the page is included in this pageset, false otherwise. - * The page is specified by a document object. - * - * @param inDocument the document object representing the page - */ - this.contains = function(inDocument) - { - var urlParts = parseUri(unescape(inDocument.location.href)); - var path = urlParts.path - .replace(/^\//, "") - .replace(/\/$/, ""); - if (!this.pathRegexp.test(path)) { - return false; - } - for (var paramName in this.paramRegexps) { - var paramRegexp = this.paramRegexps[paramName]; - if (!paramRegexp.test(urlParts.queryKey[paramName])) { - return false; - } - } - if (!this.pageContent(inDocument)) { - return false; - } - - return true; - } - - - - this.getUIElements = function() - { - var uiElements = []; - for (var uiElementName in this.uiElements) { - uiElements.push(this.uiElements[uiElementName]); - } - return uiElements; - }; - - - - /** - * Returns a list of UI specifier string stubs representing all UI elements - * for this pageset. Stubs contain all required arguments, but leave - * argument values blank. Each element stub is paired with the element's - * description. - * - * @return a list of UI specifier string stubs - */ - this.getUISpecifierStringStubs = function() - { - var stubs = []; - for (var name in this.uiElements) { - var uiElement = this.uiElements[name]; - var args = {}; - for (var i = 0; i < uiElement.args.length; ++i) { - args[uiElement.args[i].name] = ''; - } - var uiSpecifier = new UISpecifier(this.name, uiElement.name, args); - stubs.push([ - UI_GLOBAL.UI_PREFIX + '=' + uiSpecifier.toString() - , uiElement.description - ]); - } - return stubs; - } - - - - /** - * Throws an exception on validation failure. - */ - this._validate = function(pagesetShorthand) - { - var msg = "Pageset validation error:\n" - + print_r(pagesetShorthand); - if (!pagesetShorthand.name) { - throw new PagesetException(msg + 'no name specified!'); - } - if (!pagesetShorthand.description) { - throw new PagesetException(msg + 'no description specified!'); - } - if (!pagesetShorthand.paths && - !pagesetShorthand.pathRegexp && - !pagesetShorthand.pageContent) { - throw new PagesetException(msg - + 'no path, pathRegexp, or pageContent specified!'); - } - }; - - - - this.init = function(pagesetShorthand) - { - this._validate(pagesetShorthand); - - this.name = pagesetShorthand.name; - this.description = pagesetShorthand.description; - - var pathPrefixRegexp = pagesetShorthand.pathPrefix - ? RegExp.escape(pagesetShorthand.pathPrefix) : ""; - var pathRegexp = '^' + pathPrefixRegexp; - - if (pagesetShorthand.paths != undefined) { - pathRegexp += '(?:'; - for (var i = 0; i < pagesetShorthand.paths.length; ++i) { - if (i > 0) { - pathRegexp += '|'; - } - pathRegexp += RegExp.escape(pagesetShorthand.paths[i]); - } - pathRegexp += ')$'; - } - else if (pagesetShorthand.pathRegexp) { - pathRegexp += '(?:' + pagesetShorthand.pathRegexp + ')$'; - } - - this.pathRegexp = new RegExp(pathRegexp); - this.paramRegexps = {}; - for (var paramName in pagesetShorthand.paramRegexps) { - this.paramRegexps[paramName] = - new RegExp(pagesetShorthand.paramRegexps[paramName]); - } - this.pageContent = pagesetShorthand.pageContent || - function() { return true; }; - this.uiElements = {}; - }; - - - - this.init(pagesetShorthand); -} - - - -/** - * Construct the UI map object, and return it. Once the object is instantiated, - * it binds to a global variable and will not leave scope. - * - * @return new UIMap object - */ -function UIMap() -{ - // the singleton pattern, split into two parts so that "new" can still - // be used, in addition to "getInstance()" - UIMap.self = this; - - // need to attach variables directly to the Editor object in order for them - // to be in scope for Editor methods - if (is_IDE()) { - Editor.uiMap = this; - Editor.UI_PREFIX = UI_GLOBAL.UI_PREFIX; - } - - this.pagesets = new Object(); - - - - /** - * pageset[pagesetName] - * regexp - * elements[elementName] - * UIElement - */ - this.addPageset = function(pagesetShorthand) - { - try { - var pageset = new Pageset(pagesetShorthand); - } - catch (e) { - safe_alert("Could not create pageset from shorthand:\n" - + print_r(pagesetShorthand) + "\n" + e.message); - return false; - } - - if (this.pagesets[pageset.name]) { - safe_alert('Could not add pageset "' + pageset.name - + '": a pageset with that name already exists!'); - return false; - } - - this.pagesets[pageset.name] = pageset; - return true; - }; - - - - /** - * @param pagesetName - * @param uiElementShorthand a representation of a UIElement object in - * shorthand JSON. - */ - this.addElement = function(pagesetName, uiElementShorthand) - { - try { - var uiElement = new UIElement(uiElementShorthand); - } - catch (e) { - safe_alert("Could not create UI element from shorthand:\n" - + print_r(uiElementShorthand) + "\n" + e.message); - return false; - } - - // run the element's unit tests only for the IDE, and only when the - // IDE is starting. Make a rough guess as to the latter condition. - if (is_IDE() && !editor.selDebugger && !uiElement.test()) { - safe_alert('Could not add UI element "' + uiElement.name - + '": failed testcases!'); - return false; - } - - try { - this.pagesets[pagesetName].uiElements[uiElement.name] = uiElement; - } - catch (e) { - safe_alert("Could not add UI element '" + uiElement.name - + "' to pageset '" + pagesetName + "':\n" + e.message); - return false; - } - - return true; - }; - - - - /** - * Returns the pageset for a given UI specifier string. - * - * @param uiSpecifierString - * @return a pageset object - */ - this.getPageset = function(uiSpecifierString) - { - try { - var uiSpecifier = new UISpecifier(uiSpecifierString); - return this.pagesets[uiSpecifier.pagesetName]; - } - catch (e) { - return null; - } - } - - - - /** - * Returns the UIElement that a UISpecifierString or pageset and element - * pair refer to. - * - * @param pagesetNameOrUISpecifierString - * @return a UIElement, or null if none is found associated with - * uiSpecifierString - */ - this.getUIElement = function(pagesetNameOrUISpecifierString, uiElementName) - { - var pagesetName = pagesetNameOrUISpecifierString; - if (arguments.length == 1) { - var uiSpecifierString = pagesetNameOrUISpecifierString; - try { - var uiSpecifier = new UISpecifier(uiSpecifierString); - pagesetName = uiSpecifier.pagesetName; - var uiElementName = uiSpecifier.elementName; - } - catch (e) { - return null; - } - } - try { - return this.pagesets[pagesetName].uiElements[uiElementName]; - } - catch (e) { - return null; - } - }; - - - - /** - * Returns a list of pagesets that "contains" the provided page, - * represented as a document object. Containership is defined by the - * Pageset object's contain() method. - * - * @param inDocument the page to get pagesets for - * @return a list of pagesets - */ - this.getPagesetsForPage = function(inDocument) - { - var pagesets = []; - for (var pagesetName in this.pagesets) { - var pageset = this.pagesets[pagesetName]; - if (pageset.contains(inDocument)) { - pagesets.push(pageset); - } - } - return pagesets; - }; - - - - /** - * Returns a list of all pagesets. - * - * @return a list of pagesets - */ - this.getPagesets = function() - { - var pagesets = []; - for (var pagesetName in this.pagesets) { - pagesets.push(this.pagesets[pagesetName]); - } - return pagesets; - }; - - - - /** - * Returns a list of elements on a page that a given UI specifier string, - * maps to. If no elements are mapped to, returns an empty list.. - * - * @param uiSpecifierString a String that specifies a UI element with - * attendant argument values - * @param inDocument the document object the specified UI element - * appears in - * @return a potentially-empty list of elements - * specified by uiSpecifierString - */ - this.getPageElements = function(uiSpecifierString, inDocument) - { - var locator = this.getLocator(uiSpecifierString); - var results = locator ? eval_locator(locator, inDocument) : []; - return results; - }; - - - - /** - * Returns the locator string that a given UI specifier string maps to, or - * null if it cannot be mapped. - * - * @param uiSpecifierString - */ - this.getLocator = function(uiSpecifierString) - { - try { - var uiSpecifier = new UISpecifier(uiSpecifierString); - } - catch (e) { - safe_alert('Could not create UISpecifier for string "' - + uiSpecifierString + '": ' + e.message); - return null; - } - - var uiElement = this.getUIElement(uiSpecifier.pagesetName, - uiSpecifier.elementName); - try { - return uiElement.getLocator(uiSpecifier.args); - } - catch (e) { - return null; - } - } - - - - /** - * Finds and returns a UI specifier string given an element and the page - * that it appears on. - * - * @param pageElement the document element to map to a UI specifier - * @param inDocument the document the element appears in - * @return a UI specifier string, or false if one cannot be - * constructed - */ - this.getUISpecifierString = function(pageElement, inDocument) - { - var is_fuzzy_match = - BrowserBot.prototype.locateElementByUIElement.is_fuzzy_match; - var pagesets = this.getPagesetsForPage(inDocument); - - for (var i = 0; i < pagesets.length; ++i) { - var pageset = pagesets[i]; - var uiElements = pageset.getUIElements(); - - for (var j = 0; j < uiElements.length; ++j) { - var uiElement = uiElements[j]; - - // first test against the generic locator, if there is one. - // This should net some performance benefit when recording on - // more complicated pages. - if (uiElement.getGenericLocator) { - var passedTest = false; - var results = - eval_locator(uiElement.getGenericLocator(), inDocument); - for (var i = 0; i < results.length; ++i) { - if (results[i] == pageElement) { - passedTest = true; - break; - } - } - if (!passedTest) { - continue; - } - } - - var defaultLocators; - if (uiElement.isDefaultLocatorConstructionDeferred) { - defaultLocators = uiElement.getDefaultLocators(inDocument); - } - else { - defaultLocators = uiElement.defaultLocators; - } - - //safe_alert(print_r(uiElement.defaultLocators)); - for (var locator in defaultLocators) { - var locatedElements = eval_locator(locator, inDocument); - if (locatedElements.length) { - var locatedElement = locatedElements[0]; - } - else { - continue; - } - - // use a heuristic to determine whether the element - // specified is the "same" as the element we're matching - if (is_fuzzy_match) { - if (is_fuzzy_match(locatedElement, pageElement)) { - return UI_GLOBAL.UI_PREFIX + '=' + - new UISpecifier(pageset.name, uiElement.name, - defaultLocators[locator]); - } - } - else { - if (locatedElement == pageElement) { - return UI_GLOBAL.UI_PREFIX + '=' + - new UISpecifier(pageset.name, uiElement.name, - defaultLocators[locator]); - } - } - - // ok, matching the element failed. See if an offset - // locator can complete the match. - if (uiElement.getOffsetLocator) { - for (var k = 0; k < locatedElements.length; ++k) { - var offsetLocator = uiElement - .getOffsetLocator(locatedElements[k], pageElement); - if (offsetLocator) { - return UI_GLOBAL.UI_PREFIX + '=' + - new UISpecifier(pageset.name, - uiElement.name, - defaultLocators[locator]) - + '->' + offsetLocator; - } - } - } - } - } - } - return false; - }; - - - - /** - * Returns a sorted list of UI specifier string stubs representing possible - * UI elements for all pagesets, paired the their descriptions. Stubs - * contain all required arguments, but leave argument values blank. - * - * @return a list of UI specifier string stubs - */ - this.getUISpecifierStringStubs = function() { - var stubs = []; - var pagesets = this.getPagesets(); - for (var i = 0; i < pagesets.length; ++i) { - stubs = stubs.concat(pagesets[i].getUISpecifierStringStubs()); - } - stubs.sort(function(a, b) { - if (a[0] < b[0]) { - return -1; - } - return a[0] == b[0] ? 0 : 1; - }); - return stubs; - } -} - -UIMap.getInstance = function() { - return (UIMap.self == null) ? new UIMap() : UIMap.self; -} - -//****************************************************************************** -// Rollups - -/** - * The Command object isn't available in the Selenium RC. We introduce an - * object with the identical constructor. In the IDE, this will be redefined, - * which is just fine. - * - * @param command - * @param target - * @param value - */ -if (typeof(Command) == 'undefined') { - function Command(command, target, value) { - this.command = command != null ? command : ''; - this.target = target != null ? target : ''; - this.value = value != null ? value : ''; - } -} - - - -/** - * A CommandMatcher object matches commands during the application of a - * RollupRule. It's specified with a shorthand format, for example: - * - * new CommandMatcher({ - * command: 'click' - * , target: 'ui=allPages::.+' - * }) - * - * which is intended to match click commands whose target is an element in the - * allPages PageSet. The matching expressions are given as regular expressions; - * in the example above, the command must be "click"; "clickAndWait" would be - * acceptable if 'click.*' were used. Here's a more complete example: - * - * new CommandMatcher({ - * command: 'type' - * , target: 'ui=loginPages::username()' - * , value: '.+_test' - * , updateArgs: function(command, args) { - * args.username = command.value; - * } - * }) - * - * Here, the command and target are fixed, but there is variability in the - * value of the command. When a command matches, the username is saved to the - * arguments object. - */ -function CommandMatcher(commandMatcherShorthand) -{ - /** - * Ensure the shorthand notation used to initialize the CommandMatcher has - * all required values. - * - * @param commandMatcherShorthand an object containing information about - * the CommandMatcher - */ - this.validate = function(commandMatcherShorthand) { - var msg = "CommandMatcher validation error:\n" - + print_r(commandMatcherShorthand); - if (!commandMatcherShorthand.command) { - throw new CommandMatcherException(msg + 'no command specified!'); - } - if (!commandMatcherShorthand.target) { - throw new CommandMatcherException(msg + 'no target specified!'); - } - if (commandMatcherShorthand.minMatches && - commandMatcherShorthand.maxMatches && - commandMatcherShorthand.minMatches > - commandMatcherShorthand.maxMatches) { - throw new CommandMatcherException(msg + 'minMatches > maxMatches!'); - } - }; - - /** - * Initialize this object. - * - * @param commandMatcherShorthand an object containing information used to - * initialize the CommandMatcher - */ - this.init = function(commandMatcherShorthand) { - this.validate(commandMatcherShorthand); - - this.command = commandMatcherShorthand.command; - this.target = commandMatcherShorthand.target; - this.value = commandMatcherShorthand.value || null; - this.minMatches = commandMatcherShorthand.minMatches || 1; - this.maxMatches = commandMatcherShorthand.maxMatches || 1; - this.updateArgs = commandMatcherShorthand.updateArgs || - function(command, args) { return args; }; - }; - - /** - * Determines whether a given command matches. Updates args by "reference" - * and returns true if it does; return false otherwise. - * - * @param command the command to attempt to match - */ - this.isMatch = function(command) { - var re = new RegExp('^' + this.command + '$'); - if (! re.test(command.command)) { - return false; - } - re = new RegExp('^' + this.target + '$'); - if (! re.test(command.target)) { - return false; - } - if (this.value != null) { - re = new RegExp('^' + this.value + '$'); - if (! re.test(command.value)) { - return false; - } - } - - // okay, the command matches - return true; - }; - - // initialization - this.init(commandMatcherShorthand); -} - - - -function RollupRuleException(message) -{ - this.message = message; - this.name = 'RollupRuleException'; -} - -function RollupRule(rollupRuleShorthand) -{ - /** - * Ensure the shorthand notation used to initialize the RollupRule has all - * required values. - * - * @param rollupRuleShorthand an object containing information about the - * RollupRule - */ - this.validate = function(rollupRuleShorthand) { - var msg = "RollupRule validation error:\n" - + print_r(rollupRuleShorthand); - if (!rollupRuleShorthand.name) { - throw new RollupRuleException(msg + 'no name specified!'); - } - if (!rollupRuleShorthand.description) { - throw new RollupRuleException(msg + 'no description specified!'); - } - // rollupRuleShorthand.args is optional - if (!rollupRuleShorthand.commandMatchers && - !rollupRuleShorthand.getRollup) { - throw new RollupRuleException(msg - + 'no command matchers specified!'); - } - if (!rollupRuleShorthand.expandedCommands && - !rollupRuleShorthand.getExpandedCommands) { - throw new RollupRuleException(msg - + 'no expanded commands specified!'); - } - - return true; - }; - - /** - * Initialize this object. - * - * @param rollupRuleShorthand an object containing information used to - * initialize the RollupRule - */ - this.init = function(rollupRuleShorthand) { - this.validate(rollupRuleShorthand); - - this.name = rollupRuleShorthand.name; - this.description = rollupRuleShorthand.description; - this.pre = rollupRuleShorthand.pre || ''; - this.post = rollupRuleShorthand.post || ''; - this.alternateCommand = rollupRuleShorthand.alternateCommand; - this.args = rollupRuleShorthand.args || []; - - if (rollupRuleShorthand.commandMatchers) { - // construct the rule from the list of CommandMatchers - this.commandMatchers = []; - var matchers = rollupRuleShorthand.commandMatchers; - for (var i = 0; i < matchers.length; ++i) { - if (matchers[i].updateArgs && this.args.length == 0) { - // enforce metadata for arguments - var msg = "RollupRule validation error:\n" - + print_r(rollupRuleShorthand) - + 'no argument metadata provided!'; - throw new RollupRuleException(msg); - } - this.commandMatchers.push(new CommandMatcher(matchers[i])); - } - - // returns false if the rollup doesn't match, or a rollup command - // if it does. If returned, the command contains the - // replacementIndexes property, which indicates which commands it - // substitutes for. - this.getRollup = function(commands) { - // this is a greedy matching algorithm - var replacementIndexes = []; - var commandMatcherQueue = this.commandMatchers; - var matchCount = 0; - var args = {}; - for (var i = 0, j = 0; i < commandMatcherQueue.length;) { - var matcher = commandMatcherQueue[i]; - if (j >= commands.length) { - // we've run out of commands! If the remaining matchers - // do not have minMatches requirements, this is a - // match. Otherwise, it's not. - if (matcher.minMatches > 0) { - return false; - } - ++i; - matchCount = 0; // unnecessary, but let's be consistent - } - else { - if (matcher.isMatch(commands[j])) { - ++matchCount; - if (matchCount == matcher.maxMatches) { - // exhausted this matcher's matches ... move on - // to next matcher - ++i; - matchCount = 0; - } - args = matcher.updateArgs(commands[j], args); - replacementIndexes.push(j); - ++j; // move on to next command - } - else { - //alert(matchCount + ', ' + matcher.minMatches); - if (matchCount < matcher.minMatches) { - return false; - } - // didn't match this time, but we've satisfied the - // requirements already ... move on to next matcher - ++i; - matchCount = 0; - // still gonna look at same command - } - } - } - - var rollup; - if (this.alternateCommand) { - rollup = new Command(this.alternateCommand, - commands[0].target, commands[0].value); - } - else { - rollup = new Command('rollup', this.name); - rollup.value = to_kwargs(args); - } - rollup.replacementIndexes = replacementIndexes; - return rollup; - }; - } - else { - this.getRollup = function(commands) { - var result = rollupRuleShorthand.getRollup(commands); - if (result) { - var rollup = new Command( - result.command - , result.target - , result.value - ); - rollup.replacementIndexes = result.replacementIndexes; - return rollup; - } - return false; - }; - } - - this.getExpandedCommands = function(kwargs) { - var commands = []; - var expandedCommands = (rollupRuleShorthand.expandedCommands - ? rollupRuleShorthand.expandedCommands - : rollupRuleShorthand.getExpandedCommands( - parse_kwargs(kwargs))); - for (var i = 0; i < expandedCommands.length; ++i) { - var command = expandedCommands[i]; - commands.push(new Command( - command.command - , command.target - , command.value - )); - } - return commands; - }; - }; - - this.init(rollupRuleShorthand); -} - - - -/** - * - */ -function RollupManager() -{ - // singleton pattern - RollupManager.self = this; - - this.init = function() - { - this.rollupRules = {}; - if (is_IDE()) { - Editor.rollupManager = this; - } - }; - - /** - * Adds a new RollupRule to the repository. Returns true on success, or - * false if the rule couldn't be added. - * - * @param rollupRuleShorthand shorthand JSON specification of the new - * RollupRule, possibly including CommandMatcher - * shorthand too. - * @return true if the rule was added successfully, - * false otherwise. - */ - this.addRollupRule = function(rollupRuleShorthand) - { - try { - var rule = new RollupRule(rollupRuleShorthand); - this.rollupRules[rule.name] = rule; - } - catch(e) { - smart_alert("Could not create RollupRule from shorthand:\n\n" - + e.message); - return false; - } - return true; - }; - - /** - * Returns a RollupRule by name. - * - * @param rollupName the name of the rule to fetch - * @return the RollupRule, or null if it isn't found. - */ - this.getRollupRule = function(rollupName) - { - return (this.rollupRules[rollupName] || null); - }; - - /** - * Returns a list of name-description pairs for use in populating the - * auto-populated target dropdown in the IDE. Rules that have an alternate - * command defined are not included in the list, as they are not bona-fide - * rollups. - * - * @return a list of name-description pairs - */ - this.getRollupRulesForDropdown = function() - { - var targets = []; - var names = keys(this.rollupRules).sort(); - for (var i = 0; i < names.length; ++i) { - var name = names[i]; - if (this.rollupRules[name].alternateCommand) { - continue; - } - targets.push([ name, this.rollupRules[name].description ]); - } - return targets; - }; - - /** - * Applies all rules to the current editor commands, asking the user in - * each case if it's okay to perform the replacement. The rules are applied - * repeatedly until there are no more matches. The algorithm should - * remember when the user has declined a replacement, and not ask to do it - * again. - * - * @return the list of commands with rollup replacements performed - */ - this.applyRollupRules = function() - { - var commands = editor.getTestCase().commands; - var blacklistedRollups = {}; - - // so long as rollups were performed, we need to keep iterating through - // the commands starting at the beginning, because further rollups may - // potentially be applied on the newly created ones. - while (true) { - var performedRollup = false; - for (var i = 0; i < commands.length; ++i) { - // iterate through commands - for (var rollupName in this.rollupRules) { - var rule = this.rollupRules[rollupName]; - var rollup = rule.getRollup(commands.slice(i)); - if (rollup) { - // since we passed in a sliced version of the commands - // array to the getRollup() method, we need to re-add - // the offset to the replacementIndexes - var k = 0; - for (; k < rollup.replacementIndexes.length; ++k) { - rollup.replacementIndexes[k] += i; - } - - // build the confirmation message - var msg = "Perform the following command rollup?\n\n"; - for (k = 0; k < rollup.replacementIndexes.length; ++k) { - var replacementIndex = rollup.replacementIndexes[k]; - var command = commands[replacementIndex]; - msg += '[' + replacementIndex + ']: '; - msg += command + "\n"; - } - msg += "\n"; - msg += rollup; - - // check against blacklisted rollups - if (blacklistedRollups[msg]) { - continue; - } - - // highlight the potentially replaced rows - for (k = 0; k < commands.length; ++k) { - var command = commands[k]; - command.result = ''; - if (rollup.replacementIndexes.indexOf(k) != -1) { - command.selectedForReplacement = true; - } - editor.view.rowUpdated(replacementIndex); - } - - // get confirmation from user - if (confirm(msg)) { - // perform rollup - var deleteRanges = []; - var replacementIndexes = rollup.replacementIndexes; - for (k = 0; k < replacementIndexes.length; ++k) { - // this is expected to be list of ranges. A - // range has a start, and a list of commands. - // The deletion only checks the length of the - // command list. - deleteRanges.push({ - start: replacementIndexes[k] - , commands: [ 1 ] - }); - } - editor.view.executeAction(new TreeView - .DeleteCommandAction(editor.view,deleteRanges)); - editor.view.insertAt(i, rollup); - - performedRollup = true; - } - else { - // cleverly remember not to try this rollup again - blacklistedRollups[msg] = true; - } - - // unhighlight - for (k = 0; k < commands.length; ++k) { - commands[k].selectedForReplacement = false; - editor.view.rowUpdated(k); - } - } - } - } - if (!performedRollup) { - break; - } - } - return commands; - }; - - this.init(); -} - -RollupManager.getInstance = function() { - return (RollupManager.self == null) - ? new RollupManager() - : RollupManager.self; -} - diff --git a/src/test/profile/selenium/ui-map/rightsManagement-pageset.xml b/src/test/profile/selenium/ui-map/rightsManagement-pageset.xml deleted file mode 100644 index d2dfaf6c7e2..00000000000 --- a/src/test/profile/selenium/ui-map/rightsManagement-pageset.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="rightsManagement" description="the rights management of a course"> - <xpath-ui-element name="AllRightGroups" xpath="//a[contains(text(),'All right groups')]" description="shows all right groups"/> - - <xpath-ui-element name="createRightsGroup" xpath="//div[@class='b_toolbox']//li//a[contains(.//span/text(),'New right group')]" description="left navigation link 'New right group'"/> - <pageset name="rightGroups" description="tab 'All Right Groups'"> - <xpath-ui-element name="close" xpath="//div[@class='b_toolbox'][descendant::text()='Rights management']//a[descendant::text()='Close']" description="Close Rights Management"/> - <xpath-ui-element name="openRightGroup" xpath="//td[1]/a[2]" description="opens first Right group"/> - <pageset name="rightGroup" description="Right Group"> - <link-ui-element name="calendar" link="Calendar" description="opens Calendar"/> - <xpath-ui-element name="course" xpath="//div[@id='b_col1']//div[@class='b_tree']//li//a[text()='Course']" description="closes calendar View"/> - <xpath-ui-element name="startCourse" xpath="//div[contains(@class,'b_table_wrapper')]//form//td[text()='" + courseName + "']/..//a[text()='Start']" description="opens Course"> - <parameter name="courseName" description="The name of the course" /> - </xpath-ui-element> - </pageset> - </pageset> - - <pageset name="members" description="tab 'Members'"> - <xpath-ui-element name="addUser" xpath="//div[1]/div/span[2]/a/span" description="button 'Add user(s)'"/> - <xpath-ui-element name="selectUser" xpath="document.forms[3].elements[0]" description="checkbox next to the member when adding a user"/> - </pageset> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/systemAdministration-pageset.xml b/src/test/profile/selenium/ui-map/systemAdministration-pageset.xml deleted file mode 100644 index 50fd8c25f0b..00000000000 --- a/src/test/profile/selenium/ui-map/systemAdministration-pageset.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> -<pageset name="systemInformation" description="the system information tab set"> - <xpath-ui-element xpath="//div[@class='b_tabbedpane_tabs']//a[text()='infomsg']" name="infoMsgTab" - description="the info message tab" /> - <xpath-ui-element xpath="//a[@class='b_button' and contains(./span/text(), 'Edit message')]" name="infoMsgEditButton" - description="the info message edit button" /> - <!-- <xpath-ui-element xpath="//form[@name='infoMsgForm']//textarea[@name='infomsg']" name="infoMsgTextarea" - description="the info message text area" /> unused --> - <xpath-ui-element xpath="//form[@name='infoMsgForm']//input[@value='Save']" name="info msg save button" - description="save the info message" /> -</pageset> -</ui-map-include> - - - - - diff --git a/src/test/profile/selenium/ui-map/tabs-pageset.xml b/src/test/profile/selenium/ui-map/tabs-pageset.xml deleted file mode 100644 index 9557ea205f8..00000000000 --- a/src/test/profile/selenium/ui-map/tabs-pageset.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="tabs" description="The main OLAT tabs"> - <default-testcase testcase="login" final-command="clickAndWait"/> - <testcase-macro name="lx"> - <call-macro name="login"/> - </testcase-macro> - - <xpath-ui-element name="home" xpath="//a[span/text()='Home']" description="main tab 'Home'" testcase="lx/tabs::home"/> - <xpath-ui-element name="groups" xpath="//a[span/text()='Groups']" description="main tab 'Groups'"/> - <xpath-ui-element name="learningResources" xpath="//a[span/text()='Learning resources']" description="main tab 'Learning resources'"/> - <xpath-ui-element name="groupAdministration" xpath="//a[span/text()='Group administration']" description="main tab 'Group administration'"/> - <xpath-ui-element name="userManagement" xpath="//a[span/text()='User management']" description="main tab 'User management'"/> - <xpath-ui-element name="administration" xpath="//a[span/text()='Administration']" description="main tab 'Administration'"/> - <xpath-ui-element name="closeCourse" xpath="//a[contains(@class, 'b_nav_tab_close') and ../..//@title='"+nameOfCourse+"']" description="Close an open course" testcase=""> - <parameter name="nameOfCourse" description="the name of the course"> - <defaultValue value="Demo Course"/> - <defaultValue value="Demo course wiki"/> - <defaultValue value="test"/><!-- closes a group named "test" --> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="selectCourse" xpath="//a[descendant::span[@title='"+nameOfCourse+"']]" description="select course tab"> - <parameter name="nameOfCourse" description="the name of the course"/> - </xpath-ui-element> - <xpath-ui-element name="closeAnyCourse" xpath="//a[contains(@class, 'b_nav_tab_close')]" description="close any course, hopefully it is ony one open"></xpath-ui-element> - <xpath-ui-element name="closeGroup" xpath="//li[contains(@class, 'b_resource_BusinessGroup')]//a[contains(@class, 'b_nav_tab_close') and ../..//@title='"+nameOfGroup+"']" description="Close a group" testcase=""> - <parameter name="nameOfGroup" description="the name of the group"> - <defaultValue value="test"/> <!-- closes a group named "test" --> - </parameter> - </xpath-ui-element> - <xpath-ui-element name="closeNavTab" xpath="//a[contains(@class, 'b_nav_tab_close')]" description="Close a navigation tab" testcase=""/> - - <xpath-ui-element name="logOut" xpath="//a[@id='b_logout']" description="The logout link"/> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/testEditor-pageset.xml b/src/test/profile/selenium/ui-map/testEditor-pageset.xml deleted file mode 100644 index f2c92c0ab79..00000000000 --- a/src/test/profile/selenium/ui-map/testEditor-pageset.xml +++ /dev/null @@ -1,177 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="testEditor" description="A test opened in the editor"> - <pageset name="menu" description="the left hand menu"> - <var-link-ui-element name="link" linkparam="link" description="a node in the test editor"/> - </pageset> - <pageset name="content" description="the (center) content area"> - <pageset name="test" description="tab test (top node)"> - <!-- <xpath-ui-element name="title" xpath="//form[@name='assessform']//input[@name='title']" description="The title input field"/> - <xpath-ui-element name="description" xpath="//form[@name='assessform']//textarea[@name='objectives']" description="The Description input field"/> - <xpath-ui-element name="timeLimitYes" xpath="//form[@name='assessform']//input[@name='duration' and @value='Yes']" description="Radio Button (Yes) time limit"/> - <xpath-ui-element name="timeLimitNo" xpath="//form[@name='assessform']//input[@name='duration' and @value='No']" description="Radio Button (No) time limit"/> - <xpath-ui-element name="timeLimitMin" xpath="//form[@name='assessform']//input[@name='duration_min']" description="Field time limit minutes"/> - <xpath-ui-element name="timeLimitSec" xpath="//form[@name='assessform']//input[@name='duration_sec']" description="Field time limit seconds"/> - <xpath-ui-element name="setFeedbackYes" xpath="//form[@name='assessform']//input[@name='inheritswitch' and @value='Yes']" description="Radio Button set feedback/solution for entire text to Yes"/> - <xpath-ui-element name="setFeedbackNo" xpath="//form[@name='assessform']//input[@name='inheritswitch' and @value='No']" description="Radio Button set feedback/solution for entire text to No"/> asa unused --> - <xpath-ui-element name="necessaryPassingScore" xpath="//form[@name='assessform']//input[@name='cutvalue']" description="Field necessary passing score"/> - <xpath-ui-element name="save" xpath="//form[@name='assessform']//input[@value='Save']" description="The Save button"/> - </pageset> - <pageset name="section" description="tab section (section node)"> - <xpath-ui-element name="title" xpath="//form[@id='ofo_tab_section']//input[@name='title']" description="The title input field"/> - <!-- <xpath-ui-element name="description" xpath="//form[@id='ofo_tab_section']//textarea[@name='objectives']" description="The Description input field"/> - <xpath-ui-element name="timeLimitSectionYes" xpath="//form[@id='ofo_tab_section']//input[@name='duration' and @value='Yes']" description="Radio Button (Yes) time limit for entire section"/> - <xpath-ui-element name="timeLimitSectionNo" xpath="//form[@id='ofo_tab_section']//input[@name='duration' and @value='No']" description="Radio Button (No) time limit for entire section"/> - <xpath-ui-element name="timeLimitMin" xpath="//form[@id='ofo_tab_section']//input[@name='duration_min']" description="Field time limit minutes"/> - <xpath-ui-element name="timeLimitSec" xpath="//form[@id='ofo_tab_section']//input[@name='duration_sec']" description="Field time limit seconds"/> - <xpath-ui-element name="nrOfQuestions" xpath="//select[@name='selection_number']" description="Drop down number of questions in this section"/> asa unused --> - <xpath-ui-element name="orderOfQuestions" xpath="//select[@name='order_type']" description="Drop down order of questions"/> - <xpath-ui-element name="save" xpath="//form[@id='ofo_tab_section']//input[@value='Save']" description="The Save button"/> - </pageset> - <pageset name="metadata" description="tab metadata on question level"> - <!-- <xpath-ui-element name="tabMetadata" xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Meta data']" description="Tab Meta data"/> - <xpath-ui-element name="title" xpath="//form[@name='itemMetaDataForm']//input[@name='title']" description="The title input field"/> - <xpath-ui-element name="description" xpath="//form[@name='itemMetaDataForm']//textarea[@name='descr']" description="The Description input field"/> asa unused --> - <xpath-ui-element name="mcType" xpath="//div[@class='b_form_element' and .//text()='Multiple choice']" description="the question type"/> - <xpath-ui-element name="scType" xpath="//div[@class='b_form_element' and .//text()='Single choice']" description="the question type"/> - <xpath-ui-element name="gapType" xpath="//div[@class='b_form_element' and .//text()='Gap text']" description="the question type"/> - <xpath-ui-element name="kprimType" xpath="//div[@class='b_form_element' and .//text()='Kprim']" description="the question type"/> - <xpath-ui-element name="essayType" xpath="//div[@class='b_form_element' and .//text()='Text']" description="the question type"/> - <!-- <xpath-ui-element name="alignment" xpath="//form[@name='itemMetaDataForm']//select[@name='layout']" description="The alignment of answers drop-down"/> - <xpath-ui-element name="limitAttemptsYes" xpath="//form[@name='itemMetaDataForm']//input[@name='limittries' and @value='y']" description="Limit number of attempts: Yes"/> - <xpath-ui-element name="limitAttemptsNo" xpath="//form[@name='itemMetaDataForm']//input[@name='limittries' and @value='n']" description="Limit number of attempts: No"/> - <xpath-ui-element name="nrOfAttempts" xpath="//form[@name='itemMetaDataForm']//input[@name='tries']" description="Field number of attempts"/> - <xpath-ui-element name="timeLimitYes" xpath="//form[@name='itemMetaDataForm']//input[@name='limittime' and @value='y']" description="Radio Button (Yes) time limit"/> - <xpath-ui-element name="timeLimitNo" xpath="//form[@name='itemMetaDataForm']//input[@name='limittime' and @value='n']" description="Radio Button (No) time limit"/> - <xpath-ui-element name="timeLimitMin" xpath="//form[@name='itemMetaDataForm']//input[@name='timemin']" description="Field time limit minutes"/> - <xpath-ui-element name="timeLimitSec" xpath="//form[@name='itemMetaDataForm']//input[@name='timesek']" description="Field time limit seconds"/> - <xpath-ui-element name="randomOrderAnswersYes" xpath="//form[@name='itemMetaDataForm']//input[@name='shuffle' and @value='y']" description="Radio Button (Yes) random order of answers"/> - <xpath-ui-element name="randomOrderAnswersNo" xpath="//form[@name='itemMetaDataForm']//input[@name='shuffle' and @value='n']" description="Radio Button (No) random order of answers"/> - <xpath-ui-element name="showHintsYes" xpath="//form[@name='itemMetaDataForm']//input[@name='showSolutionHints' and @value='y']" description="Radio Button (Yes) show hints"/> - <xpath-ui-element name="showHintsNo" xpath="//form[@name='itemMetaDataForm']//input[@name='showSolutionHints' and @value='n']" description="Radio Button (No) show hints"/> - <xpath-ui-element name="hints" xpath="//form[@name='itemMetaDataForm']//textarea[@name='solutionHints']" description="Field hints"/> - <xpath-ui-element name="showSolutionYes" xpath="//form[@name='itemMetaDataForm']//input[@name='showCorrectSolution' and @value='y']" description="Radio Button (Yes) show correct solution"/> - <xpath-ui-element name="showSolutionNo" xpath="//form[@name='itemMetaDataForm']//input[@name='showCorrectSolution' and @value='n']" description="Radio Button (No) show correct solution"/> - <xpath-ui-element name="correctSolution" xpath="//form[@name='itemMetaDataForm']//textarea[@name='correctSolution']" description="Field correct solution"/> - <xpath-ui-element name="save" xpath="//form[@name='itemMetaDataForm']//input[@value='Save']" description="The Save button"/> asa unused --> - </pageset> - <pageset name="questionAnswers" description="tab question/answers on question level"> - <xpath-ui-element name="tabQuestionAnswers" xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Question/answers']" description="Tab Question/Answers"/> - <xpath-ui-element name="editQuestion" xpath="//fieldset[./legend/text()='Question']//a[@title='Edit this question ']" description="edit a question"/> - - <pageset name="editMaterial" description="question or answer editor"> - <!-- <xpath-ui-element name="moveUp" xpath="//fieldset[./legend/text()='Edit material ']//a[@title='Move element upwards']" description="move question upwards"/> asa unused --> - <!-- <xpath-ui-element name="moveDown" xpath="//fieldset[./legend/text()='Edit material ']//a[@title='Move element downwards']" description="move question downwards"/> asa unused --> - </pageset> - <!-- <xpath-ui-element name="moveAnswerUp" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "]/td[1]/a[@title='Move element upwards']" description="Move an answer up"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="moveAnswerDown" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "]/td[1]/a[@title='Move element downwards']" description="Move an answer down"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="moveAnswerUpMc" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "+1]/td[1]/a[@title='Move element upwards']" description="Move a mc answer up"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="moveAnswerDownMc" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "]/td[1]/a[@title='Move element downwards']" description="Move a mc answer down"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> asa unused --> - <xpath-ui-element name="setCorrectSc" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "]/td[3]/input" description="Set a particular sc answer as correct"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="setCorrectKprim" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "]/td[3]/input" description="Set a particular kprim answer as correct"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="setIncorrectKprim" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "]/td[4]/input" description="Set a particular kprim answer as incorrect"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="setCorrectMc" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "+1]/td[3]/input" description="Set a particular mc answer as correct"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="editAnswerMc" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "+1]//a[@title='Edit this answering material ']" description="Edit a mc answer"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="editAnswerKprim" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "]/td[5]/a[@title='Edit this answering material ']" description="Edit a kprim answer"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="editAnswerRest" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "]//a[@title='Edit this answering material ']" description="Edit an answer"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <!-- <xpath-ui-element name="deleteAnswerMc" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "+1]/td/a[@title='Delete']" description="Delete an answer"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> - <xpath-ui-element name="deleteAnswerRest" xpath="//fieldset[./legend/text()='Answers']//table//tbody/tr[" + indexOfAnswer + "]/td/a[@title='Delete this text']" description="Delete an answer"> - <parameter name="indexOfAnswer" description="the index of the answer, starting with 1"/> - </xpath-ui-element> asa unused --> - <xpath-ui-element name="addNewAnswer" xpath="//fieldset[./legend/text()='Answers']//form//a[./span/text()='Add new answer ']" description="add new answer button"/> - <xpath-ui-element name="addNewTextFragment" xpath="//form[@id='ofo_tab_fibitem']//a[./span/text()='Add new text fragment ']" description="add new text fragment button"/> - <xpath-ui-element name="addNewBlank" xpath="//form[@id='ofo_tab_fibitem']//a[./span/text()='Add new blank']" description="add new blank button"/> - <xpath-ui-element name="blankField" xpath="//fieldset[./legend/text()='Answers']//table[1]//tbody/tr[" + indexOfElement + "]/td/input[contains(@name, 'content_')]" description="type in the blank field"> - <parameter name="indexOfElement" description="the index of the answer, starting with 1, count from the top, including text"/> - </xpath-ui-element> - <!-- <xpath-ui-element name="methodOfAssessment" xpath="//select[@name='valuation_method']" description="dropdown method of assessment (multiple choice, gap text)"/> - <xpath-ui-element name="score" xpath="//fieldset[./legend/text()='Answers']//form//input[@name='single_score']" description="Field score (Score all correct answers in case of FIB and MC item)"/> - <xpath-ui-element name="minimumScore" xpath="//fieldset[./legend/text()='Answers']//form//input[@name='min_value']" description="Field minimum score"/> - <xpath-ui-element name="maximumScore" xpath="//fieldset[./legend/text()='Answers']//form//input[@name='max_value']" description="Field maximum score)"/> - <xpath-ui-element name="numberOfCharacters" xpath="//fieldset[./legend/text()='Answers']//table[1]//tbody/tr[" + indexOfElement + "]/td/input[contains(@name, 'size_')]" description="field number of characters"> - <parameter name="indexOfElement" description="index of field (row)"/> - </xpath-ui-element> - <xpath-ui-element name="lengthOfGap" xpath="//fieldset[./legend/text()='Answers']//table[1]//tbody/tr[" + indexOfElement + "]/td/input[contains(@name, 'maxl_')]" description="field length of gap"> - <parameter name="indexOfElement" description="index of field (row)"/> - </xpath-ui-element> asa unused --> - <xpath-ui-element name="save" xpath="//fieldset[./legend/text()='Answers']//form//input[@value='Save']" description="save button"/> - <xpath-ui-element name="capitalization" xpath="//fieldset[./legend/text()='Answers']//table[1]//tbody/tr[" + indexOfElement + "]/td/input[contains(@name, 'case_') and @value='Yes']" description="check box capitalization (Yes)"> - <parameter name="indexOfElement" description="the index of the checkbox"/> - </xpath-ui-element> - - <xpath-ui-element name="essayLettersPerLine" xpath="//input[@name='columns_q']" description="essay answer size: letters per line"/> - <xpath-ui-element name="essayNumberOfLines" xpath="//input[@name='rows_q']" description="essay answer size: number of lines"/> - </pageset> - <pageset name="feedback" description="tab feedback on question level"> - <!-- <xpath-ui-element name="tabFeedback" xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Feedback']" description="tab feedback"/> - <xpath-ui-element name="showFeedbackYes" xpath="//form[@id='ofo_tab_feedback']//input[@name='feedbackswitch' and @value='Yes']" description="Radio Button (Yes) show feedback"/> - <xpath-ui-element name="showFeedbackNo" xpath="//form[@id='ofo_tab_feedback']//input[@name='feedbackswitch' and @value='No']" description="Radio Button (No) show feedback"/> - <xpath-ui-element name="feedbackAllCorrectAnswers" xpath="//form[@id='ofo_tab_feedback']//textarea[@name='feedback_mastery']" description="Field feedback for all correct answers"/> - <xpath-ui-element name="feedbackWrongAnswer" xpath="//form[@id='ofo_tab_feedback']//textarea[@name='feedback_fail']" description="Field feedback for wrong answer"/> asa unused --> - - <!--be aware that following link is dependent on name of answer --> - <!-- <xpath-ui-element name="feedbackForSpecifiedAnswer" xpath="//form[@id='ofo_tab_feedback']//textarea[@name='feedback_q0']" description="Field feedback for answer specified before"/> - <xpath-ui-element name="saveChanges" xpath="//fieldset[./legend/text()='Feedback']//form//input[@value='Save changes']" description="save changes button"/> asa unused --> - </pageset> - <pageset name="questionPreview" description="tab question preview on question level"> - <!-- <xpath-ui-element name="tabQuestionPreview" xpath="//div[@class='b_tabbedpane_tabs']//a[.//text()='Question preview']" description="tab question preview"/> asa unused --> - </pageset> - </pageset> - <pageset name="toolbox" description="the toolbox area to the right"> - <pageset name="editorTools" description="the editor tools toolbox"> - <!-- <xpath-ui-element name="testPreview" xpath="//div[@class='b_toolbox'][descendant::text()='Editor tools']//a[descendant::text()='Preview']" description="the Preview link in the Editor tools toolbox"/> asa unused --> - <xpath-ui-element name="closeEditor" xpath="//div[@class='b_toolbox'][descendant::text()='Editor tools']//a[contains(descendant::text(), 'Close/save')]" description="the Close/save link in the Editor tools toolbox"/> - </pageset> - <pageset name="add" description="the add toolbox"> - <xpath-ui-element name="addSection" xpath="//div[@class='b_toolbox'][descendant::text()='Add']//a[descendant::text()='Section']" description="The Section link in the add toolbox"/> - <xpath-ui-element name="addSingleChoice" xpath="//div[@class='b_toolbox'][descendant::text()='Add']//a[descendant::text()='Single choice']" description="The Single choice link in the add toolbox"/> - <xpath-ui-element name="addMultipleChoice" xpath="//div[@class='b_toolbox'][descendant::text()='Add']//a[descendant::text()='Multiple choice']" description="The Multiple choice link in the add toolbox"/> - <xpath-ui-element name="addKprim" xpath="//div[@class='b_toolbox'][descendant::text()='Add']//a[descendant::text()='Kprim']" description="The Kprim link in the add toolbox"/> - <xpath-ui-element name="addGapText" xpath="//div[@class='b_toolbox'][descendant::text()='Add']//a[descendant::text()='Gap text']" description="The Gap text link in the add toolbox"/> - <xpath-ui-element name="addText" xpath="//div[@class='b_toolbox'][descendant::text()='Add']//a[descendant::text()='Text']" description="The text link in the add toolbox"/> - <xpath-ui-element name="insertAsRootsFirstChild" xpath="//div[@class='b_selectiontree_content']//input[@class='b_radio']" description="Choose first child of root"/> - <xpath-ui-element name="save" xpath="//div[@class='b_selectiontree']//button[.//text()='Save']" description="The save button of inserting test elements"/> - </pageset> - <pageset name="Change" description="the Change toolbox"> - <xpath-ui-element name="changeDelete" xpath="//div[@class='b_toolbox'][descendant::text()='Change']//a[contains(descendant::text(), 'Delete')]" description="the Delete link in the Change toolbox"/> - <!-- <xpath-ui-element name="changeMove" xpath="//div[@class='b_toolbox'][descendant::text()='Change']//a[contains(descendant::text(), 'Move')]" description="the Delete link in the Change toolbox"/> asa unused --> - <xpath-ui-element name="changeCopy" xpath="//div[@class='b_toolbox'][descendant::text()='Change']//a[contains(descendant::text(), 'Copy')]" description="the Delete link in the Change toolbox"/> - </pageset> - </pageset> - <pageset name="dialog" description="all dialogs in the test editor"> - <xpath-ui-element xpath="//div[contains(.//text(), 'Close/save editor')]/..//a[.//text()='Save']" name="clickSave" description="save button when closing the testeditor"></xpath-ui-element> - <!-- <xpath-ui-element xpath="//div[contains(.//text(), 'Close/save editor')]/..//a[.//text()='Discard']" name="clickDiscard" description="Discard button when closing the testeditor"></xpath-ui-element> - <xpath-ui-element xpath="//div[contains(.//text(), 'Close/save editor')]/..//a[.//text()='Cancel']" name="clickCancel" description="Cancel button when closing the testeditor"></xpath-ui-element> asa unused --> - <xpath-ui-element xpath="//div[contains(@class, 'x-window-dlg')]//button[text()='OK']" name="clickOk" description="Ok button after error deleting item"></xpath-ui-element> - <xpath-ui-element xpath="//div[contains(.//text(), 'Do you really want to delete')]/..//a[.//text()='Yes']" name="clickYes" description="confirm yes of dialog when deleting item"></xpath-ui-element> - <!-- <xpath-ui-element xpath="//div[contains(.//text(), 'Do you really want to delete')]/..//a[.//text()='No']" name="clickNo" description="confirm no of dialog when deleting item"></xpath-ui-element> asa unused --> - - </pageset> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/profile/selenium/ui-map/userAdministration-pageset.xml b/src/test/profile/selenium/ui-map/userAdministration-pageset.xml deleted file mode 100644 index d6539779860..00000000000 --- a/src/test/profile/selenium/ui-map/userAdministration-pageset.xml +++ /dev/null @@ -1,122 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ui-map-include PUBLIC "olat/ui-map-include" "resources/olat-ui-map-include.dtd"> - -<ui-map-include> - <pageset name="userManagement" description="user management open"> - <pageset name="menu" description="menu on the left hand side"> - <xpath-ui-element name="userManagement" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='User management']" description="user management link in the menu"/> - <xpath-ui-element name="userSearch" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='User search']" description="user search link in the menu"/> - <xpath-ui-element name="createUser" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Create user']" description="create user link in the menu"/> - <xpath-ui-element name="importUsers" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Import users']" description="import users link in the menu"/> - <xpath-ui-element name="deleteUser" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Delete user']" description="delete user link in the menu"/> - <xpath-ui-element name="deleteUserImmediately" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Delete user immediately']" description="delete user immediately link in the menu"/> - <xpath-ui-element name="usersReplayURL" xpath="//div[@class='b_tree']//a[descendant-or-self::text()='Users ReplayURL and AJAX ']" description="users replay URL in menu"></xpath-ui-element> - </pageset> - <pageset name="content" description="content of user management"> - <pageset name="userSearch" description="user search form"> - <testcase-macro name="go"> - <call-macro name="login"/> - <selenium command="clickAndWait" target="tabs::userManagement"/> - </testcase-macro> - <default-testcase testcase="go" final-command="type(foo)"/> - <!-- <xpath-ui-element name="userName" xpath="//fieldset[./legend/text()='User search']//input[@id='login']" description="user name field"/> unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='firstName']" name="firstName" description="first name field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='lastName']" name="lastName" description="last name field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='email']" name="email" description="email field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='zipCode']" name="zipCode" description="zip code field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='region']" name="region" description="region field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='city']" name="city" description="city field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='country']" name="country" description="country field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='institutionalName']" name="institution" description="institution field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='institutionalUserIdentifier']" name="institutionalIdentifier" description="instutition identifier field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='institutionalEmail']" name="institutionalEmail" description="instutitional email field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='orgUnit']" name="orgUnit" description="organizational unit field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='studySubject']" name="fieldOfStudies" description="field of studies field"/> asa unused --> - - <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@class='b_checkbox' and @value='Administrator']" name="administrator" description="the administrator checkbox" testcase="go/check(userManagement::content_userSearch_administrator)"/> - <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@class='b_checkbox' and @value='Author']" name="author" description="the author checkbox" testcase="go/check(userManagement::content_userSearch_author)"/> - <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@class='b_checkbox' and @value='Group manager']" name="groupManager" description="the group manager checkbox" testcase="go/check(userManagement::content_userSearch_groupManager)"/> - <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@class='b_checkbox' and @value='User manager']" name="userManager" description="the user manager checkbox" testcase="go/check(userManagement::content_userSearch_userManager)"/> - - <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@class='b_checkbox' and @value='OLAT/WebDAV password ']" name="olatWebdavPassword" description="the olat/webdav password checkbox" testcase="go/check(userManagement::content_userSearch_olatWebdavPassword)"/> - <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@class='b_checkbox' and @value='No authentication']" name="noAuthentication" description="the no authentication checkbox" testcase="go/check(userManagement::content_userSearch_noAuthentication)"/> - <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//select[@name='status']" name="status" description="status dropdown" testcase="go/select(userManagement::content_userSearch_status,Active)"/> - - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='afterDate']" name="createdAfter" description="the created-after field"/> asa unused --> - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@id='beforeDate']" name="createdBefore" description="the created-before field"/> asa unused --> - - <!-- <xpath-ui-element xpath="//fieldset[./legend/text()='User search']//input[@value='Search']" name="search" description="the search button" testcase="go/userManagement::content_userSearch_search"/> unused --> - </pageset> - - <pageset name="createUser" description="create new user form"> - <testcase-macro name="go"> - <call-macro name="login"/> - <selenium command="clickAndWait" target="tabs::userManagement"/> - <selenium command="clickAndWait" target="userManagement::menu_createUser"/> - </testcase-macro> - <default-testcase testcase="go" final-command="type(foo)"/> - - <!-- <xpath-ui-element name="userName" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='User name']//input" description="user name field"/> - <xpath-ui-element name="firstName" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='First name']//input" description="first name field"/> - <xpath-ui-element name="lastName" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='Last name']//input" description="last name field"/> - <xpath-ui-element name="email" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='E-mail address']//input" description="email field"/> - <xpath-ui-element name="institution" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='Institution']//input" description="institution field"/> - <xpath-ui-element name="institutionalId" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and contains(.//label/text(), 'Institution identifier')]//input" description="institution identifier field"/> - <xpath-ui-element name="institutionalEmail" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='Institutional e-mail']//input" description="institutional email field"/> - <xpath-ui-element name="orgUnit" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='Organizational unit / study group']//input" description="organizational unit / study group field"/> - <xpath-ui-element name="fieldOfStudies" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='Field of studies']//input" description="field of study field"/> - <xpath-ui-element name="password" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='Password']//input" description="password field"/> - <xpath-ui-element name="verifyPassword" xpath="//fieldset[./legend/text()='Create new user']//div[@class='b_form_element_wrapper b_clearfix' and .//label/text()='Verify password']//input" description="verify password field"/> unused --> - <xpath-ui-element name="language" xpath="//select[@name='new.form.language_SELBOX']" description="select language"></xpath-ui-element> - <xpath-ui-element name="save" xpath="//fieldset[./legend/text()='Create new user']//button[./span/text()='Save']" description="the save button" testcase="go/userManagement::content_createUser_save"/> - </pageset> - - <pageset name="userdetail" description="the detail settings of a particular user - under user management"> - <testcase-macro name="go"> - <call-macro name="login"/> - <selenium command="clickAndWait" target="tabs::userManagement"/> - <selenium command="clickAndWait" target="userManagement::menu_userManagement"/> - <selenium command="type" target="userManagement::content_userSearch_userName" value="administrator"/> - <selenium command="clickAndWait" target="userManagement::content_userSearch_search"/> - <selenium command="clickAndWait" target="ui=commons::usertable_userlist_selectUserName(nameOfUser=administrator)"/> - </testcase-macro> - <default-testcase testcase="go" final-command="clickAndWait"/> - <xpath-ui-element name="userProfile" xpath="//div[@class='b_tabbedpane_tabs']//a[./text()='User profile']" description="the user profile tab link" testcase="go/userManagement::content_userdetail_systemSettings/userManagement::content_userdetail_userProfile"/> - <xpath-ui-element name="systemSettings" xpath="//div[@class='b_tabbedpane_tabs']//a[./text()='System settings']" description="the system settings tab link"/> - <xpath-ui-element name="changePassword" xpath="//div[@class='b_tabbedpane_tabs']//a[./text()='Change password']" description="the change password tab link"/> - <!-- <xpath-ui-element xpath="//div[@class='b_tabbedpane_tabs']//a[./text()='Authentications']" name="authentications" description="the authentications tab link"/> asa unused --> - <!-- <xpath-ui-element xpath="//div[@class='b_tabbedpane_tabs']//a[./text()='Properties']" name="properties" description="the properties tab link"/> asa unused --> - <!-- <xpath-ui-element xpath="//div[@class='b_tabbedpane_tabs']//a[./text()='Rights']" name="rights" description="the rights tab link"/> asa unused --> - <xpath-ui-element name="roles" xpath="//div[@class='b_tabbedpane_tabs']//a[./text()='Roles']" description="the roles tab link"/> - <!-- <xpath-ui-element xpath="//div[@class='b_tabbedpane_tabs']//a[./text()='Quota']" name="quota" description="the quota tab link"/> asa unused --> - - <pageset name="changePasswordTab" description="change password tab"> - <xpath-ui-element name="newPassword" xpath="//div[@class='b_form_element_wrapper b_clearfix' and .//text()='New password']//div[@class='b_form_element']//input[@type='password']" description="new password input"/> - <xpath-ui-element name="confirmPassword" xpath="//div[@class='b_form_element_wrapper b_clearfix' and .//text()='Confirm password']//div[@class='b_form_element']//input[@type='password']" description="confirm password input"/> - </pageset> - - <pageset name="roles" description="roles tab"> - <xpath-ui-element name="isUsermanager" xpath="//input[@name='roles' and @value='isUserManager']" description="isUsermanager checkbox"/> - <xpath-ui-element name="isGroupmanager" xpath="//input[@name='roles' and @value='isGroupManager']" description="isGroupmanager checkbox"/> - <xpath-ui-element name="isAuthor" xpath="//input[@name='roles' and @value='isAuthor']" description="isAuthor checkbox"/> - <xpath-ui-element name="isAdmin" xpath="//input[@name='roles' and @value='isAdmin']" description="isAdmin checkbox"/> - <xpath-ui-element name="isLearningResourceManager" xpath="//input[@name='roles' and @value='isInstitutionalResourcemanager']" description="Learning resource manager checkbox"/> - <!-- <xpath-ui-element name="save" xpath="//fieldset[contains(./legend/text(), 'Assign system roles and rights')]//input[@value='Save']" description="the save button"/> unused --> - </pageset> - </pageset> - - <pageset name="importUsers" description="import users links"> - <xpath-ui-element name="startUserImport" xpath="//a[descendant::text()='Start user import ']" description="click start user import"/> - <xpath-ui-element name="fillTextArea" xpath="//fieldset[./legend='User import']//textarea" description="fill text area with the user table"/> - <xpath-ui-element name="next" xpath="//a[@class='b_button b_wizard_button_next']" description="Next button of the import users wizard"/> - <xpath-ui-element name="finish" xpath="//a[@class='b_button b_wizard_button_finish']" description="Finish button of the import users wizard"/> - <xpath-ui-element name="cancel" xpath="//a[@class='b_button b_wizard_button_cancel']" description="cancel link of the import users wizard"/> - <xpath-ui-element name="importWarnIcon" xpath="//span[@class='b_small_icon b_warn_icon']" description="import warn icon"/> - </pageset> - - <pageset name="usersReplayURL" description="replay URL ans AJAX OFF"> - <xpath-ui-element name="userReplayTextArea" xpath="//textarea[@name='bulkuserreplay.tt']" description="user replay text area"></xpath-ui-element> - </pageset> - </pageset> - </pageset> -</ui-map-include> \ No newline at end of file diff --git a/src/test/resources/arquillian.xml b/src/test/resources/arquillian.xml new file mode 100644 index 00000000000..344f41ce424 --- /dev/null +++ b/src/test/resources/arquillian.xml @@ -0,0 +1,18 @@ +<arquillian xmlns="http://jboss.org/schema/arquillian" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://jboss.org/schema/arquillian + http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> + + <engine> + <property name="deploymentExportPath">target/arquillianDeployments</property> + </engine> + + <container qualifier="tomcat-7-managed" default="true"> + <configuration> + <property name="workDir">target/arquillianDeployments</property> + <property name="catalinaHome">target/arq-apache-tomcat-7.0.27</property> + </configuration> + </container> + +</arquillian> \ No newline at end of file -- GitLab