1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License. See License.txt in the project root for license information.
4
+ *--------------------------------------------------------------------------------------------*/
5
+
6
+ 'use strict' ;
7
+
8
+ import assert = require( 'assert' ) ;
9
+ import URI from 'vs/base/common/uri' ;
10
+ import Severity from 'vs/base/common/severity' ;
11
+ import { IMarker , MarkerStatistics } from 'vs/platform/markers/common/markers' ;
12
+ import { MarkersModel , Marker , Resource } from 'vs/workbench/parts/markers/common/markersModel' ;
13
+
14
+ suite ( 'MarkersModel Test' , ( ) => {
15
+
16
+ test ( 'getFilteredResource return markers grouped by resource' , function ( ) {
17
+ let marker1 = aMarker ( 'res1' ) ;
18
+ let marker2 = aMarker ( 'res2' ) ;
19
+ let marker3 = aMarker ( 'res1' ) ;
20
+ let marker4 = aMarker ( 'res3' ) ;
21
+ let marker5 = aMarker ( 'res4' ) ;
22
+ let marker6 = aMarker ( 'res2' ) ;
23
+ let testObject = new MarkersModel ( [ marker1 , marker2 , marker3 , marker4 , marker5 , marker6 ] ) ;
24
+
25
+ let actuals = testObject . getFilteredResources ( ) ;
26
+
27
+ assert . equal ( 4 , actuals . length ) ;
28
+
29
+ assert . ok ( compareResource ( actuals [ 0 ] , 'res1' ) ) ;
30
+ assert . equal ( 2 , actuals [ 0 ] . markers . length ) ;
31
+ assert . ok ( hasMarker ( actuals [ 0 ] . markers , marker1 ) ) ;
32
+ assert . ok ( hasMarker ( actuals [ 0 ] . markers , marker3 ) ) ;
33
+
34
+ assert . ok ( compareResource ( actuals [ 1 ] , 'res2' ) ) ;
35
+ assert . equal ( 2 , actuals [ 1 ] . markers . length ) ;
36
+ assert . ok ( hasMarker ( actuals [ 1 ] . markers , marker2 ) ) ;
37
+ assert . ok ( hasMarker ( actuals [ 1 ] . markers , marker6 ) ) ;
38
+
39
+ assert . ok ( compareResource ( actuals [ 2 ] , 'res3' ) ) ;
40
+ assert . equal ( 1 , actuals [ 2 ] . markers . length ) ;
41
+ assert . ok ( hasMarker ( actuals [ 2 ] . markers , marker4 ) ) ;
42
+
43
+ assert . ok ( compareResource ( actuals [ 3 ] , 'res4' ) ) ;
44
+ assert . equal ( 1 , actuals [ 3 ] . markers . length ) ;
45
+ assert . ok ( hasMarker ( actuals [ 3 ] . markers , marker5 ) ) ;
46
+ } ) ;
47
+
48
+ test ( 'getFilteredResource return markers grouped by resource sorted by file path' , function ( ) {
49
+ let marker1 = aMarker ( 'a/res1' ) ;
50
+ let marker2 = aMarker ( 'a/res2' ) ;
51
+ let marker3 = aMarker ( 'res4' ) ;
52
+ let marker4 = aMarker ( 'b/res3' ) ;
53
+ let marker5 = aMarker ( 'res4' ) ;
54
+ let marker6 = aMarker ( 'c/res2' ) ;
55
+ let testObject = new MarkersModel ( [ marker1 , marker2 , marker3 , marker4 , marker5 , marker6 ] ) ;
56
+
57
+ let actuals = testObject . getFilteredResources ( ) ;
58
+
59
+ assert . equal ( 5 , actuals . length ) ;
60
+ assert . ok ( compareResource ( actuals [ 0 ] , 'a/res1' ) ) ;
61
+ assert . ok ( compareResource ( actuals [ 1 ] , 'a/res2' ) ) ;
62
+ assert . ok ( compareResource ( actuals [ 2 ] , 'b/res3' ) ) ;
63
+ assert . ok ( compareResource ( actuals [ 3 ] , 'c/res2' ) ) ;
64
+ assert . ok ( compareResource ( actuals [ 4 ] , 'res4' ) ) ;
65
+ } ) ;
66
+
67
+ test ( 'getFilteredResource return resources with no errors at the end' , function ( ) {
68
+ let marker1 = aMarker ( 'a/res1' , Severity . Warning ) ;
69
+ let marker2 = aMarker ( 'a/res2' ) ;
70
+ let marker3 = aMarker ( 'res4' ) ;
71
+ let marker4 = aMarker ( 'b/res3' ) ;
72
+ let marker5 = aMarker ( 'res4' ) ;
73
+ let marker6 = aMarker ( 'c/res2' , Severity . Info ) ;
74
+ let testObject = new MarkersModel ( [ marker1 , marker2 , marker3 , marker4 , marker5 , marker6 ] ) ;
75
+
76
+ let actuals = testObject . getFilteredResources ( ) ;
77
+
78
+ assert . equal ( 5 , actuals . length ) ;
79
+ assert . ok ( compareResource ( actuals [ 0 ] , 'a/res2' ) ) ;
80
+ assert . ok ( compareResource ( actuals [ 1 ] , 'b/res3' ) ) ;
81
+ assert . ok ( compareResource ( actuals [ 2 ] , 'res4' ) ) ;
82
+ assert . ok ( compareResource ( actuals [ 3 ] , 'a/res1' ) ) ;
83
+ assert . ok ( compareResource ( actuals [ 4 ] , 'c/res2' ) ) ;
84
+ } ) ;
85
+
86
+ test ( 'getFilteredResource return markers sorted by line and column' , function ( ) {
87
+ let marker1 = aMarkerWithRange ( 8 , 1 , 9 , 3 ) ;
88
+ let marker2 = aMarkerWithRange ( 3 ) ;
89
+ let marker3 = aMarkerWithRange ( 5 ) ;
90
+ let marker4 = aMarkerWithRange ( 8 , 1 , 8 , 4 , 'ab' ) ;
91
+ let marker5 = aMarkerWithRange ( 10 ) ;
92
+ let marker6 = aMarkerWithRange ( 8 , 1 , 8 , 4 , 'ba' ) ;
93
+ let marker7 = aMarkerWithRange ( 4 ) ;
94
+ let marker8 = aMarkerWithRange ( 8 , 2 , 8 , 4 ) ;
95
+ let testObject = new MarkersModel ( [ marker1 , marker2 , marker3 , marker4 , marker5 , marker6 , marker7 , marker8 ] ) ;
96
+
97
+ let actuals = testObject . getFilteredResources ( ) ;
98
+
99
+ assert . equal ( 8 , actuals [ 0 ] . markers . length ) ;
100
+ assert . equal ( actuals [ 0 ] . markers [ 0 ] . marker , marker2 ) ;
101
+ assert . equal ( actuals [ 0 ] . markers [ 1 ] . marker , marker7 ) ;
102
+ assert . equal ( actuals [ 0 ] . markers [ 2 ] . marker , marker3 ) ;
103
+
104
+ assert . equal ( actuals [ 0 ] . markers [ 3 ] . marker , marker4 ) ;
105
+ assert . equal ( actuals [ 0 ] . markers [ 4 ] . marker , marker6 ) ;
106
+ assert . equal ( actuals [ 0 ] . markers [ 5 ] . marker , marker1 ) ;
107
+ assert . equal ( actuals [ 0 ] . markers [ 6 ] . marker , marker8 ) ;
108
+
109
+ assert . equal ( actuals [ 0 ] . markers [ 7 ] . marker , marker5 ) ;
110
+ } ) ;
111
+
112
+ function hasResource ( resources :Resource [ ] , resource :string ) :boolean {
113
+ return resources . filter ( ( r ) :boolean => {
114
+ return r . uri . toString ( ) === URI . file ( resource ) . toString ( ) ;
115
+ } ) . length === 1 ;
116
+ }
117
+
118
+ function hasMarker ( markers :Marker [ ] , marker :IMarker ) :boolean {
119
+ return markers . filter ( ( m ) :boolean => {
120
+ return m . marker === marker ;
121
+ } ) . length === 1 ;
122
+ }
123
+
124
+ function compareResource ( a :Resource , b :string ) :boolean {
125
+ return a . uri . toString ( ) === URI . file ( b ) . toString ( ) ;
126
+ }
127
+
128
+ function aMarkerWithRange ( startLineNumber :number = 10 ,
129
+ startColumn :number = 5 ,
130
+ endLineNumber :number = startLineNumber + 1 ,
131
+ endColumn :number = startColumn + 5 ,
132
+ message : string = 'some message'
133
+ ) :IMarker {
134
+ return aMarker ( 'some resource' , Severity . Error , startLineNumber , startColumn , endLineNumber , endColumn , message ) ;
135
+ }
136
+
137
+ function aMarker ( resource :string = 'some resource' ,
138
+ severity :Severity = Severity . Error ,
139
+ startLineNumber :number = 10 ,
140
+ startColumn :number = 5 ,
141
+ endLineNumber :number = startLineNumber + 1 ,
142
+ endColumn :number = startColumn + 5 ,
143
+ message :string = 'some message'
144
+ ) :IMarker {
145
+ return {
146
+ owner : 'someOwner' ,
147
+ resource : URI . file ( resource ) ,
148
+ severity : severity ,
149
+ message : message ,
150
+ startLineNumber : startLineNumber ,
151
+ startColumn : startColumn ,
152
+ endLineNumber : endLineNumber ,
153
+ endColumn : endColumn
154
+ }
155
+ }
156
+ } ) ;
0 commit comments