EditorAutomationTestDialog.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <QAbstractItemModel>
  10. #include <QDialog>
  11. #include <QIcon>
  12. #include <QItemSelection>
  13. #include <QLabel>
  14. #include <QTableView>
  15. #include <AzCore/Component/TickBus.h>
  16. #include <AzCore/Memory/SystemAllocator.h>
  17. #include <AzCore/std/containers/vector.h>
  18. #include <ScriptCanvasDeveloperEditor/EditorAutomation/EditorAutomationTest.h>
  19. #include <GraphCanvas/Editor/EditorTypes.h>
  20. class QWindow;
  21. namespace ScriptCanvas::Developer
  22. {
  23. class EditorAutomationTestDialogRequests
  24. : public AZ::EBusTraits
  25. {
  26. public:
  27. static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
  28. static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
  29. using BusIdType = GraphCanvas::EditorId;
  30. virtual void ShowTestDialog() = 0;
  31. };
  32. using EditorAutomationTestDialogRequestBus = AZ::EBus<EditorAutomationTestDialogRequests>;
  33. class QtActionTest;
  34. class TestListModel
  35. : public QAbstractItemModel
  36. {
  37. Q_OBJECT
  38. public:
  39. AZ_CLASS_ALLOCATOR(TestListModel, AZ::SystemAllocator);
  40. enum ColumnIndex
  41. {
  42. IndexForce = -1,
  43. TestName,
  44. Count
  45. };
  46. TestListModel();
  47. ~TestListModel() override;
  48. // QAbstractItemModel
  49. QModelIndex index(int row, int column, const QModelIndex& parent) const override;
  50. QModelIndex parent(const QModelIndex& index = QModelIndex()) const override;
  51. int columnCount(const QModelIndex& parent = QModelIndex()) const override;
  52. int rowCount(const QModelIndex& parent = QModelIndex()) const override;
  53. QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
  54. QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
  55. ////
  56. void AddTest(EditorAutomationTest* actionTest);
  57. EditorAutomationTest* FindTestForIndex(const QModelIndex& index) const;
  58. EditorAutomationTest* FindTestForRow(int row) const;
  59. int FindRowForTest(EditorAutomationTest* actionTest);
  60. void UpdateTestDisplay(EditorAutomationTest* actionTest);
  61. private:
  62. AZStd::vector< EditorAutomationTest* > m_actionTests;
  63. QIcon m_runningIcon;
  64. QIcon m_passedIcon;
  65. QIcon m_failedIcon;
  66. };
  67. class EditorAutomationTestDialog
  68. : public QDialog
  69. , public AZ::SystemTickBus::Handler
  70. , public EditorAutomationTestDialogRequestBus::Handler
  71. {
  72. Q_OBJECT
  73. public:
  74. EditorAutomationTestDialog(QMainWindow* mainWindow);
  75. ~EditorAutomationTestDialog() override;
  76. void RunAllTests();
  77. void RunTest(QModelIndex index);
  78. // SystemTickBus
  79. void OnSystemTick() override;
  80. ////
  81. // EditorAutomationTestDialogRequestBus::Handler
  82. void ShowTestDialog() override;
  83. ////
  84. void OnSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
  85. private:
  86. void StartNewTestRun();
  87. void FinishTestRun();
  88. void DisplayErrorsForTest(EditorAutomationTest* actionTest);
  89. void UpdateRunLabel();
  90. int m_runCount = 0;
  91. int m_successCount = 0;
  92. AZStd::chrono::steady_clock::time_point m_startTime;
  93. EditorAutomationTest* m_activeTest = nullptr;
  94. AZStd::unordered_set< EditorAutomationTest* > m_testQueue;
  95. TestListModel* m_testListModel = nullptr;
  96. QTableView* m_tableView = nullptr;
  97. QLabel* m_errorTestLabel = nullptr;
  98. QLabel* m_runLabel = nullptr;
  99. QMainWindow* m_scriptCanvasWindow = nullptr;
  100. };
  101. }