Requirements
GHERKIN: Several requirements for the Gherkin-based style of the ViMoTest
WIDGET: The ViMoTest DSL shall provide several common GUI widgets like buttons, check-boxes, tables etc.
CMD: The ViMoTest DSL shall provide several common GUI commands.
CONTEXT: Features for the (data) context of ViewModel-based tests
ASSERT: Features for the assertion of ViewModel-based tests
DSL: Technical Features for the ViMoTest DSL itself
CHECK: Static checks for ViMoTest models
PL: Several programming languages shall be supported, to have a flexible approach.
GEN: Requirements related to the generation and extensibility of the MPS-based DSL
NONF: Describes non-functional/quality requirements for the ViMoTest solution
1 Gherkin
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| GHERKIN-001 | Support scenarios with Given-When-Then Gherkin syntax | As a test developer, I want to use the familiar Given-When-Then structure of the Gherkin language to write scenarios | Gherkin is well established and provides a suitable style for writing behavior-oriented tests | ![]() |
Base feature of Gherking, e.g. scenario descriptions with Given-When-Then | Done |
| GHERKIN-002 | Integrated BDD | As a test developer, I want to mix the Given-When-Then parts directly with the test case elements | The but keyword sometimes reads more natural in scenarios | ![]() |
E.g. GIVEN WHEN LoadView() is called THEN assert |
Done |
| GHERKIN-003 | Support BUT-Keyword | As a test developer, I want to use the But-keyword from Gherkin | The but keyword sometimes reads more natural in scenarios | ![]() |
To Do | |
| GHERKIN-004 | Support scenario-outlines | As a test developer, I want to provide scenario outlines which gives common context for multiple scenarios | With scenario outlines, test suites might become much simpler when common context is required | ![]() |
Done | |
| GHERKIN-010 | Support data lists | As a test developer, I want to provide list data inputs to describe multiple cases at once | ![]() |
Not data tables, but combinatorical tests | To Do | |
| GHERKIN-011 | Support data tables | As a test developer, I want to provide tabular data inputs to describe multiple cases at once | ![]() |
Done |
2 GUI Widgets
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| WIDGET-001 | Support Buttons | As a view developer, I need to support buttons | Buttons are needed in mostly any UI | ![]() |
Properties: Visibility, Enabled, Text | Done |
| WIDGET-002 | Support Check-boxes | As a view developer, I need to support check-boxes | ![]() |
Properties: Visibility, Enabled, Text, Checked-State (tri-state?) | Done | |
| WIDGET-003 | Support Radio Buttons | As a view developer, I need to support radio buttons | ![]() |
Properties: Visibility, Enabled, Selected | Done | |
| WIDGET-004 | Support Labels | As a view developer, I need to support labels | ![]() |
Properties: Visibility, Enabled, Text | Done | |
| WIDGET-005 | Support Image Views | As a view developer, I need to support icons/images | ![]() |
Properties: Visibility, Image | Done | |
| WIDGET-006 | Support Combo-boxes | As a view developer, I need to support comboboxes | ![]() |
Properties: Visibility, Selected Text, Text Values | Done | |
| WIDGET-010 | Support List Views | As a view developer, I need to support list views | ![]() |
Properties: Visibility, Enabled, List Items | Done | |
| WIDGET-011 | Support Table Views | As a view developer, I need to support table views | ![]() |
Properties: Visibility, Enabled, Table Items | Done | |
| WIDGET-012 | Support Tree Views | As a view developer, I need to support tree views | ![]() |
Properties: Visibility, Enabled, hierarchical TreeView Items | Done | |
| WIDGET-013 | Support Progress Bars | As a view developer, I need to support progress bars | ![]() |
Properties: Visibility, Progress | To Do | |
| WIDGET-020 | Support Tooltips | As a view developer, I need support for tooltips | Tooltips are often used in addition to widget’s primary contents | ![]() |
Support for Labels, Buttons, Images | Done |
| WIDGET-021 | Multiline Text | As a view developer, I need support for multi-line text | Multiline text is important for memo-edits or multi-line Tooltips | ![]() |
Support for Labels, Textboxes, Tooltips | Done |
| WIDGET-030 | Horizontal Layout | As a view developer, I want to have a visual layout container to visualize view components horizontally next to each other | better visualize intended layout | ![]() |
e.g. for a button bar | To Do |
| WIDGET-050 | Custom Component Fields | As a view developer, I want to be able to define (unsupported) custom fields for any UI component, including nested elements like TableRows | flexibility | ![]() |
e.g. for an additional boolean in a table row, if it’s text shall be highlighted in bold | To Do |
| WIDGET-051 | Color Literal Support | As a view developer, I want to be able to have support for coloring by color codes/literals of text-based components | ![]() |
specific foreground (done), background, selection colors | Partially Done | |
| WIDGET-052 | Color Symbol Support | As a view developer, I want to be able to have support for logical coloring enumerations for text-based components | ![]() |
specific foreground, background, selection colors | To Do |
3 Commands
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| CMD-001 | Support Click Command | As a view developer, I need support for click commands | Actions for buttons | ![]() |
Done | |
| CMD-002 | Support Fill Text Command | As a view developer, I need support for fill text commands | Actions for textboxes | ![]() |
Done | |
| CMD-003 | Support Check Command | As a view developer, I need support for check commands | Actions for checkboxes | ![]() |
Done | |
| CMD-004 | Support Select Entry Command | As a view developer, I need support for select entry commands | Actions for comboboxes, radiobuttons | ![]() |
Done | |
| CMD-005 | Support Select Row Command | As a view developer, I need support for select row commands | Actions for table, list, tree views | ![]() |
Done | |
| CMD-010 | Support Load ViewModel Command | As a view developer, I need support for loading the viewmodel with optional context parameters | Actions for loading the ViewModel, optionally pass context (e.g., qualified path of the to be shown entity) | ![]() |
Done | |
| CMD-011 | Support Custom Commands | As a view developer, I need support for custom commands with flexible parameters | Custom actions | ![]() |
Done | |
| CMD-020 | Support Row-based Command | As a view developer, I need support for calling commands in rows | Actions for nested cell widgets, e.g., labels in table views | ![]() |
Done |
4 Context Features
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| CONTEXT-001 | Allow reuse of context | As a test developer, I want to reuse context definitions of other test scenarios | Reduce redundancy | ![]() |
Done | |
| CONTEXT-002 | Allow reuse of context sub-parts | As a test developer, I want to reuse sub-parts of context definitions of other test scenarios | Reduce redundancy and compose smaller context parts of other test scenarios | ![]() |
E.g. by using the MPS’ editor component | To Do |
| CONTEXT-004 | Provide extensible Context Data mechanism (custom context DSL) | As a language engineer, I want to extend the possible context types by custom DSLs | For some domains, specific sub-DSLs can significantly enhance the context definitions | ![]() |
E.g. by using MPS’ generator, overridden switch rules, or weaving generator rules | Done |
5 Assertion Features
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| ASSERT-001 | Support partial assertions (e.g. 1 Column of a given expected table) | As a test developer, I want to couple my tests only on single aspects | We want that tests fail only for one aspect if possible, (e.g., only for one specific column). But, to allow a good readability of a testcase, sometimes it helps to display more information (e.g. a full table). | ![]() |
This is possible since we use a projectional editor | Done |
| ASSERT-020 | Support verifying Messaging | As a test developer, I want to verify that the ViewModel fired messages on a Message/Event Bus (Pub/Sub) | View Navigation is sometimes integrated via Messaging (Pub/Sub) | ![]() |
To Do |
6 Technical DSL Features
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| DSL-001 | ViewModel shall have a built-in “Updating Flag” | As a view-logic developer I want to be able to temporarily disable data-binding updates | For larger or complex UI updates, sometimes data-binding has to be disabled temporarily | ![]() |
i.e. to avoid that UIs fire events while larger updates of the ViewModel This is only interesting if the ViewModel is generated completely for development |
Done |
| DSL-002 | Provide Command abstraction for view inputs | As a view-logic developer, I want to add UI commands and bind them with UI frameworks directly | WPF provides UI commands, with an Execute() and a CanExecute() method. Command-bindings simplify the usage of such view inputs | ![]() |
Examples: WPF Command Bindings | To Do |
| DSL-003 | Provide virtual (domain-oriented) properties for ViewModel fields | As a view-logic developer, I want to have the possibility to define more UI-component independent properties, which are the source for UI-component-specific properties | Many people implement MVVM explicitly without naming/orienting ViewModel-fields “UI-component-specific”, but more domain-oriented. E.g. a textbox’s text-property for a person-name can be named “personName” (domain-oriented) or “personNameTextBoxText” (UI-component-specific). The latter is more like ViMoTest shall be designed, while the former one is more the “virtual source” for it. Also, often one “virtual property” might be the source for multiple “UI-component-specific” fields. | ![]() |
Important to be aligned to the MVVM practice which is often done. This is can be solved by “name-bindings”: annotations to the ViewModel/Widget/Feature definitions. | Done |
| DSL-004 | Support generation of two-way binding | As a view-logic developer, I want to use two-way binding of my target UI framework | ![]() |
This is only interesting if the ViewModel is generated completely for development | To Do |
7 Static Checks
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| CHECK-001 | Check Naming Conventions | As a view/test developer, I want to specify consistent names | ![]() |
e.g. consistently set “Btn” suffix/prefix or not | To Do |
8 Programming Languages
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| PL-001 | Support Java | As a Java Developer, I want to generate Java-based ViewModels | Support Java-based UI Frameworks | ![]() |
For JavaFX in first place | Done |
| PL-002 | Support C++ | As a C++ Developer, I want to generate C++-based ViewModels | Support C++ based UI Frameworks or native C++ core code | ![]() |
Important for industrial case studies of ViMoTest | Done |
| PL-003 | Support C# | As a C# Developer, I want to generate C#-based ViewModels | Support C#-based UI Frameworks | ![]() |
For WPF in first place | To Do |
| PL-004 | Support Typescript | As a Web-Developer I want to generate Typescript-based ViewModels | Support Web-UIs | ![]() |
More important in future | To Do |
9 Generation
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| GEN-001 | Replacable ViewModel field in test suites | As a language programmer, I want to build custom test suite DSL extensions with flexible ViewModel fields | The ViewModel field in a Test suite shall be replacable, e.g. for a DSL extension which defines a special Test-Suite baseclass | ![]() |
See Hamster-Simulator example https://github.com/vimotest/viewmodel-testlang-prototype/tree/master/languages/HamsterViewLanguage | To Do |
| GEN-002 | Controllable output names | As a test developer, I want to have optional control over generated class/field/package names | For interoperability to existing solutions, the ViMoTest approach can be build up-on existing classes | ![]() |
Similar solvable as DSL-003 by name-bindings | Done |
| GEN-003 | Copy Generated Sources | As a viewlogic/test developer, I want to control where generated sources of ViMoTest are copied after transformation. | Reduce the need to copy generated files manually. | ![]() |
To Do |
10 Non-functional/Quality requirements
| ID | Requirement | User Story | Reason | Importance | Notes | Status |
|---|---|---|---|---|---|---|
| NONF-001 | The ViMoTest DSL shall be easy to learn | As a test developer, I want to quickly learn the ViMoTest DSL | We want that the DSL is easy to use, so that not only MPS-experts can use it | ![]() |
We will evaluate this by case studies | To Do |


