[TASK] Enable v8 acceptance testing again 45/58645/31
authorChristian Kuhn <lolli@schwarzbu.ch>
Tue, 16 Oct 2018 15:26:18 +0000 (17:26 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Wed, 17 Oct 2018 17:08:12 +0000 (19:08 +0200)
core master and typo3/testing-framework received lots
of patches to stabilize the acceptance tests while these
tests remained inactive in v8 branch. The patch ports
the meanwhile pretty stable test changes from master
back to v8 and activates ac testing in bamboo as pre-merge
and nightly again.

composer remove enm1989/chromedriver
composer require --dev typo3/testing-framework ~1.3.0

Change-Id: I68294e1304bf8fd0f7f5a2a35199c6728189286a
Resolves: #86677
Releases: 8.7
Reviewed-on: https://review.typo3.org/58645
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
59 files changed:
Build/bamboo/src/main/java/core/AbstractCoreSpec.java
Build/bamboo/src/main/java/core/NightlySpec.java
Build/bamboo/src/main/java/core/PreMergeSpec.java
Build/testing-docker/bamboo/docker-compose.yml
composer.json
composer.lock
typo3/sysext/core/Tests/Acceptance.suite.yml [deleted file]
typo3/sysext/core/Tests/Acceptance/Backend.suite.yml [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/BackendUser/ListUserCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Extensionmanager/GetExtensionsCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Extensionmanager/InstalledExtensionsCest.php
typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/AbstractElementsBasicCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/CategoryTreeCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputDateCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputEvalCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputRangeCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputSimpleCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsGroupCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/FalMetadataInheritanceCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/Inline1nCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/AbstractElementsBasicCest.php [deleted file]
typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/CategoryTreeCest.php [deleted file]
typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/ElementsBasicInputCest.php [deleted file]
typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/ElementsBasicInputDateCest.php [deleted file]
typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/ElementsGroupCest.php [deleted file]
typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/FalMetadataInheritanceCest.php [deleted file]
typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/Inline1nCest.php [deleted file]
typo3/sysext/core/Tests/Acceptance/Backend/General/ModuleMenuCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Install/InstallModuleCest.php [deleted file]
typo3/sysext/core/Tests/Acceptance/Backend/Language/LanguageCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Login/BackendLoginCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Page/AddPageInPageModuleCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Page/PageModuleCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Scheduler/TasksCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Template/TemplateCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Topbar/BookmarkCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Topbar/FlushCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Topbar/HelpCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Topbar/LogoCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Topbar/ModuleMenuButtonCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Topbar/NavigationComponentTreeCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Topbar/SearchCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Topbar/UsernameOnAvatarCest.php
typo3/sysext/core/Tests/Acceptance/Install.suite.yml [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Install/Mysql/BlankPageCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Install/Mysql/IntroductionPackageCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Install/Postgresql/BlankPageCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Install/Postgresql/IntroductionPackageCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Support/BackendTester.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Support/Helper/ModalDialog.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Support/Helper/PageTree.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Support/InstallTester.php [new file with mode: 0644]
typo3/sysext/core/Tests/AcceptanceInstallMysql.suite.yml [deleted file]
typo3/sysext/core/Tests/AcceptanceInstallMysql/InstallWithMysqlBlankPageCest.php [deleted file]
typo3/sysext/core/Tests/AcceptanceInstallMysql/InstallWithMysqlIntroductionPackageCest.php [deleted file]
typo3/sysext/core/Tests/AcceptanceInstallPgsql.suite.yml [deleted file]
typo3/sysext/core/Tests/AcceptanceInstallPgsql/InstallWithPgsqlBlankPageCest.php [deleted file]
typo3/sysext/core/Tests/AcceptanceInstallPgsql/InstallWithPgsqlIntroductionPackageCest.php [deleted file]
typo3/sysext/core/Tests/codeception.yml [new file with mode: 0644]

index 0b17382..0fe0254 100644 (file)
@@ -176,33 +176,52 @@ abstract public class AbstractCoreSpec {
      */
     protected Job getJobAcceptanceTestInstallMysql(String requirementIdentifier) {
         return new Job("Accept inst my " + requirementIdentifier, new BambooKey("ACINSTMY" + requirementIdentifier))
-            .description("Install TYPO3 on mysql and create empty frontend page " + requirementIdentifier)
+            .description("Install TYPO3 on mariadb and load introduction package " + requirementIdentifier)
             .pluginConfigurations(this.getDefaultJobPluginConfiguration())
             .tasks(
                 this.getTaskGitCloneRepository(),
                 this.getTaskGitCherryPick(),
                 this.getTaskComposerInstall(requirementIdentifier),
                 this.getTaskPrepareAcceptanceTest(),
-                new CommandTask()
-                    .description("Execute codeception AcceptanceInstallMysql suite")
-                    .executable("codecept")
-                    .argument("run AcceptanceInstallMysql -d -c " + this.testingFrameworkBuildPath + "AcceptanceTestsInstallMysql.yml --xml reports.xml --html reports.html")
-                    .environmentVariables(this.credentialsMysql)
+                this.getTaskDockerDependenciesAcceptanceInstallMariadb10(),
+                new ScriptTask()
+                    .description("Install TYPO3 on mariadb 10")
+                    .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE)
+                    .inlineBody(
+                        this.getScriptTaskBashInlineBody() +
+                        "function codecept() {\n" +
+                        "    docker run \\\n" +
+                        "        -u ${HOST_UID} \\\n" +
+                        "        -v /bamboo-data/${BAMBOO_COMPOSE_PROJECT_NAME}/passwd:/etc/passwd \\\n" +
+                        "        -v ${BAMBOO_COMPOSE_PROJECT_NAME}_bamboo-data:/srv/bamboo/xml-data/build-dir/ \\\n" +
+                        "        -e typo3InstallMysqlDatabaseHost=${typo3InstallMysqlDatabaseHost} \\\n" +
+                        "        -e typo3InstallMysqlDatabaseName=${typo3InstallMysqlDatabaseName} \\\n" +
+                        "        -e typo3InstallMysqlDatabaseUsername=${typo3InstallMysqlDatabaseUsername} \\\n" +
+                        "        -e typo3InstallMysqlDatabasePassword=${typo3InstallMysqlDatabasePassword} \\\n" +
+                        "        --name ${BAMBOO_COMPOSE_PROJECT_NAME}sib_adhoc \\\n" +
+                        "        --network ${BAMBOO_COMPOSE_PROJECT_NAME}_test \\\n" +
+                        "        --rm \\\n" +
+                        "        typo3gmbh/" + requirementIdentifier.toLowerCase() + ":latest \\\n" +
+                        "        bin/bash -c \"cd ${PWD}; ./bin/codecept $*\"\n" +
+                        "}\n" +
+                        "\n" +
+                        "codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml --env=mysql --xml reports.xml --html reports.html\n"
+                    )
             )
             .finalTasks(
+                this.getTaskStopDockerDependencies(),
                 new TestParserTask(TestParserTaskProperties.TestType.JUNIT)
-                    .resultDirectories("typo3temp/var/tests/AcceptanceReportsInstallMysql/reports.xml")
-            )
-            .requirements(
-                this.getRequirementDocker10()
+                    .resultDirectories("typo3temp/var/tests/AcceptanceReports/reports.xml")
             )
             .artifacts(new Artifact()
                 .name("Test Report")
-                .copyPattern("typo3temp/var/tests/AcceptanceReportsInstallMysql/")
+                .copyPattern("typo3temp/var/tests/AcceptanceReports/")
                 .shared(false)
             )
-            .cleanWorkingDirectory(true)
-            .enabled(false);
+            .requirements(
+                this.getRequirementDocker10()
+            )
+            .cleanWorkingDirectory(true);
     }
 
     /**
@@ -219,26 +238,45 @@ abstract public class AbstractCoreSpec {
             this.getTaskGitCherryPick(),
             this.getTaskComposerInstall(requirementIdentifier),
             this.getTaskPrepareAcceptanceTest(),
-            new CommandTask()
-                .description("Execute codeception AcceptanceInstallPgsql suite")
-                .executable("codecept")
-                .argument("run AcceptanceInstallPgsql -d -c " + this.testingFrameworkBuildPath + "AcceptanceTestsInstallPgsql.yml --xml reports.xml --html reports.html")
-                .environmentVariables(this.credentialsPgsql)
+            this.getTaskDockerDependenciesAcceptanceInstallPostgres95(),
+            new ScriptTask()
+                .description("Install TYPO3 on postgresql 9.5")
+                .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE)
+                .inlineBody(
+                    this.getScriptTaskBashInlineBody() +
+                    "function codecept() {\n" +
+                    "    docker run \\\n" +
+                    "        -u ${HOST_UID} \\\n" +
+                    "        -v /bamboo-data/${BAMBOO_COMPOSE_PROJECT_NAME}/passwd:/etc/passwd \\\n" +
+                    "        -v ${BAMBOO_COMPOSE_PROJECT_NAME}_bamboo-data:/srv/bamboo/xml-data/build-dir/ \\\n" +
+                    "        -e typo3InstallPostgresqlDatabaseHost=postgres9-5 \\\n" +
+                    "        -e typo3InstallPostgresqlDatabaseName=${typo3InstallPostgresqlDatabaseName} \\\n" +
+                    "        -e typo3InstallPostgresqlDatabaseUsername=${typo3InstallPostgresqlDatabaseUsername} \\\n" +
+                    "        -e typo3InstallPostgresqlDatabasePassword=${typo3InstallPostgresqlDatabasePassword} \\\n" +
+                    "        --name ${BAMBOO_COMPOSE_PROJECT_NAME}sib_adhoc \\\n" +
+                    "        --network ${BAMBOO_COMPOSE_PROJECT_NAME}_test \\\n" +
+                    "        --rm \\\n" +
+                    "        typo3gmbh/" + requirementIdentifier.toLowerCase() + ":latest \\\n" +
+                    "        bin/bash -c \"cd ${PWD}; ./bin/codecept $*\"\n" +
+                    "}\n" +
+                    "\n" +
+                    "codecept run Install -d -c typo3/sysext/core/Tests/codeception.yml --env=postgresql --xml reports.xml --html reports.html\n"
+                )
         )
         .finalTasks(
+            this.getTaskStopDockerDependencies(),
             new TestParserTask(TestParserTaskProperties.TestType.JUNIT)
-                .resultDirectories("typo3temp/var/tests/AcceptanceReportsInstallPgsql/reports.xml")
-        )
-        .requirements(
-            this.getRequirementDocker10()
+                .resultDirectories("typo3temp/var/tests/AcceptanceReports/reports.xml")
         )
         .artifacts(new Artifact()
             .name("Test Report")
-            .copyPattern("typo3temp/var/tests/AcceptanceReportsInstallPgsql/")
+            .copyPattern("typo3temp/var/tests/AcceptanceReports/")
             .shared(false)
         )
-        .cleanWorkingDirectory(true)
-        .enabled(false);
+        .requirements(
+            this.getRequirementDocker10()
+        )
+        .cleanWorkingDirectory(true);
     }
 
     /**
@@ -247,7 +285,7 @@ abstract public class AbstractCoreSpec {
      * @param int numberOfChunks
      * @param String requirementIdentifier
      */
-    protected ArrayList<Job> getJobsAcceptanceTestsMysql(int numberOfChunks, String requirementIdentifier) {
+    protected ArrayList<Job> getJobsAcceptanceTestsBackendMysql(int numberOfChunks, String requirementIdentifier) {
         ArrayList<Job> jobs = new ArrayList<Job>();
 
         for (int i=1; i<=numberOfChunks; i++) {
@@ -259,33 +297,63 @@ abstract public class AbstractCoreSpec {
                     this.getTaskGitCherryPick(),
                     this.getTaskComposerInstall(requirementIdentifier),
                     this.getTaskPrepareAcceptanceTest(),
+                    this.getTaskDockerDependenciesAcceptanceBackendMariadb10(),
                     new ScriptTask()
                         .description("Split acceptance tests")
                         .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE)
                         .inlineBody(
                             this.getScriptTaskBashInlineBody() +
-                            "./" + this.testingFrameworkBuildPath + "Scripts/splitAcceptanceTests.sh " + numberOfChunks + "\n"
+                            "function splitAcceptanceTests() {\n" +
+                            "    docker run \\\n" +
+                            "        -u ${HOST_UID} \\\n" +
+                            "        -v /bamboo-data/${BAMBOO_COMPOSE_PROJECT_NAME}/passwd:/etc/passwd \\\n" +
+                            "        -v ${BAMBOO_COMPOSE_PROJECT_NAME}_bamboo-data:/srv/bamboo/xml-data/build-dir/ \\\n" +
+                            "        --name ${BAMBOO_COMPOSE_PROJECT_NAME}sib_adhoc \\\n" +
+                            "        --rm \\\n" +
+                            "        typo3gmbh/" + requirementIdentifier.toLowerCase() + ":latest \\\n" +
+                            "        bin/bash -c \"cd ${PWD}; ./" + this.testingFrameworkBuildPath + "Scripts/splitAcceptanceTests.sh $*\"\n" +
+                            "}\n" +
+                            "\n" +
+                            "splitAcceptanceTests " + numberOfChunks
                         ),
-                    new CommandTask()
+                    new ScriptTask()
                         .description("Execute codeception acceptance suite group " + i)
-                        .executable("codecept")
-                        .argument("run Acceptance -d -g AcceptanceTests-Job-" + i + " -c " + this.testingFrameworkBuildPath + "AcceptanceTests.yml --xml reports.xml --html reports.html")
-                        .environmentVariables(this.credentialsMysql)
+                        .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE)
+                        .inlineBody(
+                            this.getScriptTaskBashInlineBody() +
+                            "function codecept() {\n" +
+                            "    docker run \\\n" +
+                            "        -u ${HOST_UID} \\\n" +
+                            "        -v /bamboo-data/${BAMBOO_COMPOSE_PROJECT_NAME}/passwd:/etc/passwd \\\n" +
+                            "        -v ${BAMBOO_COMPOSE_PROJECT_NAME}_bamboo-data:/srv/bamboo/xml-data/build-dir/ \\\n" +
+                            "        -e typo3DatabaseName=func_test \\\n" +
+                            "        -e typo3DatabaseUsername=root \\\n" +
+                            "        -e typo3DatabasePassword=funcp  \\\n" +
+                            "        -e typo3DatabaseHost=mariadb10  \\\n" +
+                            "        --name ${BAMBOO_COMPOSE_PROJECT_NAME}sib_adhoc \\\n" +
+                            "        --network ${BAMBOO_COMPOSE_PROJECT_NAME}_test \\\n" +
+                            "        --rm \\\n" +
+                            "        typo3gmbh/" + requirementIdentifier.toLowerCase() + ":latest \\\n" +
+                            "        bin/bash -c \"cd ${PWD}; ./bin/codecept $*\"\n" +
+                            "}\n" +
+                            "\n" +
+                            "codecept run Backend -d -g AcceptanceTests-Job-" + i + " -c typo3/sysext/core/Tests/codeception.yml --xml reports.xml --html reports.html\n"
+                        )
                 )
                 .finalTasks(
+                    this.getTaskStopDockerDependencies(),
                     new TestParserTask(TestParserTaskProperties.TestType.JUNIT)
                         .resultDirectories("typo3temp/var/tests/AcceptanceReports/reports.xml")
                 )
-                .requirements(
-                    this.getRequirementDocker10()
-                )
                 .artifacts(new Artifact()
                     .name("Test Report")
                     .copyPattern("typo3temp/var/tests/AcceptanceReports/")
                     .shared(false)
                 )
+                .requirements(
+                    this.getRequirementDocker10()
+                )
                 .cleanWorkingDirectory(true)
-                .enabled(false)
             );
         }
 
@@ -931,21 +999,60 @@ abstract public class AbstractCoreSpec {
      */
     protected Task getTaskPrepareAcceptanceTest() {
         return new ScriptTask()
-            .description("Start php web server, chromedriver, prepare environment")
+            .description("Prepare acceptance test environment")
             .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE)
             .inlineBody(
                 this.getScriptTaskBashInlineBody() +
-                "php -n -c /etc/php/cli-no-xdebug/php.ini -S localhost:8000 >/dev/null 2>&1 &\n" +
-                "echo $! > phpserver.pid\n" +
-                "\n" +
-                "./bin/chromedriver --url-base=/wd/hub >/dev/null 2>&1 &\n" +
-                "echo $! > chromedriver.pid\n" +
-                "\n" +
                 "mkdir -p typo3temp/var/tests/\n"
             );
     }
 
     /**
+     * Start docker sibling containers to execute acceptance install tests on mariadb
+     */
+    protected Task getTaskDockerDependenciesAcceptanceInstallMariadb10() {
+        return new ScriptTask()
+            .description("Start docker siblings for acceptance test install mariadb")
+            .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE)
+            .inlineBody(
+                this.getScriptTaskBashInlineBody() +
+                "cd Build/testing-docker/bamboo\n" +
+                "echo COMPOSE_PROJECT_NAME=${BAMBOO_COMPOSE_PROJECT_NAME}sib > .env\n" +
+                "docker-compose run start_dependencies_acceptance_install_mariadb10"
+            );
+    }
+
+    /**
+     * Start docker sibling containers to execute acceptance install tests on postgres
+     */
+    protected Task getTaskDockerDependenciesAcceptanceInstallPostgres95() {
+        return new ScriptTask()
+            .description("Start docker siblings for acceptance test install postgres")
+            .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE)
+            .inlineBody(
+                this.getScriptTaskBashInlineBody() +
+                "cd Build/testing-docker/bamboo\n" +
+                "echo COMPOSE_PROJECT_NAME=${BAMBOO_COMPOSE_PROJECT_NAME}sib > .env\n" +
+                "docker-compose run start_dependencies_acceptance_install_postgres9-5"
+            );
+    }
+
+    /**
+     * Start docker sibling containers to execute acceptance backend tests on mariadb
+     */
+    protected Task getTaskDockerDependenciesAcceptanceBackendMariadb10() {
+        return new ScriptTask()
+            .description("Start docker siblings for acceptance test backend mariadb")
+            .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE)
+            .inlineBody(
+                this.getScriptTaskBashInlineBody() +
+                "cd Build/testing-docker/bamboo\n" +
+                "echo COMPOSE_PROJECT_NAME=${BAMBOO_COMPOSE_PROJECT_NAME}sib > .env\n" +
+                "docker-compose run start_dependencies_acceptance_backend_mariadb10"
+            );
+    }
+
+    /**
      * Start docker sibling containers to execute functional tests on mariadb
      */
     protected Task getTaskDockerDependenciesFunctionalMariadb10() {
index c0c336c..b78f0d0 100644 (file)
@@ -70,17 +70,11 @@ public class NightlySpec extends AbstractCoreSpec {
 
         jobsMainStage.add(this.getJobComposerValidate("PHP72"));
 
-//        jobsMainStage.add(this.getJobAcceptanceTestInstallMysql("PHP70"));
-//        jobsMainStage.add(this.getJobAcceptanceTestInstallMysql("PHP71"));
-//        jobsMainStage.add(this.getJobAcceptanceTestInstallMysql("PHP72"));
+        jobsMainStage.add(this.getJobAcceptanceTestInstallMysql("PHP72"));
 
-//        jobsMainStage.add(this.getJobAcceptanceTestInstallPgsql("PHP70"));
-//        jobsMainStage.add(this.getJobAcceptanceTestInstallPgsql("PHP71"));
-//        jobsMainStage.add(this.getJobAcceptanceTestInstallPgsql("PHP72"));
+        jobsMainStage.add(this.getJobAcceptanceTestInstallPgsql("PHP72"));
 
-//        jobsMainStage.addAll(this.getJobsAcceptanceTestsMysql(this.numberOfAcceptanceTestJobs, "PHP70"));
-//        jobsMainStage.addAll(this.getJobsAcceptanceTestsMysql(this.numberOfAcceptanceTestJobs, "PHP71"));
-//        jobsMainStage.addAll(this.getJobsAcceptanceTestsMysql(this.numberOfAcceptanceTestJobs, "PHP72"));
+        jobsMainStage.addAll(this.getJobsAcceptanceTestsBackendMysql(this.numberOfAcceptanceTestJobs, "PHP72"));
 
         jobsMainStage.add(this.getJobCglCheckFullCore("PHP72"));
 
index e247b99..8cb07e1 100644 (file)
@@ -89,12 +89,10 @@ public class PreMergeSpec extends AbstractCoreSpec {
         // MAIN stage
         ArrayList<Job> jobsMainStage = new ArrayList<Job>();
 
-        // @todo: decide on specific php version this should run on
-//        jobsMainStage.add(this.getJobAcceptanceTestInstallMysql("PHP72"));
-//        jobsMainStage.add(this.getJobAcceptanceTestInstallPgsql("PHP72"));
+        jobsMainStage.add(this.getJobAcceptanceTestInstallMysql("PHP72"));
+        jobsMainStage.add(this.getJobAcceptanceTestInstallPgsql("PHP72"));
 
-        // @todo: decide on specific php version this should run on
-//        jobsMainStage.addAll(this.getJobsAcceptanceTestsMysql(this.numberOfAcceptanceTestJobs, "PHP72"));
+        jobsMainStage.addAll(this.getJobsAcceptanceTestsBackendMysql(this.numberOfAcceptanceTestJobs, "PHP72"));
 
         jobsMainStage.add(this.getJobIntegrationVarious("PHP72"));
 
index 245f36e..94c089a 100644 (file)
@@ -87,6 +87,24 @@ services:
         echo Connected!;
       "
 
+  start_dependencies_acceptance_backend_mariadb10:
+    image: alpine:3.8
+    links:
+      - mariadb10
+      - chrome
+      - web
+    networks:
+      - test
+    command: >
+      /bin/sh -c "
+        echo Waiting for db start...;
+        while ! nc -z mariadb10 3306;
+        do
+          sleep 1;
+        done;
+        echo Connected!;
+      "
+
   start_dependencies_functional_mariadb10:
     image: alpine:3.8
     links:
index 55c336a..5948a52 100644 (file)
        },
        "require-dev": {
                "codeception/codeception": "^2.3",
-               "enm1989/chromedriver": "~2.30",
                "fiunchinho/phpunit-randomizer": "~3.0.0",
                "friendsofphp/php-cs-fixer": "^2.0",
                "typo3/cms-styleguide": "~8.0.15",
-               "typo3/testing-framework": "~1.2.2"
+               "typo3/testing-framework": "~1.3.0"
        },
        "suggest": {
                "ext-fileinfo": "Used for proper file type detection in the file abstraction layer",
index 30e63df..92aa216 100644 (file)
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "691851190de8716c182df21aff7ba2a9",
+    "content-hash": "73f8ef6f02ae8a0be883b54423cc5cb4",
     "packages": [
         {
             "name": "cogpowered/finediff",
             "time": "2018-04-11T15:42:36+00:00"
         },
         {
-            "name": "enm1989/chromedriver",
-            "version": "2.38",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/ENM1989/chromedriver.git",
-                "reference": "f269e7f58e3e0c8b52a1396b64b679949973f76a"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/ENM1989/chromedriver/zipball/f269e7f58e3e0c8b52a1396b64b679949973f76a",
-                "reference": "f269e7f58e3e0c8b52a1396b64b679949973f76a",
-                "shasum": ""
-            },
-            "bin": [
-                "bin/chromedriver"
-            ],
-            "type": "library",
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "Apache-2.0"
-            ],
-            "authors": [
-                {
-                    "name": "Nico Müller",
-                    "email": "nico.mueller.1989@googlemail.com"
-                }
-            ],
-            "description": "Composer distribution of Chromedriver. Adds a executable to your composer bin directory.",
-            "homepage": "https://github.com/ENM1989/chromedriver",
-            "keywords": [
-                "Chromedriver",
-                "chrome",
-                "selenium",
-                "webdriver"
-            ],
-            "time": "2018-04-20T19:02:08+00:00"
-        },
-        {
             "name": "facebook/webdriver",
             "version": "1.3.0",
             "source": {
         },
         {
             "name": "typo3/testing-framework",
-            "version": "1.2.7",
+            "version": "1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/TYPO3/testing-framework.git",
-                "reference": "dfed706443fd9008b321a13d6d2522da3ba3dd73"
+                "reference": "e541dfeaa2950022890ddb689d1f2422d97c2be0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/TYPO3/testing-framework/zipball/dfed706443fd9008b321a13d6d2522da3ba3dd73",
-                "reference": "dfed706443fd9008b321a13d6d2522da3ba3dd73",
+                "url": "https://api.github.com/repos/TYPO3/testing-framework/zipball/e541dfeaa2950022890ddb689d1f2422d97c2be0",
+                "reference": "e541dfeaa2950022890ddb689d1f2422d97c2be0",
                 "shasum": ""
             },
             "require": {
                 "tests",
                 "typo3"
             ],
-            "time": "2018-09-01T14:23:29+00:00"
+            "time": "2018-10-17T15:42:32+00:00"
         },
         {
             "name": "webmozart/assert",
diff --git a/typo3/sysext/core/Tests/Acceptance.suite.yml b/typo3/sysext/core/Tests/Acceptance.suite.yml
deleted file mode 100644 (file)
index d8ce31c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-class_name: AcceptanceTester
-modules:
-  enabled:
-    - WebDriver
-    - \Helper\Acceptance
-    - Asserts
-  config:
-    WebDriver:
-      url: http://localhost:8000/typo3temp/var/tests/acceptance
-      browser: chrome
-      port: 9515
-      capabilities:
-        # Disable the "scroll to element before clicking" behavior as this breaks tests
-        # where for example a fixed docbar is used. Selenium scrolls to the element before
-        # clicking it and then complains that it can't click the element because another elemnt
-        # is overlaying it.
-        # You have to ensure that the element is in the viewport by your own before clicking it!
-        # You can simply do that by scrolling to it.
-        elementScrollBehavior: 1
-        chromeOptions:
-          args: ["--headless", "--no-sandbox", "window-size=1280x1024", "--proxy-server='direct://'", "--proxy-bypass-list=*", "--disable-gpu"]
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend.suite.yml b/typo3/sysext/core/Tests/Acceptance/Backend.suite.yml
new file mode 100644 (file)
index 0000000..9f72046
--- /dev/null
@@ -0,0 +1,21 @@
+class_name: BackendTester
+modules:
+  enabled:
+    - WebDriver:
+        url: http://web:8000/typo3temp/var/tests/acceptance
+        browser: chrome
+        wait: 1
+        host: chrome
+    - \TYPO3\TestingFramework\Core\Acceptance\Helper\Login:
+        sessions:
+            # This sessions must exist in the database fixture to get a logged in state.
+            editor: ff83dfd81e20b34c27d3e97771a4525a
+            admin: 886526ce72b86870739cc41991144ec1
+    - Asserts
+
+extensions:
+    enabled:
+        - TYPO3\TestingFramework\Core\Acceptance\Extension\BackendCoreEnvironment
+
+groups:
+  AcceptanceTests-Job-*: AcceptanceTests-Job-*
index 0d0711e..50e788d 100644 (file)
@@ -14,7 +14,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\BackendUser;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * List User tests
@@ -22,28 +22,22 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class ListUserCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
 
         $I->see('Backend users');
         $I->click('Backend users');
 
-        // switch to content iframe
-        $I->switchToIFrame('list_frame');
-        $I->waitForElementNotVisible('div#nprogess');
+        $I->switchToContentFrame();
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function showsHeadingAndListsBackendUsers(Admin $I)
+    public function showsHeadingAndListsBackendUsers(BackendTester $I)
     {
         $I->see('Backend User Listing');
 
@@ -55,9 +49,9 @@ class ListUserCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function filterUsersByUsername(Admin $I)
+    public function filterUsersByUsername(BackendTester $I)
     {
         $I->wantTo('See the table of users');
         $I->waitForElementVisible('#typo3-backend-user-list');
@@ -84,9 +78,9 @@ class ListUserCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function filterUsersByAdmin(Admin $I)
+    public function filterUsersByAdmin(BackendTester $I)
     {
         $I->wantTo('See the table of users');
         $I->waitForElementVisible('#typo3-backend-user-list');
@@ -113,9 +107,9 @@ class ListUserCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function filterUsersByStatus(Admin $I)
+    public function filterUsersByStatus(BackendTester $I)
     {
         $I->wantTo('See the table of users');
         $I->waitForElementVisible('#typo3-backend-user-list');
@@ -142,9 +136,9 @@ class ListUserCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function filterUsersByLogin(Admin $I)
+    public function filterUsersByLogin(BackendTester $I)
     {
         $I->wantTo('See the table of users');
         $I->waitForElementVisible('#typo3-backend-user-list');
@@ -171,9 +165,9 @@ class ListUserCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function filterUsersByUserGroup(Admin $I)
+    public function filterUsersByUserGroup(BackendTester $I)
     {
         $I->wantTo('See the table of users');
         $I->waitForElementVisible('#typo3-backend-user-list');
@@ -192,10 +186,10 @@ class ListUserCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      * @param int $countOfUsers
      */
-    protected function checkCountOfUsers(Admin $I, $countOfUsers)
+    protected function checkCountOfUsers(BackendTester $I, $countOfUsers)
     {
         $I->canSeeNumberOfElements('#typo3-backend-user-list tbody tr', $countOfUsers);
         $I->wantToTest('If a number of users is shown in the footer row');
index c5847dc..864cc99 100644 (file)
@@ -15,7 +15,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Extensionmanager;
  */
 
 use Facebook\WebDriver\WebDriverKeys;
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Tests for the "Get Extensions view" of the extension manager
@@ -23,18 +23,14 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class GetExtensionsCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
 
         $I->click('Extensions', '#menu');
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->waitForElementVisible('#typo3-extension-list');
 
         $I->selectOption('[name="ExtensionManagerModuleMenu"]', 'Get Extensions');
@@ -45,27 +41,27 @@ class GetExtensionsCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkRetrievedExtensionsFromTerAreDisplayed(Admin $I)
+    public function checkRetrievedExtensionsFromTerAreDisplayed(BackendTester $I)
     {
         $I->see('superext');
         $I->see('neededext');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkPageBrowserDisplaysTwoRecords(Admin $I)
+    public function checkPageBrowserDisplaysTwoRecords(BackendTester $I)
     {
         $I->canSeeElement('.pagination-wrap');
         $I->canSee('Records 1 - 2');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkSearchFilterListFindsExtensionKey(Admin $I)
+    public function checkSearchFilterListFindsExtensionKey(BackendTester $I)
     {
         $I->fillField('input[name="tx_extensionmanager_tools_extensionmanagerextensionmanager[search]"]', 'superext');
         $I->click('Go');
@@ -88,9 +84,9 @@ class GetExtensionsCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkSearchFilterListFindsPartOfExtensionKey(Admin $I)
+    public function checkSearchFilterListFindsPartOfExtensionKey(BackendTester $I)
     {
         $I->fillField('input[name="tx_extensionmanager_tools_extensionmanagerextensionmanager[search]"]', 'ext');
         $I->click('Go');
index fdf2460..a1fb24c 100644 (file)
@@ -14,7 +14,8 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Extensionmanager;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use Codeception\Util\Locator;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Tests for the "Install list view" of the extension manager
@@ -22,48 +23,45 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class InstalledExtensionsCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
 
         $I->click('Extensions', '#menu');
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->waitForElementVisible('#typo3-extension-list');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkSearchFiltersList(Admin $I)
+    public function checkSearchFiltersList(BackendTester $I)
     {
         $I->canSeeNumberOfElements('#typo3-extension-list tbody tr[role="row"]', [10, 100]);
 
         // Fill extension search field
         $I->fillField('Tx_Extensionmanager_extensionkey', 'cshmanual');
+        $I->waitForElementNotVisible(Locator::contains('#typo3-extension-list', 'core'));
 
         // see 2 rows. 1 for the header and one for the result
         $I->canSeeNumberOfElements('#typo3-extension-list tbody tr[role="row"]', 1);
 
         // Look for extension key
-        $I->canSee('cshmanual', '#typo3-extension-list tbody tr[role="row"] td');
+        $I->see('cshmanual', '#typo3-extension-list tbody tr[role="row"] td');
 
         // unset the filter
         $I->waitForElementVisible('#Tx_Extensionmanager_extensionkey ~button.close', 10);
         $I->click('#Tx_Extensionmanager_extensionkey ~button.close');
-
+        $I->wait(1);
         $I->canSeeNumberOfElements('#typo3-extension-list tbody tr[role="row"]', [10, 100]);
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkIfUploadFormAppears(Admin $I)
+    public function checkIfUploadFormAppears(BackendTester $I)
     {
         $I->cantSeeElement('.module-body .uploadForm');
         $I->click('a[title="Upload Extension .t3x/.zip"]', '.module-docheader');
@@ -71,32 +69,32 @@ class InstalledExtensionsCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkUninstallingAndInstallingAnExtension(Admin $I)
+    public function checkUninstallingAndInstallingAnExtension(BackendTester $I)
     {
         $I->wantTo('Check if uninstalling and installing an extension with backend module removes and adds the module from the module menu.');
         $I->amGoingTo('uninstall extension belog');
-        $I->switchToIFrame();
-        $I->canSeeElement('#system_BelogLog');
+        $I->switchToMainFrame();
+        $I->seeElement('#system_BelogLog');
 
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->waitForElementVisible('//*[@id="typo3-extension-list"]/tbody/tr[@id="belog"]');
         $I->click('a[data-original-title="Deactivate"]', '//*[@id="typo3-extension-list"]/tbody/tr[@id="belog"]');
 
-        $I->switchToIFrame();
+        $I->switchToMainFrame();
         $I->cantSeeElement('#system_BelogLog');
 
         $I->amGoingTo('install extension belog');
-        $I->switchToIFrame();
-        $I->canSeeElement('.modulemenu-item-link');
+        $I->switchToMainFrame();
+        $I->seeElement('.modulemenu-item-link');
         $I->cantSeeElement('#system_BelogLog');
 
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->waitForElementVisible('//*[@id="typo3-extension-list"]/tbody/tr[@id="belog"]');
         $I->click('a[data-original-title="Activate"]', '//*[@id="typo3-extension-list"]/tbody/tr[@id="belog"]');
 
-        $I->switchToIFrame();
-        $I->canSeeElement('#system_BelogLog');
+        $I->switchToMainFrame();
+        $I->seeElement('#system_BelogLog');
     }
 }
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/AbstractElementsBasicCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/AbstractElementsBasicCest.php
new file mode 100644 (file)
index 0000000..3e1474c
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FormEngine;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Codeception\Example;
+use Facebook\WebDriver\Remote\RemoteWebDriver;
+use Facebook\WebDriver\Remote\RemoteWebElement;
+use Facebook\WebDriver\WebDriverKeys;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+
+/**
+ * Abstract class for "elements_basic" tests of styleguide
+ */
+abstract class AbstractElementsBasicCest
+{
+    /**
+     * Execute given test sets.
+     * Incoming array operates on fields of ext:styleguide, each field can have multiple test tests.
+     *
+     * @param BackendTester $I
+     * @param Example $testData
+     */
+    protected function runInputFieldTest(BackendTester $I, Example $testData)
+    {
+        $fieldLabel = $testData['label'];
+        $initializedInputFieldXpath = '(//label[contains(text(),"' . $fieldLabel . '")])'
+            . '[1]/parent::*//*/input[@data-formengine-input-name][@data-formengine-input-initialized]';
+
+        // Wait until JS initialized everything
+        $I->waitForElement($initializedInputFieldXpath, 30);
+
+        $formSection = $this->getFormSectionByFieldLabel($I, $fieldLabel);
+        $inputField = $this->getInputField($formSection);
+        $hiddenField = $this->getHiddenField($formSection, $inputField);
+
+        if ($testData['comment'] !== '') {
+            $I->comment($testData['comment']);
+        }
+
+        $I->fillField($inputField, $testData['inputValue']);
+        // Change focus to trigger validation
+        $inputField->sendKeys(WebDriverKeys::TAB);
+        // Click on the div so that any opened popup (potentially from the field below) is closed
+        $formSection->click();
+        $I->waitForElementNotVisible('#t3js-ui-block');
+
+        $I->comment('Test value of visible and hidden field');
+        $I->canSeeInField($inputField, $testData['expectedValue']);
+        $I->canSeeInField($hiddenField, $testData['expectedInternalValue']);
+
+        $I->comment('Save the form');
+        $saveButtonLink = '//*/button[@name="_savedok"][1]';
+        $I->waitForElement($saveButtonLink, 30);
+        $I->click($saveButtonLink);
+        $I->waitForElementNotVisible('#t3js-ui-block');
+        $I->waitForElement('//*/button[@name="_savedok"][not(@disabled)][1]', 30);
+        $I->waitForElement($initializedInputFieldXpath, 30);
+
+        // Find the fields again (after reload of iFrame)
+        $formSection = $this->getFormSectionByFieldLabel($I, $fieldLabel);
+        $inputField = $this->getInputField($formSection);
+        $hiddenField = $this->getHiddenField($formSection, $inputField);
+
+        // Validate save was successful
+        $I->comment('Test value of visible and hidden field');
+        $I->canSeeInField($inputField, $testData['expectedValue']);
+        $I->canSeeInField($hiddenField, $testData['expectedValueAfterSave']);
+    }
+
+    /**
+     * Return the visible input field of element in question.
+     *
+     * @param $formSection
+     * @return RemoteWebElement
+     */
+    protected function getInputField(RemoteWebElement $formSection)
+    {
+        return $formSection->findElement(\WebDriverBy::xpath('.//*/input[@data-formengine-input-name]'));
+    }
+
+    /**
+     * Return the hidden input field of element in question.
+     *
+     * @param RemoteWebElement $formSection
+     * @param RemoteWebElement $inputField
+     * @return RemoteWebElement
+     */
+    protected function getHiddenField(RemoteWebElement $formSection, RemoteWebElement $inputField)
+    {
+        $hiddenFieldXPath = './/*/input[@name="' . $inputField->getAttribute('data-formengine-input-name') . '"]';
+        return $formSection->findElement(\WebDriverBy::xpath($hiddenFieldXPath));
+    }
+
+    /**
+     * Find this element in form.
+     *
+     * @param BackendTester $I
+     * @param string $fieldLabel
+     * @return RemoteWebElement
+     */
+    protected function getFormSectionByFieldLabel(BackendTester $I, string $fieldLabel)
+    {
+        $I->comment('Get context for field "' . $fieldLabel . '"');
+        return $I->executeInSelenium(
+            function (RemoteWebDriver $webDriver) use ($fieldLabel) {
+                return $webDriver->findElement(
+                    \WebDriverBy::xpath(
+                        '(//label[contains(text(),"' . $fieldLabel . '")])[1]/ancestor::fieldset[@class="form-section"][1]'
+                    )
+                );
+            }
+        );
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/CategoryTreeCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/CategoryTreeCest.php
new file mode 100644 (file)
index 0000000..0dd4339
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FormEngine;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+
+/**
+ * Category tree tests
+ */
+class CategoryTreeCest
+{
+    /**
+     * @param BackendTester $I
+     */
+    public function _before(BackendTester $I)
+    {
+        $I->useExistingSession('admin');
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function checkIfCategoryListIsAvailable(BackendTester $I)
+    {
+        // A sub-element of web module is show
+        $I->waitForElementVisible('#web .modulemenu-group-container .modulemenu-item');
+        $I->click('#web_list');
+        $I->switchToContentFrame();
+        $I->waitForElement('#recordlist-sys_category');
+        $I->seeNumberOfElements('#recordlist-sys_category table > tbody > tr', [5, 100]);
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function editCategoryItem(BackendTester $I)
+    {
+        // A sub-element of web module is show
+        $I->waitForElementVisible('#web .modulemenu-group-container .modulemenu-item');
+        $I->click('#web_list');
+        $I->switchToContentFrame();
+        // Collapse all tables and expand category again - ensures category fits into window
+        $I->executeJS('$(\'.icon-actions-view-list-collapse\').click();');
+        $I->wait(1);
+        $I->executeJS('$(\'a[data-table="sys_category"] .icon-actions-view-list-expand\').click();');
+        $I->waitForElementVisible('#recordlist-sys_category tr[data-uid="7"] a[data-original-title="Edit record"]');
+        // Select category with id 7
+        $I->click('#recordlist-sys_category tr[data-uid="7"] a[data-original-title="Edit record"]');
+        $I->waitForText('Category', 20);
+        // Change title and level to root
+        $I->fillField('input[data-formengine-input-name="data[sys_category][7][title]"]', 'level-1-4');
+        $I->click('.identifier-7 text');
+        $I->click('.identifier-3 text');
+        $I->click('button[name="_savedok"]');
+        // Wait for tree and check if isset level-1-4
+        $I->waitForElement('.svg-tree-wrapper svg');
+        $I->waitForText('Category');
+        $I->see('level-1-4');
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputDateCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputDateCest.php
new file mode 100644 (file)
index 0000000..6cd0816
--- /dev/null
@@ -0,0 +1,323 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FormEngine;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Codeception\Example;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
+
+/**
+ * Tests for "elements_basic" date and time related input fields of ext:styleguide
+ */
+class ElementsBasicInputDateCest extends AbstractElementsBasicCest
+{
+    /**
+     * Open list module of styleguide elements basic page
+     *
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     */
+    public function _before(BackendTester $I, PageTree $pageTree)
+    {
+        $I->useExistingSession('admin');
+
+        $I->click('List');
+        $pageTree->openPath(['styleguide TCA demo', 'elements basic']);
+        $I->switchToContentFrame();
+
+        // Open record and wait until form is ready
+        $I->waitForText('elements basic', 20);
+        $editRecordLinkCssPath = '#recordlist-tx_styleguide_elements_basic a[data-original-title="Edit record"]';
+        $I->click($editRecordLinkCssPath);
+        $I->waitForElementNotVisible('#t3js-ui-block');
+        $I->waitForText('Edit Form', 3, 'h1');
+        $I->click('inputDateTime');
+        $I->waitForText('inputDateTime', 3);
+    }
+
+    /**
+     * dbTypeDateEvalDate data provider
+     */
+    protected function dbTypeDateEvalDateDataProvider()
+    {
+        return [
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_2 dbType=date eval=date',
+                'inputValue' => '29-01-2016',
+                'expectedValue' => '29-01-2016',
+                'expectedInternalValue' => '2016-01-29T00:00:00Z',
+                'expectedValueAfterSave' => '2016-01-29T00:00:00+00:00',
+                'comment' => '',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_2 dbType=date eval=date',
+                'inputValue' => '13-13-2016',
+                'expectedValue' => '13-01-2017',
+                'expectedInternalValue' => '2017-01-13T00:00:00Z',
+                'expectedValueAfterSave' => '2017-01-13T00:00:00+00:00',
+                'comment' => '',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_2 dbType=date eval=date',
+                'inputValue' => '29-02-2016',
+                'expectedValue' => '29-02-2016',
+                'expectedInternalValue' => '2016-02-29T00:00:00Z',
+                'expectedValueAfterSave' => '2016-02-29T00:00:00+00:00',
+                'comment' => 'Check valid leap year input',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_2 dbType=date eval=date',
+                'inputValue' => '29-02-2015',
+                'expectedValue' => '01-03-2015',
+                'expectedInternalValue' => '2015-03-01T00:00:00Z',
+                'expectedValueAfterSave' => '2015-03-01T00:00:00+00:00',
+                'comment' => 'Check invalid leap year transformation',
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider dbTypeDateEvalDateDataProvider
+     * @param BackendTester $I
+     * @param Example $testData
+     * @todo fix these unstable tests
+    public function dbTypeDateEvalDate(BackendTester $I, Example $testData)
+    {
+        $this->runInputFieldTest($I, $testData);
+    }
+     */
+
+    /**
+     * dbType date eval datetime data provider
+     */
+    protected function dbTypeDateEvalDatetimeDataProvider()
+    {
+        return [
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_3 eval=datetime',
+                'inputValue' => '05:23 29-01-2016',
+                'expectedValue' => '05:23 29-01-2016',
+                'expectedInternalValue' => '2016-01-29T05:23:00Z',
+                'expectedValueAfterSave' => '2016-01-29T05:23:00+00:00',
+                'comment' => '',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_3 eval=datetime',
+                'inputValue' => '05:23 13-13-2016',
+                'expectedValue' => '05:23 13-01-2017',
+                'expectedInternalValue' => '2017-01-13T05:23:00Z',
+                'expectedValueAfterSave' => '2017-01-13T05:23:00+00:00',
+                'comment' => '',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_3 eval=datetime',
+                'inputValue' => '05:23 29-02-2016',
+                'expectedValue' => '05:23 29-02-2016',
+                'expectedInternalValue' => '2016-02-29T05:23:00Z',
+                'expectedValueAfterSave' => '2016-02-29T05:23:00+00:00',
+                'comment' => 'Check valid leap year input',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_3 eval=datetime',
+                'inputValue' => '05:23 29-02-2015',
+                'expectedValue' => '05:23 01-03-2015',
+                'expectedInternalValue' => '2015-03-01T05:23:00Z',
+                'expectedValueAfterSave' => '2015-03-01T05:23:00+00:00',
+                'comment' => 'Check invalid leap year transformation',
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider dbTypeDateEvalDatetimeDataProvider
+     * @param BackendTester $I
+     * @param Example $testData
+     * @todo fix these unstable tests
+    public function dbTypeDateEvalDatetime(BackendTester $I, Example $testData)
+    {
+        $this->runInputFieldTest($I, $testData);
+    }
+     */
+
+    /**
+     * db type date eval time data provider
+     */
+    protected function dbTypeDateEvalTimeDataProvider()
+    {
+        return [
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_5',
+                'inputValue' => '13:30',
+                'expectedValue' => '13:30',
+                'expectedInternalValue' => '1970-01-01T13:30:00Z',
+                'expectedValueAfterSave' => '1970-01-01T13:30:00+00:00',
+                'comment' => '',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_5',
+                'inputValue' => '123',
+                'expectedValue' => '12:03',
+                'expectedInternalValue' => '1970-01-01T12:03:00Z',
+                'expectedValueAfterSave' => '1970-01-01T12:03:00+00:00',
+                'comment' => '',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_5',
+                'inputValue' => '12345',
+                'expectedValue' => '12:34',
+                'expectedInternalValue' => '1970-01-01T12:34:00Z',
+                'expectedValueAfterSave' => '1970-01-01T12:34:00+00:00',
+                'comment' => '',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_5',
+                'inputValue' => '12:04+5',
+                'expectedValue' => '12:09',
+                'expectedInternalValue' => '1970-01-01T12:09:00Z',
+                'expectedValueAfterSave' => '1970-01-01T12:09:00+00:00',
+                'comment' => '',
+            ],
+            [
+                // @todo: breaks with too small browser size
+                'label' => 'inputdatetime_5',
+                'inputValue' => '12:09-3',
+                'expectedValue' => '12:06',
+                'expectedInternalValue' => '1970-01-01T12:06:00Z',
+                'expectedValueAfterSave' => '1970-01-01T12:06:00+00:00',
+                'comment' => '',
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider dbTypeDateEvalTimeDataProvider
+     * @param BackendTester $I
+     * @param Example $testData
+     * @todo fix these unstable tests
+    public function dbTypeDateEvalTime(BackendTester $I, Example $testData)
+    {
+        $this->runInputFieldTest($I, $testData);
+    }
+     */
+
+    /**
+     * @param BackendTester $I
+     */
+    /*
+    public function checkThatValidationWorks_EvalDateTime_DbTypeDateTime(AcceptanceTester $I)
+    {
+        // @todo fix these unstable tests
+        $dataSets = [
+            'input_37 dbType=datetime eval=datetime' => [
+                [
+                    'inputValue' => '05:23 29-01-2016',
+                    'expectedValue' => '05:23 29-01-2016',
+                    'expectedInternalValue' => '2016-01-29T05:23:00Z',
+                    'expectedValueAfterSave' => '2016-01-29T05:23:00+00:00',
+                    'comment' => '',
+                ],
+                [
+                    'inputValue' => '05:23 13-13-2016',
+                    'expectedValue' => '05:23 13-01-2017',
+                    'expectedInternalValue' => '2017-01-13T05:23:00Z',
+                    'expectedValueAfterSave' => '2017-01-13T05:23:00+00:00',
+                    'comment' => '',
+                ],
+                [
+                    'inputValue' => '05:23 29-02-2016',
+                    'expectedValue' => '05:23 29-02-2016',
+                    'expectedInternalValue' => '2016-02-29T05:23:00Z',
+                    'expectedValueAfterSave' => '2016-02-29T05:23:00+00:00',
+                    'comment' => 'Check valid leap year input',
+                ],
+                [
+                    'inputValue' => '05:23 29-02-2015',
+                    'expectedValue' => '05:23 01-03-2015',
+                    'expectedInternalValue' => '2015-03-01T05:23:00Z',
+                    'expectedValueAfterSave' => '2015-03-01T05:23:00+00:00',
+                    'comment' => 'Check invalid leap year transformation',
+                ],
+            ],
+            'input_18 eval=timesec' => [
+                [
+                    'inputValue' => '13:30:00',
+                    'expectedValue' => '13:30:00',
+                    'expectedInternalValue' => '13:30:00',
+                    'expectedValueAfterSave' => (new \DateTime('13:30:00'))->getTimestamp(),
+                    'comment' => '',
+                ],
+                [
+                    'inputValue' => '12345',
+                    'expectedValue' => '12:34:05',
+                    'expectedInternalValue' => '12:34:05',
+                    'expectedValueAfterSave' => (new \DateTime('12:34:05'))->getTimestamp(),
+                    'comment' => '',
+                ],
+                [
+                    'inputValue' => '12:04:04+5',
+                    'expectedValue' => '12:09:04',
+                    'expectedInternalValue' => '12:09:04',
+                    'expectedValueAfterSave' => (new \DateTime('12:09:04'))->getTimestamp(),
+                    'comment' => '',
+                ],
+            ],
+            'input_6 eval=date' => [
+                [
+                    'inputValue' => '29-01-2016',
+                    'expectedValue' => '29-01-2016',
+                    'expectedInternalValue' => '2016-01-29T00:00:00Z',
+                    'expectedValueAfterSave' => '2016-01-29T00:00:00+00:00',
+                    'comment' => '',
+                ],
+                [
+                    'inputValue' => '13-13-2016',
+                    'expectedValue' => '13-01-2017',
+                    'expectedInternalValue' => '2017-01-13T00:00:00Z',
+                    'expectedValueAfterSave' => '2017-01-13T00:00:00+00:00',
+                    'comment' => '',
+                ],
+                [
+                    'inputValue' => '29-02-2016',
+                    'expectedValue' => '29-02-2016',
+                    'expectedInternalValue' => '2016-02-29T00:00:00Z',
+                    'expectedValueAfterSave' => '2016-02-29T00:00:00+00:00',
+                    'comment' => 'Check valid leap year input',
+                ],
+                [
+                    'inputValue' => '29-02-2015',
+                    'expectedValue' => '01-03-2015',
+                    'expectedInternalValue' => '2015-03-01T00:00:00Z',
+                    'expectedValueAfterSave' => '2015-03-01T00:00:00+00:00',
+                    'comment' => 'Check invalid leap year transformation',
+                ],
+            ],
+        ];
+        $this->runTests($I, $dataSets);
+    }
+     */
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputEvalCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputEvalCest.php
new file mode 100644 (file)
index 0000000..b3ac1aa
--- /dev/null
@@ -0,0 +1,173 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FormEngine;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Codeception\Example;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
+
+/**
+ * Tests for "elements_basic" eval input fields of ext:styleguide
+ */
+class ElementsBasicInputEvalCest extends AbstractElementsBasicCest
+{
+    /**
+     * Open list module of styleguide elements basic page
+     *
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     */
+    public function _before(BackendTester $I, PageTree $pageTree)
+    {
+        $I->useExistingSession('admin');
+        $I->click('List');
+        $pageTree->openPath(['styleguide TCA demo', 'elements basic']);
+        $I->switchToContentFrame();
+
+        // Open record and wait until form is ready
+        $I->waitForText('elements basic', 20);
+        $editRecordLinkCssPath = '#recordlist-tx_styleguide_elements_basic a[data-original-title="Edit record"]';
+        $I->click($editRecordLinkCssPath);
+        $I->waitForElementNotVisible('#t3js-ui-block');
+        $I->waitForText('Edit Form', 3, 'h1');
+    }
+
+    /**
+     * Test various type=input fields having eval
+     */
+    protected function simpleEvalInputFieldsDataProvider()
+    {
+        return [
+            [
+                'label' => 'input_8 eval=double2',
+                'inputValue' => '12.335',
+                'expectedValue' => '12.34',
+                'expectedInternalValue' => '12.34',
+                'expectedValueAfterSave' => '12.34',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_8 eval=double2',
+                'inputValue' => '12,335', // comma as delimiter
+                'expectedValue' => '12.34',
+                'expectedInternalValue' => '12.34',
+                'expectedValueAfterSave' => '12.34',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_8 eval=double2',
+                'inputValue' => '1.1', // dot as delimiter
+                'expectedValue' => '1.10',
+                'expectedInternalValue' => '1.10',
+                'expectedValueAfterSave' => '1.10',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_8 eval=double2',
+                'inputValue' => 'TYPO3', // word having a number at end
+                'expectedValue' => '3.00',
+                'expectedInternalValue' => '3.00',
+                'expectedValueAfterSave' => '3.00',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_8 eval=double2',
+                'inputValue' => '3TYPO', // word having a number in front
+                'expectedValue' => '3.00',
+                'expectedInternalValue' => '3.00',
+                'expectedValueAfterSave' => '3.00',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_9 eval=int',
+                'inputValue' => '12.335',
+                'expectedValue' => '12',
+                'expectedInternalValue' => '12',
+                'expectedValueAfterSave' => '12',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_9 eval=int',
+                'inputValue' => '12,9',
+                'expectedValue' => '12',
+                'expectedInternalValue' => '12',
+                'expectedValueAfterSave' => '12',
+                'comment' => '',
+            ],
+            /**
+            [
+                // @todo this one probably broke with the html type="number" patch
+                'label' => 'input_9 eval=int',
+                'inputValue' => 'TYPO3',
+                'expectedValue' => '0',
+                'expectedInternalValue' => '0',
+                'expectedValueAfterSave' => '0',
+                'comment' => '',
+            ],
+            */
+            [
+                'label' => 'input_9 eval=int',
+                'inputValue' => '3TYPO',
+                'expectedValue' => '3',
+                'expectedInternalValue' => '3',
+                'expectedValueAfterSave' => '3',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_15 eval=num',
+                'inputValue' => '12.335',
+                'expectedValue' => '12335',
+                'expectedInternalValue' => '12335',
+                'expectedValueAfterSave' => '12335',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_15 eval=num',
+                'inputValue' => '12,9',
+                'expectedValue' => '129',
+                'expectedInternalValue' => '129',
+                'expectedValueAfterSave' => '129',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_15 eval=num',
+                'inputValue' => 'TYPO3',
+                'expectedValue' => '3',
+                'expectedInternalValue' => '3',
+                'expectedValueAfterSave' => '3',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_15 eval=num',
+                'inputValue' => '3TYPO',
+                'expectedValue' => '3',
+                'expectedInternalValue' => '3',
+                'expectedValueAfterSave' => '3',
+                'comment' => '',
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider simpleEvalInputFieldsDataProvider
+     * @param BackendTester $I
+     * @param Example $testData
+     */
+    public function simpleEvalInputFields(BackendTester $I, Example $testData)
+    {
+        $this->runInputFieldTest($I, $testData);
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputRangeCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputRangeCest.php
new file mode 100644 (file)
index 0000000..44026bf
--- /dev/null
@@ -0,0 +1,109 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FormEngine;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Codeception\Example;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
+
+/**
+ * Tests for "elements_basic" range input fields of ext:styleguide
+ */
+class ElementsBasicInputRangeCest extends AbstractElementsBasicCest
+{
+    /**
+     * Open list module of styleguide elements basic page
+     *
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     */
+    public function _before(BackendTester $I, PageTree $pageTree)
+    {
+        $I->useExistingSession('admin');
+        $I->click('List');
+        $pageTree->openPath(['styleguide TCA demo', 'elements basic']);
+        $I->switchToContentFrame();
+
+        // Open record and wait until form is ready
+        $I->waitForText('elements basic', 20);
+        $editRecordLinkCssPath = '#recordlist-tx_styleguide_elements_basic a[data-original-title="Edit record"]';
+        $I->click($editRecordLinkCssPath);
+        $I->waitForElementNotVisible('#t3js-ui-block');
+        $I->waitForText('Edit Form', 3, 'h1');
+    }
+
+    /**
+     * type=input range and md5 field tests
+     */
+    protected function simpleRangeAndMd5FieldsDataProvider()
+    {
+        return [
+            /**
+            [
+                // @todo this one probably broke with the type="number" patch
+                'label' => 'input_25 eval=int, default=0, range lower=-2, range upper=2',
+                'inputValue' => 'Kasper TYPO3',
+                'expectedValue' => '0',
+                'expectedInternalValue' => '0',
+                'expectedValueAfterSave' => '0',
+                'comment' => '',
+            ],
+             */
+            [
+                'label' => 'input_25 eval=int, default=0, range lower=-2, range upper=2',
+                'inputValue' => '2',
+                'expectedValue' => '2',
+                'expectedInternalValue' => '2',
+                'expectedValueAfterSave' => '2',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_25 eval=int, default=0, range lower=-2, range upper=2',
+                'inputValue' => '-1',
+                'expectedValue' => '-1',
+                'expectedInternalValue' => '-1',
+                'expectedValueAfterSave' => '-1',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_12 eval=md5',
+                'inputValue' => 'Kasper TYPO3!',
+                'expectedValue' => '748469dd64911af8df8f9a3dcb2c9378',
+                'expectedInternalValue' => '748469dd64911af8df8f9a3dcb2c9378',
+                'expectedValueAfterSave' => '748469dd64911af8df8f9a3dcb2c9378',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_12 eval=md5',
+                'inputValue' => ' Kasper TYPO3! ',
+                'expectedValue' => '792a085606250c47d6ebb8c98804d5b0',
+                'expectedInternalValue' => '792a085606250c47d6ebb8c98804d5b0',
+                'expectedValueAfterSave' => '792a085606250c47d6ebb8c98804d5b0',
+                'comment' => 'Check whitespaces are not trimmed.',
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider simpleRangeAndMd5FieldsDataProvider
+     * @param BackendTester $I
+     * @param Example $testData
+     */
+    public function simpleRangeAndMd5Fields(BackendTester $I, Example $testData)
+    {
+        $this->runInputFieldTest($I, $testData);
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputSimpleCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputSimpleCest.php
new file mode 100644 (file)
index 0000000..e59b358
--- /dev/null
@@ -0,0 +1,202 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FormEngine;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Codeception\Example;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
+
+/**
+ * Tests for "elements_basic" simple input fields of ext:styleguide
+ */
+class ElementsBasicInputSimpleCest extends AbstractElementsBasicCest
+{
+    /**
+     * Open list module of styleguide elements basic page
+     *
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     */
+    public function _before(BackendTester $I, PageTree $pageTree)
+    {
+        $I->useExistingSession('admin');
+        $I->click('List');
+        $pageTree->openPath(['styleguide TCA demo', 'elements basic']);
+        $I->switchToContentFrame();
+
+        // Open record and wait until form is ready
+        $I->waitForText('elements basic', 20);
+        $editRecordLinkCssPath = '#recordlist-tx_styleguide_elements_basic a[data-original-title="Edit record"]';
+        $I->click($editRecordLinkCssPath);
+        $I->waitForElementNotVisible('#t3js-ui-block');
+        $I->waitForText('Edit Form', 3, 'h1');
+    }
+
+    /**
+     * Data provider to check various type=input variants
+     */
+    protected function simpleInputFieldsDataProvider()
+    {
+        return [
+            [
+                'label' => 'input_1',
+                'inputValue' => 'This is a demo text',
+                'expectedValue' => 'This is a demo text',
+                'expectedInternalValue' => 'This is a demo text',
+                'expectedValueAfterSave' => 'This is a demo text',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_2, size=10',
+                'inputValue' => 'This is a demo text with numbers and other characters 42 #!',
+                'expectedValue' => 'This is a demo text with numbers and other characters 42 #!',
+                'expectedInternalValue' => 'This is a demo text with numbers and other characters 42 #!',
+                'expectedValueAfterSave' => 'This is a demo text with numbers and other characters 42 #!',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_3 max=4',
+                'inputValue' => 'Kasper',
+                'expectedValue' => 'Kasp',
+                'expectedInternalValue' => 'Kasp',
+                'expectedValueAfterSave' => 'Kasp',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_4 eval=alpha',
+                'inputValue' => 'Kasper = TYPO3',
+                'expectedValue' => 'KasperTYPO',
+                'expectedInternalValue' => 'KasperTYPO',
+                'expectedValueAfterSave' => 'KasperTYPO',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_4 eval=alpha',
+                'inputValue' => 'Non-latin characters: ŠĐŽĆČ',
+                'expectedValue' => 'Nonlatincharacters',
+                'expectedInternalValue' => 'Nonlatincharacters',
+                'expectedValueAfterSave' => 'Nonlatincharacters',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_5 eval=alphanum',
+                'inputValue' => 'Kasper = TYPO3',
+                'expectedValue' => 'KasperTYPO3',
+                'expectedInternalValue' => 'KasperTYPO3',
+                'expectedValueAfterSave' => 'KasperTYPO3',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_10 eval=is_in, is_in=abc123',
+                'inputValue' => 'abcd1234',
+                'expectedValue' => 'abc123',
+                'expectedInternalValue' => 'abc123',
+                'expectedValueAfterSave' => 'abc123',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_10 eval=is_in, is_in=abc123',
+                'inputValue' => 'Kasper TYPO3',
+                'expectedValue' => 'a3',
+                'expectedInternalValue' => 'a3',
+                'expectedValueAfterSave' => 'a3',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_11 eval=lower',
+                'inputValue' => 'Kasper TYPO3!',
+                'expectedValue' => 'kasper typo3!',
+                'expectedInternalValue' => 'kasper typo3!',
+                'expectedValueAfterSave' => 'kasper typo3!',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_13 eval=nospace',
+                'inputValue' => ' Kasper TYPO3! ',
+                'expectedValue' => 'KasperTYPO3!',
+                'expectedInternalValue' => 'KasperTYPO3!',
+                'expectedValueAfterSave' => 'KasperTYPO3!',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_16 eval=password',
+                'inputValue' => 'Kasper',
+                'expectedValue' => '********',
+                'expectedInternalValue' => 'Kasper',
+                'expectedValueAfterSave' => 'Kasper',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_19 eval=trim',
+                'inputValue' => ' Kasper ',
+                'expectedValue' => 'Kasper',
+                'expectedInternalValue' => 'Kasper',
+                'expectedValueAfterSave' => 'Kasper',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_19 eval=trim',
+                'inputValue' => ' Kasper TYPO3 ',
+                'expectedValue' => 'Kasper TYPO3',
+                'expectedInternalValue' => 'Kasper TYPO3',
+                'expectedValueAfterSave' => 'Kasper TYPO3',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_23 eval=upper',
+                'inputValue' => 'Kasper TYPO3!',
+                'expectedValue' => 'KASPER TYPO3!',
+                'expectedInternalValue' => 'KASPER TYPO3!',
+                'expectedValueAfterSave' => 'KASPER TYPO3!',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_24 eval=year',
+                'inputValue' => '2016',
+                'expectedValue' => '2016',
+                'expectedInternalValue' => '2016',
+                'expectedValueAfterSave' => '2016',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_24 eval=year',
+                'inputValue' => '12',
+                'expectedValue' => '2012',
+                'expectedInternalValue' => '2012',
+                'expectedValueAfterSave' => '2012',
+                'comment' => '',
+            ],
+            [
+                'label' => 'input_24 eval=year',
+                'inputValue' => 'Kasper',
+                'expectedValue' => date('Y'),
+                'expectedInternalValue' => date('Y'),
+                'expectedValueAfterSave' => date('Y'),
+                'comment' => 'Invalid character is converted to current year',
+            ]
+        ];
+    }
+
+    /**
+     * @dataProvider simpleInputFieldsDataProvider
+     * @param BackendTester $I
+     * @param Example $testData
+     */
+    public function simpleInputFields(BackendTester $I, Example $testData)
+    {
+        $this->runInputFieldTest($I, $testData);
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsGroupCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsGroupCest.php
new file mode 100644 (file)
index 0000000..b5614f4
--- /dev/null
@@ -0,0 +1,180 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FormEngine;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
+
+/**
+ * Tests for ElementsGroupelement fields
+ */
+class ElementsGroupCest
+{
+    public function _before(BackendTester $I, PageTree $pageTree)
+    {
+        $I->useExistingSession('admin');
+
+        $I->click('List');
+        $pageTree->openPath(['styleguide TCA demo', 'elements group']);
+        $I->switchToContentFrame();
+
+        $I->executeJS('window.name="TYPO3Main";');
+
+        $I->waitForText('elements group', 20);
+        $editRecordLinkCssPath = '#recordlist-tx_styleguide_elements_group a[data-original-title="Edit record"]';
+        $I->click($editRecordLinkCssPath);
+        $I->waitForText('Edit Form', 3, 'h1');
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function sortElementsInGroup(BackendTester $I)
+    {
+        $fieldset = 'div.typo3-TCEforms > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > fieldset:nth-of-type(1)';
+        $formWizardsWrap = $fieldset . ' > div:nth-of-type(1) div.t3js-formengine-field-item > div:nth-of-type(1)';
+        $select = $formWizardsWrap . ' > div:nth-of-type(2) > select';
+
+        $selectOption1 = 'styleguide demo user 1';
+        $multiselect = ['styleguide demo user 1', 'styleguide demo user 2'];
+
+        $I->amGoingTo('put "' . $selectOption1 . '" on first position');
+        $I->selectOption($select, $selectOption1);
+        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-top');
+        $I->see($selectOption1, $select . ' > option:nth-child(1)');
+
+        $I->amGoingTo('put "' . $selectOption1 . '" one position down / on the second position');
+        $I->selectOption($select, $selectOption1);
+        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-down');
+        $I->see($selectOption1, $select . ' > option:nth-child(2)');
+
+        $I->amGoingTo('put "' . $selectOption1 . '" on the last position');
+        $I->selectOption($select, $selectOption1);
+        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-bottom');
+        $I->see($selectOption1, $select . ' > option:nth-last-child(1)');
+
+        $I->amGoingTo('put "' . $selectOption1 . '" one position up / on second last position');
+        $I->selectOption($select, $selectOption1);
+        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-up');
+        $I->see($selectOption1, $select . ' > option:nth-last-child(2)');
+
+        $I->amGoingTo('put ' . print_r($multiselect, 1) . ' on first position');
+        $I->selectOption($select, $multiselect);
+        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-top');
+        $I->see($multiselect[0], $select . ' > option:nth-child(1)');
+        $I->see($multiselect[1], $select . ' > option:nth-child(2)');
+
+        $I->amGoingTo('put ' . print_r($multiselect, 1) . ' one position down');
+        $I->selectOption($select, $multiselect);
+        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-down');
+        $I->see($multiselect[0], $select . ' > option:nth-child(2)');
+        $I->see($multiselect[1], $select . ' > option:nth-child(3)');
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function addARecordWithRecordBrowserGroup(BackendTester $I)
+    {
+        $fieldset = 'div.typo3-TCEforms > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > fieldset:nth-of-type(1)';
+        $formWizardsWrap = $fieldset . ' > div:nth-of-type(1) div.t3js-formengine-field-item > div:nth-of-type(1)';
+
+        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 4);
+        $I->click($formWizardsWrap . ' div:nth-of-type(4) > div > a:nth-of-type(1)');
+
+        $I->switchToWindow('Typo3WinBrowser');
+
+        $I->amGoingTo('click + button to select record and close DB-Browser');
+        $I->click('#recordlist-be_users > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > span:nth-child(1) > a:nth-child(1)');
+
+        $I->switchToWindow();
+        $I->switchToContentFrame();
+        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 5);
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function addTwoRecordWithRecordBrowserGroup(BackendTester $I)
+    {
+        $fieldset = 'div.typo3-TCEforms > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > fieldset:nth-of-type(1)';
+        $formWizardsWrap = $fieldset . ' > div:nth-of-type(1) div.t3js-formengine-field-item > div:nth-of-type(1)';
+
+        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 4);
+        $I->click($formWizardsWrap . ' div:nth-of-type(4) > div > a:nth-of-type(1)');
+
+        $I->switchToWindow('Typo3WinBrowser');
+
+        $I->amGoingTo('click record + in DB-Browser');
+        $I->click('#recordlist-be_groups > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > span:nth-child(1) > a:nth-child(1)');
+
+        $I->amGoingTo('click record + in DB-Browser');
+        $I->click('#recordlist-be_groups > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > span:nth-child(1) > a:nth-child(1)');
+        $I->amGoingTo('click + button to select record and close DB-Browser');
+        $I->click('#recordlist-be_users > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > span:nth-child(1) > a:nth-child(1)');
+
+        $I->switchToWindow();
+        $I->switchToContentFrame();
+        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 6);
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function searchForARecordWithRecordBrowserGroup(BackendTester $I)
+    {
+        $fieldset = 'div.typo3-TCEforms > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > fieldset:nth-of-type(1)';
+        $formWizardsWrap = $fieldset . ' > div:nth-of-type(1) div.t3js-formengine-field-item > div:nth-of-type(1)';
+
+        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 4);
+        $I->click($formWizardsWrap . ' div:nth-of-type(4) > div > a:nth-of-type(1)');
+
+        $I->switchToWindow('Typo3WinBrowser');
+
+        $I->amGoingTo("search record '' and limit 1 in DB-Browser");
+        $I->fillField('#showLimit', 1);
+        $I->click('button[name="search"]');
+        $I->waitForElement('.recordlist');
+        $I->seeNumberOfElements('.recordlist #recordlist-be_groups  table tbody tr', 1);
+
+        $I->amGoingTo('search record style and limit 1 in DB-Browser');
+        $I->fillField('#search_field', 'style');
+        $I->click('button[name="search"]');
+        $I->waitForElement('.recordlist');
+        $I->seeNumberOfElements('.recordlist #recordlist-be_groups  table tbody tr', 1);
+
+        $I->amGoingTo('reset limit');
+        $I->fillField('#showLimit', '');
+        $I->amGoingTo('search record foo in DB-Browser');
+        $I->fillField('#search_field', 'foo');
+        $I->click('button[name="search"]');
+        $I->waitForElementNotVisible('.recordlist');
+
+        $I->amGoingTo('search record admin in DB-Browser');
+        $I->fillField('#search_field', 'admin');
+        $I->click('button[name="search"]');
+        $I->waitForElement('.recordlist');
+        $I->see('admin', '.recordlist');
+
+        $I->amGoingTo('click + button to select record and close DB-Browser');
+        $I->click('#recordlist-be_users > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > span:nth-child(1) > a:nth-child(1)');
+        $I->switchToWindow();
+
+        $I->switchToContentFrame();
+        $I->see('admin', 'select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"]');
+        $I->click('.btn-toolbar button.btn:nth-child(2)');
+        $I->click('li a[data-form="EditDocumentController"] span[data-identifier="actions-document-save-close"]');
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/FalMetadataInheritanceCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/FalMetadataInheritanceCest.php
new file mode 100644 (file)
index 0000000..2195220
--- /dev/null
@@ -0,0 +1,205 @@
+<?php
+declare(strict_types = 1);
+
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FormEngine;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Facebook\WebDriver\Exception\NoSuchWindowException;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
+
+/**
+ * Tests for inline 1n
+ */
+class FalMetadataInheritanceCest
+{
+    public function _before(BackendTester $I, PageTree $pageTree)
+    {
+        $I->useExistingSession('admin');
+        $this->goToPageModule($I, $pageTree);
+    }
+
+    /**
+     * This scenario tests whether updated sys_file_metadata fields are propagated to sys_file_reference
+     * attached to tt_content
+     * - creates tt_content
+     * - attaches an image with empty metadata
+     * - modifies image metadata
+     * - checks if metadata is propagated to tt_content
+     *
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     * @throws \Exception
+     */
+    public function checkIfUpdatedFileMetadataIsUpdatedInContent(BackendTester $I, PageTree $pageTree)
+    {
+        $I->amGoingTo('Create new CE with image');
+        $I->click('.t3js-page-new-ce a');
+        $I->waitForElementNotVisible('div#nprogess');
+        $I->click('Text & Images');
+        $I->waitForText('Create new Page Content on page');
+        $I->fillField('//input[contains(@data-formengine-input-name, "data[tt_content]") and contains(@data-formengine-input-name, "[header]")]', 'tt_content with image');
+
+        $I->click('Images');
+        $I->click('Add image');
+
+        $I->switchToWindow('Typo3WinBrowser');
+        try {
+            $I->click('.list-tree-control-closed');
+            $I->click('styleguide');
+            $I->click('bus_lane.jpg');
+        } catch (NoSuchWindowException $e) {
+            // missing focus by auto close window
+        }
+
+        $I->switchToWindow();
+        $I->switchToContentFrame();
+        $I->waitForText('bus_lane.jpg');
+
+        $I->see('Set element specific value (No default)', '.t3js-form-field-eval-null-placeholder-checkbox');
+
+        $I->seeElementInDOM('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[title]")]', ['placeholder' => '', 'value' => '']);
+        $I->seeElementInDOM('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[alternative]")]', ['placeholder' => '', 'value' => '']);
+        $I->seeElementInDOM('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', ['placeholder' => '']);
+        //textarea value is not in the attribute, so we need to check it separately
+        $I->seeInField('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', '');
+
+        $I->click('button[name="_savedok"]');
+        $I->wait(3);
+        $I->click('a[title="Close"]');
+
+        $I->amGoingTo('Change default metadata');
+        $I->switchToMainFrame();
+        $I->click('Filelist');
+        $I->switchToIFrame('typo3-navigationContainerIframe');
+        $I->waitForText('fileadmin/ (auto-created)');
+        $I->click('styleguide');
+
+        $I->switchToWindow();
+        $I->switchToContentFrame();
+        $I->click('bus_lane.jpg');
+        $I->waitForText('Edit File Metadata "bus_lane.jpg" on root level');
+        $I->fillField('//input[contains(@data-formengine-input-name, "data[sys_file_metadata]") and contains(@data-formengine-input-name, "[title]")]', 'Test title');
+        $I->fillField('//textarea[contains(@data-formengine-input-name, "data[sys_file_metadata]") and contains(@data-formengine-input-name, "[description]")]', 'Test description');
+        $I->fillField('//input[contains(@data-formengine-input-name, "data[sys_file_metadata]") and contains(@data-formengine-input-name, "[alternative]")]', 'Test alternative');
+
+        $I->click('button[name="_savedok"]');
+        $I->wait(3);
+        $I->click('a[title="Close"]');
+
+        $I->amGoingTo('Check metadata of sys_file_reference displayed in tt_content');
+        $this->goToPageModule($I, $pageTree);
+        $I->switchToWindow();
+        $I->switchToContentFrame();
+        $I->click('tt_content with image');
+        $I->waitForElementNotVisible('#t3js-ui-block');
+        $I->waitForText('Edit Page Content "tt_content with image" on page "styleguide TCA demo"');
+        $I->click('Images');
+        $I->click('.form-irre-header');
+
+        $I->see('(Default: "Test title")', '.t3js-form-field-eval-null-placeholder-checkbox');
+        $I->see('(Default: "Test alternative")', '.t3js-form-field-eval-null-placeholder-checkbox');
+        $I->see('(Default: "Test description")', '.t3js-form-field-eval-null-placeholder-checkbox');
+
+        $I->seeElementInDOM('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[title]")]', ['placeholder' => 'Test title', 'value' => '']);
+        $I->seeElementInDOM('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[alternative]")]', ['placeholder' => 'Test alternative', 'value' => '']);
+        $I->seeElementInDOM('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', ['placeholder' => 'Test description']);
+        //textarea value is not in the attribute, so we need to check it separately
+        $I->seeInField('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', '');
+    }
+
+    /**
+     * This scenario tests whether sys_file_metadata fields are propagated to sys_file_reference
+     * attached to tt_content
+     *
+     * - given a image with filled metadata (created in checkIfUpdatedFileMetadataIsUpdatedInContent test)
+     * - creates a new tt_content
+     * - attaches an image to tt_content
+     * - checks if metadata is propagated to tt_content
+     * - checks if checkboxes are unchecked and inputs are disabled
+     *
+     * test for https://forge.typo3.org/issues/81235
+     *
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     * @throws \Exception
+     * @depends checkIfUpdatedFileMetadataIsUpdatedInContent
+     */
+    public function checkIfFileMetadataIsInheritedInContent(BackendTester $I)
+    {
+        $I->amGoingTo('Create new CE with image with filled metadata');
+        $I->click('.t3js-page-new-ce a');
+        $I->waitForElementNotVisible('div#nprogess');
+        $I->click('Text & Images');
+        $I->waitForText('Create new Page Content on page');
+        $I->fillField('//input[contains(@data-formengine-input-name, "data[tt_content]") and contains(@data-formengine-input-name, "[header]")]', 'tt_content with image with filled metadata');
+
+        $I->click('Images');
+        $I->click('Add image');
+
+        $I->switchToWindow('Typo3WinBrowser');
+        try {
+            $I->click('.list-tree-control-closed');
+            $I->click('styleguide');
+            $I->click('bus_lane.jpg');
+        } catch (NoSuchWindowException $e) {
+            // missing focus by auto close window
+        }
+
+        $I->switchToWindow();
+        $I->switchToContentFrame();
+        $I->waitForText('bus_lane.jpg');
+
+        $I->waitForText('Image Metadata');
+
+        $I->seeInField('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[title]")]', '');
+        $I->seeInField('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[alternative]")]', '');
+        $I->seeInField('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', '');
+
+        $I->see('(Default: "Test title")', '.t3js-form-field-eval-null-placeholder-checkbox');
+        $I->see('(Default: "Test alternative")', '.t3js-form-field-eval-null-placeholder-checkbox');
+        $I->see('(Default: "Test description")', '.t3js-form-field-eval-null-placeholder-checkbox');
+
+        $I->amGoingTo('assert checkboxes are not checked');
+        $I->dontSeeCheckboxIsChecked('//input[contains(@name, "[title]") and @type="checkbox" and contains(@name, "control[active][sys_file_reference]")]');
+        $I->dontSeeCheckboxIsChecked('//input[contains(@name, "[alternative]") and @type="checkbox" and contains(@name, "control[active][sys_file_reference]")]');
+        $I->dontSeeCheckboxIsChecked('//input[contains(@name, "[description]") and @type="checkbox" and contains(@name, "control[active][sys_file_reference]")]');
+
+        $I->amGoingTo('Assert hidden control field value (default value which is used when checkbox is not checked');
+        $I->seeInField('//input[contains(@name, "[title]") and @type="hidden" and contains(@name, "control[active][sys_file_reference]")]', 0);
+        $I->seeInField('//input[contains(@name, "[alternative]") and @type="hidden" and contains(@name, "control[active][sys_file_reference]")]', 0);
+        $I->seeInField('//input[contains(@name, "[description]") and @type="hidden" and contains(@name, "control[active][sys_file_reference]")]', 0);
+
+        //when checkbox is unchecked the disabled input is shown
+        //<input type="text" class="form-control" disabled="disabled" value="Test title">
+        $I->seeInField('input.form-control:disabled', 'Test title');
+        $I->seeInField('input.form-control:disabled', 'Test alternative');
+        $I->seeInField('textarea.form-control:disabled', 'Test description');
+    }
+
+    /**
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     * @throws \Exception
+     */
+    protected function goToPageModule(BackendTester $I, PageTree $pageTree)
+    {
+        $I->switchToMainFrame();
+        $I->click('Page');
+        $pageTree->openPath(['styleguide TCA demo']);
+        $I->switchToContentFrame();
+        $I->waitForText('styleguide TCA demo');
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/Inline1nCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/Inline1nCest.php
new file mode 100644 (file)
index 0000000..8298ea5
--- /dev/null
@@ -0,0 +1,186 @@
+<?php
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FormEngine;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Facebook\WebDriver\WebDriverKeys;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\ModalDialog;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
+
+/**
+ * Tests for inline 1n
+ */
+class Inline1nCest
+{
+    public function _before(BackendTester $I, PageTree $pageTree)
+    {
+        $I->useExistingSession('admin');
+
+        $I->click('List');
+        $pageTree->openPath(['styleguide TCA demo', 'inline 1n']);
+        $I->switchToContentFrame();
+
+        $I->waitForText('inline 1n', 20);
+        $editRecordLinkCssPath = '#recordlist-tx_styleguide_inline_1n a[data-original-title="Edit record"]';
+        $I->click($editRecordLinkCssPath);
+        $I->waitForText('Edit Form', 3, 'h1');
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function checkIfExpandsAndCollapseShowInput(BackendTester $I)
+    {
+        $I->wantTo('Expands the inline Element');
+        $I->click('div[data-toggle="formengine-inline"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
+        $I->waitForElement('input[data-formengine-input-name="data[tx_styleguide_inline_1n_child][1][input_1]"]');
+        $I->wantTo('check is the value in input');
+        $I->seeInField('input[data-formengine-input-name="data[tx_styleguide_inline_1n_child][1][input_1]"]', 'lipsum');
+        $I->wantTo('Collapse the inline Element');
+        $I->click('div[data-toggle="formengine-inline"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
+        $I->waitForElementNotVisible('#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_fields.panel-collapse');
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function hideAndUnhideInline1nInlineElement(BackendTester $I)
+    {
+        $I->wantTo('Can hide a Inline Element');
+        $I->click('a span[data-identifier="actions-edit-hide"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
+        $I->waitForElement('#data-12-tx_styleguide_inline_1n-1-inline_1_records .t3-form-field-container-inline-hidden');
+        $I->wantTo('Can unhide a Inline Element');
+        $I->click('a span[data-identifier="actions-edit-unhide"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
+        $I->waitForElementNotVisible('#data-12-tx_styleguide_inline_1n-1-inline_1_records .t3-form-field-container-inline-hidden', 2);
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function createInline1nInlineElement(BackendTester $I)
+    {
+        $I->click('span[data-identifier="actions-document-new"]', 'div.typo3-newRecordLink');
+
+        $fieldLabel = 'input_1';
+        $testValue = 'Fo Bar';
+
+        $this->fillFieldByLabel($I, $fieldLabel, $testValue);
+
+        $I->click('button[name="_savedok"]');
+        $I->wait(3);
+        $I->click('a[title="Close"]');
+        $I->wait(3);
+
+        $I->executeJS('$(\'a[data-table="pages_language_overlay"] .icon-actions-view-list-collapse\').click();');
+        $I->wait(1);
+
+        $I->see('lipsum', '#recordlist-tx_styleguide_inline_1n_child > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > a');
+        $I->see('Fo Bar', '#recordlist-tx_styleguide_inline_1n_child > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(2) > td:nth-child(2) > a');
+    }
+
+    /**
+     * @depends createInline1nInlineElement
+     * @param BackendTester $I
+     */
+    public function checkIfCanSortingInlineElement(BackendTester $I)
+    {
+        $I->wantTo('Can sort an Inline Element');
+        $I->click('a span[data-identifier="actions-move-down"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
+        $I->click('button[name="_savedok"]');
+        $I->wait(3);
+        $I->click('a[title="Close"]');
+        $I->wait(3);
+
+        $I->executeJS('$(\'a[data-table="pages_language_overlay"] .icon-actions-view-list-collapse\').click();');
+        $I->wait(1);
+
+        $I->wantTo('Check new sorting');
+        $I->see('Fo Bar', '#recordlist-tx_styleguide_inline_1n_child > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > a');
+        $I->see('lipsum', '#recordlist-tx_styleguide_inline_1n_child > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(2) > td:nth-child(2) > a');
+    }
+
+    /**
+     * @param BackendTester $I
+     */
+    public function changeInline1nInlineInput(BackendTester $I)
+    {
+        $I->click('div[data-toggle="formengine-inline"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
+        $I->waitForElement('input[data-formengine-input-name="data[tx_styleguide_inline_1n_child][1][input_1]"]');
+        $I->fillField('input[data-formengine-input-name="data[tx_styleguide_inline_1n_child][1][input_1]"]', 'hello world');
+        $I->click('button[name="_savedok"]');
+        $I->wait(3);
+        $I->click('a[title="Close"]');
+        $I->wait(3);
+        $I->see('hello world');
+    }
+
+    /**
+     * @param BackendTester $I
+     * @param ModalDialog $modalDialog
+     */
+    public function deleteInline1nInlineElement(BackendTester $I, ModalDialog $modalDialog)
+    {
+        $inlineElementToDelete = '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div';
+        $I->wantTo('Cancel the delete dialog');
+        $I->click('a span[data-identifier="actions-edit-delete"]', $inlineElementToDelete);
+        $modalDialog->clickButtonInDialog('button[name="no"]');
+        // switch form Dialogbox back to IFrame
+        $I->switchToContentFrame();
+        $I->seeElement($inlineElementToDelete);
+
+        $I->wantTo('Accept the delete dialog');
+        $I->click('a span[data-identifier="actions-edit-delete"]', $inlineElementToDelete);
+
+        // don't use $modalDialog->clickButtonInDialog due to too low timeout
+        $modalDialog->canSeeDialog();
+        $I->click('button[name="yes"]', ModalDialog::$openedModalButtonContainerSelector);
+        $I->waitForElementNotVisible(ModalDialog::$openedModalSelector, 30);
+        // switch form Dialogbox back to IFrame
+        $I->switchToContentFrame();
+        $I->waitForElementNotVisible($inlineElementToDelete);
+    }
+
+    /**
+     * @param BackendTester $I
+     * @param $fieldLabel
+     * @param $testValue
+     */
+    protected function fillFieldByLabel(BackendTester $I, $fieldLabel, $testValue)
+    {
+        $fieldContext = $I->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) use (
+            $fieldLabel
+        ) {
+            return $webdriver->findElement(
+                \Facebook\WebDriver\WebDriverBy::xpath('(//label[contains(text(),"' . $fieldLabel . '")])[1]/ancestor::fieldset[@class="form-section"][1]')
+            );
+        });
+
+        $visibleFieldXpath = './/*/input[@data-formengine-input-name]';
+        $clearButtonXpath = '(//label[contains(text(),"' . $fieldLabel . '")])[1]/parent::*//*/button[@class="close"]';
+        $initializedInputFieldXpath = '(//label[contains(text(),"' . $fieldLabel . '")])[1]/parent::*//*/input[@data-formengine-input-name][@data-formengine-input-initialized]';
+        $I->waitForElement($initializedInputFieldXpath, 30);
+        $inputField = $fieldContext->findElement(\WebDriverBy::xpath($visibleFieldXpath));
+        $internalInputFieldXpath = '(//label[contains(text(),"' . $fieldLabel . '")])[1]/parent::*//*/input[@name="' . $inputField->getAttribute('data-formengine-input-name') . '"]';
+
+        $I->waitForElement($internalInputFieldXpath, 30);
+        $I->waitForElement($clearButtonXpath, 30);
+
+        $I->fillField($inputField, $testValue);
+        $inputField->sendKeys(WebDriverKeys::TAB);
+        $fieldContext->click();
+        $I->comment('Test value of "visible" field');
+        $I->canSeeInField($inputField, $testValue);
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/AbstractElementsBasicCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/AbstractElementsBasicCest.php
deleted file mode 100644 (file)
index e9f8b56..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Formhandler;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use Facebook\WebDriver\Remote\RemoteWebDriver;
-use Facebook\WebDriver\Remote\RemoteWebElement;
-use Facebook\WebDriver\WebDriverKeys;
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-
-/**
- * Abstract class for "elements_basic" tests of styleguide
- */
-abstract class AbstractElementsBasicCest
-{
-    /**
-     * Execute given test sets.
-     * Incoming array operates on fields of ext:styleguide, each field can have multiple test tests.
-     *
-     * @param Admin $I
-     * @param array $dataSets
-     */
-    protected function runTests(Admin $I, array $dataSets)
-    {
-        foreach ($dataSets as $fieldLabel => $testData) {
-            $initializedInputFieldXpath = '(//label[contains(text(),"' . $fieldLabel . '")])'
-                . '[1]/parent::*//*/input[@data-formengine-input-name][@data-formengine-input-initialized]';
-            foreach ($testData as $data) {
-                // Wait until JS initialized everything
-                $I->waitForElement($initializedInputFieldXpath, 30);
-
-                $formSection = $this->getFormSectionByFieldLabel($I, $fieldLabel);
-                $inputField = $this->getInputField($formSection);
-                $hiddenField = $this->getHiddenField($formSection, $inputField);
-
-                if ($data['comment'] !== '') {
-                    $I->comment($data['comment']);
-                }
-
-                $I->fillField($inputField, $data['inputValue']);
-                // Change focus to trigger validation
-                $inputField->sendKeys(WebDriverKeys::TAB);
-                // Click on the div so that any opened popup (potentially from the field below) is closed
-                $formSection->click();
-                $I->waitForElementNotVisible('#t3js-ui-block');
-
-                $I->comment('Test value of visible and hidden field');
-                $I->canSeeInField($inputField, $data['expectedValue']);
-                $I->canSeeInField($hiddenField, $data['expectedInternalValue']);
-
-                $I->comment('Save the form');
-                $saveButtonLink = '//*/button[@name="_savedok"][1]';
-                $I->waitForElement($saveButtonLink, 30);
-                $I->click($saveButtonLink);
-                $I->waitForElementNotVisible('#t3js-ui-block');
-                $I->waitForElement('//*/button[@name="_savedok"][not(@disabled)][1]', 30);
-                $I->waitForElement($initializedInputFieldXpath, 30);
-
-                // Find the fields again (after reload of iFrame)
-                $formSection = $this->getFormSectionByFieldLabel($I, $fieldLabel);
-                $inputField = $this->getInputField($formSection);
-                $hiddenField = $this->getHiddenField($formSection, $inputField);
-
-                // Validate save was successful
-                $I->comment('Test value of visible and hidden field');
-                $I->canSeeInField($inputField, $data['expectedValue']);
-                $I->canSeeInField($hiddenField, $data['expectedValueAfterSave']);
-            }
-        }
-    }
-
-    /**
-     * Return the visible input field of element in question.
-     *
-     * @param $formSection
-     * @return RemoteWebElement
-     */
-    protected function getInputField(RemoteWebElement $formSection)
-    {
-        return $formSection->findElement(\WebDriverBy::xpath('.//*/input[@data-formengine-input-name]'));
-    }
-
-    /**
-     * Return the hidden input field of element in question.
-     *
-     * @param RemoteWebElement $formSection
-     * @param RemoteWebElement $inputField
-     * @return RemoteWebElement
-     */
-    protected function getHiddenField(RemoteWebElement $formSection, RemoteWebElement $inputField)
-    {
-        $hiddenFieldXPath = './/*/input[@name="' . $inputField->getAttribute('data-formengine-input-name') . '"]';
-        return $formSection->findElement(\WebDriverBy::xpath($hiddenFieldXPath));
-    }
-
-    /**
-     * Find this element in form.
-     *
-     * @param Admin $I
-     * @param string $fieldLabel
-     * @return RemoteWebElement
-     */
-    protected function getFormSectionByFieldLabel(Admin $I, string $fieldLabel)
-    {
-        $I->comment('Get context for field "' . $fieldLabel . '"');
-        return $I->executeInSelenium(
-            function (RemoteWebDriver $webDriver) use ($fieldLabel) {
-                return $webDriver->findElement(
-                    \WebDriverBy::xpath(
-                        '(//label[contains(text(),"' . $fieldLabel . '")])[1]/ancestor::fieldset[@class="form-section"][1]'
-                    )
-                );
-            }
-        );
-    }
-}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/CategoryTreeCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/CategoryTreeCest.php
deleted file mode 100644 (file)
index e862fc6..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Formhandler;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-
-/**
- * Category tree tests
- */
-class CategoryTreeCest
-{
-    /**
-     * @param Admin $I
-     */
-    public function _before(Admin $I)
-    {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForElementNotVisible('div#nprogess', 30);
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function checkIfCategoryListIsAvailable(Admin $I)
-    {
-        // A sub-element of web module is show
-        $I->waitForElementVisible('#web .modulemenu-group-container .modulemenu-item');
-        $I->click('#web_list');
-        $I->switchToIFrame('list_frame');
-        $I->waitForElement('#recordlist-sys_category');
-        $I->seeNumberOfElements('#recordlist-sys_category table > tbody > tr', [5, 100]);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function editCategoryItem(Admin $I)
-    {
-        // A sub-element of web module is show
-        $I->waitForElementVisible('#web .modulemenu-group-container .modulemenu-item');
-        $I->click('#web_list');
-        $I->switchToIFrame('list_frame');
-        // Collapse all tables and expand category again - ensures category fits into window
-        $I->executeJS('$(\'.icon-actions-view-list-collapse\').click();');
-        $I->wait(1);
-        $I->executeJS('$(\'a[data-table="sys_category"] .icon-actions-view-list-expand\').click();');
-        $I->wait(1);
-        // Select category with id 7
-        $I->click('#recordlist-sys_category tr[data-uid="7"] a[data-original-title="Edit record"]');
-        $I->waitForText('Category', 20);
-        // Change title and level to root
-        $I->fillField('input[data-formengine-input-name="data[sys_category][7][title]"]', 'level-1-4');
-        $I->click('.identifier-7 text');
-        $I->click('.identifier-3 text');
-        $I->click('button[name="_savedok"]');
-        // Wait for tree and check if isset level-1-4
-        $I->waitForElement('.svg-tree-wrapper svg');
-        $I->waitForText('Category');
-        $I->see('level-1-4');
-    }
-}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/ElementsBasicInputCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/ElementsBasicInputCest.php
deleted file mode 100644 (file)
index 71e4825..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Formhandler;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Page\PageTree;
-
-/**
- * Tests for "elements_basic" simple input fields of ext:styleguide
- */
-class ElementsBasicInputCest extends AbstractElementsBasicCest
-{
-    /**
-     * Set up selects styleguide elements basic page and opens record in FormEngine
-     *
-     * @param Admin $I
-     * @param PageTree $pageTree
-     */
-    public function _before(Admin $I, PageTree $pageTree)
-    {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
-
-        $I->click('List');
-        $pageTree->openPath(['styleguide TCA demo', 'elements basic']);
-        $I->switchToIFrame('list_frame');
-        $I->waitForElementNotVisible('div#nprogess', 30);
-
-        // Open record and wait until form is ready
-        $I->waitForText('elements basic', 20);
-        $editRecordLinkCssPath = '#recordlist-tx_styleguide_elements_basic a[data-original-title="Edit record"]';
-        $I->click($editRecordLinkCssPath);
-        $I->waitForElementNotVisible('#t3js-ui-block');
-        $I->waitForText('Edit Form', 3, 'h1');
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function testFieldHandlingOfSimpleFields(Admin $I)
-    {
-        $dataSets = [
-            'input_1' => [
-                [
-                    'inputValue' => 'This is a demo text',
-                    'expectedValue' => 'This is a demo text',
-                    'expectedInternalValue' => 'This is a demo text',
-                    'expectedValueAfterSave' => 'This is a demo text',
-                    'comment' => '',
-                ],
-            ],
-            'input_2, size=10' => [
-                [
-                    'inputValue' => 'This is a demo text with numbers and other characters 42 #!',
-                    'expectedValue' => 'This is a demo text with numbers and other characters 42 #!',
-                    'expectedInternalValue' => 'This is a demo text with numbers and other characters 42 #!',
-                    'expectedValueAfterSave' => 'This is a demo text with numbers and other characters 42 #!',
-                    'comment' => '',
-                ],
-            ],
-            'input_3 max=4' => [
-                [
-                    'inputValue' => 'Kasper',
-                    'expectedValue' => 'Kasp',
-                    'expectedInternalValue' => 'Kasp',
-                    'expectedValueAfterSave' => 'Kasp',
-                    'comment' => '',
-                ],
-            ],
-            'input_4 eval=alpha' => [
-                [
-                    'inputValue' => 'Kasper = TYPO3',
-                    'expectedValue' => 'KasperTYPO',
-                    'expectedInternalValue' => 'KasperTYPO',
-                    'expectedValueAfterSave' => 'KasperTYPO',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => 'Non-latin characters: ŠĐŽĆČ',
-                    'expectedValue' => 'Nonlatincharacters',
-                    'expectedInternalValue' => 'Nonlatincharacters',
-                    'expectedValueAfterSave' => 'Nonlatincharacters',
-                    'comment' => '',
-                ],
-            ],
-            'input_5 eval=alphanum' => [
-                [
-                    'inputValue' => 'Kasper = TYPO3',
-                    'expectedValue' => 'KasperTYPO3',
-                    'expectedInternalValue' => 'KasperTYPO3',
-                    'expectedValueAfterSave' => 'KasperTYPO3',
-                    'comment' => '',
-                ],
-            ],
-            'input_10 eval=is_in, is_in=abc123' => [
-                [
-                    'inputValue' => 'abcd1234',
-                    'expectedValue' => 'abc123',
-                    'expectedInternalValue' => 'abc123',
-                    'expectedValueAfterSave' => 'abc123',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => 'Kasper TYPO3',
-                    'expectedValue' => 'a3',
-                    'expectedInternalValue' => 'a3',
-                    'expectedValueAfterSave' => 'a3',
-                    'comment' => '',
-                ],
-            ],
-            'input_11 eval=lower' => [
-                [
-                    'inputValue' => 'Kasper TYPO3!',
-                    'expectedValue' => 'kasper typo3!',
-                    'expectedInternalValue' => 'kasper typo3!',
-                    'expectedValueAfterSave' => 'kasper typo3!',
-                    'comment' => '',
-                ],
-            ],
-            'input_13 eval=nospace' => [
-                [
-                    'inputValue' => ' Kasper TYPO3! ',
-                    'expectedValue' => 'KasperTYPO3!',
-                    'expectedInternalValue' => 'KasperTYPO3!',
-                    'expectedValueAfterSave' => 'KasperTYPO3!',
-                    'comment' => '',
-                ],
-            ],
-            'input_16 eval=password' => [
-                [
-                    'inputValue' => 'Kasper',
-                    'expectedValue' => '********',
-                    'expectedInternalValue' => 'Kasper',
-                    'expectedValueAfterSave' => 'Kasper',
-                    'comment' => '',
-                ],
-            ],
-            'input_19 eval=trim' => [
-                [
-                    'inputValue' => ' Kasper ',
-                    'expectedValue' => 'Kasper',
-                    'expectedInternalValue' => 'Kasper',
-                    'expectedValueAfterSave' => 'Kasper',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => ' Kasper TYPO3 ',
-                    'expectedValue' => 'Kasper TYPO3',
-                    'expectedInternalValue' => 'Kasper TYPO3',
-                    'expectedValueAfterSave' => 'Kasper TYPO3',
-                    'comment' => '',
-                ],
-            ],
-            'input_23 eval=upper' => [
-                [
-                    'inputValue' => 'Kasper TYPO3!',
-                    'expectedValue' => 'KASPER TYPO3!',
-                    'expectedInternalValue' => 'KASPER TYPO3!',
-                    'expectedValueAfterSave' => 'KASPER TYPO3!',
-                    'comment' => '',
-                ],
-            ],
-            'input_24 eval=year' => [
-                [
-                    'inputValue' => '2016',
-                    'expectedValue' => '2016',
-                    'expectedInternalValue' => '2016',
-                    'expectedValueAfterSave' => '2016',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '12',
-                    'expectedValue' => '2012',
-                    'expectedInternalValue' => '2012',
-                    'expectedValueAfterSave' => '2012',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => 'Kasper',
-                    'expectedValue' => date('Y'),
-                    'expectedInternalValue' => date('Y'),
-                    'expectedValueAfterSave' => date('Y'),
-                    'comment' => 'Invalid character is converted to current year',
-                ],
-            ]
-        ];
-        $this->runTests($I, $dataSets);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function testHandlingOfEvalFields(Admin $I)
-    {
-        $dataSets = [
-            'input_8 eval=double2' => [
-                [
-                    'inputValue' => '12.335',
-                    'expectedValue' => '12.34',
-                    'expectedInternalValue' => '12.34',
-                    'expectedValueAfterSave' => '12.34',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '12,335', // comma as delimiter
-                    'expectedValue' => '12.34',
-                    'expectedInternalValue' => '12.34',
-                    'expectedValueAfterSave' => '12.34',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '1.1', // comma as delimiter
-                    'expectedValue' => '1.10',
-                    'expectedInternalValue' => '1.10',
-                    'expectedValueAfterSave' => '1.10',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => 'TYPO3', // comma as delimiter
-                    'expectedValue' => '3.00',
-                    'expectedInternalValue' => '3.00',
-                    'expectedValueAfterSave' => '3.00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '3TYPO', // comma as delimiter
-                    'expectedValue' => '3.00',
-                    'expectedInternalValue' => '3.00',
-                    'expectedValueAfterSave' => '3.00',
-                    'comment' => '',
-                ],
-            ],
-            'input_9 eval=int' => [
-                [
-                    'inputValue' => '12.335',
-                    'expectedValue' => '12',
-                    'expectedInternalValue' => '12',
-                    'expectedValueAfterSave' => '12',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '12,9',
-                    'expectedValue' => '12',
-                    'expectedInternalValue' => '12',
-                    'expectedValueAfterSave' => '12',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => 'TYPO3',
-                    'expectedValue' => '0',
-                    'expectedInternalValue' => '0',
-                    'expectedValueAfterSave' => '0',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '3TYPO',
-                    'expectedValue' => '3',
-                    'expectedInternalValue' => '3',
-                    'expectedValueAfterSave' => '3',
-                    'comment' => '',
-                ],
-            ],
-            'input_15 eval=num' => [
-                [
-                    'inputValue' => '12.335',
-                    'expectedValue' => '12335',
-                    'expectedInternalValue' => '12335',
-                    'expectedValueAfterSave' => '12335',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '12,9',
-                    'expectedValue' => '129',
-                    'expectedInternalValue' => '129',
-                    'expectedValueAfterSave' => '129',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => 'TYPO3',
-                    'expectedValue' => '3',
-                    'expectedInternalValue' => '3',
-                    'expectedValueAfterSave' => '3',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '3TYPO',
-                    'expectedValue' => '3',
-                    'expectedInternalValue' => '3',
-                    'expectedValueAfterSave' => '3',
-                    'comment' => '',
-                ],
-            ],
-        ];
-        $this->runTests($I, $dataSets);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function testHandlingOfRangeAndMd5Fields(Admin $I)
-    {
-        $dataSets = [
-            'input_25 eval=int, default=0, range lower=-2, range upper=2' => [
-                [
-                    'inputValue' => 'Kasper TYPO3',
-                    'expectedValue' => '0',
-                    'expectedInternalValue' => '0',
-                    'expectedValueAfterSave' => '0',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '2',
-                    'expectedValue' => '2',
-                    'expectedInternalValue' => '2',
-                    'expectedValueAfterSave' => '2',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '-1',
-                    'expectedValue' => '-1',
-                    'expectedInternalValue' => '-1',
-                    'expectedValueAfterSave' => '-1',
-                    'comment' => '',
-                ],
-            ],
-            'input_12 eval=md5' => [
-                [
-                    'inputValue' => 'Kasper TYPO3!',
-                    'expectedValue' => '748469dd64911af8df8f9a3dcb2c9378',
-                    'expectedInternalValue' => '748469dd64911af8df8f9a3dcb2c9378',
-                    'expectedValueAfterSave' => '748469dd64911af8df8f9a3dcb2c9378',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => ' Kasper TYPO3! ',
-                    'expectedValue' => '792a085606250c47d6ebb8c98804d5b0',
-                    'expectedInternalValue' => '792a085606250c47d6ebb8c98804d5b0',
-                    'expectedValueAfterSave' => '792a085606250c47d6ebb8c98804d5b0',
-                    'comment' => 'Check whitespaces are not trimmed.',
-                ],
-            ],
-        ];
-        $this->runTests($I, $dataSets);
-    }
-}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/ElementsBasicInputDateCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/ElementsBasicInputDateCest.php
deleted file mode 100644 (file)
index 371e446..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Formhandler;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Page\PageTree;
-
-/**
- * Tests for "elements_basic" date and time related input fields of ext:styleguide
- */
-class ElementsBasicInputDateCest extends AbstractElementsBasicCest
-{
-    /**
-     * Set up selects styleguide elements basic page and opens record in FormEngine
-     *
-     * @param Admin $I
-     * @param PageTree $pageTree
-     */
-    public function _before(Admin $I, PageTree $pageTree)
-    {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
-
-        $I->click('List');
-        $pageTree->openPath(['styleguide TCA demo', 'elements basic']);
-        $I->switchToIFrame('list_frame');
-        $I->waitForElementNotVisible('div#nprogess', 30);
-
-        // Open record and wait until form is ready
-        $I->waitForText('elements basic', 20);
-        $editRecordLinkCssPath = '#recordlist-tx_styleguide_elements_basic a[data-original-title="Edit record"]';
-        $I->click($editRecordLinkCssPath);
-        $I->waitForElementNotVisible('#t3js-ui-block');
-        $I->waitForText('Edit Form', 3, 'h1');
-        $I->click('inputDateTime');
-        $I->waitForText('inputDateTime', 3);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function checkThatValidationWorks_EvalDate_TypeDate(Admin $I)
-    {
-        $dataSets = [
-            'inputdatetime_2 dbType=date eval=date' => [
-                [
-                    'inputValue' => '29-01-2016',
-                    'expectedValue' => '29-01-2016',
-                    'expectedInternalValue' => '2016-01-29T00:00:00Z',
-                    'expectedValueAfterSave' => '2016-01-29T00:00:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '13-13-2016',
-                    'expectedValue' => '13-01-2017',
-                    'expectedInternalValue' => '2017-01-13T00:00:00Z',
-                    'expectedValueAfterSave' => '2017-01-13T00:00:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '29-02-2016',
-                    'expectedValue' => '29-02-2016',
-                    'expectedInternalValue' => '2016-02-29T00:00:00Z',
-                    'expectedValueAfterSave' => '2016-02-29T00:00:00+00:00',
-                    'comment' => 'Check valid leap year input',
-                ],
-                [
-                    'inputValue' => '29-02-2015',
-                    'expectedValue' => '01-03-2015',
-                    'expectedInternalValue' => '2015-03-01T00:00:00Z',
-                    'expectedValueAfterSave' => '2015-03-01T00:00:00+00:00',
-                    'comment' => 'Check invalid leap year transformation',
-                ],
-            ]
-        ];
-        $this->runTests($I, $dataSets);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function checkThatValidationWorks_EvalDateTime(Admin $I)
-    {
-        $dataSets = [
-            'inputdatetime_3 eval=datetime' => [
-                [
-                    'inputValue' => '05:23 29-01-2016',
-                    'expectedValue' => '05:23 29-01-2016',
-                    'expectedInternalValue' => '2016-01-29T05:23:00Z',
-                    'expectedValueAfterSave' => '2016-01-29T05:23:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '05:23 13-13-2016',
-                    'expectedValue' => '05:23 13-01-2017',
-                    'expectedInternalValue' => '2017-01-13T05:23:00Z',
-                    'expectedValueAfterSave' => '2017-01-13T05:23:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '05:23 29-02-2016',
-                    'expectedValue' => '05:23 29-02-2016',
-                    'expectedInternalValue' => '2016-02-29T05:23:00Z',
-                    'expectedValueAfterSave' => '2016-02-29T05:23:00+00:00',
-                    'comment' => 'Check valid leap year input',
-                ],
-                [
-                    'inputValue' => '05:23 29-02-2015',
-                    'expectedValue' => '05:23 01-03-2015',
-                    'expectedInternalValue' => '2015-03-01T05:23:00Z',
-                    'expectedValueAfterSave' => '2015-03-01T05:23:00+00:00',
-                    'comment' => 'Check invalid leap year transformation',
-                ],
-            ]
-        ];
-        $this->runTests($I, $dataSets);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function checkThatValidationWorks_evalTime(Admin $I)
-    {
-        $dataSets = [
-            'inputdatetime_5' => [
-                [
-                    'inputValue' => '13:30',
-                    'expectedValue' => '13:30',
-                    'expectedInternalValue' => '1970-01-01T13:30:00Z',
-                    'expectedValueAfterSave' => '1970-01-01T13:30:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '123',
-                    'expectedValue' => '12:03',
-                    'expectedInternalValue' => '1970-01-01T12:03:00Z',
-                    'expectedValueAfterSave' => '1970-01-01T12:03:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '12345',
-                    'expectedValue' => '12:34',
-                    'expectedInternalValue' => '1970-01-01T12:34:00Z',
-                    'expectedValueAfterSave' => '1970-01-01T12:34:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '12:04+5',
-                    'expectedValue' => '12:09',
-                    'expectedInternalValue' => '1970-01-01T12:09:00Z',
-                    'expectedValueAfterSave' => '1970-01-01T12:09:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '12:09-3',
-                    'expectedValue' => '12:06',
-                    'expectedInternalValue' => '1970-01-01T12:06:00Z',
-                    'expectedValueAfterSave' => '1970-01-01T12:06:00+00:00',
-                    'comment' => '',
-                ],
-            ],
-        ];
-        $this->runTests($I, $dataSets);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    /*
-    public function checkThatValidationWorks_EvalDateTime_DbTypeDateTime(Admin $I)
-    {
-        // @todo fix these unstable test
-        $dataSets = [
-            'input_37 dbType=datetime eval=datetime' => [
-                [
-                    'inputValue' => '05:23 29-01-2016',
-                    'expectedValue' => '05:23 29-01-2016',
-                    'expectedInternalValue' => '2016-01-29T05:23:00Z',
-                    'expectedValueAfterSave' => '2016-01-29T05:23:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '05:23 13-13-2016',
-                    'expectedValue' => '05:23 13-01-2017',
-                    'expectedInternalValue' => '2017-01-13T05:23:00Z',
-                    'expectedValueAfterSave' => '2017-01-13T05:23:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '05:23 29-02-2016',
-                    'expectedValue' => '05:23 29-02-2016',
-                    'expectedInternalValue' => '2016-02-29T05:23:00Z',
-                    'expectedValueAfterSave' => '2016-02-29T05:23:00+00:00',
-                    'comment' => 'Check valid leap year input',
-                ],
-                [
-                    'inputValue' => '05:23 29-02-2015',
-                    'expectedValue' => '05:23 01-03-2015',
-                    'expectedInternalValue' => '2015-03-01T05:23:00Z',
-                    'expectedValueAfterSave' => '2015-03-01T05:23:00+00:00',
-                    'comment' => 'Check invalid leap year transformation',
-                ],
-            ],
-            'input_18 eval=timesec' => [
-                [
-                    'inputValue' => '13:30:00',
-                    'expectedValue' => '13:30:00',
-                    'expectedInternalValue' => '13:30:00',
-                    'expectedValueAfterSave' => (new \DateTime('13:30:00'))->getTimestamp(),
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '12345',
-                    'expectedValue' => '12:34:05',
-                    'expectedInternalValue' => '12:34:05',
-                    'expectedValueAfterSave' => (new \DateTime('12:34:05'))->getTimestamp(),
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '12:04:04+5',
-                    'expectedValue' => '12:09:04',
-                    'expectedInternalValue' => '12:09:04',
-                    'expectedValueAfterSave' => (new \DateTime('12:09:04'))->getTimestamp(),
-                    'comment' => '',
-                ],
-            ],
-            'input_6 eval=date' => [
-                [
-                    'inputValue' => '29-01-2016',
-                    'expectedValue' => '29-01-2016',
-                    'expectedInternalValue' => '2016-01-29T00:00:00Z',
-                    'expectedValueAfterSave' => '2016-01-29T00:00:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '13-13-2016',
-                    'expectedValue' => '13-01-2017',
-                    'expectedInternalValue' => '2017-01-13T00:00:00Z',
-                    'expectedValueAfterSave' => '2017-01-13T00:00:00+00:00',
-                    'comment' => '',
-                ],
-                [
-                    'inputValue' => '29-02-2016',
-                    'expectedValue' => '29-02-2016',
-                    'expectedInternalValue' => '2016-02-29T00:00:00Z',
-                    'expectedValueAfterSave' => '2016-02-29T00:00:00+00:00',
-                    'comment' => 'Check valid leap year input',
-                ],
-                [
-                    'inputValue' => '29-02-2015',
-                    'expectedValue' => '01-03-2015',
-                    'expectedInternalValue' => '2015-03-01T00:00:00Z',
-                    'expectedValueAfterSave' => '2015-03-01T00:00:00+00:00',
-                    'comment' => 'Check invalid leap year transformation',
-                ],
-            ],
-        ];
-        $this->runTests($I, $dataSets);
-    }
-     */
-}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/ElementsGroupCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/ElementsGroupCest.php
deleted file mode 100644 (file)
index 33aafa5..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Formhandler;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use Facebook\WebDriver\Exception\NoSuchWindowException;
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Page\PageTree;
-
-/**
- * Tests for ElementsGroupelement fields
- */
-class ElementsGroupCest
-{
-    public function _before(Admin $I, PageTree $pageTree)
-    {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
-
-        $I->click('List');
-        $pageTree->openPath(['styleguide TCA demo', 'elements group']);
-        $I->switchToIFrame('list_frame');
-        $I->waitForElementNotVisible('div#nprogess', 30);
-
-        $I->executeJS('window.name="TYPO3Main";');
-
-        $I->waitForText('elements group', 20);
-        $editRecordLinkCssPath = '#recordlist-tx_styleguide_elements_group a[data-original-title="Edit record"]';
-        $I->click($editRecordLinkCssPath);
-        $I->waitForText('Edit Form', 3, 'h1');
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function sortElementsInGroup(Admin $I)
-    {
-        $fieldset = 'div.typo3-TCEforms > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > fieldset:nth-of-type(1)';
-        $formWizardsWrap = $fieldset . ' > div:nth-of-type(1) div.t3js-formengine-field-item > div:nth-of-type(1)';
-        $select = $formWizardsWrap . ' > div:nth-of-type(2) > select';
-
-        $selectOption1 = 'styleguide demo user 1';
-        $multiselect = ['styleguide demo user 1', 'styleguide demo user 2'];
-
-        $I->amGoingTo('put "' . $selectOption1 . '" on first position');
-        $I->selectOption($select, $selectOption1);
-        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-top');
-        $I->see($selectOption1, $select . ' > option:nth-child(1)');
-
-        $I->amGoingTo('put "' . $selectOption1 . '" one position down / on the second position');
-        $I->selectOption($select, $selectOption1);
-        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-down');
-        $I->see($selectOption1, $select . ' > option:nth-child(2)');
-
-        $I->amGoingTo('put "' . $selectOption1 . '" on the last position');
-        $I->selectOption($select, $selectOption1);
-        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-bottom');
-        $I->see($selectOption1, $select . ' > option:nth-last-child(1)');
-
-        $I->amGoingTo('put "' . $selectOption1 . '" one position up / on second last position');
-        $I->selectOption($select, $selectOption1);
-        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-up');
-        $I->see($selectOption1, $select . ' > option:nth-last-child(2)');
-
-        $I->amGoingTo('put ' . print_r($multiselect, 1) . ' on first position');
-        $I->selectOption($select, $multiselect);
-        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-top');
-        $I->see($multiselect[0], $select . ' > option:nth-child(1)');
-        $I->see($multiselect[1], $select . ' > option:nth-child(2)');
-
-        $I->amGoingTo('put ' . print_r($multiselect, 1) . ' one position down');
-        $I->selectOption($select, $multiselect);
-        $I->click($formWizardsWrap . ' div:nth-of-type(3) > div > a.t3js-btn-moveoption-down');
-        $I->see($multiselect[0], $select . ' > option:nth-child(2)');
-        $I->see($multiselect[1], $select . ' > option:nth-child(3)');
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function addARecordWithRecordBrowserGroup(Admin $I)
-    {
-        $fieldset = 'div.typo3-TCEforms > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > fieldset:nth-of-type(1)';
-        $formWizardsWrap = $fieldset . ' > div:nth-of-type(1) div.t3js-formengine-field-item > div:nth-of-type(1)';
-
-        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 4);
-        $I->click($formWizardsWrap . ' div:nth-of-type(4) > div > a:nth-of-type(1)');
-        $I->switchToWindow('Typo3WinBrowser');
-
-        try {
-            $I->amGoingTo('click + button to select record and close DB-Browser');
-            $I->click('#recordlist-be_users > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > span:nth-child(1) > a:nth-child(1)');
-            $I->closeTab();
-        } catch (NoSuchWindowException $e) {
-            // missing focus by auto close window
-        }
-
-        $I->switchToWindow();
-        $I->switchToIFrame('list_frame');
-        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 5);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function addTwoRecordWithRecordBrowserGroup(Admin $I)
-    {
-        $fieldset = 'div.typo3-TCEforms > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > fieldset:nth-of-type(1)';
-        $formWizardsWrap = $fieldset . ' > div:nth-of-type(1) div.t3js-formengine-field-item > div:nth-of-type(1)';
-
-        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 4);
-        $I->click($formWizardsWrap . ' div:nth-of-type(4) > div > a:nth-of-type(1)');
-        $I->switchToWindow('Typo3WinBrowser');
-
-        $I->amGoingTo('click record + in DB-Browser');
-        $I->click('#recordlist-be_groups > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > span:nth-child(1) > a:nth-child(1)');
-
-        try {
-            $I->amGoingTo('click + button to select record and close DB-Browser');
-            $I->click('#recordlist-be_users > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > span:nth-child(1) > a:nth-child(1)');
-            $I->closeTab();
-        } catch (NoSuchWindowException $e) {
-            // missing focus by auto close window
-        }
-
-        $I->switchToWindow();
-        $I->switchToIFrame('list_frame');
-        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 6);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function searchForARecordWithRecordBrowserGroup(Admin $I)
-    {
-        $fieldset = 'div.typo3-TCEforms > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > fieldset:nth-of-type(1)';
-        $formWizardsWrap = $fieldset . ' > div:nth-of-type(1) div.t3js-formengine-field-item > div:nth-of-type(1)';
-
-        $I->seeNumberOfElements('select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"] option', 4);
-        $I->click($formWizardsWrap . ' div:nth-of-type(4) > div > a:nth-of-type(1)');
-        $I->switchToWindow('Typo3WinBrowser');
-
-        $I->amGoingTo("search record '' and limit 1 in DB-Browser");
-        $I->fillField('#showLimit', 1);
-        $I->click('button[name="search"]');
-        $I->waitForElement('.recordlist');
-        $I->seeNumberOfElements('.recordlist #recordlist-be_groups  table tbody tr', 1);
-
-        $I->amGoingTo('search record style and limit 1 in DB-Browser');
-        $I->fillField('#search_field', 'style');
-        $I->click('button[name="search"]');
-        $I->waitForElement('.recordlist');
-        $I->seeNumberOfElements('.recordlist #recordlist-be_groups  table tbody tr', 1);
-
-        $I->amGoingTo('reset limit');
-        $I->fillField('#showLimit', '');
-        $I->amGoingTo('search record foo in DB-Browser');
-        $I->fillField('#search_field', 'foo');
-        $I->click('button[name="search"]');
-        $I->waitForElementNotVisible('.recordlist');
-
-        $I->amGoingTo('search record admin in DB-Browser');
-        $I->fillField('#search_field', 'admin');
-        $I->click('button[name="search"]');
-        $I->waitForElement('.recordlist');
-        $I->see('admin', '.recordlist');
-
-        // search Test only by string
-        try {
-            $I->amGoingTo('click + button to select record and close DB-Browser');
-            $I->click('#recordlist-be_users > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > span:nth-child(1) > a:nth-child(1)');
-            $I->closeTab();
-        } catch (NoSuchWindowException $e) {
-            // missing focus by auto close window
-        }
-
-        $I->switchToWindow();
-        $I->switchToIFrame('list_frame');
-        $I->see('admin', 'select[data-formengine-input-name="data[tx_styleguide_elements_group][1][group_db_1]"]');
-        $I->click('.btn-toolbar button.btn:nth-child(2)');
-        $I->click('li a[data-form="EditDocumentController"] span[data-identifier="actions-document-save-close"]');
-    }
-}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/FalMetadataInheritanceCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/FalMetadataInheritanceCest.php
deleted file mode 100644 (file)
index a17411f..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-<?php
-declare(strict_types = 1);
-
-namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Formhandler;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use Facebook\WebDriver\Exception\NoSuchWindowException;
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Page\PageTree;
-
-/**
- * Tests for inline 1n
- */
-class FalMetadataInheritanceCest
-{
-    public function _before(Admin $I, PageTree $pageTree)
-    {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-
-        $this->goToPageModule($I, $pageTree);
-    }
-
-    /**
-     * This scenario tests whether updated sys_file_metadata fields are propagated to sys_file_reference
-     * attached to tt_content
-     * - creates tt_content
-     * - attaches an image with empty metadata
-     * - modifies image metadata
-     * - checks if metadata is propagated to tt_content
-     *
-     * @param Admin $I
-     * @param PageTree $pageTree
-     * @throws \Exception
-     */
-    public function checkIfUpdatedFileMetadataIsUpdatedInContent(Admin $I, PageTree $pageTree)
-    {
-        $I->amGoingTo('Create new CE with image');
-        $I->click('.t3js-page-new-ce a');
-        $I->waitForElementNotVisible('div#nprogess');
-        $I->click('Text & Images');
-        $I->waitForText('Create new Page Content on page');
-        $I->fillField('//input[contains(@data-formengine-input-name, "data[tt_content]") and contains(@data-formengine-input-name, "[header]")]', 'tt_content with image');
-
-        $I->click('Images');
-        $I->click('Add image');
-
-        $I->switchToWindow('Typo3WinBrowser');
-        try {
-            $I->click('.list-tree-control-closed');
-            $I->click('styleguide');
-            $I->click('bus_lane.jpg');
-        } catch (NoSuchWindowException $e) {
-            // missing focus by auto close window
-        }
-
-        $I->switchToWindow();
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('bus_lane.jpg');
-
-        $I->see('Set element specific value (No default)', '.t3js-form-field-eval-null-placeholder-checkbox');
-
-        $I->seeElementInDOM('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[title]")]', ['placeholder' => '', 'value' => '']);
-        $I->seeElementInDOM('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[alternative]")]', ['placeholder' => '', 'value' => '']);
-        $I->seeElementInDOM('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', ['placeholder' => '']);
-        //textarea value is not in the attribute, so we need to check it separately
-        $I->seeInField('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', '');
-
-        $I->click('button[name="_savedok"]');
-        $I->wait(3);
-        $I->click('a[title="Close"]');
-
-        $I->amGoingTo('Change default metadata');
-        $I->switchToIFrame();
-        $I->click('Filelist');
-        $I->switchToIFrame('typo3-navigationContainerIframe');
-        $I->waitForText('fileadmin/ (auto-created)');
-        $I->click('styleguide');
-
-        $I->switchToWindow();
-        $I->switchToIFrame('list_frame');
-        $I->click('bus_lane.jpg');
-        $I->waitForText('Edit File Metadata "bus_lane.jpg" on root level');
-        $I->fillField('//input[contains(@data-formengine-input-name, "data[sys_file_metadata]") and contains(@data-formengine-input-name, "[title]")]', 'Test title');
-        $I->fillField('//textarea[contains(@data-formengine-input-name, "data[sys_file_metadata]") and contains(@data-formengine-input-name, "[description]")]', 'Test description');
-        $I->fillField('//input[contains(@data-formengine-input-name, "data[sys_file_metadata]") and contains(@data-formengine-input-name, "[alternative]")]', 'Test alternative');
-
-        $I->click('button[name="_savedok"]');
-        $I->wait(3);
-        $I->click('a[title="Close"]');
-
-        $I->amGoingTo('Check metadata of sys_file_reference displayed in tt_content');
-        $this->goToPageModule($I, $pageTree);
-        $I->switchToWindow();
-        $I->switchToIFrame('list_frame');
-        $I->click('tt_content with image');
-        $I->waitForElementNotVisible('#t3js-ui-block');
-        $I->waitForText('Edit Page Content "tt_content with image" on page "styleguide TCA demo"');
-        $I->click('Images');
-        $I->click('.form-irre-header');
-
-        $I->see('(Default: "Test title")', '.t3js-form-field-eval-null-placeholder-checkbox');
-        $I->see('(Default: "Test alternative")', '.t3js-form-field-eval-null-placeholder-checkbox');
-        $I->see('(Default: "Test description")', '.t3js-form-field-eval-null-placeholder-checkbox');
-
-        $I->seeElementInDOM('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[title]")]', ['placeholder' => 'Test title', 'value' => '']);
-        $I->seeElementInDOM('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[alternative]")]', ['placeholder' => 'Test alternative', 'value' => '']);
-        $I->seeElementInDOM('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', ['placeholder' => 'Test description']);
-        //textarea value is not in the attribute, so we need to check it separately
-        $I->seeInField('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', '');
-    }
-
-    /**
-     * This scenario tests whether sys_file_metadata fields are propagated to sys_file_reference
-     * attached to tt_content
-     *
-     * - given a image with filled metadata (created in checkIfUpdatedFileMetadataIsUpdatedInContent test)
-     * - creates a new tt_content
-     * - attaches an image to tt_content
-     * - checks if metadata is propagated to tt_content
-     * - checks if checkboxes are unchecked and inputs are disabled
-     *
-     * test for https://forge.typo3.org/issues/81235
-     *
-     * @param Admin $I
-     * @param PageTree $pageTree
-     * @throws \Exception
-     * @depends checkIfUpdatedFileMetadataIsUpdatedInContent
-     */
-    public function checkIfFileMetadataIsInheritedInContent(Admin $I)
-    {
-        $I->amGoingTo('Create new CE with image with filled metadata');
-        $I->click('.t3js-page-new-ce a');
-        $I->waitForElementNotVisible('div#nprogess');
-        $I->click('Text & Images');
-        $I->waitForText('Create new Page Content on page');
-        $I->fillField('//input[contains(@data-formengine-input-name, "data[tt_content]") and contains(@data-formengine-input-name, "[header]")]', 'tt_content with image with filled metadata');
-
-        $I->click('Images');
-        $I->click('Add image');
-
-        $I->switchToWindow('Typo3WinBrowser');
-        try {
-            $I->click('.list-tree-control-closed');
-            $I->click('styleguide');
-            $I->click('bus_lane.jpg');
-        } catch (NoSuchWindowException $e) {
-            // missing focus by auto close window
-        }
-
-        $I->switchToWindow();
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('bus_lane.jpg');
-
-        $I->waitForText('Image Metadata');
-
-        $I->seeInField('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[title]")]', '');
-        $I->seeInField('//input[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[alternative]")]', '');
-        $I->seeInField('//textarea[contains(@data-formengine-input-name, "data[sys_file_reference]") and contains(@data-formengine-input-name, "[description]")]', '');
-
-        $I->see('(Default: "Test title")', '.t3js-form-field-eval-null-placeholder-checkbox');
-        $I->see('(Default: "Test alternative")', '.t3js-form-field-eval-null-placeholder-checkbox');
-        $I->see('(Default: "Test description")', '.t3js-form-field-eval-null-placeholder-checkbox');
-
-        $I->amGoingTo('assert checkboxes are not checked');
-        $I->dontSeeCheckboxIsChecked('//input[contains(@name, "[title]") and @type="checkbox" and contains(@name, "control[active][sys_file_reference]")]');
-        $I->dontSeeCheckboxIsChecked('//input[contains(@name, "[alternative]") and @type="checkbox" and contains(@name, "control[active][sys_file_reference]")]');
-        $I->dontSeeCheckboxIsChecked('//input[contains(@name, "[description]") and @type="checkbox" and contains(@name, "control[active][sys_file_reference]")]');
-
-        $I->amGoingTo('Assert hidden control field value (default value which is used when checkbox is not checked');
-        $I->seeInField('//input[contains(@name, "[title]") and @type="hidden" and contains(@name, "control[active][sys_file_reference]")]', 0);
-        $I->seeInField('//input[contains(@name, "[alternative]") and @type="hidden" and contains(@name, "control[active][sys_file_reference]")]', 0);
-        $I->seeInField('//input[contains(@name, "[description]") and @type="hidden" and contains(@name, "control[active][sys_file_reference]")]', 0);
-
-        //when checkbox is unchecked the disabled input is shown
-        //<input type="text" class="form-control" disabled="disabled" value="Test title">
-        $I->seeInField('input.form-control:disabled', 'Test title');
-        $I->seeInField('input.form-control:disabled', 'Test alternative');
-        $I->seeInField('textarea.form-control:disabled', 'Test description');
-    }
-
-    /**
-     * @param Admin $I
-     * @param PageTree $pageTree
-     * @throws \Exception
-     */
-    protected function goToPageModule(Admin $I, PageTree $pageTree)
-    {
-        $I->switchToIFrame();
-        $I->click('Page');
-        $pageTree->openPath(['styleguide TCA demo']);
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('styleguide TCA demo');
-    }
-}
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/Inline1nCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/Formhandler/Inline1nCest.php
deleted file mode 100644 (file)
index f4a7d15..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Formhandler;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use Facebook\WebDriver\WebDriverKeys;
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Helper\ModalDialog;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Page\PageTree;
-
-/**
- * Tests for inline 1n
- */
-class Inline1nCest
-{
-    public function _before(Admin $I, PageTree $pageTree)
-    {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
-
-        $I->click('List');
-        $pageTree->openPath(['styleguide TCA demo', 'inline 1n']);
-        $I->switchToIFrame('list_frame');
-
-        $I->waitForText('inline 1n', 20);
-        $editRecordLinkCssPath = '#recordlist-tx_styleguide_inline_1n a[data-original-title="Edit record"]';
-        $I->click($editRecordLinkCssPath);
-        $I->waitForText('Edit Form', 3, 'h1');
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function checkIfExpandsAndCollapseShowInput(Admin $I)
-    {
-        $I->wantTo('Expands the inline Element');
-        $I->click('div[data-toggle="formengine-inline"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
-        $I->waitForElement('input[data-formengine-input-name="data[tx_styleguide_inline_1n_child][1][input_1]"]');
-        $I->wantTo('check is the value in input');
-        $I->seeInField('input[data-formengine-input-name="data[tx_styleguide_inline_1n_child][1][input_1]"]', 'lipsum');
-        $I->wantTo('Collapse the inline Element');
-        $I->click('div[data-toggle="formengine-inline"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
-        $I->waitForElementNotVisible('#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_fields.panel-collapse');
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function hideAndUnhideInline1nInlineElement(Admin $I)
-    {
-        $I->wantTo('Can hide a Inline Element');
-        $I->click('a span[data-identifier="actions-edit-hide"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
-        $I->waitForElement('#data-12-tx_styleguide_inline_1n-1-inline_1_records .t3-form-field-container-inline-hidden');
-        $I->wantTo('Can unhide a Inline Element');
-        $I->click('a span[data-identifier="actions-edit-unhide"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
-        $I->waitForElementNotVisible('#data-12-tx_styleguide_inline_1n-1-inline_1_records .t3-form-field-container-inline-hidden', 2);
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function createInline1nInlineElement(Admin $I)
-    {
-        $I->click('span[data-identifier="actions-document-new"]', 'div.typo3-newRecordLink');
-
-        $fieldLabel = 'input_1';
-        $testValue = 'Fo Bar';
-
-        $this->fillFieldByLabel($I, $fieldLabel, $testValue);
-
-        $I->click('button[name="_savedok"]');
-        $I->wait(3);
-        $I->click('a[title="Close"]');
-        $I->wait(3);
-
-        $I->executeJS('$(\'a[data-table="pages_language_overlay"] .icon-actions-view-list-collapse\').click();');
-        $I->wait(1);
-
-        $I->see('lipsum', '#recordlist-tx_styleguide_inline_1n_child > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > a');
-        $I->see('Fo Bar', '#recordlist-tx_styleguide_inline_1n_child > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(2) > td:nth-child(2) > a');
-    }
-
-    /**
-     * @depends createInline1nInlineElement
-     * @param Admin $I
-     */
-    public function checkIfCanSortingInlineElement(Admin $I)
-    {
-        $I->wantTo('Can sort an Inline Element');
-        $I->click('a span[data-identifier="actions-move-down"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
-        $I->click('button[name="_savedok"]');
-        $I->wait(3);
-        $I->click('a[title="Close"]');
-        $I->wait(3);
-
-        $I->executeJS('$(\'a[data-table="pages_language_overlay"] .icon-actions-view-list-collapse\').click();');
-        $I->wait(1);
-
-        $I->wantTo('Check new sorting');
-        $I->see('Fo Bar', '#recordlist-tx_styleguide_inline_1n_child > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > a');
-        $I->see('lipsum', '#recordlist-tx_styleguide_inline_1n_child > div:nth-child(1) > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(2) > td:nth-child(2) > a');
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function changeInline1nInlineInput(Admin $I)
-    {
-        $I->click('div[data-toggle="formengine-inline"]', '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
-        $I->waitForElement('input[data-formengine-input-name="data[tx_styleguide_inline_1n_child][1][input_1]"]');
-        $I->fillField('input[data-formengine-input-name="data[tx_styleguide_inline_1n_child][1][input_1]"]', 'hello world');
-        $I->click('button[name="_savedok"]');
-        $I->wait(3);
-        $I->click('a[title="Close"]');
-        $I->wait(3);
-        $I->see('hello world');
-    }
-
-    /**
-     * @param Admin $I
-     * @param ModalDialog $modalDialog
-     */
-    public function deleteInline1nInlineElement(Admin $I, ModalDialog $modalDialog)
-    {
-        $inlineElementToDelete = '#data-12-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div';
-        $I->wantTo('Cancel the delete dialog');
-        $I->click('a span[data-identifier="actions-edit-delete"]', $inlineElementToDelete);
-        $modalDialog->clickButtonInDialog('button[name="no"]');
-        // switch form Dialogbox back to IFrame
-        $I->switchToIFrame('list_frame');
-        $I->seeElement($inlineElementToDelete);
-
-        $I->wantTo('Accept the delete dialog');
-        $I->click('a span[data-identifier="actions-edit-delete"]', $inlineElementToDelete);
-
-        // don't use $modalDialog->clickButtonInDialog due to too low timeout
-        $modalDialog->canSeeDialog();
-        $I->click('button[name="yes"]', ModalDialog::$openedModalButtonContainerSelector);
-        $I->waitForElementNotVisible(ModalDialog::$openedModalSelector, 30);
-        // switch form Dialogbox back to IFrame
-        $I->switchToIFrame('list_frame');
-        $I->waitForElementNotVisible($inlineElementToDelete);
-    }
-
-    /**
-     * @param Admin $I
-     * @param $fieldLabel
-     * @param $testValue
-     */
-    protected function fillFieldByLabel(Admin $I, $fieldLabel, $testValue)
-    {
-        $fieldContext = $I->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) use (
-            $fieldLabel
-        ) {
-            return $webdriver->findElement(
-                \Facebook\WebDriver\WebDriverBy::xpath('(//label[contains(text(),"' . $fieldLabel . '")])[1]/ancestor::fieldset[@class="form-section"][1]')
-            );
-        });
-
-        $visibleFieldXpath = './/*/input[@data-formengine-input-name]';
-        $clearButtonXpath = '(//label[contains(text(),"' . $fieldLabel . '")])[1]/parent::*//*/button[@class="close"]';
-        $initializedInputFieldXpath = '(//label[contains(text(),"' . $fieldLabel . '")])[1]/parent::*//*/input[@data-formengine-input-name][@data-formengine-input-initialized]';
-        $I->waitForElement($initializedInputFieldXpath, 30);
-        $inputField = $fieldContext->findElement(\WebDriverBy::xpath($visibleFieldXpath));
-        $internalInputFieldXpath = '(//label[contains(text(),"' . $fieldLabel . '")])[1]/parent::*//*/input[@name="' . $inputField->getAttribute('data-formengine-input-name') . '"]';
-
-        $I->waitForElement($internalInputFieldXpath, 30);
-        $I->waitForElement($clearButtonXpath, 30);
-
-        $I->fillField($inputField, $testValue);
-        $inputField->sendKeys(WebDriverKeys::TAB);
-        $fieldContext->click();
-        $I->comment('Test value of "visible" field');
-        $I->canSeeInField($inputField, $testValue);
-    }
-}
index 4c89ad4..94af3e5 100644 (file)
@@ -14,7 +14,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\General;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Module Menu tests
@@ -22,21 +22,17 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class ModuleMenuCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkIfModuleMenuIsCollapsible(Admin $I)
+    public function checkIfModuleMenuIsCollapsible(BackendTester $I)
     {
         // A sub-element of web module is shown
         $I->waitForElementVisible('#web .modulemenu-group-container .modulemenu-item');
@@ -57,9 +53,9 @@ class ModuleMenuCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function selectingAModuleDoesHighlightIt(Admin $I)
+    public function selectingAModuleDoesHighlightIt(BackendTester $I)
     {
         $I->seeNumberOfElements('#web .modulemenu-item-link', [2, 20]);
 
diff --git a/typo3/sysext/core/Tests/Acceptance/Backend/Install/InstallModuleCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/Install/InstallModuleCest.php
deleted file mode 100644 (file)
index 20d13f5..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Language;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-
-/**
- * Install Module tests
- */
-class InstallModuleCest
-{
-    /**
-     * @var string
-     */
-    protected $password = '';
-
-    /**
-     * @param Admin $I
-     */
-    public function _before(Admin $I)
-    {
-        $this->password = getenv('typo3InstallToolPassword');
-
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
-
-        $I->see('Install');
-        $I->click('Install');
-
-        // switch to content iframe
-        $I->switchToIFrame('list_frame');
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function unlockAndLockInstallTool(Admin $I)
-    {
-        $I->wantTo('Check the Install Tool unlock and lock functions.');
-
-        // @todo probably there is a better solution skipping the test
-        if (empty($this->password)) {
-            $I->comment('Skip this test.');
-        } else {
-            $I->amGoingTo('unlock the install tool');
-            $I->waitForElement('#t3-install-form-unlock');
-            $I->see('The Install Tool is locked');
-            $I->see('Unlock the Install Tool');
-            $I->click('//button[@value="enableInstallTool"]');
-            $I->waitForElement('#t3-install-outer');
-            $I->see('Password');
-            $I->see('Login');
-
-            $I->amGoingTo('lock the install tool');
-            $I->see('Lock Install Tool again');
-            $I->click('Lock Install Tool again');
-            $I->see('The Install Tool is locked');
-        }
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function loginToInstallTool(Admin $I)
-    {
-        $I->wantTo('Check the Install Tool Login with wrong and right passwords.');
-
-        // @todo probably there is a better solution skipping the test
-        if (empty($this->password)) {
-            $I->comment('Skip this test.');
-        } else {
-            $I->amGoingTo('unlock the install tool');
-            $I->waitForElement('#t3-install-form-unlock');
-            $I->see('The Install Tool is locked');
-            $I->see('Unlock the Install Tool');
-            $I->click('//button[@value="enableInstallTool"]');
-            $I->waitForElement('#t3-install-outer');
-
-            $I->amGoingTo('login to install tool with wrong password');
-            $I->fillField('#t3-install-form-password', 'wrong_' . $this->password);
-            $I->click('//button[@type="submit"]');
-            $I->waitForElement('//div[@class="t3js-message typo3-message alert alert-danger"]');
-            $I->see('Login failed');
-            $I->see('Given password does not match the install tool login password.');
-            $I->see('Calculated hash:');
-
-            $I->amGoingTo('login to install tool with right password');
-            $I->fillField('#t3-install-form-password', $this->password);
-            $I->click('//button[@type="submit"]');
-            $I->wait(2);
-            $I->waitForElement('//body[@class="backend"]');
-            $I->see('Important actions');
-            $I->waitForElement('.t3js-list-group-wrapper');
-            $I->see('Logout from Install Tool');
-            // can't click the link text
-            $I->seeElement('//*[@id="menuWrapper"]/div/div/a');
-            $I->click('//*[@id="menuWrapper"]/div/div/a[text()="Logout from Install Tool"]');
-            $I->see('The Install Tool is locked');
-        }
-    }
-}
index b2b40ab..312e4a7 100644 (file)
@@ -14,7 +14,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Language;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Language tests
@@ -22,15 +22,11 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class LanguageCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
 
         $I->see('Languages');
         $I->click('Languages');
@@ -39,13 +35,13 @@ class LanguageCest
         $I->executeJS('TYPO3.Notification.duration = 100;');
 
         // switch to content iframe
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function showsHeadingAndListsInstalledLanguages(Admin $I)
+    public function showsHeadingAndListsInstalledLanguages(BackendTester $I)
     {
         $I->see('Installed Languages');
 
@@ -54,9 +50,9 @@ class LanguageCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function filterInstalledLanguages(Admin $I)
+    public function filterInstalledLanguages(BackendTester $I)
     {
         $I->wantTo('Filter the list of translations with a valid language');
         $I->fillField('#typo3-language-searchfield', 'Danish');
@@ -73,9 +69,9 @@ class LanguageCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function activateAndDeactivateALanguage(Admin $I)
+    public function activateAndDeactivateALanguage(BackendTester $I)
     {
         $I->wantTo('Activate a language');
         $I->seeElement('#language-pt_BR.disabled');
@@ -91,9 +87,9 @@ class LanguageCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function downloadALanguage(Admin $I)
+    public function downloadALanguage(BackendTester $I)
     {
         $I->wantTo('Download a language with no selection and see error message');
         $I->seeElement('#language-pt_BR.disabled');
@@ -115,9 +111,9 @@ class LanguageCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function showsHeadingAndListsTranslationOverview(Admin $I)
+    public function showsHeadingAndListsTranslationOverview(BackendTester $I)
     {
         $I->wantToTest('Select Translation Overview');
         $I->selectOption('.t3-js-jumpMenuBox', 'Translation Overview');
@@ -126,9 +122,9 @@ class LanguageCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function filterTranslationOverview(Admin $I)
+    public function filterTranslationOverview(BackendTester $I)
     {
         $I->wantToTest('Select Translation Overview and Filter');
         $I->selectOption('.t3-js-jumpMenuBox', 'Translation Overview');
@@ -144,11 +140,11 @@ class LanguageCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      * @param string $alertTitle
      * @param string $alertMessage
      */
-    protected function seeAlert(Admin $I, $alertTitle, $alertMessage)
+    protected function seeAlert(BackendTester $I, $alertTitle, $alertMessage)
     {
         // switch back to body
         $I->switchToIFrame();
@@ -158,7 +154,6 @@ class LanguageCest
         $I->see($alertTitle);
         $I->see($alertMessage);
 
-        // switch to content iframe
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
     }
 }
index edec1df..200300d 100644 (file)
@@ -14,7 +14,8 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Login;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Support\Helper\Topbar;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\TestingFramework\Core\Acceptance\Helper\Topbar;
 
 /**
  * Various backend login related tests
@@ -25,9 +26,9 @@ class BackendLoginCest
      * Call backend login page and verify login button changes color on mouse over,
      * verifies page is available and CSS is properly loaded.
      *
-     * @param \AcceptanceTester $I
+     * @param BackendTester $I
      */
-    public function loginButtonMouseOver(\AcceptanceTester $I)
+    public function loginButtonMouseOver(BackendTester $I)
     {
         $I->wantTo('check login functions');
         $I->amOnPage('/typo3/index.php');
@@ -52,9 +53,9 @@ class BackendLoginCest
      * Call backend login page and submit invalid login data.
      * Verifies login is not accepted and an error message is rendered.
      *
-     * @param \AcceptanceTester $I
+     * @param BackendTester $I
      */
-    public function loginDeniedWithInvalidCredentials(\AcceptanceTester $I)
+    public function loginDeniedWithInvalidCredentials(BackendTester $I)
     {
         $I->wantTo('check login functions');
         $I->amOnPage('/typo3/index.php');
@@ -82,9 +83,9 @@ class BackendLoginCest
     /**
      * Login a admin user and logout again
      *
-     * @param \AcceptanceTester $I
+     * @param BackendTester $I
      */
-    public function loginWorksAsAdminUser(\AcceptanceTester $I)
+    public function loginWorksAsAdminUser(BackendTester $I)
     {
         $I->wantTo('login with admin');
         $this->login($I, 'admin', 'password');
@@ -99,9 +100,9 @@ class BackendLoginCest
     /**
      * Login as a non-admin user, check visible modules and logout again
      *
-     * @param \AcceptanceTester $I
+     * @param BackendTester $I
      */
-    public function loginWorksAsEditorUser(\AcceptanceTester $I)
+    public function loginWorksAsEditorUser(BackendTester $I)
     {
         $this->login($I, 'editor', 'password');
 
@@ -123,11 +124,11 @@ class BackendLoginCest
     /**
      * Helper method for user login on backend login screen
      *
-     * @param \AcceptanceTester $I
+     * @param BackendTester $I
      * @param string $username
      * @param string $password
      */
-    protected function login(\AcceptanceTester $I, string $username, string $password)
+    protected function login(BackendTester $I, string $username, string $password)
     {
         $I->amGoingTo('Step\Backend\Login username: ' . $username);
         $I->amOnPage('/typo3/index.php');
@@ -145,14 +146,14 @@ class BackendLoginCest
     /**
      * Logout user by clicking logout button in toolbar
      *
-     * @param \AcceptanceTester $I
+     * @param BackendTester $I
      */
-    protected function logout(\AcceptanceTester $I)
+    protected function logout(BackendTester $I)
     {
         $I->amGoingTo('step backend login');
         $I->amGoingTo('logout');
         // ensure that we are on the main frame
-        $I->switchToIFrame();
+        $I->switchToMainFrame();
         $I->click('#typo3-cms-backend-backend-toolbaritems-usertoolbaritem > a');
         $I->click('Logout');
         $I->waitForElement('#t3-username');
index 3de9449..cab31e9 100644 (file)
@@ -14,29 +14,29 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Page;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use PHPUnit\Framework\SkippedTestError;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Page and page tree related tests.
  */
 class AddPageInPageModuleCest
 {
-    public function _before(Admin $I)
+    /**
+     * @param BackendTester $I
+     */
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
     }
 
     /**
      * This test case is used to check if a page can be added with the page module.
      * It also tests to remove the new page with the page tree context menu.
      *
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function addAndDeletePage(Admin $I)
+    public function addAndDeletePage(BackendTester $I)
     {
         // @todo: Fix in high load scenarios or throw away
         $this->skipUnstable();
@@ -63,8 +63,7 @@ class AddPageInPageModuleCest
         $I->waitForElementVisible($contextMenuNew, 30);
         $I->click($contextMenuNew);
 
-        // Switch to content frame
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
 
         // New page select position wizard
         $I->click('i[title="Insert the new page here"]');
@@ -95,7 +94,7 @@ class AddPageInPageModuleCest
         $I->waitForElement($pageTitleInput);
         $I->assertEquals('Testpage', $I->grabValueFrom($pageTitleInput), 'Value in input field.');
         $I->dontSeeElement($pageTitleFieldset . ' > div > div.t3js-formengine-validation-marker.has-error');
-        $I->switchToIFrame();
+        $I->switchToMainFrame();
 
         // Check tree
         $I->waitForElement($typo3NavigationContainer);
@@ -116,10 +115,10 @@ class AddPageInPageModuleCest
     }
 
     /**
-     * @throws \PHPUnit_Framework_SkippedTestError
+     * @throws SkippedTestError
      */
     protected function skipUnstable()
     {
-        throw new \PHPUnit_Framework_SkippedTestError('Test unstable, skipped for now.');
+        throw new SkippedTestError('Test unstable, skipped for now.');
     }
 }
index 835f639..d3e37f2 100644 (file)
@@ -14,7 +14,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Page;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * This testcase is used to check if the expected information is found when
@@ -22,22 +22,21 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
  */
 class PageModuleCest
 {
-    public function _before(Admin $I)
+    /**
+     * @param BackendTester $I
+     */
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkThatPageModuleHasAHeadline(Admin $I)
+    public function checkThatPageModuleHasAHeadline(BackendTester $I)
     {
         $I->click('Page');
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->canSee('Web>Page module', 'h4');
     }
 }
index 379d462..96abb5c 100644 (file)
@@ -14,8 +14,8 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Scheduler;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Helper\ModalDialog;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\ModalDialog;
 
 /**
  * Scheduler task tests
@@ -23,25 +23,20 @@ use TYPO3\TestingFramework\Core\Acceptance\Support\Helper\ModalDialog;
 class TasksCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
         $I->see('Scheduler', '#system_txschedulerM1');
         $I->click('Scheduler', '#system_txschedulerM1');
-        // switch to content iframe
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function createASchedulerTask(Admin $I)
+    public function createASchedulerTask(BackendTester $I)
     {
         $I->see('No tasks defined yet');
         $I->click('//a[contains(@title, "Add task")]', '.module-docheader');
@@ -58,9 +53,9 @@ class TasksCest
 
     /**
      * @depends createASchedulerTask
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function canRunTask(Admin $I)
+    public function canRunTask(BackendTester $I)
     {
         // run the task
         $I->click('a[data-original-title="Run task"]');
@@ -71,9 +66,9 @@ class TasksCest
 
     /**
      * @depends createASchedulerTask
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function canEditTask(Admin $I)
+    public function canEditTask(BackendTester $I)
     {
         $I->click('//a[contains(@data-original-title, "Edit")]');
         $I->waitForText('Edit task');
@@ -87,9 +82,9 @@ class TasksCest
 
     /**
      * @depends canRunTask
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function canEnableAndDisableTask(Admin $I)
+    public function canEnableAndDisableTask(BackendTester $I)
     {
         $I->wantTo('See a enable button for a task');
         $I->click('//a[contains(@data-original-title, "Enable")]', '#tx_scheduler_form');
@@ -104,10 +99,10 @@ class TasksCest
 
     /**
      * @depends createASchedulerTask
-     * @param Admin $I
+     * @param BackendTester $I
      * @param ModalDialog $modalDialog
      */
-    public function canDeleteTask(Admin $I, ModalDialog $modalDialog)
+    public function canDeleteTask(BackendTester $I, ModalDialog $modalDialog)
     {
         $I->wantTo('See a delete button for a task');
         $I->seeElement('//a[contains(@data-original-title, "Delete")]');
@@ -119,19 +114,19 @@ class TasksCest
         $I->click('Cancel', ModalDialog::$openedModalButtonContainerSelector);
         $I->waitForElementNotVisible(ModalDialog::$openedModalSelector, 30);
 
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->wantTo('Still see and can click the Delete button as the deletion has been canceled');
         $I->click('//a[contains(@data-original-title, "Delete")]');
         $modalDialog->clickButtonInDialog('OK');
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->see('The task was successfully deleted.');
         $I->see('No tasks defined yet');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function canSwitchToSetupCheck(Admin $I)
+    public function canSwitchToSetupCheck(BackendTester $I)
     {
         $I->selectOption('select[name=SchedulerJumpMenu]', 'Setup check');
         $I->waitForElementVisible('div.tx_scheduler_mod1');
@@ -140,9 +135,9 @@ class TasksCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function canSwitchToInformation(Admin $I)
+    public function canSwitchToInformation(BackendTester $I)
     {
         $I->selectOption('select[name=SchedulerJumpMenu]', 'Information');
         $I->waitForElementVisible('div.tx_scheduler_mod1');
index 2cd699c..21770b4 100644 (file)
@@ -14,7 +14,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Template;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Template tests
@@ -22,43 +22,38 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class TemplateCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
 
         $I->see('Template');
         $I->click('Template');
 
-        // switch to content iframe
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->waitForElementVisible('#ts-overview');
         $I->see('Template tools');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function pagesWithNoTemplateShouldShowButtonsToCreateTemplates(Admin $I)
+    public function pagesWithNoTemplateShouldShowButtonsToCreateTemplates(BackendTester $I)
     {
         $I->wantTo('show templates overview on root page (uid = 0)');
-        $I->switchToIFrame();
+        $I->switchToMainFrame();
         // click on root page
         $I->click('#extdd-1');
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->waitForElementVisible('#ts-overview');
         $I->see('This is an overview of the pages in the database containing one or more template records. Click a page title to go to the page.');
 
         $I->wantTo('show templates overview on website root page (uid = 1 and pid = 0)');
-        $I->switchToIFrame();
+        $I->switchToMainFrame();
         // click on website root page
         $I->click('#extdd-3');
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->waitForText('No template');
         $I->see('There was no template on this page!');
         $I->see('You need to create a template record below in order to edit your configuration.');
@@ -74,14 +69,14 @@ class TemplateCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function addANewSiteTemplate(Admin $I)
+    public function addANewSiteTemplate(BackendTester $I)
     {
         $I->wantTo('create a new site template');
-        $I->switchToIFrame();
+        $I->switchToMainFrame();
         $I->click('#extdd-3');
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame('list_frame');
         $I->waitForText('Create new website');
         $I->click("//input[@name='newWebsite']");
         $I->waitForText('Edit constants for template');
@@ -111,6 +106,7 @@ class TemplateCest
         $config = $I->grabTextFrom('//textarea[@data-formengine-input-name="data[sys_template][1][config]"]');
         $config = str_replace('HELLO WORLD!', 'Hello Acceptance Test!', $config);
         $I->fillField('//textarea[@data-formengine-input-name="data[sys_template][1][config]"]', $config);
+
         $I->click('.btn-toolbar .btn-group.t3js-splitbutton button.btn:nth-child(2)');
         $I->click('//a[@data-name="_saveandclosedok"]');
 
index 8030bf3..19d9fb5 100644 (file)
@@ -15,9 +15,9 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
  */
 
 use Codeception\Scenario;
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Helper\ModalDialog;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Helper\Topbar;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\ModalDialog;
+use TYPO3\TestingFramework\Core\Acceptance\Helper\Topbar;
 
 /**
  * Test for the "Bookmark" functionality
@@ -39,22 +39,18 @@ class BookmarkCest
     protected static $docHeaderBookmarkButtonSelector = '.module-docheader .btn[title="Create a bookmark to this page"]';
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      * @return Admin
      */
-    public function checkThatBookmarkListIsInitiallyEmpty(Admin $I)
+    public function checkThatBookmarkListIsInitiallyEmpty(BackendTester $I)
     {
         $this->clickBookmarkDropdownToggleInTopbar($I);
         $I->cantSeeElement(self::$topBarModuleSelector . ' .shortcut');
@@ -63,17 +59,16 @@ class BookmarkCest
 
     /**
      * @depends checkThatBookmarkListIsInitiallyEmpty
-     * @param Admin $I
+     * @param BackendTester $I
      * @param ModalDialog $dialog
-     * @return Admin
+     * @return BackendTester
      */
-    public function checkThatAddingABookmarkAddsItemToTheBookmarkList(Admin $I, ModalDialog $dialog, Scenario $scenario)
+    public function checkThatAddingABookmarkAddsItemToTheBookmarkList(BackendTester $I, ModalDialog $dialog, Scenario $scenario)
     {
-        $I->switchToIFrame();
         // open the scheduler module as we would like to put it into the bookmark liste
         $I->click('Scheduler', '.scaffold-modulemenu');
 
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
 
         $I->click(self::$docHeaderBookmarkButtonSelector);
         // cancel the action to test the functionality
@@ -85,7 +80,7 @@ class BookmarkCest
         // check if the list is still empty
         $this->checkThatBookmarkListIsInitiallyEmpty($I);
 
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->click(self::$docHeaderBookmarkButtonSelector);
 
         $dialog->clickButtonInDialog('OK');
@@ -103,22 +98,22 @@ class BookmarkCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      * @depends checkThatAddingABookmarkAddsItemToTheBookmarkList
      */
-    public function checkIfBookmarkItemLinksToTarget(Admin $I)
+    public function checkIfBookmarkItemLinksToTarget(BackendTester $I)
     {
         $this->clickBookmarkDropdownToggleInTopbar($I);
         $I->click('Scheduled tasks', self::$topBarModuleSelector);
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->canSee('Scheduled tasks', 'h1');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      * @depends checkThatAddingABookmarkAddsItemToTheBookmarkList
      */
-    public function checkIfEditBookmarkItemWorks(Admin $I)
+    public function checkIfEditBookmarkItemWorks(BackendTester $I)
     {
         $this->clickBookmarkDropdownToggleInTopbar($I);
         $firstShortcutSelector = self::$topBarModuleSelector . ' .t3js-topbar-shortcut';
@@ -134,10 +129,10 @@ class BookmarkCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      * @depends checkThatAddingABookmarkAddsItemToTheBookmarkList
      */
-    public function checkIfDeleteBookmarkWorks(Admin $I, ModalDialog $dialog)
+    public function checkIfDeleteBookmarkWorks(BackendTester $I, ModalDialog $dialog)
     {
         $this->clickBookmarkDropdownToggleInTopbar($I);
 
@@ -149,9 +144,9 @@ class BookmarkCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    protected function clickBookmarkDropdownToggleInTopbar(Admin $I)
+    protected function clickBookmarkDropdownToggleInTopbar(BackendTester $I)
     {
         $I->waitForElementVisible(self::$topBarModuleSelector . ' ' . Topbar::$dropdownToggleSelector);
         $I->click(Topbar::$dropdownToggleSelector, self::$topBarModuleSelector);
index 6231d76..b61ac76 100644 (file)
@@ -14,8 +14,8 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Helper\Topbar;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\TestingFramework\Core\Acceptance\Helper\Topbar;
 
 /**
  * Tests for the flush module in the topbar
@@ -30,22 +30,18 @@ class FlushCest
     protected static $topBarModuleSelector = '#typo3-cms-backend-backend-toolbaritems-clearcachetoolbaritem';
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      * @return Admin
      */
-    public function canSeeModuleInTopbar(Admin $I)
+    public function canSeeModuleInTopbar(BackendTester $I)
     {
         $I->canSeeElement(self::$topBarModuleSelector);
 
@@ -54,9 +50,9 @@ class FlushCest
 
     /**
      * @depends canSeeModuleInTopbar
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function seeFlushCachesLinksInClearCacheModule(Admin $I)
+    public function seeFlushCachesLinksInClearCacheModule(BackendTester $I)
     {
         $I->click(Topbar::$dropdownToggleSelector, self::$topBarModuleSelector);
         // Ensure existence of link for flush frontend caches
index 03cf349..42ac3fc 100644 (file)
@@ -14,8 +14,8 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Helper\Topbar;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\TestingFramework\Core\Acceptance\Helper\Topbar;
 
 /**
  * Tests for the help module in the topbar
@@ -30,22 +30,18 @@ class HelpCest
     public static $topBarModuleSelector = '#typo3-cms-backend-backend-toolbaritems-helptoolbaritem';
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
-     * @return Admin
+     * @param BackendTester $I
+     * @return BackendTester
      */
-    public function canSeeModuleInTopbar(Admin $I)
+    public function canSeeModuleInTopbar(BackendTester $I)
     {
         $I->canSeeElement(self::$topBarModuleSelector);
 
@@ -54,14 +50,14 @@ class HelpCest
 
     /**
      * @depends canSeeModuleInTopbar
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function seeStyleguideInHelpModule(Admin $I)
+    public function seeStyleguideInHelpModule(BackendTester $I)
     {
         $I->click(Topbar::$dropdownToggleSelector, self::$topBarModuleSelector);
         $I->canSee('Styleguide', self::$topBarModuleSelector);
         $I->click('Styleguide', self::$topBarModuleSelector);
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->see('TYPO3 CMS Backend Styleguide', 'h1');
     }
 }
index 39fda99..d62ba1f 100644 (file)
@@ -14,7 +14,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Acceptance test for the TYPO3 logo in the topbar
@@ -22,21 +22,17 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class LogoCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkIfTypo3LogoIsLinked(Admin $I)
+    public function checkIfTypo3LogoIsLinked(BackendTester $I)
     {
         $I->seeElement('//div[@class="topbar-header-site"]/a[@href="./"]');
     }
index 66fbc2c..bc81541 100644 (file)
@@ -14,7 +14,7 @@ namespace TYPO3\core\Tests\Acceptance\Backend\Topbar;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Acceptance test for the menu button in the topbar
@@ -23,17 +23,17 @@ class ModuleMenuButtonCest
 {
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkModelMenuButtomFromBigToSmallScreen(Admin $I)
+    public function checkModelMenuButtomFromBigToSmallScreen(BackendTester $I)
     {
         $I->wantTo('see the module menu button behavior when shrinking the window');
 
@@ -62,9 +62,9 @@ class ModuleMenuButtonCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkModelMenuButtomFromSmallToBigScreen(Admin $I)
+    public function checkModelMenuButtomFromSmallToBigScreen(BackendTester $I)
     {
         $I->wantTo('see the module menu button behavior when enlarging the window');
 
index fb6bcba..e0ee579 100644 (file)
@@ -14,7 +14,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Acceptance test for the Navigation Component Tree
@@ -22,17 +22,17 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class NavigationComponentTreeCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkTreeExpandsAndCollapseByPageModule(Admin $I)
+    public function checkTreeExpandsAndCollapseByPageModule(BackendTester $I)
     {
         $treeArea = '.scaffold-content-navigation-expanded';
         $I->wantTo('check Page Module for Expands And Collapse');
@@ -51,16 +51,16 @@ class NavigationComponentTreeCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkTreeExpandsAndCollapseByFileModule(Admin $I)
+    public function checkTreeExpandsAndCollapseByFileModule(BackendTester $I)
     {
         $I->wantTo('check File Module for Expands And Collapse');
         $I->click('Filelist');
         $I->switchToIFrame('nav_frame');
         $I->waitForElement('.t3js-module-body');
         $I->see('fileadmin', '.t3js-module-body');
-        $I->switchToIFrame();
+        $I->switchToMainFrame();
         $I->wantTo('check File Module for Collapse');
         $I->click('button.t3js-topbar-button-navigationcomponent');
         $I->waitForElementNotVisible('.scaffold-content-navigation-expanded');
@@ -69,6 +69,6 @@ class NavigationComponentTreeCest
         $I->switchToIFrame('nav_frame');
         $I->waitForElement('.t3js-module-body');
         $I->see('fileadmin', '.t3js-module-body');
-        $I->switchToIFrame();
+        $I->switchToMainFrame();
     }
 }
index d0bc940..cf3e907 100644 (file)
@@ -14,8 +14,8 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Helper\Topbar;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\TestingFramework\Core\Acceptance\Helper\Topbar;
 
 /**
  * Test the search module in the top bar
@@ -30,21 +30,17 @@ class SearchCest
     public static $topBarModuleSelector = '#typo3-cms-backend-backend-toolbaritems-livesearchtoolbaritem';
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function searchAndTestIfAutocompletionWorks(Admin $I)
+    public function searchAndTestIfAutocompletionWorks(BackendTester $I)
     {
         $I->cantSeeElement(self::$topBarModuleSelector . ' ' . Topbar::$dropdownListSelector);
         $I->fillField('#live-search-box', 'adm');
@@ -53,15 +49,15 @@ class SearchCest
         $I->canSee('Backend user', self::$topBarModuleSelector);
         $I->click('admin', self::$topBarModuleSelector);
 
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->waitForElementVisible('#EditDocumentController');
         $I->canSee('Edit Backend user "admin" on root level');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function searchForFancyTextAndCheckEmptyResultInfo(Admin $I)
+    public function searchForFancyTextAndCheckEmptyResultInfo(BackendTester $I)
     {
         $I->fillField('#live-search-box', 'Kasper = Jesus # joh316');
         $I->waitForElementVisible(self::$topBarModuleSelector . ' ' . Topbar::$dropdownListSelector, 100);
@@ -75,9 +71,9 @@ class SearchCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkIfTheShowAllLinkPointsToTheListViewWithSearchResults(Admin $I)
+    public function checkIfTheShowAllLinkPointsToTheListViewWithSearchResults(BackendTester $I)
     {
         $I->fillField('#live-search-box', 'fileadmin');
         $I->waitForElementVisible(self::$topBarModuleSelector . ' ' . Topbar::$dropdownListSelector);
@@ -85,7 +81,7 @@ class SearchCest
         $I->canSee('fileadmin/ (auto-created)', self::$topBarModuleSelector);
         $I->click('.t3js-live-search-show-all', self::$topBarModuleSelector);
 
-        $I->switchToIFrame('list_frame');
+        $I->switchToContentFrame();
         $I->waitForElementVisible('form[name="dblistForm"]');
         $I->canSee('fileadmin/ (auto-created)');
     }
index c20b877..2a37958 100644 (file)
@@ -14,28 +14,24 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Topbar username and avatar module tests.
  */
 class UsernameOnAvatarCest
 {
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
-        // Ensure main content frame is fully loaded, otherwise there are load-race-conditions
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Web Content Management System');
-        $I->switchToIFrame();
+        $I->useExistingSession('admin');
     }
 
     /**
      * This test case is used to check if username is visible in the toolbar.
      *
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function usernameIsShown(Admin $I)
+    public function usernameIsShown(BackendTester $I)
     {
         $I->see('admin', '#typo3-cms-backend-backend-toolbaritems-usertoolbaritem');
     }
diff --git a/typo3/sysext/core/Tests/Acceptance/Install.suite.yml b/typo3/sysext/core/Tests/Acceptance/Install.suite.yml
new file mode 100644 (file)
index 0000000..7456c3c
--- /dev/null
@@ -0,0 +1,38 @@
+actor: InstallTester
+modules:
+  enabled:
+    - WebDriver:
+        url: http://web:8000/typo3temp/var/tests/acceptance
+        browser: chrome
+        wait: 1
+        host: chrome
+    - Asserts
+
+env:
+  headless:
+    modules:
+      config:
+        WebDriver:
+          host: localhost
+          port: 9515
+          url: http://localhost:8000/typo3temp/var/tests/acceptance
+          capabilities:
+            # Disable the "scroll to element before clicking" behavior as this breaks tests
+            # where for example a fixed docbar is used. Selenium scrolls to the element before
+            # clicking it and then complains that it can't click the element because another elemnt
+            # is overlaying it.
+            # You have to ensure that the element is in the viewport by your own before clicking it!
+            # You can simply do that by scrolling to it.
+            elementScrollBehavior: 1
+            chromeOptions:
+              args: ["--headless", "--no-sandbox", "window-size=1280x1024", "--proxy-server='direct://'", "--proxy-bypass-list=*", "--disable-gpu"]
+
+  mysql:
+    extensions:
+      enabled:
+        - TYPO3\TestingFramework\Core\Acceptance\Extension\InstallMysqlCoreEnvironment
+
+  postgresql:
+    extensions:
+      enabled:
+        - TYPO3\TestingFramework\Core\Acceptance\Extension\InstallPostgresqlCoreEnvironment
diff --git a/typo3/sysext/core/Tests/Acceptance/Install/Mysql/BlankPageCest.php b/typo3/sysext/core/Tests/Acceptance/Install/Mysql/BlankPageCest.php
new file mode 100644 (file)
index 0000000..a58d6af
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Install\Mysql;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Codeception\Scenario;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\InstallTester;
+
+/**
+ * Click through installer, go to backend, check blank site in FE works
+ */
+class BlankPageCest
+{
+    /**
+     * @param InstallTester $I
+     * @param Scenario
+     * @env mysql
+     */
+    public function installTypo3OnMysql(InstallTester $I, Scenario $scenario)
+    {
+        // Calling frontend redirects to installer
+        $I->amOnPage('/');
+
+        // EnvironmentAndFolders step
+        $I->waitForText('Installing TYPO3');
+        $I->see('System looks good. Continue!');
+        $I->click('System looks good. Continue!');
+
+        // DatabaseConnection step
+        $I->waitForText('Database connection');
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-username', $scenario->current('typo3InstallMysqlDatabaseUsername'));
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-password', $scenario->current('typo3InstallMysqlDatabasePassword'));
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-host', $scenario->current('typo3InstallMysqlDatabaseHost'));
+        $I->click('Continue');
+
+        // DatabaseSelect step
+        $I->waitForText('Select database');
+        $I->click('#t3-install-form-db-select-type-new');
+        $I->fillField('#t3-install-step-database-new', $scenario->current('typo3InstallMysqlDatabaseName'));
+        $I->click('Continue');
+
+        // DatabaseData step
+        $I->waitForText('Create user and import base data');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - Create empty page
+        $I->waitForText('Installation done!');
+        $I->click('#create-site');
+        $I->click('Open the TYPO3 Backend');
+
+        // Verify backend login successful
+        $I->waitForElement('#t3-username');
+        $I->fillField('#t3-username', 'admin');
+        $I->fillField('#t3-password', 'password');
+        $I->click('#t3-login-submit-section > button');
+        $I->waitForElement('.nav', 30);
+        $I->waitForElement('.scaffold-content iframe', 30);
+        $I->seeCookie('be_lastLoginProvider');
+        $I->seeCookie('be_typo_user');
+
+        // Verify default frontend is rendered
+        $I->amOnPage('/');
+        $I->waitForText('Welcome to a default website made with TYPO3');
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Install/Mysql/IntroductionPackageCest.php b/typo3/sysext/core/Tests/Acceptance/Install/Mysql/IntroductionPackageCest.php
new file mode 100644 (file)
index 0000000..82fb345
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Install\Mysql;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Codeception\Scenario;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\InstallTester;
+
+/**
+ * Click through installer, go to backend, check blank site in FE works
+ */
+class IntroductionPackageCest
+{
+    /**
+     * @param InstallTester $I
+     * @param Scenario
+     * @env mysql
+     */
+    public function installTypo3OnMysql(InstallTester $I, Scenario $scenario)
+    {
+        // Calling frontend redirects to installer
+        $I->amOnPage('/');
+
+        // EnvironmentAndFolders step
+        $I->waitForText('Installing TYPO3');
+        $I->waitForText('System looks good. Continue!');
+        $I->click('System looks good. Continue!');
+
+        // DatabaseConnection step
+        $I->waitForText('Database connection');
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-username', $scenario->current('typo3InstallMysqlDatabaseUsername'));
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-password', $scenario->current('typo3InstallMysqlDatabasePassword'));
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-host', $scenario->current('typo3InstallMysqlDatabaseHost'));
+        $I->click('Continue');
+
+        // DatabaseSelect step
+        $I->waitForText('Select database');
+        $I->click('#t3-install-form-db-select-type-new');
+        $I->fillField('#t3-install-step-database-new', $scenario->current('typo3InstallMysqlDatabaseName'));
+        $I->click('Continue');
+
+        // DatabaseData step
+        $I->waitForText('Create user and import base data');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - Create empty page
+        $I->waitForText('Installation done!');
+        $I->click('#load-distributions');
+        $I->click('Open the TYPO3 Backend');
+
+        // Verify backend login successful
+        $I->waitForElement('#t3-username');
+        $I->fillField('#t3-username', 'admin');
+        $I->fillField('#t3-password', 'password');
+        $I->click('#t3-login-submit-section > button');
+        $I->waitForElement('.nav', 30);
+        $I->waitForElement('.scaffold-content iframe', 30);
+        $I->seeCookie('be_lastLoginProvider');
+        $I->seeCookie('be_typo_user');
+
+        // Loading might take some time
+        $I->wait(10);
+        $I->switchToIFrame('list_frame');
+        $I->waitForText('Get preconfigured distribution', 30);
+        $I->click('.t3-button-action-installdistribution');
+        $I->waitForText('You successfully installed the distribution:introduction', 240);
+
+        // Verify default frontend is rendered
+        $I->amOnPage('/');
+        $I->waitForText('Let us introduce you to TYPO3', 30);
+        $I->waitForText('Make it your own');
+
+        // Verify link
+        $I->click('[title="Features"]');
+        $I->waitForText('Feature Complete Out-of-the-box', 30);
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Install/Postgresql/BlankPageCest.php b/typo3/sysext/core/Tests/Acceptance/Install/Postgresql/BlankPageCest.php
new file mode 100644 (file)
index 0000000..76b6b74
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Install\Postgresql;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Codeception\Scenario;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\InstallTester;
+
+/**
+ * Click through installer, go to backend, check blank site in FE works
+ */
+class BlankPageCest
+{
+    /**
+     * @param InstallTester $I
+     * @param Scenario $scenario
+     * @env postgresql
+     */
+    public function installTypo3OnPgSql(InstallTester $I, Scenario $scenario)
+    {
+        // Calling frontend redirects to installer
+        $I->amOnPage('/');
+
+        // EnvironmentAndFolders step
+        $I->waitForText('Installing TYPO3');
+        $I->waitForText('System looks good. Continue!');
+        $I->click('System looks good. Continue!');
+
+        // DatabaseConnection step
+        $I->waitForText('Database connection');
+        $I->selectOption('#t3js-connect-database-driver', 'Manually configured PostgreSQL connection');
+        $I->fillField('#t3-install-step-postgresManualConfiguration-username', $scenario->current('typo3InstallPostgresqlDatabaseUsername'));
+        $I->fillField('#t3-install-step-postgresManualConfiguration-password', $scenario->current('typo3InstallPostgresqlDatabasePassword'));
+        $I->fillField('#t3-install-step-postgresManualConfiguration-database', $scenario->current('typo3InstallPostgresqlDatabaseName'));
+        $I->fillField('#t3-install-step-postgresManualConfiguration-host', $scenario->current('typo3InstallPostgresqlDatabaseHost'));
+        $I->click('Continue');
+
+        // DatabaseData step
+        $I->waitForText('Create user and import base data');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - load distributions
+        $I->waitForText('Installation done!');
+        $I->click('#create-site');
+        $I->click('Open the TYPO3 Backend');
+
+        // Verify backend login successful
+        $I->waitForElement('#t3-username');
+        $I->fillField('#t3-username', 'admin');
+        $I->fillField('#t3-password', 'password');
+        $I->click('#t3-login-submit-section > button');
+        $I->waitForElement('.nav', 30);
+        $I->waitForElement('.scaffold-content iframe', 30);
+        $I->seeCookie('be_lastLoginProvider');
+        $I->seeCookie('be_typo_user');
+
+        // Verify default frontend is rendered
+        $I->amOnPage('/');
+        $I->waitForText('Welcome to a default website made with TYPO3');
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Install/Postgresql/IntroductionPackageCest.php b/typo3/sysext/core/Tests/Acceptance/Install/Postgresql/IntroductionPackageCest.php
new file mode 100644 (file)
index 0000000..29b42be
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Install\Postgresql;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Codeception\Scenario;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\InstallTester;
+
+/**
+ * Click through installer, go to backend, install introduction package
+ */
+class IntroductionPackageCest
+{
+    /**
+     * @param InstallTester $I
+     * @param Scenario $scenario
+     * @env postgresql
+     */
+    public function installTypo3OnPgSql(InstallTester $I, Scenario $scenario)
+    {
+        // Calling frontend redirects to installer
+        $I->amOnPage('/');
+
+        // EnvironmentAndFolders step
+        $I->waitForText('Installing TYPO3');
+        $I->see('System looks good. Continue!');
+        $I->click('System looks good. Continue!');
+
+        // DatabaseConnection step
+        $I->waitForText('Database connection');
+        $I->selectOption('#t3js-connect-database-driver', 'Manually configured PostgreSQL connection');
+        $I->fillField('#t3-install-step-postgresManualConfiguration-username', $scenario->current('typo3InstallPostgresqlDatabaseUsername'));
+        $I->fillField('#t3-install-step-postgresManualConfiguration-password', $scenario->current('typo3InstallPostgresqlDatabasePassword'));
+        $I->fillField('#t3-install-step-postgresManualConfiguration-database', $scenario->current('typo3InstallPostgresqlDatabaseName'));
+        $I->fillField('#t3-install-step-postgresManualConfiguration-host', $scenario->current('typo3InstallPostgresqlDatabaseHost'));
+        $I->click('Continue');
+
+        // DatabaseData step
+        $I->waitForText('Create user and import base data');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - load distributions
+        $I->waitForText('Installation done!');
+        $I->click('#load-distributions');
+        $I->click('Open the TYPO3 Backend');
+
+        // Verify backend login successful
+        $I->waitForElement('#t3-username');
+        $I->fillField('#t3-username', 'admin');
+        $I->fillField('#t3-password', 'password');
+        $I->click('#t3-login-submit-section > button');
+        $I->waitForElement('.nav', 30);
+        $I->waitForElement('.scaffold-content iframe', 30);
+        $I->seeCookie('be_lastLoginProvider');
+        $I->seeCookie('be_typo_user');
+
+        // Loading might take some time
+        $I->wait(10);
+        $I->switchToIFrame('list_frame');
+        $I->waitForText('Get preconfigured distribution', 30);
+        $I->click('.t3-button-action-installdistribution');
+        $I->waitForText('You successfully installed the distribution:introduction', 240);
+
+        // Verify default frontend is rendered
+        $I->amOnPage('/');
+        $I->waitForText('Let us introduce you to TYPO3', 30);
+        $I->waitForText('Make it your own');
+
+        // Verify link
+        $I->click('[title="Features"]');
+        $I->waitForText('Feature Complete Out-of-the-box', 30);
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Support/BackendTester.php b/typo3/sysext/core/Tests/Acceptance/Support/BackendTester.php
new file mode 100644 (file)
index 0000000..36dac16
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Support;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Tests\Acceptance\Support\_generated\BackendTesterActions;
+use TYPO3\TestingFramework\Core\Acceptance\Step\FrameSteps;
+
+/**
+ * Default backend admin or editor actor in the backend
+*/
+class BackendTester extends \Codeception\Actor
+{
+    use BackendTesterActions;
+    use FrameSteps;
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Support/Helper/ModalDialog.php b/typo3/sysext/core/Tests/Acceptance/Support/Helper/ModalDialog.php
new file mode 100644 (file)
index 0000000..c66d63a
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Support\Helper;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\TestingFramework\Core\Acceptance\Helper\AbstractModalDialog;
+
+/**
+ * @see AbstractModalDialog
+ */
+class ModalDialog extends AbstractModalDialog
+{
+    /**
+     * Inject our core AcceptanceTester actor into ModalDialog
+     *
+     * @param BackendTester $I
+     */
+    public function __construct(BackendTester $I)
+    {
+        $this->tester = $I;
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Support/Helper/PageTree.php b/typo3/sysext/core/Tests/Acceptance/Support/Helper/PageTree.php
new file mode 100644 (file)
index 0000000..1151c43
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Support\Helper;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\TestingFramework\Core\Acceptance\Helper\AbstractPageTree;
+
+/**
+ * @see AbstractPageTree
+ */
+class PageTree extends AbstractPageTree
+{
+    /**
+     * Inject our core AcceptanceTester actor into ModalDialog
+     *
+     * @param BackendTester $I
+     */
+    public function __construct(BackendTester $I)
+    {
+        $this->tester = $I;
+    }
+}
diff --git a/typo3/sysext/core/Tests/Acceptance/Support/InstallTester.php b/typo3/sysext/core/Tests/Acceptance/Support/InstallTester.php
new file mode 100644 (file)
index 0000000..a502a86
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Support;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Tests\Acceptance\Support\_generated\InstallTesterActions;
+use TYPO3\TestingFramework\Core\Acceptance\Step\FrameSteps;
+
+/**
+ * Default installer actor
+ */
+class InstallTester extends \Codeception\Actor
+{
+    use InstallTesterActions;
+    use FrameSteps;
+}
diff --git a/typo3/sysext/core/Tests/AcceptanceInstallMysql.suite.yml b/typo3/sysext/core/Tests/AcceptanceInstallMysql.suite.yml
deleted file mode 100644 (file)
index 7b74d05..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-class_name: AcceptanceTester
-modules:
-  enabled:
-    - WebDriver
-    - \Helper\Acceptance
-    - Asserts
-  config:
-    WebDriver:
-      url: http://localhost:8000/typo3temp/var/tests/acceptanceinstallmysql
-      browser: chrome
-      port: 9515
-      capabilities:
-        # Disable the "scroll to element before clicking" behavior as this breaks tests
-        # where for example a fixed docbar is used. Selenium scrolls to the element before
-        # clicking it and then complains that it can't click the element because another elemnt
-        # is overlaying it.
-        # You have to ensure that the element is in the viewport by your own before clicking it!
-        # You can simply do that by scrolling to it.
-        elementScrollBehavior: 1
-        chromeOptions:
-          args: ["--headless", "--no-sandbox", "window-size=1280x1024", "--proxy-server='direct://'", "--proxy-bypass-list=*", "--disable-gpu"]
\ No newline at end of file
diff --git a/typo3/sysext/core/Tests/AcceptanceInstallMysql/InstallWithMysqlBlankPageCest.php b/typo3/sysext/core/Tests/AcceptanceInstallMysql/InstallWithMysqlBlankPageCest.php
deleted file mode 100644 (file)
index 9dfb0a5..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\AcceptanceInstallMysql;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Click through installer, go to backend, check blank site in FE works
- */
-class InstallWithMysqlBlankPageCest
-{
-    /**
-     * @param \AcceptanceTester $I
-     */
-    public function installTypo3OnMysql(\AcceptanceTester $I)
-    {
-        // Calling frontend redirects to installer
-        $I->amOnPage('/');
-
-        // EnvironmentAndFolders step
-        $I->waitForText('Installing TYPO3');
-        $I->see('System looks good. Continue!');
-        $I->click('System looks good. Continue!');
-
-        // DatabaseConnection step
-        $I->waitForText('Database connection');
-        $I->fillField('#t3-install-step-mysqliManualConfiguration-username', getenv('typo3DatabaseUsername'));
-        $I->fillField('#t3-install-step-mysqliManualConfiguration-password', getenv('typo3DatabasePassword'));
-        $I->click('Continue');
-
-        // DatabaseSelect step
-        $I->waitForText('Select database');
-        $I->click('#t3-install-form-db-select-type-new');
-        $I->fillField('#t3-install-step-database-new', getenv('typo3DatabaseName') . '_atimysql');
-        $I->click('Continue');
-
-        // DatabaseData step
-        $I->waitForText('Create user and import base data');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - Create empty page
-        $I->waitForText('Installation done!');
-        $I->click('#create-site');
-        $I->click('Open the TYPO3 Backend');
-
-        // Verify backend login successful
-        $I->waitForElement('#t3-username');
-        $I->fillField('#t3-username', 'admin');
-        $I->fillField('#t3-password', 'password');
-        $I->click('#t3-login-submit-section > button');
-        $I->waitForElement('.nav', 30);
-        $I->waitForElement('.scaffold-content iframe', 30);
-        $I->seeCookie('be_lastLoginProvider');
-        $I->seeCookie('be_typo_user');
-
-        // Verify default frontend is rendered
-        $I->amOnPage('/');
-        $I->waitForText('Welcome to a default website made with TYPO3');
-    }
-}
diff --git a/typo3/sysext/core/Tests/AcceptanceInstallMysql/InstallWithMysqlIntroductionPackageCest.php b/typo3/sysext/core/Tests/AcceptanceInstallMysql/InstallWithMysqlIntroductionPackageCest.php
deleted file mode 100644 (file)
index 53b0dfe..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\AcceptanceInstallMysql;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Click through installer, go to backend, check blank site in FE works
- */
-class InstallWithMysqlIntroductionPackageCest
-{
-    /**
-     * @param \AcceptanceTester $I
-     */
-    public function installTypo3OnMysql(\AcceptanceTester $I)
-    {
-        // Calling frontend redirects to installer
-        $I->amOnPage('/');
-
-        // EnvironmentAndFolders step
-        $I->waitForText('Installing TYPO3');
-        $I->waitForText('System looks good. Continue!');
-        $I->click('System looks good. Continue!');
-
-        // DatabaseConnection step
-        $I->waitForText('Database connection');
-        $I->fillField('#t3-install-step-mysqliManualConfiguration-username', getenv('typo3DatabaseUsername'));
-        $I->fillField('#t3-install-step-mysqliManualConfiguration-password', getenv('typo3DatabasePassword'));
-        $I->click('Continue');
-
-        // DatabaseSelect step
-        $I->waitForText('Select database');
-        $I->click('#t3-install-form-db-select-type-new');
-        $I->fillField('#t3-install-step-database-new', getenv('typo3DatabaseName') . '_atimysql');
-        $I->click('Continue');
-
-        // DatabaseData step
-        $I->waitForText('Create user and import base data');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - Create empty page
-        $I->waitForText('Installation done!');
-        $I->click('#load-distributions');
-        $I->click('Open the TYPO3 Backend');
-
-        // Verify backend login successful
-        $I->waitForElement('#t3-username');
-        $I->fillField('#t3-username', 'admin');
-        $I->fillField('#t3-password', 'password');
-        $I->click('#t3-login-submit-section > button');
-        $I->waitForElement('.nav', 30);
-        $I->waitForElement('.scaffold-content iframe', 30);
-        $I->seeCookie('be_lastLoginProvider');
-        $I->seeCookie('be_typo_user');
-
-        // Loading might take some time
-        $I->wait(10);
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Get preconfigured distribution', 30);
-        $I->click('.t3-button-action-installdistribution');
-        $I->waitForText('You successfully installed the distribution:introduction', 120);
-
-        // Verify default frontend is rendered
-        $I->amOnPage('/');
-        $I->waitForText('Let us introduce you to TYPO3', 30);
-        $I->waitForText('Make it your own');
-
-        // Verify link
-        $I->click('[title="Features"]');
-        $I->waitForText('Feature Complete Out-of-the-box', 30);
-    }
-}
diff --git a/typo3/sysext/core/Tests/AcceptanceInstallPgsql.suite.yml b/typo3/sysext/core/Tests/AcceptanceInstallPgsql.suite.yml
deleted file mode 100644 (file)
index 3970aa7..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-class_name: AcceptanceTester
-modules:
-  enabled:
-    - WebDriver
-    - \Helper\Acceptance
-    - Asserts
-  config:
-    WebDriver:
-      url: http://localhost:8000/typo3temp/var/tests/acceptanceinstallpgsql
-      browser: chrome
-      port: 9515
-      capabilities:
-        # Disable the "scroll to element before clicking" behavior as this breaks tests
-        # where for example a fixed docbar is used. Selenium scrolls to the element before
-        # clicking it and then complains that it can't click the element because another elemnt
-        # is overlaying it.
-        # You have to ensure that the element is in the viewport by your own before clicking it!
-        # You can simply do that by scrolling to it.
-        elementScrollBehavior: 1
-        chromeOptions:
-          args: ["--headless", "--no-sandbox", "window-size=1280x1024", "--proxy-server='direct://'", "--proxy-bypass-list=*", "--disable-gpu"]
diff --git a/typo3/sysext/core/Tests/AcceptanceInstallPgsql/InstallWithPgsqlBlankPageCest.php b/typo3/sysext/core/Tests/AcceptanceInstallPgsql/InstallWithPgsqlBlankPageCest.php
deleted file mode 100644 (file)
index 66ba18c..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\AcceptanceInstallPsql;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Click through installer, go to backend, check blank site in FE works
- */
-class InstallWithPgsqlBlankPageCest
-{
-    /**
-     * @param \AcceptanceTester $I
-     */
-    public function installTypo3OnPgSql(\AcceptanceTester $I)
-    {
-        // Calling frontend redirects to installer
-        $I->amOnPage('/');
-
-        // EnvironmentAndFolders step
-        $I->waitForText('Installing TYPO3');
-        $I->waitForText('System looks good. Continue!');
-        $I->click('System looks good. Continue!');
-
-        // DatabaseConnection step
-        $I->waitForText('Database connection');
-        $I->selectOption('#t3js-connect-database-driver', 'Manually configured PostgreSQL connection');
-        $I->fillField('#t3-install-step-postgresManualConfiguration-username', getenv('typo3DatabaseUsername'));
-        // password intentionally not filled. Postgres authenticates with the shell user.
-        $I->fillField('#t3-install-step-postgresManualConfiguration-database', getenv('typo3DatabaseName') . '_atipgsql');
-        // fill port if set in environment
-        if (!empty(getenv('typo3DatabasePort'))) {
-            $I->fillField('#t3-install-step-postgresManualConfiguration-port', getenv('typo3DatabasePort'));
-        }
-        $I->click('Continue');
-
-        // DatabaseData step
-        $I->waitForText('Create user and import base data');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - load distributions
-        $I->waitForText('Installation done!');
-        $I->click('#create-site');
-        $I->click('Open the TYPO3 Backend');
-
-        // Verify backend login successful
-        $I->waitForElement('#t3-username');
-        $I->fillField('#t3-username', 'admin');
-        $I->fillField('#t3-password', 'password');
-        $I->click('#t3-login-submit-section > button');
-        $I->waitForElement('.nav', 30);
-        $I->waitForElement('.scaffold-content iframe', 30);
-        $I->seeCookie('be_lastLoginProvider');
-        $I->seeCookie('be_typo_user');
-
-        // Verify default frontend is rendered
-        $I->amOnPage('/');
-        $I->waitForText('Welcome to a default website made with TYPO3');
-    }
-}
diff --git a/typo3/sysext/core/Tests/AcceptanceInstallPgsql/InstallWithPgsqlIntroductionPackageCest.php b/typo3/sysext/core/Tests/AcceptanceInstallPgsql/InstallWithPgsqlIntroductionPackageCest.php
deleted file mode 100644 (file)
index 86d1949..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\AcceptanceInstallPsql;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Click through installer, go to backend, install introduction package
- */
-class InstallWithPgsqlIntroductionPackageCest
-{
-    /**
-     * @param \AcceptanceTester $I
-     */
-    public function installTypo3OnPgSql(\AcceptanceTester $I)
-    {
-        // Calling frontend redirects to installer
-        $I->amOnPage('/');
-
-        // EnvironmentAndFolders step
-        $I->waitForText('Installing TYPO3');
-        $I->see('System looks good. Continue!');
-        $I->click('System looks good. Continue!');
-
-        // DatabaseConnection step
-        $I->waitForText('Database connection');
-        $I->selectOption('#t3js-connect-database-driver', 'Manually configured PostgreSQL connection');
-        $I->fillField('#t3-install-step-postgresManualConfiguration-username', getenv('typo3DatabaseUsername'));
-        // password intentionally not filled. Postgres authenticates with the shell user.
-        $I->fillField('#t3-install-step-postgresManualConfiguration-database', getenv('typo3DatabaseName') . '_atipgsql');
-        // fill port if set in environment
-        if (!empty(getenv('typo3DatabasePort'))) {
-            $I->fillField('#t3-install-step-postgresManualConfiguration-port', getenv('typo3DatabasePort'));
-        }
-        $I->click('Continue');
-
-        // DatabaseData step
-        $I->waitForText('Create user and import base data');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - load distributions
-        $I->waitForText('Installation done!');
-        $I->click('#load-distributions');
-        $I->click('Open the TYPO3 Backend');
-
-        // Verify backend login successful
-        $I->waitForElement('#t3-username');
-        $I->fillField('#t3-username', 'admin');
-        $I->fillField('#t3-password', 'password');
-        $I->click('#t3-login-submit-section > button');
-        $I->waitForElement('.nav', 30);
-        $I->waitForElement('.scaffold-content iframe', 30);
-        $I->seeCookie('be_lastLoginProvider');
-        $I->seeCookie('be_typo_user');
-
-        // Loading might take some time
-        $I->wait(10);
-        $I->switchToIFrame('list_frame');
-        $I->waitForText('Get preconfigured distribution', 30);
-        $I->click('.t3-button-action-installdistribution');
-        $I->waitForText('You successfully installed the distribution:introduction', 120);
-
-        // Verify default frontend is rendered
-        $I->amOnPage('/');
-        $I->waitForText('Let us introduce you to TYPO3', 30);
-        $I->waitForText('Make it your own');
-
-        // Verify link
-        $I->click('[title="Features"]');
-        $I->waitForText('Feature Complete Out-of-the-box', 30);
-    }
-}
diff --git a/typo3/sysext/core/Tests/codeception.yml b/typo3/sysext/core/Tests/codeception.yml
new file mode 100644 (file)
index 0000000..6371d91
--- /dev/null
@@ -0,0 +1,13 @@
+namespace: TYPO3\CMS\Core\Tests\Acceptance\Support
+paths:
+  tests: Acceptance
+  data: .
+  log: ../../../../typo3temp/var/tests/AcceptanceReports
+  support: Acceptance/Support
+settings:
+  colors: true
+  memory_limit: 1024M
+extensions:
+  enabled:
+    - Codeception\Extension\RunFailed
+    - Codeception\Extension\Recorder