1
-
1
+ using System ;
2
+ using System . Collections . Generic ;
3
+ using System . Globalization ;
4
+ using System . Linq ;
5
+ using System . Threading . Tasks ;
2
6
using Microsoft . Playwright ;
3
7
using UtTestsExperimentalConsoleAppication . PageObjects ;
8
+ using UtTestsExperimentalConsoleAppication . PageObjects . Panes . EventLog ;
9
+ using UtTestsExperimentalConsoleAppication . Utils ;
10
+ using UtTestsExperimentalConsoleAppication . Tests ;
4
11
5
12
public static class NoirSpaceShipTests
6
13
{
@@ -10,7 +17,11 @@ public static class NoirSpaceShipTests
10
17
public static async Task EditorLoadedMainNrFile ( IPage page )
11
18
{
12
19
var layout = new LayoutPage ( page ) ;
20
+
21
+ await layout . WaitForAllComponentsLoadedAsync ( ) ;
22
+
13
23
var editors = await layout . EditorTabsAsync ( ) ;
24
+
14
25
if ( ! editors . Any ( e => e . TabButtonText == "src/main.nr" ) )
15
26
{
16
27
throw new Exception ( "Expected editor tab 'src/main.nr' not found." ) ;
@@ -20,18 +31,59 @@ public static async Task EditorLoadedMainNrFile(IPage page)
20
31
public static async Task JumpToAllEvents ( IPage page )
21
32
{
22
33
var layout = new LayoutPage ( page ) ;
34
+ await layout . WaitForAllComponentsLoadedAsync ( ) ;
23
35
24
36
var eventLogs = await layout . EventLogTabsAsync ( ) ;
25
37
foreach ( var tab in eventLogs )
26
38
{
27
39
if ( ! await tab . IsVisibleAsync ( ) ) { continue ; }
28
40
29
- var events = await tab . EventElementsAsync ( ) ;
30
- foreach ( var e in events )
41
+ var events = ( await tab . EventElementsAsync ( ) ) . ToList ( ) ;
42
+ if ( ! await EventsInExpectedState ( events , - 1 ) )
43
+ {
44
+ throw new FailedTestException ( "Events were expected to be greyed out initially." ) ;
45
+ }
46
+
47
+ for ( int i = 0 ; i < events . Count ; i ++ )
31
48
{
32
- // jump to an event by clicking on it
33
- await e . _root . ClickAsync ( ) ;
49
+ await events [ i ] . _root . ClickAsync ( ) ;
50
+ await RetryHelpers . RetryAsync ( async ( ) =>
51
+ ( await events [ i ] . _root . GetAttributeAsync ( "class" ) ) ? . Contains ( "active" ) == true ) ;
52
+
53
+ if ( ! await EventsInExpectedState ( events , i ) )
54
+ {
55
+ throw new FailedTestException ( $ "Event state mismatch after jumping to index { i } .") ;
56
+ }
34
57
}
35
58
}
36
59
}
60
+
61
+ private static async Task < bool > EventsInExpectedState ( IReadOnlyList < EventRow > events , int currentIndex )
62
+ {
63
+ for ( int i = 0 ; i < events . Count ; i ++ )
64
+ {
65
+ var classes = await events [ i ] . _root . GetAttributeAsync ( "class" ) ?? string . Empty ;
66
+ var opacityStr = await events [ i ] . _root . EvaluateAsync < string > ( "el => window.getComputedStyle(el).opacity" ) ;
67
+ var opacity = double . Parse ( opacityStr , CultureInfo . InvariantCulture ) ;
68
+
69
+ if ( currentIndex < 0 )
70
+ {
71
+ if ( ! classes . Contains ( "future" ) || opacity >= 1 ) return false ;
72
+ }
73
+ else if ( i < currentIndex )
74
+ {
75
+ if ( ! classes . Contains ( "past" ) || opacity < 1 ) return false ;
76
+ }
77
+ else if ( i == currentIndex )
78
+ {
79
+ if ( ! classes . Contains ( "active" ) || opacity < 1 ) return false ;
80
+ }
81
+ else
82
+ {
83
+ if ( ! classes . Contains ( "future" ) || opacity >= 1 ) return false ;
84
+ }
85
+ }
86
+
87
+ return true ;
88
+ }
37
89
}
0 commit comments