@@ -65,15 +65,73 @@ describe('class directive', () => {
65
65
} ) ;
66
66
} ) ;
67
67
68
- it ( 'should keep existing class selector ' , ( ) => {
68
+ it ( 'should merge `ngClass` values with any ` class` values ' , ( ) => {
69
69
fixture = createTestComponent ( `
70
- <div class="existing-class" ngClass.xs="xs-class">
70
+ <div class="class0" ngClass="class1 class2">
71
+ </div>
72
+ ` ) ;
73
+
74
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'class0' ) ;
75
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'class1' ) ;
76
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'class2' ) ;
77
+ } ) ;
78
+
79
+ it ( 'should override base `class` values with responsive values' , ( ) => {
80
+ fixture = createTestComponent ( `
81
+ <div class="class0"
82
+ class.xs="class1 class2"
83
+ ngClass.xs="what">
84
+ </div>
85
+ ` ) ;
86
+
87
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'class0' ) ;
88
+ expectNativeEl ( fixture ) . not . toHaveCssClass ( 'class1' ) ;
89
+ expectNativeEl ( fixture ) . not . toHaveCssClass ( 'class2' ) ;
90
+
91
+ activateMediaQuery ( 'xs' ) ;
92
+ expectNativeEl ( fixture ) . not . toHaveCssClass ( 'class0' ) ;
93
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'class1' ) ;
94
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'class2' ) ;
95
+
96
+ // activateMediaQuery('lg');
97
+ // expectNativeEl(fixture).toHaveCssClass('class0');
98
+ // expectNativeEl(fixture).not.toHaveCssClass('class1');
99
+ // expectNativeEl(fixture).not.toHaveCssClass('class2');
100
+ } ) ;
101
+
102
+ it ( 'should keep the raw existing `class` with responsive updates' , ( ) => {
103
+ fixture = createTestComponent ( `
104
+ <div class="existing-class" ngClass="class1" ngClass.xs="xs-class">
105
+ </div>
106
+ ` ) ;
107
+
108
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'existing-class' ) ;
109
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'class1' ) ;
110
+
111
+ activateMediaQuery ( 'xs' ) ;
112
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'xs-class' ) ;
113
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'existing-class' ) ;
114
+ expectNativeEl ( fixture ) . not . toHaveCssClass ( 'class1' ) ;
115
+
116
+ activateMediaQuery ( 'lg' ) ;
117
+ expectNativeEl ( fixture ) . not . toHaveCssClass ( 'xs-class' ) ;
118
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'existing-class' ) ;
119
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'class1' ) ;
120
+ } ) ;
121
+
122
+
123
+ it ( 'should keep allow removal of class selector' , ( ) => {
124
+ fixture = createTestComponent ( `
125
+ <div
126
+ class="existing-class"
127
+ [ngClass.xs]="{'xs-class':true, 'existing-class':false}">
71
128
</div>
72
129
` ) ;
73
130
74
131
expectNativeEl ( fixture ) . toHaveCssClass ( 'existing-class' ) ;
75
132
activateMediaQuery ( 'xs' ) ;
76
133
expectNativeEl ( fixture ) . not . toHaveCssClass ( 'existing-class' ) ;
134
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'xs-class' ) ;
77
135
78
136
activateMediaQuery ( 'lg' ) ;
79
137
expectNativeEl ( fixture ) . toHaveCssClass ( 'existing-class' ) ;
@@ -83,15 +141,22 @@ describe('class directive', () => {
83
141
it ( 'should keep existing ngClass selector' , ( ) => {
84
142
// @see documentation for @angular/core ngClass =http://bit.ly/2mz0LAa
85
143
fixture = createTestComponent ( `
86
- <div ngClass="existing-class" ngClass.xs="existing-class xs-class">
144
+ <div class="always"
145
+ ngClass="existing-class"
146
+ ngClass.xs="existing-class xs-class">
87
147
</div>
88
148
` ) ;
89
149
150
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'always' ) ;
90
151
expectNativeEl ( fixture ) . toHaveCssClass ( 'existing-class' ) ;
152
+
91
153
activateMediaQuery ( 'xs' ) ;
154
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'always' ) ;
92
155
expectNativeEl ( fixture ) . toHaveCssClass ( 'existing-class' ) ;
156
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'xs-class' ) ;
93
157
94
158
activateMediaQuery ( 'lg' ) ;
159
+ expectNativeEl ( fixture ) . toHaveCssClass ( 'always' ) ;
95
160
expectNativeEl ( fixture ) . toHaveCssClass ( 'existing-class' ) ;
96
161
expectNativeEl ( fixture ) . not . toHaveCssClass ( 'xs-class' ) ;
97
162
} ) ;
@@ -112,21 +177,23 @@ describe('class directive', () => {
112
177
113
178
it ( 'should work with ngClass object notation' , ( ) => {
114
179
fixture = createTestComponent ( `
115
- <div [ngClass]="{'xs-1 ': hasXs1 , 'xs-3 ': hasXs3 }"
116
- [ngClass.xs]="{'xs-1 ': hasXs1 , 'xs-2 ': hasXs2 }">
180
+ <div [ngClass]="{'x1 ': hasX1 , 'x3 ': hasX3 }"
181
+ [ngClass.xs]="{'x1 ': hasX1 , 'x2 ': hasX2 }">
117
182
</div>
118
183
` ) ;
119
- activateMediaQuery ( 'xs ') ;
120
- expectNativeEl ( fixture , { hasXs1 : true , hasXs2 : false } ) . toHaveCssClass ( 'xs-1 ' ) ;
121
- expectNativeEl ( fixture , { hasXs1 : true , hasXs2 : false } ) . not . toHaveCssClass ( 'xs-2 ' ) ;
184
+ expectNativeEl ( fixture , { hasX1 : true , hasX2 : true , hasX3 : true } ) . toHaveCssClass ( 'x1 ') ;
185
+ expectNativeEl ( fixture , { hasX1 : true , hasX2 : true , hasX3 : true } ) . not . toHaveCssClass ( 'x2 ' ) ;
186
+ expectNativeEl ( fixture , { hasX1 : true , hasX2 : true , hasX3 : true } ) . toHaveCssClass ( 'x3 ' ) ;
122
187
123
- expectNativeEl ( fixture , { hasXs1 : false , hasXs2 : true } ) . toHaveCssClass ( 'xs-2' ) ;
124
- expectNativeEl ( fixture , { hasXs1 : false , hasXs2 : true } ) . not . toHaveCssClass ( 'xs-1' ) ;
188
+ activateMediaQuery ( 'X' ) ;
189
+ expectNativeEl ( fixture , { hasX1 : true , hasX2 : false , hasX3 : false } ) . toHaveCssClass ( 'x1' ) ;
190
+ expectNativeEl ( fixture , { hasX1 : true , hasX2 : false , hasX3 : false } ) . not . toHaveCssClass ( 'x2' ) ;
191
+ expectNativeEl ( fixture , { hasX1 : true , hasX2 : false , hasX3 : false } ) . not . toHaveCssClass ( 'x3' ) ;
125
192
126
193
activateMediaQuery ( 'md' ) ;
127
- expectNativeEl ( fixture , { hasXs1 : true , hasX2 : false , hasXs3 : true } ) . toHaveCssClass ( 'xs-3 ' ) ;
128
- expectNativeEl ( fixture , { hasXs1 : true , hasX2 : false , hasXs3 : true } ) . not . toHaveCssClass ( 'xs-2 ' ) ;
129
- expectNativeEl ( fixture , { hasXs1 : true , hasX2 : false , hasXs3 : true } ) . toHaveCssClass ( 'xs-1 ' ) ;
194
+ expectNativeEl ( fixture , { hasX1 : true , hasX2 : false , hasX3 : true } ) . toHaveCssClass ( 'x1 ' ) ;
195
+ expectNativeEl ( fixture , { hasX1 : true , hasX2 : false , hasX3 : true } ) . not . toHaveCssClass ( 'x2 ' ) ;
196
+ expectNativeEl ( fixture , { hasX1 : true , hasX2 : false , hasX3 : true } ) . toHaveCssClass ( 'x3 ' ) ;
130
197
} ) ;
131
198
132
199
it ( 'should work with ngClass array notation' , ( ) => {
@@ -151,6 +218,7 @@ describe('class directive', () => {
151
218
export class TestClassComponent implements OnInit {
152
219
hasXs1 : boolean ;
153
220
hasXs2 : boolean ;
221
+ hasXs3 : boolean ;
154
222
155
223
constructor ( private media : ObservableMedia ) {
156
224
}
0 commit comments