LCOV - code coverage report
Current view: top level - src/utils/tests - InternalTestStep.h (source / functions) Coverage Total Hit
Test: lcov.info Lines: 0.0 % 2 0
Test Date: 2026-03-02 16:00:03 Functions: - 0 0

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
       4              : // This program and the accompanying materials are made available under the
       5              : // terms of the Eclipse Public License 2.0 which is available at
       6              : // https://www.eclipse.org/legal/epl-2.0/
       7              : // This Source Code may also be made available under the following Secondary
       8              : // Licenses when the conditions for such availability set forth in the Eclipse
       9              : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10              : // or later which is available at
      11              : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12              : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13              : /****************************************************************************/
      14              : /// @file    InternalTestStep.h
      15              : /// @author  Pablo Alvarez Lopez
      16              : /// @date    Mar 2025
      17              : ///
      18              : // Single operation used in InternalTests
      19              : /****************************************************************************/
      20              : #pragma once
      21              : #include <config.h>
      22              : 
      23              : #include <netedit/dialogs/GNEDialogEnum.h>
      24              : #include <utils/foxtools/fxheader.h>
      25              : 
      26              : #include "InternalTest.h"
      27              : 
      28              : // ===========================================================================
      29              : // class definitions
      30              : // ===========================================================================
      31              : 
      32              : class InternalTestStep {
      33              : 
      34              : public:
      35              :     /// @name category step
      36              :     enum class Category {
      37              :         META,           // Meta step (used for packing set of steps like click or write)
      38              :         INIT,           // Setup and start step
      39              :         FINISH,         // Write last line
      40              :         APP,            // send signal to APP (Either GUIAppWindows or GNEApplicationWindow)
      41              :         VIEW,           // send signal to view (either GUIView or GNEViewNet)
      42              :         TLS_PHASES,     // send signal to TLS Phases module (used for TLS Phases)
      43              :         TLS_PHASETABLE, // send signal to TLSTable (used for TLS Phases)
      44              :         DIALOG,         // send signal to dialog (used for modal dialogs)
      45              :     };
      46              : 
      47              :     /// @brief dialog arguments, used for certain modal dialogs that can not be edited using tab
      48            0 :     class DialogArgument {
      49              : 
      50              :     public:
      51              :         /// @name basic actions
      52              :         enum class Action {
      53              :             ACCEPT,     // press accept button
      54              :             CANCEL,     // press cancel button
      55              :             RESET,      // press reset button
      56              :             ABORT,      // abort dialog
      57              :             CUSTOM,     // custom action
      58              :             NONE,       // no action
      59              :         };
      60              : 
      61              :         /// @brief constructor for basic actions
      62              :         DialogArgument(DialogType type, Action action);
      63              : 
      64              :         /// @brief constructor for basic actions
      65              :         DialogArgument(DialogType type, const std::string& customAction);
      66              : 
      67              :         /// @brief constructor for basic actions and index
      68              :         DialogArgument(DialogType type, const std::string& customAction, const int index);
      69              : 
      70              :         /// @brief constructor for custom actions and prefix to remove in the action
      71              :         DialogArgument(DialogType type, const std::string& prefixToRemove, const std::string& customAction);
      72              : 
      73              :         /// @brief get type
      74              :         DialogType getType() const;
      75              : 
      76              :         /// @brief get basic action
      77              :         Action getAction() const;
      78              : 
      79              :         /// @brief get custom action
      80              :         const std::string& getCustomAction() const;
      81              : 
      82              :         /// @brief get index
      83              :         int getIndex() const;
      84              : 
      85              :     protected:
      86              :         /// @brief dialog type
      87              :         DialogType myType = DialogType::DEFAULT;
      88              : 
      89              :         /// @brief basic action
      90              :         Action myAction = Action::NONE;
      91              : 
      92              :         /// @brief action to be carried out in the dialog
      93              :         std::string myCustomAction;
      94              : 
      95              :         /// @brief index
      96              :         int myIndex = 0;
      97              : 
      98              :     private:
      99              :         /// @brief invalidated default constructor
     100              :         DialogArgument() = delete;
     101              : 
     102              :         /// @brief invalidated copy constructor
     103              :         DialogArgument(const DialogArgument&) = delete;
     104              :     };
     105              : 
     106              :     /// @brief struct used for test TLS Tables
     107            0 :     class TLSTableTest {
     108              : 
     109              :     public:
     110              :         /// brief default constructor for phases
     111              :         TLSTableTest(FXSelector sel_, const int row_);
     112              : 
     113              :         /// brief default constructor with text
     114              :         TLSTableTest(FXSelector sel_, const int row_, const int column_, const std::string& text_);
     115              : 
     116              :         /// @brief selector
     117              :         const FXSelector sel = 0;
     118              : 
     119              :         /// @brief x coordinate
     120              :         const int row = 0;
     121              : 
     122              :         /// @brief y coordinate
     123              :         const int column = 0;
     124              : 
     125              :         /// @brief text
     126              :         const std::string text = "";
     127              : 
     128              :     private:
     129              :         /// @brief invalidated default constructor
     130              :         TLSTableTest() = delete;
     131              : 
     132              :         /// @brief invalidated copy constructor
     133              :         TLSTableTest(const TLSTableTest&) = delete;
     134              :     };
     135              : 
     136              :     /// @brief constructor for parsing step in string format
     137              :     InternalTestStep(InternalTest* testSystem, const std::string& step);
     138              : 
     139              :     /// @brief constructor for shortcuts
     140              :     InternalTestStep(InternalTest* testSystem, FXSelector messageType, FXSelector messageID,
     141              :                      Category category, const std::string& description);
     142              : 
     143              :     /// @brief constructor for input events (click, keyPress, etc.)
     144              :     InternalTestStep(InternalTest* testSystem, FXSelector messageType, Category category,
     145              :                      FXEvent* event, const bool updateView, const std::string& description);
     146              : 
     147              :     /// @brief constructor for dialog arguments
     148              :     InternalTestStep(InternalTest* testSystem, DialogArgument* dialogArgument,
     149              :                      const std::string& description);
     150              : 
     151              :     /// @brief destructor
     152              :     ~InternalTestStep();
     153              : 
     154              :     /// @name next step management
     155              :     /// @{
     156              : 
     157              :     /// @brief get next step
     158              :     InternalTestStep* getNextStep() const;
     159              : 
     160              :     /// @brief set next step
     161              :     void setNextStep(InternalTestStep* nextStep);
     162              : 
     163              :     /// @}
     164              : 
     165              :     /// @brief get message type
     166              :     FXSelector getMessageType() const;
     167              : 
     168              :     /// @brief get message ID
     169              :     FXSelector getMessageID() const;
     170              : 
     171              :     /// @brief get dialog argument
     172              :     DialogArgument* getDialogArgument() const;
     173              : 
     174              :     /// @brief get TLS Table test
     175              :     TLSTableTest* getTLSTableTest() const;
     176              : 
     177              :     /// @brief get selector (based in messageType and messageID)
     178              :     FXSelector getSelector() const;
     179              : 
     180              :     /// @brief check if update view
     181              :     bool updateView() const;
     182              : 
     183              :     /// @brief get category
     184              :     Category getCategory() const;
     185              : 
     186              :     /// @brief get event associated with this step
     187              :     void* getEvent() const;
     188              : 
     189              :     ///  @brief get description
     190              :     const std::string& getDescription() const;
     191              : 
     192              : private:
     193              :     /// @brief test system parent
     194              :     InternalTest* myTestSystem = nullptr;
     195              : 
     196              :     /// @brief next step in the test
     197              :     InternalTestStep* myNextStep = nullptr;
     198              : 
     199              :     /// @brief message type (by default SEL_COMMAND)
     200              :     FXSelector myMessageType = SEL_COMMAND;
     201              : 
     202              :     /// @brief message ID
     203              :     FXSelector myMessageID = 0;
     204              : 
     205              :     /// @brief step category
     206              :     Category myCategory = Category::META;
     207              : 
     208              :     /// @brief flag to enable or disable view after execute step
     209              :     bool myUpdateView = false;
     210              : 
     211              :     /// @brief description
     212              :     std::string myDescription;
     213              : 
     214              :     /// @brief arguments
     215              :     std::vector<std::string> myArguments;
     216              : 
     217              :     /// @brief list of events associated with this step
     218              :     FXEvent* myEvent = nullptr;
     219              : 
     220              :     /// @brief dialog argument
     221              :     DialogArgument* myDialogArgument = nullptr;
     222              : 
     223              :     /// @brief TLS Table test
     224              :     TLSTableTest* myTLSTableTest = nullptr;
     225              : 
     226              :     /// @brief parse function and arguments
     227              :     std::string parseStep(const std::string& rowText);
     228              : 
     229              :     /// @brief parse arguments
     230              :     void parseArguments(const std::string& arguments);
     231              : 
     232              :     /// @brief process setupAndStart function
     233              :     void setupAndStart();
     234              : 
     235              :     /// @brief finish function
     236              :     void finish();
     237              : 
     238              :     /// @brief process click function
     239              :     void mouseClick(const std::string& button, const std::string& modifier) const;
     240              : 
     241              :     /// @brief process click function
     242              :     void leftClickOffset(const std::string& button) const;
     243              : 
     244              :     /// @brief process moveElementHorizontal function
     245              :     void moveElementHorizontal() const;
     246              : 
     247              :     /// @brief process moveElementVertical function
     248              :     void moveElementVertical() const;
     249              : 
     250              :     /// @brief process moveElement function
     251              :     void moveElement() const;
     252              : 
     253              :     /// @brief process focusOnFrame function
     254              :     void focusOnFrame() const;
     255              : 
     256              :     /// @brief process typeKey function
     257              :     void typeKey() const;
     258              : 
     259              :     /// @brief process contextualMenuOperation function
     260              :     void contextualMenuOperation() const;
     261              : 
     262              :     /// @brief process protect elements function
     263              :     void protectElements() const;
     264              : 
     265              :     /// @brief process waitDeleteWarning function
     266              :     void waitDeleteWarning() const;
     267              : 
     268              :     /// @brief process modifyAttribute function
     269              :     void modifyAttribute(const int overlappedTabs) const;
     270              : 
     271              :     /// @brief process modifyBoolAttribute function
     272              :     void modifyBoolAttribute(const int overlappedTabs) const;
     273              : 
     274              :     /// @brief process modifyColorAttribute function
     275              :     void modifyColorAttribute(const int overlappedTabs) const;
     276              : 
     277              :     /// @brief process modifyVClassDialog_DisallowAll function
     278              :     void modifyVClassDialog_NoDisallowAll(const int overlappedTabs) const;
     279              : 
     280              :     /// @brief process modifyVClassDialog_DisallowAll function
     281              :     void modifyVClassDialog_DisallowAll(const int overlappedTabs) const;
     282              : 
     283              :     /// @brief process modifyVClassDialog_Cancel function
     284              :     void modifyVClassDialog_Cancel(const int overlappedTabs) const;
     285              : 
     286              :     /// @brief process modifyVClassDialog_Reset function
     287              :     void modifyVClassDialog_Reset(const int overlappedTabs) const;
     288              : 
     289              :     /// @brief process modifyVTypeDialogAttribute function
     290              :     void modifyVTypeDialogAttribute() const;
     291              : 
     292              :     /// @brief process createConnection function
     293              :     void createConnection(const std::string& keyModifier) const;
     294              : 
     295              :     /// @brief process createCrossing function
     296              :     void createCrossing() const;
     297              : 
     298              :     /// @brief process modifyCrossingDefaultValue function
     299              :     void modifyCrossingDefaultValue() const;
     300              : 
     301              :     /// @brief process modifyCrossingDefaultBoolValue function
     302              :     void modifyCrossingDefaultBoolValue() const;
     303              : 
     304              :     /// @brief process crossingClearEdges function
     305              :     void crossingClearEdges() const;
     306              : 
     307              :     /// @brief process crossingInvertEdges function
     308              :     void crossingInvertEdges() const;
     309              : 
     310              :     /// @brief process createConnectionEdit function
     311              :     void saveConnectionEdit() const;
     312              : 
     313              :     /// @brief process fixCrossings function
     314              :     void fixCrossings();
     315              : 
     316              :     /// @brief process fixStoppingPlace function
     317              :     void fixStoppingPlace();
     318              : 
     319              :     /// @brief process fixRoutes function
     320              :     void fixRoute();
     321              : 
     322              :     /// @brief process createTLS function
     323              :     void createTLS(const int overlappedTabs) const;
     324              : 
     325              :     /// @brief process Copy TLS function
     326              :     void copyTLS() const;
     327              : 
     328              :     /// @brief process join TLS function
     329              :     void joinTSL() const;
     330              : 
     331              :     /// @brief process disJoin TLS function
     332              :     void disJoinTLS() const;
     333              : 
     334              :     /// @brief process delete TLS function
     335              :     void deleteTLS() const;
     336              : 
     337              :     /// @brief process modifyTLSTable function
     338              :     void modifyTLSTable();
     339              : 
     340              :     /// @brief process resetSingleTLSPhases function
     341              :     void resetSingleTLSPhases() const;
     342              : 
     343              :     /// @brief process resetAllTLSPhases function
     344              :     void resetAllTLSPhases() const;
     345              : 
     346              :     /// @brief process pressTLSPhaseButton function
     347              :     void pressTLSPhaseButton() const;
     348              : 
     349              :     /// @brief process addPhase function
     350              :     void addPhase(const std::string& type);
     351              : 
     352              :     /// @brief process pressTLSButton function
     353              :     void pressTLSButton(const std::string& type);
     354              : 
     355              :     /// @brief process checkParameters function
     356              :     void checkParameters(const int overlappedTabs) const;
     357              : 
     358              :     /// @brief process checkDoubleParameters function
     359              :     void checkDoubleParameters(const int overlappedTabs) const;
     360              : 
     361              :     /// @brief process changeEditMode function
     362              :     void changeEditMode();
     363              : 
     364              :     /// @brief process save existent function
     365              :     void saveExistentFile();
     366              : 
     367              :     /// @brief process check undo-redo function
     368              :     void checkUndoRedo() const;
     369              : 
     370              :     /// @brief process delete function
     371              :     void deleteFunction() const;
     372              : 
     373              :     /// @brief process selection function
     374              :     void selection() const;
     375              : 
     376              :     /// @brief process selectNetworkItems function
     377              :     void selectNetworkItems() const;
     378              : 
     379              :     /// @brief process lockSelection function
     380              :     void lockSelection() const;
     381              : 
     382              :     /// @brief process selectionRectangle function
     383              :     void selectionRectangle() const;
     384              : 
     385              :     /// @brief process createDataSet function
     386              :     void createDataSet() const;
     387              : 
     388              :     /// @brief process createDataInterval function
     389              :     void createDataInterval() const;
     390              : 
     391              :     /// @brief process openAboutDialog function
     392              :     void openAboutDialog();
     393              : 
     394              :     /// @brief process load file function
     395              :     void loadFile();
     396              : 
     397              :     /// @brief process save new file function
     398              :     void saveNewFile();
     399              : 
     400              :     /// @brief process save file as function
     401              :     void saveFileAs();
     402              : 
     403              :     /// @brief process save unified file as function
     404              :     void saveUnifiedFileAs();
     405              : 
     406              :     /// @brief process reload file function
     407              :     void reloadFile();
     408              : 
     409              :     /// @brief process select edge type function
     410              :     void selectEdgeType();
     411              : 
     412              :     /// @brief process create new edge type function
     413              :     void createNewEdgeType();
     414              : 
     415              :     /// @brief process overwriting accept function
     416              :     void overwritingAccept();
     417              : 
     418              :     /// @brief process overwriting cancel function
     419              :     void overwritingCancel();
     420              : 
     421              :     /// @brief process overwriting abort function
     422              :     void overwritingAbort();
     423              : 
     424              :     /// @brief process overwriting apply to all function
     425              :     void overwritingApplyToAll();
     426              : 
     427              :     /// @brief process undo function
     428              :     void undo() const;
     429              : 
     430              :     /// @brief process redo function
     431              :     void redo() const;
     432              : 
     433              :     /// @brief process changeSupermode function
     434              :     void changeSupermode();
     435              : 
     436              :     /// @brief process changeMode function
     437              :     void changeMode();
     438              : 
     439              :     /// @brief process changeElement function
     440              :     void changeElement() const;
     441              : 
     442              :     /// @bief process changePlan function
     443              :     void changePlan() const;
     444              : 
     445              :     /// @brief process computeJunctions function
     446              :     void computeJunctions();
     447              : 
     448              :     /// @brief process computeJunctionsVolatileOptions function
     449              :     void computeJunctionsVolatileOptions();
     450              : 
     451              :     /// @brief process joinJunctions function
     452              :     void joinJunctions();
     453              : 
     454              :     /// @brief process selectChild function
     455              :     void selectAdditionalChild();
     456              : 
     457              :     /// @brief process createRectangledShape function
     458              :     void createRectangledShape();
     459              : 
     460              :     /// @brief process createSquaredShape function
     461              :     void createSquaredShape();
     462              : 
     463              :     /// @brief process createLineShape function
     464              :     void createLineShape();
     465              : 
     466              :     /// @brief process createMeanData function
     467              :     void createMeanData();
     468              : 
     469              :     /// @brief process deleteMeanData function
     470              :     void deleteMeanData();
     471              : 
     472              :     /// @brief process copyMeanData function
     473              :     void copyMeanData();
     474              : 
     475              :     /// @brief process quit function
     476              :     void quit();
     477              : 
     478              :     /// @brief check int argument
     479              :     bool checkIntArgument(const std::string& argument) const;
     480              : 
     481              :     /// @brief get int argument
     482              :     int getIntArgument(const std::string& argument) const;
     483              : 
     484              :     /// @brief check bool argument
     485              :     bool checkBoolArgument(const std::string& argument) const;
     486              : 
     487              :     /// @brief get bool argument
     488              :     bool getBoolArgument(const std::string& argument) const;
     489              : 
     490              :     /// @brief check string argument
     491              :     bool checkStringArgument(const std::string& argument) const;
     492              : 
     493              :     /// @brief get string argument
     494              :     std::string getStringArgument(const std::string& argument) const;
     495              : 
     496              :     /// @brief strip spaces
     497              :     std::string stripSpaces(const std::string& str) const;
     498              : 
     499              :     /// @brief write error
     500              :     void writeError(const std::string& function, const int overlapping,
     501              :                     const std::string& expected) const;
     502              : 
     503              :     /// @brief create shape
     504              :     void createShape(const InternalTest::ViewPosition& viewPosition,
     505              :                      const int sizeX, const int sizeY, const bool close,
     506              :                      const bool line) const;
     507              : 
     508              :     /// @name modify attribute functions
     509              :     /// @{
     510              : 
     511              :     /// @brief modify attribute
     512              :     void modifyStringAttribute(Category category, const int tabs, const int overlappedTabs, const std::string& value) const;
     513              : 
     514              :     /// @brief modify bool attribute
     515              :     void modifyBoolAttribute(Category category, const int tabs, const int overlappedTabs) const;
     516              : 
     517              :     /// @}
     518              : 
     519              :     /// @name undo-redo functions
     520              :     /// @{
     521              : 
     522              :     /// @brief process check undo function
     523              :     void buildUndo(const int number) const;
     524              : 
     525              :     /// @brief process check redo function
     526              :     void buildRedo(const int number) const;
     527              : 
     528              :     /// @}
     529              : 
     530              :     /// @name key functions
     531              :     /// @{
     532              : 
     533              :     /// @brief translate key
     534              :     std::pair<FXint, FXString> translateKey(const std::string& key) const;
     535              : 
     536              :     /// @brief build key press event
     537              :     FXEvent* buildKeyPressEvent(const std::string& key) const;
     538              : 
     539              :     /// @brief build key release event
     540              :     FXEvent* buildKeyReleaseEvent(const std::string& key) const;
     541              : 
     542              :     /// @brief build a key press and key release (used for tabs, spaces, enter, etc)
     543              :     void buildPressKeyEvent(Category category, const std::string& key, const bool updateView) const;
     544              : 
     545              :     /// @brief build a two key press and key release (used for tabs, spaces, enter, etc)
     546              :     void buildTwoPressKeyEvent(Category category, const std::string& keyA, const std::string& keyB, const bool updateView) const;
     547              : 
     548              :     /// @}
     549              : 
     550              :     /// @name mouse functions
     551              :     /// @{
     552              : 
     553              :     /// @brief build mouse click event
     554              :     void buildMouseClick(const InternalTest::ViewPosition& viewPosition,
     555              :                          const int offsetX, const int offsetY,
     556              :                          const std::string& button, const std::string& keyModifier) const;
     557              : 
     558              :     /// @brief build mouse dragdrop
     559              :     void buildMouseDragDrop(const InternalTest::ViewPosition& viewStartPosition,
     560              :                             const int offsetStartX, const int offsetStartY,
     561              :                             const InternalTest::ViewPosition& viewEndPosition,
     562              :                             const int offsetEndX, const int offsetEndY,
     563              :                             const std::string& keyModifier) const;
     564              : 
     565              :     /// @brief build mouse move event
     566              :     FXEvent* buildMouseMoveEvent(const InternalTest::ViewPosition& viewPosition,
     567              :                                  const int offsetX, const int offsetY, const int clickedButton,
     568              :                                  const std::string& keyModifier, const int numberOfClicks) const;
     569              : 
     570              :     /// @brief build mouse left click press event
     571              :     FXEvent* buildMouseClickEvent(FXSelType type, const InternalTest::ViewPosition& viewPosition,
     572              :                                   const int offsetX, const int offsetY, const std::string& keyModifier,
     573              :                                   const int numberOfClicks) const;
     574              : 
     575              :     /// @brief write click info
     576              :     void writeClickInfo(const InternalTest::ViewPosition& viewPosition,
     577              :                         const int offsetX, const int offsetY,
     578              :                         const std::string modifier) const;
     579              : 
     580              :     /// @}
     581              : 
     582              :     /// @brief invalidate default constructor
     583              :     InternalTestStep() = delete;
     584              : 
     585              :     /// @brief Invalidated copy constructor.
     586              :     InternalTestStep(const InternalTestStep&) = delete;
     587              : 
     588              :     /// @brief Invalidated assignment operator
     589              :     InternalTestStep& operator=(const InternalTestStep&) = delete;
     590              : };
        

Generated by: LCOV version 2.0-1