1
+ const { getPercentage, getPrettyDuration } = require ( '../helpers/helper' )
2
+
3
+ class BasePlatform {
4
+
5
+ /**
6
+ * @param {string|number } text
7
+ */
8
+ bold ( text ) {
9
+ throw new Error ( 'Not Implemented' ) ;
10
+ }
11
+
12
+ break ( ) {
13
+ throw new Error ( 'Not Implemented' ) ;
14
+ }
15
+
16
+ /**
17
+ *
18
+ * @param {import('..').Target } target
19
+ * @param {import('test-results-parser').ITestSuite } suite
20
+ */
21
+ getSuiteSummaryText ( target , suite ) {
22
+ const suite_title = this . getSuiteTitle ( suite ) ;
23
+ const suite_results_text = this . #getSuiteResultsText( suite ) ;
24
+ const duration_text = this . #getSuiteDurationText( target , suite ) ;
25
+
26
+ const texts = [
27
+ this . bold ( suite_title ) ,
28
+ this . break ( ) ,
29
+ this . break ( ) ,
30
+ suite_results_text ,
31
+ this . break ( ) ,
32
+ duration_text ,
33
+ ] ;
34
+
35
+ const metadata_text = this . getSuiteMetaDataText ( suite ) ;
36
+
37
+ if ( metadata_text ) {
38
+ texts . push ( this . break ( ) ) ;
39
+ texts . push ( this . break ( ) ) ;
40
+ texts . push ( metadata_text ) ;
41
+ }
42
+
43
+ return texts . join ( '' ) ;
44
+ }
45
+
46
+ /**
47
+ *
48
+ * @param {import('test-results-parser').ITestSuite } suite
49
+ * @returns {string }
50
+ */
51
+ getSuiteTitle ( suite ) {
52
+ const emoji = suite . status === 'PASS' ? '✅' : suite . total === suite . skipped ? '⏭️' : '❌' ;
53
+ return `${ emoji } ${ suite . name } ` ;
54
+ }
55
+
56
+ /**
57
+ *
58
+ * @param {import('test-results-parser').ITestSuite } suite
59
+ * @returns {string }
60
+ */
61
+ #getSuiteResultsText( suite ) {
62
+ const suite_results = this . getSuiteResults ( suite ) ;
63
+ return `${ this . bold ( 'Results' ) } : ${ suite_results } ` ;
64
+ }
65
+
66
+ /**
67
+ *
68
+ * @param {import('test-results-parser').ITestSuite } suite
69
+ * @returns {string }
70
+ */
71
+ getSuiteResults ( suite ) {
72
+ return `${ suite . passed } / ${ suite . total } Passed (${ getPercentage ( suite . passed , suite . total ) } %)` ;
73
+ }
74
+
75
+ /**
76
+ *
77
+ * @param {import('..').Target } target
78
+ * @param {import('test-results-parser').ITestSuite } suite
79
+ */
80
+ #getSuiteDurationText( target , suite ) {
81
+ const duration = this . getSuiteDuration ( target , suite ) ;
82
+ return `${ this . bold ( 'Duration' ) } : ${ duration } `
83
+ }
84
+
85
+ /**
86
+ *
87
+ * @param {import('..').Target } target
88
+ * @param {import('test-results-parser').ITestSuite } suite
89
+ */
90
+ getSuiteDuration ( target , suite ) {
91
+ return getPrettyDuration ( suite . duration , target . inputs . duration ) ;
92
+ }
93
+
94
+ /**
95
+ *
96
+ * @param {import('test-results-parser').ITestSuite } suite
97
+ * @returns {string }
98
+ */
99
+ getSuiteMetaDataText ( suite ) {
100
+ if ( ! suite || ! suite . metadata ) {
101
+ return ;
102
+ }
103
+
104
+ const texts = [ ] ;
105
+
106
+ if ( suite . metadata . platform && suite . metadata . platform . name && suite . metadata . platform . version ) {
107
+ texts . push ( `${ suite . metadata . platform . name } ${ suite . metadata . platform . version } ` )
108
+ }
109
+
110
+ if ( suite . metadata . browser && suite . metadata . browser . name && suite . metadata . browser . version ) {
111
+ texts . push ( `${ suite . metadata . browser . name } ${ suite . metadata . browser . version } ` )
112
+ }
113
+
114
+ return texts . join ( ' • ' ) ;
115
+ }
116
+ }
117
+
118
+ module . exports = { BasePlatform }
0 commit comments