[TASK] Refactor acceptance tests 61/57461/17
authorDavert <davert.php@resend.cc>
Wed, 4 Jul 2018 15:02:15 +0000 (18:02 +0300)
committerChristian Kuhn <lolli@schwarzbu.ch>
Sat, 7 Jul 2018 10:15:52 +0000 (12:15 +0200)
typo3/testing-framework got a major release:
composer update typo3/testing-framework ^4.0

* codeception acceptance tests now live in a proper php namespace
* merged installation suites yml files into one
* installer tests are now one suite with different environment settings
* aligned with changes in typo3/testing-framework
* renamed Acceptance test suite to Backend test suite
* removed Admin/Editor steps, replaced with useExistingLogin('role')

Resolves: #85472
Releases: master
Change-Id: Ia049b43f5f9f645dddb509bde557ad83a7ac9023
Reviewed-on: https://review.typo3.org/57461
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
65 files changed:
.gitignore
Build/Scripts/annotationChecker.php
Build/bamboo/src/main/java/core/AbstractCoreSpec.java
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/CompareUserCest.php
typo3/sysext/core/Tests/Acceptance/Backend/BackendUser/ListGroupCest.php
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/FileList/FileMetaDataCest.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/ElementsBasicInputCest.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/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/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/RecordList/SysNoteCest.php
typo3/sysext/core/Tests/Acceptance/Backend/Redirect/RedirectModuleCest.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/Install/Sqlite/BlankPageCest.php [new file with mode: 0644]
typo3/sysext/core/Tests/Acceptance/Install/Sqlite/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/AcceptanceInstallSqlite.suite.yml [deleted file]
typo3/sysext/core/Tests/AcceptanceInstallSqlite/InstallWithSqliteBlankPageCest.php [deleted file]
typo3/sysext/core/Tests/AcceptanceInstallSqlite/InstallWithSqliteIntroductionPackageCest.php [deleted file]
typo3/sysext/core/Tests/codeception.yml [new file with mode: 0644]
typo3/sysext/core/composer.json

index 56d83d9..5db3ade 100644 (file)
@@ -60,3 +60,5 @@ phantomjsdriver.log
 #
 # root .htaccess file
 /.htaccess
+
+typo3/sysext/core/Tests/Acceptance/Support/_generated/
index 78f90c9..c70c714 100755 (executable)
@@ -58,6 +58,8 @@ class NodeVisitor extends NodeVisitorAbstract
                     'api', 'author', 'category', 'copyright', 'deprecated', 'example', 'filesource', 'global', 'ignore', 'internal', 'license', 'link', 'method', 'package', 'param', 'property', 'property-read', 'property-write', 'return', 'see', 'since', 'source', 'subpackage', 'throws', 'todo', 'TODO', 'usedby', 'uses', 'var', 'version',
                     // PHPUnit tags
                     'codeCoverageIgnore', 'codeCoverageIgnoreStart', 'codeCoverageIgnoreEnd', 'test', 'covers', 'dataProvider', 'group', 'skip', 'depends', 'expectedException', 'before',
+                    // codeception tags
+                    'env',
                     // PHPCheckStyle
                     'SuppressWarnings', 'noinspection',
                     // Extbase related (deprecated)
