@@ -430,20 +430,20 @@ describe('ngMessages', function() {
430
430
inject ( function ( $rootScope , $compile ) {
431
431
432
432
element = $compile ( '<div><div ng-if="show"><div message-wrap col="col">' +
433
- ' <div ng-message="required">Fill in the text field. </div>' +
434
- ' <div ng-message="extra">Extra error message. </div>' +
433
+ ' <div ng-message="a">A </div>' +
434
+ ' <div ng-message="b">B </div>' +
435
435
'</div></div></div>' ) ( $rootScope ) ;
436
436
437
437
$rootScope . $apply ( function ( ) {
438
438
$rootScope . show = true ;
439
439
$rootScope . col = {
440
- required : true ,
441
- extra : true
440
+ a : true ,
441
+ b : true
442
442
} ;
443
443
} ) ;
444
444
445
445
expect ( messageChildren ( element ) . length ) . toBe ( 1 ) ;
446
- expect ( trim ( element . text ( ) ) ) . toEqual ( 'Fill in the text field. ' ) ;
446
+ expect ( trim ( element . text ( ) ) ) . toEqual ( 'A ' ) ;
447
447
448
448
$rootScope . $apply ( 'show = false' ) ;
449
449
@@ -453,91 +453,70 @@ describe('ngMessages', function() {
453
453
454
454
455
455
it ( 'should not crash when the first of two nested messages is removed' , function ( ) {
456
-
457
- module ( function ( $compileProvider ) {
458
- $compileProvider . directive ( 'removeMe' , function ( ) {
459
- return {
460
- link : function ( scope , element ) {
461
- scope . $watch ( 'hide' , function ( newVal ) {
462
- if ( newVal === true ) element . remove ( ) ;
463
- } ) ;
464
- }
465
- } ;
466
- } ) ;
467
- } ) ;
468
-
469
456
inject ( function ( $rootScope , $compile ) {
470
457
471
458
element = $compile (
472
459
'<div ng-messages="col">' +
473
460
'<div class="wrapper">' +
474
- '<div remove-me ng-message="required">Fill in the text field. </div>' +
475
- '<div ng-message="extra">Extra error message. </div>' +
461
+ '<div ng-message="a">A </div>' +
462
+ '<div ng-message="b">B </div>' +
476
463
'</div>' +
477
464
'</div>'
478
465
) ( $rootScope ) ;
479
466
480
467
$rootScope . $apply ( function ( ) {
481
468
$rootScope . col = {
482
- required : true ,
483
- extra : false
469
+ a : true ,
470
+ b : false
484
471
} ;
485
472
} ) ;
486
473
487
474
expect ( messageChildren ( element ) . length ) . toBe ( 1 ) ;
488
- expect ( trim ( element . text ( ) ) ) . toEqual ( 'Fill in the text field. ' ) ;
475
+ expect ( trim ( element . text ( ) ) ) . toEqual ( 'A ' ) ;
489
476
490
- $rootScope . $apply ( 'hide = true' ) ;
477
+ var nodeA = element [ 0 ] . querySelector ( '[ng-message="a"]' ) ;
478
+ nodeA . remove ( ) ;
491
479
492
480
expect ( messageChildren ( element ) . length ) . toBe ( 0 ) ;
493
481
} ) ;
494
482
} ) ;
495
483
496
484
497
- xit ( 'should not crash when a deeply nested messages is removed' , function ( ) {
498
-
499
- module ( function ( $compileProvider ) {
500
- $compileProvider . directive ( 'removeMe' , function ( ) {
501
- return {
502
- link : function ( scope , element ) {
503
- scope . $watch ( 'hide' , function ( newVal ) {
504
- if ( newVal === true ) element . remove ( ) ;
505
- } ) ;
506
- }
507
- } ;
508
- } ) ;
509
- } ) ;
510
-
485
+ it ( 'should show deeply nested messages correctly after a message has been removed' , function ( ) {
511
486
inject ( function ( $rootScope , $compile ) {
512
487
513
488
element = $compile (
514
- '<div ng-messages="col">' +
489
+ '<div ng-messages="col" ng-messages-multiple >' +
515
490
'<div class="another-wrapper">' +
491
+ '<div ng-message="a">A</div>' +
516
492
'<div class="wrapper">' +
517
- '<div remove-me ng-message="required">Fill in the text field. </div>' +
518
- '<div ng-message="extra">Extra error message. </div>' +
493
+ '<div ng-message="b">B </div>' +
494
+ '<div ng-message="c">C </div>' +
519
495
'</div>' +
520
- '<div ng-message="different">Different error message. </div>' +
496
+ '<div ng-message="d">D </div>' +
521
497
'</div>' +
522
498
'</div>'
523
499
) ( $rootScope ) ;
524
500
525
501
$rootScope . $apply ( function ( ) {
526
502
$rootScope . col = {
527
- required : true ,
528
- extra : false
503
+ a : true ,
504
+ b : true
529
505
} ;
530
506
} ) ;
531
507
532
- expect ( messageChildren ( element ) . length ) . toBe ( 1 ) ;
533
- expect ( trim ( element . text ( ) ) ) . toEqual ( 'Fill in the text field. ' ) ;
508
+ expect ( messageChildren ( element ) . length ) . toBe ( 2 ) ;
509
+ expect ( trim ( element . text ( ) ) ) . toEqual ( 'AB ' ) ;
534
510
535
- $rootScope . $apply ( 'hide = true' ) ;
511
+ var nodeB = element [ 0 ] . querySelector ( '[ng-message="b"]' ) ;
512
+ nodeB . remove ( ) ;
536
513
537
- expect ( messageChildren ( element ) . length ) . toBe ( 0 ) ;
514
+ expect ( messageChildren ( element ) . length ) . toBe ( 1 ) ;
515
+ expect ( trim ( element . text ( ) ) ) . toEqual ( 'A' ) ;
538
516
} ) ;
539
517
} ) ;
540
518
519
+
541
520
// issue #12856
542
521
it ( 'should only detach the message object that is associated with the message node being removed' ,
543
522
inject ( function ( $rootScope , $compile , $animate ) {
0 commit comments