1
1
package com .saucelabs .saucebindings .junit4 ;
2
2
3
+ import com .saucelabs .saucebindings .CITools ;
3
4
import com .saucelabs .saucebindings .DataCenter ;
4
5
import com .saucelabs .saucebindings .SauceSession ;
5
6
import com .saucelabs .saucebindings .options .SauceOptions ;
7
+
8
+ import java .io .IOException ;
9
+ import java .io .InputStream ;
10
+ import java .lang .annotation .Annotation ;
11
+ import java .util .ArrayList ;
6
12
import java .util .Arrays ;
7
13
import java .util .HashMap ;
14
+ import java .util .List ;
8
15
import java .util .Map ;
9
16
import java .util .Optional ;
17
+ import java .util .Properties ;
10
18
import java .util .logging .Logger ;
11
19
import lombok .Getter ;
20
+ import org .junit .experimental .categories .Category ;
12
21
import org .junit .rules .TestWatcher ;
13
22
import org .junit .runner .Description ;
14
23
import org .openqa .selenium .Capabilities ;
@@ -22,6 +31,7 @@ public class SauceBindingsWatcher extends TestWatcher {
22
31
private final DataCenter dataCenter ;
23
32
private SauceSession session ;
24
33
private WebDriver driver ;
34
+ private static final String buildName = CITools .getBuildName () + ": " + CITools .getBuildNumber ();
25
35
26
36
public SauceBindingsWatcher () {
27
37
this (new SauceOptions (), DataCenter .US_WEST );
@@ -61,15 +71,48 @@ public SauceBindingsWatcher(DataCenter dataCenter) {
61
71
62
72
@ Override
63
73
protected void starting (Description description ) {
64
- if (sauceOptions .sauce ().getName () == null ) {
65
- sauceOptions .sauce ().setName (description .getMethodName ());
66
- }
74
+ updateOptions (description );
67
75
68
76
session = new SauceSession (sauceOptions );
69
77
session .setDataCenter (dataCenter );
70
78
driver = session .start ();
71
79
}
72
80
81
+ private void updateOptions (Description description ) {
82
+ String className = description .getClassName ();
83
+ String simpleClassName = className .substring (className .lastIndexOf ("." ) + 1 );
84
+ sauceOptions .sauce ().setName (simpleClassName + ": " + description .getMethodName ());
85
+ sauceOptions .sauce ().setBuild (buildName );
86
+
87
+ Properties prop = new Properties ();
88
+ try (InputStream input = getClass ().getResourceAsStream ("/app.properties" )) {
89
+ prop .load (input );
90
+ String version = prop .getProperty ("version" , "unknown" );
91
+ sauceOptions .sauce ().getCustomData ().put ("sauce-bindings-junit4" , version );
92
+ } catch (IOException ignored ) {
93
+ sauceOptions .sauce ().getCustomData ().put ("sauce-bindings-junit4" , "unknown" );
94
+ }
95
+
96
+ List <String > tags = sauceOptions .sauce ().getTags ();
97
+
98
+ List <Annotation > annotations = (List <Annotation >) description .getAnnotations ();
99
+ for (Annotation annotation : annotations ) {
100
+ if (annotation instanceof Category ) {
101
+ Category category = (Category ) annotation ;
102
+ for (Class <?> categoryClass : category .value ()) {
103
+ if (tags == null ) {
104
+ tags = new ArrayList <>();
105
+ }
106
+ tags .add (categoryClass .getSimpleName ());
107
+ }
108
+ }
109
+ }
110
+
111
+ if (tags != null ) {
112
+ sauceOptions .sauce ().setTags (tags );
113
+ }
114
+ }
115
+
73
116
@ Override
74
117
protected void succeeded (Description description ) {
75
118
try {
0 commit comments