index 442553b..7759aa1 100644 (file)
@@ -56,6 +56,12 @@ abstract public class AbstractCoreSpec {
         " typo3DatabaseHost=\"localhost\"" +
         " typo3InstallToolPassword=\"klaus\"";
 
+    protected String installCredentialsMysql =
+        "typo3InstallMysqlDatabaseName=\"func_install\"" +
+        " typo3InstallMysqlDatabaseUsername=\"funcu\"" +
+        " typo3InstallMysqlDatabasePassword=\"funcp\"" +
+        " typo3InstallMysqlDatabaseHost=\"localhost\"";
+
     protected String credentialsMssql =
         "typo3DatabaseDriver=\"sqlsrv\"" +
         " typo3DatabaseName=\"func\"" +
@@ -63,15 +69,18 @@ abstract public class AbstractCoreSpec {
         " typo3DatabaseUsername=\"SA\"" +
         " typo3DatabaseHost=\"localhost\"" +
         " typo3DatabasePort=\"1433\"" +
-        " typo3DatabaseCharset=\"utf-8\"" +
-        " typo3InstallToolPassword=\"klaus\"";
+        " typo3DatabaseCharset=\"utf-8\"";
 
     protected String credentialsPgsql =
         "typo3DatabaseDriver=\"pdo_pgsql\"" +
         " typo3DatabaseName=\"func\"" +
         " typo3DatabaseUsername=\"bamboo\"" +
-        " typo3DatabaseHost=\"localhost\"" +
-        " typo3InstallToolPassword=\"klaus\"";
+        " typo3DatabaseHost=\"localhost\"";
+
+    protected String installCredentialsPgsql =
+        "typo3InstallPostgresqlDatabaseName=\"func_atipgsql\"" +
+        " typo3InstallPostgresqlDatabaseUsername=\"bamboo\"" +
+        " typo3InstallPostgresqlDatabaseHost=\"localhost\"";
 
     protected String credentialsSqlite =
         "typo3DatabaseDriver=\"pdo_sqlite\"";
@@ -181,14 +190,14 @@ abstract public class AbstractCoreSpec {
                 this.getTaskComposerInstall(),
                 this.getTaskPrepareAcceptanceTest(),
                 new CommandTask()
-                    .description("Execute codeception AcceptanceInstallMysql suite")
+                    .description("Install TYPO3 on mysql")
                     .executable("codecept")
-                    .argument("run AcceptanceInstallMysql -d -c " + this.testingFrameworkBuildPath + "AcceptanceTestsInstallMysql.yml --xml reports.xml --html reports.html")
-                    .environmentVariables(this.credentialsMysql)
+                    .argument("run Install -d -c typo3/sysext/core/Tests/codeception.yml --env=mysql,headless --xml reports.xml --html reports.html")
+                    .environmentVariables(this.installCredentialsMysql)
             )
             .finalTasks(
                 new TestParserTask(TestParserTaskProperties.TestType.JUNIT)
-                    .resultDirectories("typo3temp/var/tests/AcceptanceReportsInstallMysql/reports.xml"),
+                    .resultDirectories("typo3temp/var/tests/AcceptanceReports/reports.xml"),
                 this.getTaskDeleteMysqlDatabases(),
                 this.getTaskTearDownAcceptanceTestSetup()
             )
@@ -197,7 +206,7 @@ abstract public class AbstractCoreSpec {
             )
             .artifacts(new Artifact()
                 .name("Test Report")
-                .copyPattern("typo3temp/var/tests/AcceptanceReportsInstallMysql/")
+                .copyPattern("typo3temp/var/tests/AcceptanceReports/")
                 .shared(false)
             )
             .cleanWorkingDirectory(true);
@@ -219,14 +228,14 @@ abstract public class AbstractCoreSpec {
             this.getTaskComposerInstall(),
             this.getTaskPrepareAcceptanceTest(),
             new CommandTask()
-                .description("Execute codeception AcceptanceInstallPgsql suite")
+                .description("Install TYPO3 on postgresql")
                 .executable("codecept")
-                .argument("run AcceptanceInstallPgsql -d -c " + this.testingFrameworkBuildPath + "AcceptanceTestsInstallPgsql.yml --xml reports.xml --html reports.html")
-                .environmentVariables(this.credentialsPgsql)
+                .argument("run Install -d -c typo3/sysext/core/Tests/codeception.yml --env=postgresql,headless --xml reports.xml --html reports.html")
+                .environmentVariables(this.installCredentialsPgsql)
         )
         .finalTasks(
             new TestParserTask(TestParserTaskProperties.TestType.JUNIT)
-                .resultDirectories("typo3temp/var/tests/AcceptanceReportsInstallPgsql/reports.xml"),
+                .resultDirectories("typo3temp/var/tests/AcceptanceReports/reports.xml"),
             this.getTaskDeletePgsqlDatabases(),
             this.getTaskTearDownAcceptanceTestSetup()
         )
@@ -235,7 +244,7 @@ abstract public class AbstractCoreSpec {
         )
         .artifacts(new Artifact()
             .name("Test Report")
-            .copyPattern("typo3temp/var/tests/AcceptanceReportsInstallPgsql/")
+            .copyPattern("typo3temp/var/tests/AcceptanceReports/")
             .shared(false)
         )
         .cleanWorkingDirectory(true);
@@ -257,14 +266,13 @@ abstract public class AbstractCoreSpec {
             this.getTaskComposerInstall(),
             this.getTaskPrepareAcceptanceTest(),
             new CommandTask()
-                .description("Execute codeception AcceptanceInstallSqlite suite")
+                .description("Install TYPO3 on sqlite")
                 .executable("codecept")
-                .argument("run AcceptanceInstallSqlite -d -c " + this.testingFrameworkBuildPath + "AcceptanceTestsInstallSqlite.yml --xml reports.xml --html reports.html")
-                .environmentVariables(this.credentialsSqlite)
+                .argument("run Install -d -c typo3/sysext/core/Tests/codeception.yml --env=sqlite,headless --xml reports.xml --html reports.html")
         )
         .finalTasks(
             new TestParserTask(TestParserTaskProperties.TestType.JUNIT)
-                .resultDirectories("typo3temp/var/tests/AcceptanceReportsInstallSqlite/reports.xml"),
+                .resultDirectories("typo3temp/var/tests/AcceptanceReports/reports.xml"),
             this.getTaskTearDownAcceptanceTestSetup()
         )
         .requirements(
@@ -272,7 +280,7 @@ abstract public class AbstractCoreSpec {
         )
         .artifacts(new Artifact()
             .name("Test Report")
-            .copyPattern("typo3temp/var/tests/AcceptanceReportsInstallSqlite/")
+            .copyPattern("typo3temp/var/tests/AcceptanceReports/")
             .shared(false)
         )
         .cleanWorkingDirectory(true);
index 3eb71f1..b214c0f 100644 (file)
@@ -64,7 +64,7 @@
                "fiunchinho/phpunit-randomizer": "^4.0",
                "friendsofphp/php-cs-fixer": "^2.0",
                "typo3/cms-styleguide": "^9.1",
-               "typo3/testing-framework": "^3.8"
+               "typo3/testing-framework": "^4.0"
        },
        "suggest": {
                "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images",
index 554b2cc..c250065 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": "f62eab6aa1190b064eca1d92cf446797",
+    "content-hash": "6f16d9031c0614955697202f7c44bc49",
     "packages": [
         {
             "name": "cogpowered/finediff",
         },
         {
             "name": "typo3/testing-framework",
-            "version": "3.8.1",
+            "version": "4.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/TYPO3/testing-framework.git",
-                "reference": "024448439a037445f712ed9b60a3da293d594aaf"
+                "reference": "0155dc11572dd7722506ea0005a0e1c24ce89bdf"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/TYPO3/testing-framework/zipball/024448439a037445f712ed9b60a3da293d594aaf",
-                "reference": "024448439a037445f712ed9b60a3da293d594aaf",
+                "url": "https://api.github.com/repos/TYPO3/testing-framework/zipball/0155dc11572dd7722506ea0005a0e1c24ce89bdf",
+                "reference": "0155dc11572dd7722506ea0005a0e1c24ce89bdf",
                 "shasum": ""
             },
             "require": {
                 "mikey179/vfsstream": "~1.6.0",
                 "phpunit/phpunit": "^7.1",
-                "typo3/cms-backend": "^9.2",
-                "typo3/cms-core": "^9.2",
-                "typo3/cms-extbase": "^9.2",
-                "typo3/cms-fluid": "^9.2",
-                "typo3/cms-frontend": "^9.2",
+                "typo3/cms-backend": "^9.3",
+                "typo3/cms-core": "^9.3",
+                "typo3/cms-extbase": "^9.3",
+                "typo3/cms-fluid": "^9.3",
+                "typo3/cms-frontend": "^9.3",
                 "typo3fluid/fluid": "^2.5"
             },
             "suggest": {
                 "codeception/codeception": "^2.4",
-                "typo3/cms-saltedpasswords": "^9.2",
+                "typo3/cms-saltedpasswords": "^9.3",
                 "typo3/cms-styleguide": "^9.0"
             },
             "type": "library",
             "autoload": {
                 "psr-4": {
-                    "TYPO3\\TestingFramework\\": "Classes/",
-                    "TYPO3\\CMS\\Core\\Tests\\": "compat/core/",
-                    "TYPO3\\CMS\\Fluid\\Tests\\": "compat/fluid/"
+                    "TYPO3\\TestingFramework\\": "Classes/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
                 "tests",
                 "typo3"
             ],
-            "time": "2018-06-13T17:03:55+00:00"
+            "time": "2018-07-07T08:51:19+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..3d0b9a5
--- /dev/null
@@ -0,0 +1,38 @@
+class_name: BackendTester
+modules:
+  enabled:
+    - WebDriver:
+        url: http://master:8000/typo3temp/var/tests/acceptance
+        browser: chrome
+        wait: 1
+        host: chrome
+    - \TYPO3\TestingFramework\Core\Acceptance\Helper\Acceptance
+    - \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
+
+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"]
index 87bdfe4..ae70757 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 declare(strict_types = 1);
-
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\BackendUser;
 
 /*
@@ -16,7 +15,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;
 
 /**
  * Tests concerning the compare view of BE user module
@@ -24,11 +23,11 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class CompareUserCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
+        $I->useExistingSession('admin');
 
         $I->see('Backend users');
         $I->click('Backend users');
@@ -36,16 +35,16 @@ class CompareUserCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function editingBeUserRecordsFromCompareViewWorks(Admin $I)
+    public function editingBeUserRecordsFromCompareViewWorks(BackendTester $I)
     {
         // put two users into compare list
         $I->see('Backend User Listing');
         $I->click('#typo3-backend-user-list > tbody > tr:nth-child(1) > td.col-control > div:nth-child(3) > a');
         $I->waitForElementVisible('table#typo3-backend-user-list');
         $I->click('#typo3-backend-user-list > tbody > tr:nth-child(2) > td.col-control > div:nth-child(3) > a');
-        $I->waitForElementVisible('table#typo3-backend-user-list-compare');
+        $I->waitForElementVisible('table#typo3-backend-user-list-compare', 20);
         $I->canSeeNumberOfElements('#typo3-backend-user-list-compare tbody tr', 2);
         $I->click('body > div > div.module-body.t3js-module-body > form:nth-child(4) > input');
         $I->waitForElementVisible('table.table-striped');
@@ -58,7 +57,7 @@ class CompareUserCest
         $I->canSee('Edit Backend user "' . $usernameFirstCompare . '" on root level');
 
         // back to compare view
-        $I->click('div.module-docheader .btn.t3js-editform-close');
+        $I->click('.module-docheader .btn.t3js-editform-close');
         $I->waitForElementVisible('table.table-striped');
         $I->canSee('Compare backend users', 'h1');
 
index 3ddaece..6bfd562 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 declare(strict_types = 1);
-
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\BackendUser;
 
 /*
@@ -16,7 +15,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;
 
 /**
  * Tests concerning the listing of BeUser groups
@@ -24,11 +23,11 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class ListGroupCest
 {
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
+        $I->useExistingSession('admin');
 
         $I->see('Backend users');
         $I->click('Backend users');
@@ -39,7 +38,10 @@ class ListGroupCest
         $I->canSee('Backend User Group Listing', 'h1');
     }
 
-    public function canEditBeGroupsFromListView(Admin $I)
+    /**
+     * @param BackendTester $I
+     */
+    public function canEditBeGroupsFromListView(BackendTester $I)
     {
         $groupname = $I->grabTextFrom('table.table-striped > tbody > tr:nth-child(1) > td.col-title > a > b');
 
@@ -53,9 +55,9 @@ class ListGroupCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function canEditSubGroupFromListView(Admin $I)
+    public function canEditSubGroupFromListView(BackendTester $I)
     {
         $I->amGoingTo('test the subgroup edit form');
         $groupname = $I->grabTextFrom('table.table-striped > tbody > tr:nth-child(2) > td:nth-child(3) > a:nth-child(1)');
@@ -64,13 +66,13 @@ class ListGroupCest
     }
 
     /**
-     * @param Admin $I
-     * @param string $groupname
+     * @param BackendTester $I
+     * @param string $groupName
      */
-    private function openAndCloseTheEditForm(Admin $I, string $groupname): void
+    private function openAndCloseTheEditForm(BackendTester $I, string $groupName): void
     {
-        $I->waitForText('Edit Backend usergroup "' . $groupname . '" on root level', 120);
-        $I->see('Edit Backend usergroup "' . $groupname . '" on root level', 'h1');
+        $I->waitForText('Edit Backend usergroup "' . $groupName . '" on root level', 120);
+        $I->see('Edit Backend usergroup "' . $groupName . '" on root level', 'h1');
 
         $I->click('div.module-docheader .btn.t3js-editform-close');
         $I->waitForElementVisible('table.table-striped');
index 02d950c..327d29e 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\BackendUser;
 
 /*
@@ -14,7 +15,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,11 +23,11 @@ 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();
+        $I->useExistingSession('admin');
 
         $I->see('Backend users');
         $I->click('Backend users');
@@ -35,9 +36,9 @@ class ListUserCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function showsHeadingAndListsBackendUsers(Admin $I)
+    public function showsHeadingAndListsBackendUsers(BackendTester $I)
     {
         $I->see('Backend User Listing');
 
@@ -49,9 +50,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');
@@ -78,9 +79,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');
@@ -107,9 +108,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');
@@ -136,9 +137,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');
@@ -165,9 +166,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');
@@ -186,21 +187,9 @@ class ListUserCest
     }
 
     /**
-     * @param Admin $I
-     * @param int $countOfUsers
-     */
-    protected function checkCountOfUsers(Admin $I, $countOfUsers)
-    {
-        $I->canSeeNumberOfElements('#typo3-backend-user-list tbody tr', $countOfUsers);
-        $I->wantToTest('If a number of users is shown in the footer row');
-        $I->canSeeNumberOfElements('#typo3-backend-user-list tfoot tr', 1);
-        $I->see($countOfUsers . ' Users', '#typo3-backend-user-list tfoot tr');
-    }
-
-    /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function canEditUsersFromIndexListView(Admin $I)
+    public function canEditUsersFromIndexListView(BackendTester $I)
     {
         $I->canSee('Backend User Listing', 'h1');
         $username = $I->grabTextFrom('#typo3-backend-user-list > tbody > tr:nth-child(1) > td.col-title > a:nth-child(1) > b');
@@ -219,12 +208,22 @@ class ListUserCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
+     * @param int $countOfUsers
+     */
+    private function checkCountOfUsers(BackendTester $I, int $countOfUsers)
+    {
+        $I->canSeeNumberOfElements('#typo3-backend-user-list tbody tr', $countOfUsers);
+        $I->wantToTest('If a number of users is shown in the footer row');
+        $I->canSeeNumberOfElements('#typo3-backend-user-list tfoot tr', 1);
+        $I->see($countOfUsers . ' Users', '#typo3-backend-user-list tfoot tr');
+    }
+
+    /**
+     * @param BackendTester $I
      * @param string $username
-     *
-     * @throws \Exception
      */
-    private function openAndCloseTheEditForm(Admin $I, string $username): void
+    private function openAndCloseTheEditForm(BackendTester $I, string $username): void
     {
         $I->waitForElementNotVisible('#t3js-ui-block');
         $I->canSee('Edit Backend user "' . $username . '" on root level');
index ea39ee2..df2d8c2 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Extensionmanager;
 
 /*
@@ -15,7 +16,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,11 +24,11 @@ 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();
+        $I->useExistingSession('admin');
 
         $I->click('Extensions', '#menu');
         $I->switchToContentFrame();
@@ -41,27 +42,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->seeElement('.pagination-wrap');
         $I->see('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');
@@ -84,9 +85,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 379ab75..cec23cf 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Extensionmanager;
 
 /*
@@ -15,7 +16,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Extensionmanager;
  */
 
 use Codeception\Util\Locator;
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Tests for the "Install list view" of the extension manager
@@ -23,11 +24,11 @@ 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();
+        $I->useExistingSession('admin');
 
         $I->click('Extensions', '#menu');
         $I->switchToContentFrame();
@@ -35,9 +36,9 @@ class InstalledExtensionsCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkSearchFiltersList(Admin $I)
+    public function checkSearchFiltersList(BackendTester $I)
     {
         $I->seeNumberOfElements('#typo3-extension-list tbody tr[role="row"]', [10, 100]);
 
@@ -59,9 +60,9 @@ class InstalledExtensionsCest
     }
 
     /**
-     * @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');
@@ -69,9 +70,9 @@ 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');
index bdc6865..135b753 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 declare(strict_types = 1);
-
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FileList;
 
 /*
@@ -16,7 +15,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\FileList;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Cases concerning sys_file_metadata records
@@ -24,21 +23,17 @@ use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
 class FileMetaDataCest
 {
     /**
-     * @param Admin $I
-     *
-     * @throws \Exception
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
-     *
-     * @throws \Exception
+     * @param BackendTester $I
      */
-    public function metaDataCanBeEdited(Admin $I)
+    public function metaDataCanBeEdited(BackendTester $I)
     {
         $I->wantToTest('Metadata can be edited through search list results');
         $I->click('Filelist');
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..b923944
--- /dev/null
@@ -0,0 +1,126 @@
+<?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 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
+{
+    /**
+     * Method to run basic elements input field test details
+     *
+     * @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->seeInField($inputField, $testData['expectedValue']);
+        $I->seeInField($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->seeInField($inputField, $testData['expectedValue']);
+        $I->seeInField($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..9a66b82
--- /dev/null
@@ -0,0 +1,73 @@
+<?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 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-0_7 text.node-name');
+        $I->click('.identifier-0_3 text.node-name');
+        $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/ElementsBasicInputCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputCest.php
new file mode 100644 (file)
index 0000000..3d3040c
--- /dev/null
@@ -0,0 +1,386 @@
+<?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 ElementsBasicInputCest 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' => '12',
+                'expectedInternalValue' => '12',
+                'expectedValueAfterSave' => '12',
+                '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);
+    }
+
+    /**
+     * 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' => '129',
+                'expectedInternalValue' => '129',
+                'expectedValueAfterSave' => '129',
+                'comment' => '',
+            ],
+            [
+                // this one probably broke with the 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);
+    }
+
+    /**
+     * type=input range and md5 field tests
+     */
+    protected function simpleRangeAndMd5FieldsDataProvider()
+    {
+        return [
+            [
+                // 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/ElementsBasicInputDateCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsBasicInputDateCest.php
new file mode 100644 (file)
index 0000000..98d1197
--- /dev/null
@@ -0,0 +1,319 @@
+<?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
+     */
+    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
+     */
+    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
+     */
+    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 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/FormEngine/ElementsGroupCest.php b/typo3/sysext/core/Tests/Acceptance/Backend/FormEngine/ElementsGroupCest.php
new file mode 100644 (file)
index 0000000..f8875d4
--- /dev/null
@@ -0,0 +1,188 @@
+<?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 TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
+
+/**
+ * Tests for styleguide group element fields
+ */
+class ElementsGroupCest
+{
+    /**
+     * Open list module of styleguide elements group 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 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, true) . ' 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, true) . ' 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();
+        $I->switchToIFrame('modal_frame');
+
+        $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();
+        $I->switchToIFrame('modal_frame');
+
+        $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();
+        $I->switchToIFrame('modal_frame');
+
+        $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->click('.t3js-modal-close');
+
+        $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('button[name="_savedok"]');
+    }
+}
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..04a9ffc
--- /dev/null
@@ -0,0 +1,209 @@
+<?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 TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
+
+/**
+ * Tests for fal metadata checks
+ */
+class FalMetadataInheritanceCest
+{
+    /**
+     * Call backend and open page module of styleguide page
+     *
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     */
+    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->switchToMainFrame();
+        $I->waitForElement('.t3js-modal.in');
+        $I->wait(3);
+        $I->waitForElementNotVisible('div#nprogess');
+        $I->click('Text & Images');
+        $I->switchToContentFrame();
+        $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();
+        $I->switchToIFrame('modal_frame');
+        $I->click('.list-tree-control-closed');
+        $I->click('styleguide');
+        $I->click('bus_lane.jpg');
+        $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->switchToMainFrame();
+        $I->waitForElement('.t3js-modal.in');
+        $I->wait(3);
+        $I->waitForElementNotVisible('div#nprogess');
+        $I->click('Text & Images');
+        $I->switchToContentFrame();
+        $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();
+        $I->switchToIFrame('modal_frame');
+        $I->click('.list-tree-control-closed');
+        $I->click('styleguide');
+        $I->click('bus_lane.jpg');
+        $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');
+    }
+
+    /**
+     * Open page module of styleguide page
+     *
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     */
+    private function goToPageModule(BackendTester $I, PageTree $pageTree)
+    {
+        $I->switchToMainFrame();
+        $I->click('Page');
+        $I->waitForElement('svg .nodes .node');
+        $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..7e15a26
--- /dev/null
@@ -0,0 +1,195 @@
+<?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\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
+{
+    /**
+     * Open styleguide inline 1n page in list module
+     *
+     * @param BackendTester $I
+     * @param PageTree $pageTree
+     * @throws \Exception
+     */
+    public function _before(BackendTester $I, PageTree $pageTree)
+    {
+        $I->useExistingSession('admin');
+
+        $I->click('List');
+        $I->waitForElement('svg .nodes .node');
+        $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 Admin $I
+     */
+    public function checkIfExpandsAndCollapseShowInput(BackendTester $I)
+    {
+        $I->wantTo('Expands the inline Element');
+        $I->click('div[data-toggle="formengine-inline"]', '#data-52-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-52-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
+        $I->waitForElementNotVisible('#data-52-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_fields.panel-collapse');
+    }
+
+    /**
+     * @param Admin $I
+     */
+    public function hideAndUnhideInline1nInlineElement(BackendTester $I)
+    {
+        $I->wantTo('Can hide a Inline Element');
+        $I->click('a span[data-identifier="actions-edit-hide"]', '#data-52-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
+        $I->waitForElement('#data-52-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-52-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
+        $I->waitForElementNotVisible('#data-52-tx_styleguide_inline_1n-1-inline_1_records .t3-form-field-container-inline-hidden', 2);
+    }
+
+    /**
+     * @param Admin $I
+     */
+    public function createInline1nInlineElement(BackendTester $I)
+    {
+        $I->click('span[data-identifier="actions-add"]', '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"] .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(5) > td:nth-child(2) > a');
+    }
+
+    /**
+     * @depends createInline1nInlineElement
+     * @param Admin $I
+     */
+    public function checkIfCanSortingInlineElement(BackendTester $I)
+    {
+        $I->wantTo('Can sort an Inline Element');
+        $I->click('a span[data-identifier="actions-move-down"]', '#data-52-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"] .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(2) > 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(3) > td:nth-child(2) > a');
+    }
+
+    /**
+     * @param Admin $I
+     */
+    public function changeInline1nInlineInput(BackendTester $I)
+    {
+        $I->click('div[data-toggle="formengine-inline"]', '#data-52-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(BackendTester $I, ModalDialog $modalDialog)
+    {
+        $inlineElementToDelete = '#data-52-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 Admin $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 a8c5f55..0000000
+++ /dev/null
@@ -1,72 +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();
-    }
-
-    /**
-     * @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->switchToContentFrame();
-        $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->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-0_7 text.node-name');
-        $I->click('.identifier-0_3 text.node-name');
-        $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 1e73f90..0000000
+++ /dev/null
@@ -1,354 +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();
-        $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');
-    }
-
-    /**
-     * @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' => '12',
-                    'expectedInternalValue' => '12',
-                    'expectedValueAfterSave' => '12',
-                    '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 74a9808..0000000
+++ /dev/null
@@ -1,271 +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();
-
-        $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);
-    }
-
-    /**
-     * @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 d8ff2c9..0000000
+++ /dev/null
@@ -1,181 +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 ElementsGroupelement fields
- */
-class ElementsGroupCest
-{
-    public function _before(Admin $I, PageTree $pageTree)
-    {
-        $I->useExistingSession();
-
-        $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 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();
-        $I->switchToIFrame('modal_frame');
-
-        $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 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();
-        $I->switchToIFrame('modal_frame');
-
-        $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 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();
-        $I->switchToIFrame('modal_frame');
-
-        $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->click('.t3js-modal-close');
-
-        $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('button[name="_savedok"]');
-    }
-}
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 7f4e869..0000000
+++ /dev/null
@@ -1,202 +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 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();
-        $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->switchToMainFrame();
-        $I->waitForElement('.t3js-modal.in');
-        $I->wait(3);
-        $I->waitForElementNotVisible('div#nprogess');
-        $I->click('Text & Images');
-        $I->switchToContentFrame();
-        $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();
-        $I->switchToIFrame('modal_frame');
-        $I->click('.list-tree-control-closed');
-        $I->click('styleguide');
-        $I->click('bus_lane.jpg');
-        $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 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->switchToMainFrame();
-        $I->waitForElement('.t3js-modal.in');
-        $I->wait(3);
-        $I->waitForElementNotVisible('div#nprogess');
-        $I->click('Text & Images');
-        $I->switchToContentFrame();
-        $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();
-        $I->switchToIFrame('modal_frame');
-        $I->click('.list-tree-control-closed');
-        $I->click('styleguide');
-        $I->click('bus_lane.jpg');
-        $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 Admin $I
-     * @param PageTree $pageTree
-     * @throws \Exception
-     */
-    protected function goToPageModule(Admin $I, PageTree $pageTree)
-    {
-        $I->click('Page');
-        $I->waitForElement('svg .nodes .node');
-        $pageTree->openPath(['styleguide TCA demo']);
-        $I->switchToContentFrame();
-        $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 0c8f253..0000000
+++ /dev/null
@@ -1,187 +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();
-
-        $I->click('List');
-        $I->waitForElement('svg .nodes .node');
-        $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 Admin $I
-     */
-    public function checkIfExpandsAndCollapseShowInput(Admin $I)
-    {
-        $I->wantTo('Expands the inline Element');
-        $I->click('div[data-toggle="formengine-inline"]', '#data-52-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-52-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
-        $I->waitForElementNotVisible('#data-52-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-52-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
-        $I->waitForElement('#data-52-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-52-tx_styleguide_inline_1n-1-inline_1-tx_styleguide_inline_1n_child-1_div');
-        $I->waitForElementNotVisible('#data-52-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-add"]', '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"] .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(5) > 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-52-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"] .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(2) > 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(3) > td:nth-child(2) > a');
-    }
-
-    /**
-     * @param Admin $I
-     */
-    public function changeInline1nInlineInput(Admin $I)
-    {
-        $I->click('div[data-toggle="formengine-inline"]', '#data-52-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-52-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 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 65d805f..6d4b8c9 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\General;
 
 /*
@@ -14,7 +15,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,17 +23,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();
+        $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');
@@ -53,9 +54,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]);
 
index f26e3ee..fe8affe 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Login;
 
 /*
@@ -14,7 +15,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 +27,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 +54,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 +84,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 +101,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 +125,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,9 +147,9 @@ 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');
index c0a59ad..790ffa9 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Page;
 
 /*
@@ -15,25 +16,28 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Page;
  */
 
 use PHPUnit\Framework\SkippedTestError;
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+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();
+        $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();
index 45abcf8..bff0f57 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Page;
 
 /*
@@ -14,7 +15,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,15 +23,18 @@ 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();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function checkThatPageModuleHasAHeadline(Admin $I)
+    public function checkThatPageModuleHasAHeadline(BackendTester $I)
     {
         $I->click('Page');
         $I->switchToContentFrame();
index 220c8d9..149aae5 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\RecordList;
 
 /*
  * This file is part of the TYPO3 CMS project.
@@ -14,11 +15,9 @@ declare(strict_types = 1);
  * The TYPO3 project - inspiring people to share!
  */
 
-namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\RecordList;
-
 use Facebook\WebDriver\WebDriverKeys;
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
-use TYPO3\TestingFramework\Core\Acceptance\Support\Page\PageTree;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\Helper\PageTree;
 
 /**
  * Cases concerning sys_note records
@@ -26,22 +25,18 @@ use TYPO3\TestingFramework\Core\Acceptance\Support\Page\PageTree;
 class SysNoteCest
 {
     /**
-     * @param Admin $I
-     *
-     * @throws \Exception
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      * @param PageTree $pageTree
-     *
-     * @throws \Exception
      */
-    public function notesEntryCanBeEdited(Admin $I, PageTree $pageTree)
+    public function notesEntryCanBeEdited(BackendTester $I, PageTree $pageTree)
     {
         $I->wantToTest('whether sysnote entries can be edited via the Internal Notes section in List View');
 
index 605d327..e8ec176 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 declare(strict_types = 1);
-
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Redirect;
 
 /*
@@ -16,7 +15,7 @@ namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Redirect;
  * The TYPO3 project - inspiring people to share!
  */
 
-use TYPO3\TestingFramework\Core\Acceptance\Step\Backend\Admin;
+use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester;
 
 /**
  * Tests concerning Redirects Module
@@ -25,11 +24,11 @@ class RedirectModuleCest
 {
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function _before(Admin $I)
+    public function _before(BackendTester $I)
     {
-        $I->useExistingSession();
+        $I->useExistingSession('admin');
 
         $I->click('Redirects');
         $I->switchToContentFrame();
@@ -37,9 +36,9 @@ class RedirectModuleCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function createNewRecordIfNoneExist(Admin $I)
+    public function createNewRecordIfNoneExist(BackendTester $I)
     {
         $I->amGoingTo('create a new redirects record while none are in the system, yet');
         $I->canSee('No redirects found!');
@@ -63,9 +62,9 @@ class RedirectModuleCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function canEditRecordFromListView(Admin $I)
+    public function canEditRecordFromListView(BackendTester $I)
     {
         $sourceHost = $I->grabTextFrom('table.table-striped > tbody > tr > td:nth-child(1)');
         $sourcePath = $I->grabTextFrom('table.table-striped > tbody > tr > td:nth-child(2) > a');
@@ -80,10 +79,10 @@ class RedirectModuleCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      * @param string $name
      */
-    private function openAndCloseTheEditForm(Admin $I, string $name): void
+    private function openAndCloseTheEditForm(BackendTester $I, string $name): void
     {
         $I->waitForElementNotVisible('#t3js-ui-block');
         $I->canSee('Edit Redirect "' . $name . '" on root level');
index b519f34..d4cfd9d 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Scheduler;
 
 /*
@@ -14,8 +15,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,20 +24,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();
+        $I->useExistingSession('admin');
         $I->see('Scheduler', '#system_txschedulerM1');
         $I->click('Scheduler', '#system_txschedulerM1');
         $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');
@@ -53,9 +54,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"]');
@@ -66,9 +67,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');
@@ -82,9 +83,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');
@@ -99,10 +100,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")]');
@@ -124,9 +125,9 @@ class TasksCest
     }
 
     /**
-     * @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');
@@ -135,9 +136,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');
@@ -146,9 +147,9 @@ class TasksCest
     }
 
     /**
-     * @param Admin $I
+     * @param BackendTester $I
      */
-    public function canCreateNewTaskGroupFromEditForm(Admin $I)
+    public function canCreateNewTaskGroupFromEditForm(BackendTester $I)
     {
         $I->amGoingTo('create a task when none exists yet');
         $I->canSee('Scheduled tasks', 'h1');
index e0bb1be..f675bf7 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Template;
 
 /*
@@ -14,7 +15,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,11 +23,11 @@ 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();
+        $I->useExistingSession('admin');
 
         $I->see('Template');
         $I->click('Template');
@@ -37,9 +38,9 @@ class TemplateCest
     }
 
     /**
-     * @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->switchToMainFrame();
@@ -69,9 +70,9 @@ 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->switchToMainFrame();
index 03a3872..06e2137 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
 
 /*
@@ -15,9 +16,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,18 +40,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();
+        $I->useExistingSession('admin');
     }
 
     /**
-     * @param Admin $I
-     * @return Admin
+     * @param BackendTester $I
+     * @return BackendTester
      */
-    public function checkThatBookmarkListIsInitiallyEmpty(Admin $I)
+    public function checkThatBookmarkListIsInitiallyEmpty(BackendTester $I)
     {
         $this->clickBookmarkDropdownToggleInTopbar($I);
         $I->cantSeeElement(self::$topBarModuleSelector . ' .shortcut');
@@ -59,11 +60,11 @@ 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)
     {
         // open the scheduler module as we would like to put it into the bookmark liste
         $I->click('Scheduler', '.scaffold-modulemenu');
@@ -98,10 +99,10 @@ 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);
@@ -110,10 +111,10 @@ class BookmarkCest
     }
 
     /**
-     * @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';
@@ -129,10 +130,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);
 
@@ -144,9 +145,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 156ad58..8693cd4 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
 
 /*
@@ -14,8 +15,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,18 +31,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();
+        $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);
         return $I;
@@ -49,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 fa69e4e..89373b1 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
 
 /*
@@ -14,8 +15,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,18 +31,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();
+        $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);
         return $I;
@@ -49,9 +50,9 @@ 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);
index cfcf414..49d1263 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
 
 /*
@@ -14,7 +15,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,17 +23,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();
+        $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..4a7baae 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\core\Tests\Acceptance\Backend\Topbar;
 
 /*
@@ -14,26 +15,25 @@ 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
  */
 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 10ab110..f9917eb 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
 
 /*
@@ -14,7 +15,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 +23,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,9 +52,9 @@ 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');
index 2fd0b56..5b5461e 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
 
 /*
@@ -14,8 +15,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,17 +31,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();
+        $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');
@@ -55,9 +56,9 @@ class SearchCest
     }
 
     /**
-     * @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);
@@ -71,9 +72,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);
index 6169e1c..7784479 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+declare(strict_types = 1);
 namespace TYPO3\CMS\Core\Tests\Acceptance\Backend\Topbar;
 
 /*
@@ -14,24 +15,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();
+        $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..4938972
--- /dev/null
@@ -0,0 +1,43 @@
+actor: InstallTester
+modules:
+  enabled:
+    - WebDriver:
+        url: http://master: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
+
+  sqlite:
+    extensions:
+      enabled:
+        - TYPO3\TestingFramework\Core\Acceptance\Extension\InstallSqliteCoreEnvironment
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..526cfd1
--- /dev/null
@@ -0,0 +1,77 @@
+<?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
+     * @env mysql
+     */
+    public function installTypo3OnMysql(InstallTester $I, Scenario $scenario)
+    {
+        // Calling frontend redirects to installer
+        $I->amOnPage('/');
+
+        // EnvironmentAndFolders step
+        $I->waitForText('Installing TYPO3');
+        $I->waitForText('No problems detected, continue with installation');
+        $I->click('No problems detected, continue with installation');
+
+        // DatabaseConnection step
+        $I->waitForText('Select database');
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-username', $scenario->current('typo3InstallMysqlDatabaseUsername'));
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-password', $scenario->current('typo3InstallMysqlDatabasePassword'));
+        $I->click('Continue');
+
+        // DatabaseSelect step
+        $I->waitForText('Select a 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 Administrative User / Specify Site Name');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - Create empty page
+        $I->waitForText('Installation Complete');
+        $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..5eb83e4
--- /dev/null
@@ -0,0 +1,89 @@
+<?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
+{
+    /**
+     * @env mysql
+     * @param InstallTester $I
+     */
+    public function installTypo3OnMysql(InstallTester $I, Scenario $scenario)
+    {
+        // Calling frontend redirects to installer
+        $I->amOnPage('/');
+
+        // EnvironmentAndFolders step
+        $I->waitForText('Installing TYPO3');
+        $I->waitForText('No problems detected, continue with installation');
+        $I->click('No problems detected, continue with installation');
+
+        // DatabaseConnection step
+        $I->waitForText('Select database');
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-username', $scenario->current('typo3InstallMysqlDatabaseUsername'));
+        $I->fillField('#t3-install-step-mysqliManualConfiguration-password', $scenario->current('typo3InstallMysqlDatabasePassword'));
+        $I->click('Continue');
+
+        // DatabaseSelect step
+        $I->waitForText('Select a 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 Administrative User / Specify Site Name');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - Create empty page
+        $I->waitForText('Installation Complete');
+        $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..44a0fb6
--- /dev/null
@@ -0,0 +1,74 @@
+<?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('No problems detected, continue with installation');
+        $I->click('No problems detected, continue with installation');
+
+        // DatabaseConnection step
+        $I->waitForText('Select database');
+        $I->selectOption('#t3js-connect-database-driver', 'Manually configured PostgreSQL connection');
+        $I->fillField('#t3-install-step-postgresManualConfiguration-username', $scenario->current('typo3InstallPostgresqlDatabaseUsername'));
+        // password intentionally not filled. Postgres authenticates with the shell user.
+        $I->fillField('#t3-install-step-postgresManualConfiguration-database', $scenario->current('typo3InstallPostgresqlDatabaseName'));
+        $I->click('Continue');
+
+        // DatabaseData step
+        $I->waitForText('Create Administrative User / Specify Site Name');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - load distributions
+        $I->waitForText('Installation Complete');
+        $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..c7d0983
--- /dev/null
@@ -0,0 +1,86 @@
+<?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->waitForText('No problems detected, continue with installation');
+        $I->click('No problems detected, continue with installation');
+
+        // DatabaseConnection step
+        $I->waitForText('Select database');
+        $I->selectOption('#t3js-connect-database-driver', 'Manually configured PostgreSQL connection');
+        $I->fillField('#t3-install-step-postgresManualConfiguration-username', $scenario->current('typo3InstallPostgresqlDatabaseUsername'));
+        // password intentionally not filled. Postgres authenticates with the shell user.
+        $I->fillField('#t3-install-step-postgresManualConfiguration-database', $scenario->current('typo3InstallPostgresqlDatabaseName'));
+        $I->click('Continue');
+
+        // DatabaseData step
+        $I->waitForText('Create Administrative User / Specify Site Name');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - load distributions
+        $I->waitForText('Installation Complete');
+        $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/Sqlite/BlankPageCest.php b/typo3/sysext/core/Tests/Acceptance/Install/Sqlite/BlankPageCest.php
new file mode 100644 (file)
index 0000000..dffef63
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Install\Sqlite;
+
+/*
+ * 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\InstallTester;
+
+/**
+ * Click through installer, go to backend, check blank site in FE works
+ */
+class BlankPageCest
+{
+    /**
+     * @param InstallTester $I
+     * @env sqlite
+     */
+    public function installTypo3OnSqlite(InstallTester $I)
+    {
+        // Calling frontend redirects to installer
+        $I->amOnPage('/');
+
+        // EnvironmentAndFolders step
+        $I->waitForText('Installing TYPO3');
+        $I->waitForText('No problems detected, continue with installation');
+        $I->click('No problems detected, continue with installation');
+
+        // DatabaseConnection step
+        $I->waitForText('Select database');
+        $I->selectOption('#t3js-connect-database-driver', 'Manually configured SQLite connection');
+        $I->click('Continue');
+
+        // DatabaseData step
+        $I->waitForText('Create Administrative User / Specify Site Name');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - load distributions
+        $I->waitForText('Installation Complete');
+        $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/Sqlite/IntroductionPackageCest.php b/typo3/sysext/core/Tests/Acceptance/Install/Sqlite/IntroductionPackageCest.php
new file mode 100644 (file)
index 0000000..71841b9
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+declare(strict_types = 1);
+namespace TYPO3\CMS\Core\Tests\Acceptance\Install\Sqlite;
+
+/*
+ * 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\InstallTester;
+
+/**
+ * Click through installer, go to backend, install introduction package
+ */
+class IntroductionPackageCest
+{
+    /**
+     * @param InstallTester $I
+     * @env sqlite
+     */
+    public function installTypo3OnSqlite(InstallTester $I)
+    {
+        // Calling frontend redirects to installer
+        $I->amOnPage('/');
+
+        // EnvironmentAndFolders step
+        $I->waitForText('Installing TYPO3');
+        $I->waitForText('No problems detected, continue with installation');
+        $I->click('No problems detected, continue with installation');
+
+        // DatabaseConnection step
+        $I->waitForText('Select database');
+        $I->selectOption('#t3js-connect-database-driver', 'Manually configured SQLite connection');
+        $I->click('Continue');
+
+        // DatabaseData step
+        $I->waitForText('Create Administrative User / Specify Site Name');
+        $I->fillField('#username', 'admin');
+        $I->fillField('#password', 'password');
+        $I->click('Continue');
+
+        // DefaultConfiguration step - load distributions
+        $I->waitForText('Installation Complete');
+        $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 84205aa..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->waitForText('No problems detected, continue with installation');
-        $I->click('No problems detected, continue with installation');
-
-        // DatabaseConnection step
-        $I->waitForText('Select database');
-        $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 a 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 Administrative User / Specify Site Name');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - Create empty page
-        $I->waitForText('Installation Complete');
-        $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 062659b..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('No problems detected, continue with installation');
-        $I->click('No problems detected, continue with installation');
-
-        // DatabaseConnection step
-        $I->waitForText('Select database');
-        $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 a 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 Administrative User / Specify Site Name');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - Create empty page
-        $I->waitForText('Installation Complete');
-        $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/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 31e7cf4..0000000
+++ /dev/null
@@ -1,68 +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('No problems detected, continue with installation');
-        $I->click('No problems detected, continue with installation');
-
-        // DatabaseConnection step
-        $I->waitForText('Select database');
-        $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');
-        $I->click('Continue');
-
-        // DatabaseData step
-        $I->waitForText('Create Administrative User / Specify Site Name');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - load distributions
-        $I->waitForText('Installation Complete');
-        $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 4024c1f..0000000
+++ /dev/null
@@ -1,80 +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->waitForText('No problems detected, continue with installation');
-        $I->click('No problems detected, continue with installation');
-
-        // DatabaseConnection step
-        $I->waitForText('Select database');
-        $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');
-        $I->click('Continue');
-
-        // DatabaseData step
-        $I->waitForText('Create Administrative User / Specify Site Name');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - load distributions
-        $I->waitForText('Installation Complete');
-        $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/AcceptanceInstallSqlite.suite.yml b/typo3/sysext/core/Tests/AcceptanceInstallSqlite.suite.yml
deleted file mode 100644 (file)
index 14b7e09..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/acceptanceinstallsqlite
-      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/AcceptanceInstallSqlite/InstallWithSqliteBlankPageCest.php b/typo3/sysext/core/Tests/AcceptanceInstallSqlite/InstallWithSqliteBlankPageCest.php
deleted file mode 100644 (file)
index 523e381..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\AcceptanceInstallSqlite;
-
-/*
- * 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 InstallWithSqliteBlankPageCest
-{
-    /**
-     * @param \AcceptanceTester $I
-     */
-    public function installTypo3OnSqlite(\AcceptanceTester $I)
-    {
-        // Calling frontend redirects to installer
-        $I->amOnPage('/');
-
-        // EnvironmentAndFolders step
-        $I->waitForText('Installing TYPO3');
-        $I->waitForText('No problems detected, continue with installation');
-        $I->click('No problems detected, continue with installation');
-
-        // DatabaseConnection step
-        $I->waitForText('Select database');
-        $I->selectOption('#t3js-connect-database-driver', 'Manually configured SQLite connection');
-        $I->click('Continue');
-
-        // DatabaseData step
-        $I->waitForText('Create Administrative User / Specify Site Name');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - load distributions
-        $I->waitForText('Installation Complete');
-        $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/AcceptanceInstallSqlite/InstallWithSqliteIntroductionPackageCest.php b/typo3/sysext/core/Tests/AcceptanceInstallSqlite/InstallWithSqliteIntroductionPackageCest.php
deleted file mode 100644 (file)
index bbaff51..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\AcceptanceInstallSqlite;
-
-/*
- * 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 InstallWithSqliteIntroductionPackageCest
-{
-    /**
-     * @param \AcceptanceTester $I
-     */
-    public function installTypo3OnSqlite(\AcceptanceTester $I)
-    {
-        // Calling frontend redirects to installer
-        $I->amOnPage('/');
-
-        // EnvironmentAndFolders step
-        $I->waitForText('Installing TYPO3');
-        $I->waitForText('No problems detected, continue with installation');
-        $I->click('No problems detected, continue with installation');
-
-        // DatabaseConnection step
-        $I->waitForText('Select database');
-        $I->selectOption('#t3js-connect-database-driver', 'Manually configured SQLite connection');
-        $I->click('Continue');
-
-        // DatabaseData step
-        $I->waitForText('Create Administrative User / Specify Site Name');
-        $I->fillField('#username', 'admin');
-        $I->fillField('#password', 'password');
-        $I->click('Continue');
-
-        // DefaultConfiguration step - load distributions
-        $I->waitForText('Installation Complete');
-        $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/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
index 8e00a25..0c24be9 100644 (file)
@@ -46,7 +46,7 @@
                "fiunchinho/phpunit-randomizer": "^4.0",
                "friendsofphp/php-cs-fixer": "^2.0",
                "typo3/cms-styleguide": "^9.1",
-               "typo3/testing-framework": "^3.8"
+               "typo3/testing-framework": "^4.0"
        },
        "suggest": {
                "ext-fileinfo": "Used for proper file type detection in the file abstraction layer",