@@ -351,6 +351,40 @@ End Sub
351
351
Assert . IsFalse ( inspectionResults . Any ( ) ) ;
352
352
}
353
353
354
+ [ Test ]
355
+ [ Category ( "Inspections" ) ]
356
+ public void AssignmentToIUnknown_NoResult ( )
357
+ {
358
+ const string class1 =
359
+ @"
360
+ Private Sub Interface1_DoIt()
361
+ End Sub
362
+ " ;
363
+
364
+ const string consumerModule =
365
+ @"
366
+ Private Sub TestIt()
367
+ Dim cls As IUnknown
368
+ Dim otherCls As Class1
369
+
370
+ Set otherCls = new Class1
371
+ Set cls = otherCls
372
+ End Sub
373
+ " ;
374
+ var testVbe = new MockVbeBuilder ( )
375
+ . ProjectBuilder ( "TestProject" , ProjectProtection . Unprotected )
376
+ . AddComponent ( "Class1" , ComponentType . ClassModule , class1 )
377
+ . AddComponent ( "Module1" , ComponentType . StandardModule , consumerModule )
378
+ . AddReference ( ReferenceLibrary . StdOle )
379
+ . AddProjectToVbeBuilder ( )
380
+ . Build ( )
381
+ . Object ;
382
+
383
+ var inspectionResults = InspectionResults ( testVbe ) ;
384
+
385
+ Assert . IsFalse ( inspectionResults . Any ( ) ) ;
386
+ }
387
+
354
388
[ Test ]
355
389
[ Category ( "Inspections" ) ]
356
390
public void AssignmentOfObject_NoResult ( )
@@ -409,6 +443,41 @@ End Sub
409
443
Assert . IsFalse ( inspectionResults . Any ( ) ) ;
410
444
}
411
445
446
+ [ Test ]
447
+ [ Category ( "Inspections" ) ]
448
+ public void AssignmentOfIUnknown_NoResult ( )
449
+ {
450
+ const string class1 =
451
+ @"
452
+ Private Sub Interface1_DoIt()
453
+ End Sub
454
+ " ;
455
+
456
+ const string consumerModule =
457
+ @"
458
+ Private Sub TestIt()
459
+ Dim cls As Class1
460
+ Dim otherCls As IUnknown
461
+
462
+ Set otherCls = new Class2
463
+ Set cls = otherCls
464
+ End Sub
465
+ " ;
466
+ var testVbe = new MockVbeBuilder ( )
467
+ . ProjectBuilder ( "TestProject" , ProjectProtection . Unprotected )
468
+ . AddComponent ( "Class1" , ComponentType . ClassModule , class1 )
469
+ . AddComponent ( "Class2" , ComponentType . ClassModule , class1 )
470
+ . AddComponent ( "Module1" , ComponentType . StandardModule , consumerModule )
471
+ . AddReference ( ReferenceLibrary . StdOle )
472
+ . AddProjectToVbeBuilder ( )
473
+ . Build ( )
474
+ . Object ;
475
+
476
+ var inspectionResults = InspectionResults ( testVbe ) ;
477
+
478
+ Assert . IsFalse ( inspectionResults . Any ( ) ) ;
479
+ }
480
+
412
481
[ Test ]
413
482
[ Category ( "Inspections" ) ]
414
483
public void AssignmentOfMeToProperlyTypesVariable_NoResult ( )
@@ -468,10 +537,10 @@ End Sub
468
537
[ TestCase ( "Class1" , "TestProject1.Class1" , 0 ) ]
469
538
[ TestCase ( "Interface1" , "TestProject1.Class1" , 0 ) ]
470
539
[ TestCase ( "Class1" , "TestProject1.Interface1" , 0 ) ]
471
- [ TestCase ( "Variant" , "Whatever " , 0 ) ] //Tokens.Variant cannot be used here because it is not a constant expression.
472
- [ TestCase ( "Object" , "Whatever " , 0 ) ]
473
- [ TestCase ( "Whatever " , "Variant" , 0 ) ]
474
- [ TestCase ( "Whatever " , "Object" , 0 ) ]
540
+ [ TestCase ( "Variant" , "Class1 " , 0 ) ] //Tokens.Variant cannot be used here because it is not a constant expression.
541
+ [ TestCase ( "Object" , "Class1 " , 0 ) ]
542
+ [ TestCase ( "Class1 " , "Variant" , 0 ) ]
543
+ [ TestCase ( "Class1 " , "Object" , 0 ) ]
475
544
[ TestCase ( "Class1" , "TestProject1.SomethingIncompatible" , 1 ) ]
476
545
[ TestCase ( "Class1" , "SomethingDifferent" , 1 ) ]
477
546
[ TestCase ( "TestProject1.Class1" , "OtherProject.Class1" , 1 ) ]
@@ -521,15 +590,60 @@ End Function
521
590
Assert . AreEqual ( expectedResultsCount , inspectionResults . Count ) ;
522
591
}
523
592
593
+ [ Test ]
594
+ [ Category ( "Inspections" ) ]
595
+ [ TestCase ( "IUnknown" , "Class1" , 0 ) ]
596
+ [ TestCase ( "Class1" , ":stdole.IUnknown" , 0 ) ]
597
+ public void MockedSetTypeEvaluatorTest_Function_IUnknown ( string lhsTypeName , string expressionFullTypeName , int expectedResultsCount )
598
+ {
599
+ const string interface1 =
600
+ @"
601
+ Private Sub Foo()
602
+ End Sub
603
+ " ;
604
+ const string class1 =
605
+ @"Implements Interface1
606
+
607
+ Private Sub Interface1_Foo()
608
+ End Sub
609
+ " ;
610
+
611
+ var module1 =
612
+ $@ "
613
+ Private Function Cls() As { lhsTypeName }
614
+ Set Cls = expression
615
+ End Function
616
+ " ;
617
+
618
+ var vbe = new MockVbeBuilder ( )
619
+ . ProjectBuilder ( "TestProject" , ProjectProtection . Unprotected )
620
+ . AddComponent ( "Class1" , ComponentType . ClassModule , class1 )
621
+ . AddComponent ( "Interface1" , ComponentType . ClassModule , interface1 )
622
+ . AddComponent ( "Module1" , ComponentType . StandardModule , module1 )
623
+ . AddReference ( ReferenceLibrary . StdOle )
624
+ . AddProjectToVbeBuilder ( )
625
+ . Build ( )
626
+ . Object ;
627
+
628
+ var setTypeResolverMock = new Mock < ISetTypeResolver > ( ) ;
629
+ setTypeResolverMock . Setup ( m =>
630
+ m . SetTypeName ( It . IsAny < VBAParser . ExpressionContext > ( ) , It . IsAny < QualifiedModuleName > ( ) ) )
631
+ . Returns ( ( VBAParser . ExpressionContext context , QualifiedModuleName qmn ) => expressionFullTypeName ) ;
632
+
633
+ var inspectionResults = InspectionResults ( vbe , setTypeResolverMock . Object ) . ToList ( ) ;
634
+
635
+ Assert . AreEqual ( expectedResultsCount , inspectionResults . Count ) ;
636
+ }
637
+
524
638
[ Test ]
525
639
[ Category ( "Inspections" ) ]
526
640
[ TestCase ( "Class1" , "TestProject1.Class1" , 0 ) ]
527
641
[ TestCase ( "Interface1" , "TestProject1.Class1" , 0 ) ]
528
642
[ TestCase ( "Class1" , "TestProject1.Interface1" , 0 ) ]
529
- [ TestCase ( "Variant" , "Whatever " , 0 ) ] //Tokens.Variant cannot be used here because it is not a constant expression.
530
- [ TestCase ( "Object" , "Whatever " , 0 ) ]
531
- [ TestCase ( "Whatever " , "Variant" , 0 ) ]
532
- [ TestCase ( "Whatever " , "Object" , 0 ) ]
643
+ [ TestCase ( "Variant" , "Class1 " , 0 ) ] //Tokens.Variant cannot be used here because it is not a constant expression.
644
+ [ TestCase ( "Object" , "Class1 " , 0 ) ]
645
+ [ TestCase ( "Class1 " , "Variant" , 0 ) ]
646
+ [ TestCase ( "Class1 " , "Object" , 0 ) ]
533
647
[ TestCase ( "Class1" , "TestProject1.SomethingIncompatible" , 1 ) ]
534
648
[ TestCase ( "Class1" , "SomethingDifferent" , 1 ) ]
535
649
[ TestCase ( "TestProject1.Class1" , "OtherProject.Class1" , 1 ) ]
@@ -580,15 +694,60 @@ End Property
580
694
Assert . AreEqual ( expectedResultsCount , inspectionResults . Count ) ;
581
695
}
582
696
697
+ [ Test ]
698
+ [ Category ( "Inspections" ) ]
699
+ [ TestCase ( "IUnknown" , "Class1" , 0 ) ]
700
+ [ TestCase ( "Class1" , ":stdole.IUnknown" , 0 ) ]
701
+ public void MockedSetTypeEvaluatorTest_PropertyGet_IUnknown ( string lhsTypeName , string expressionFullTypeName , int expectedResultsCount )
702
+ {
703
+ const string interface1 =
704
+ @"
705
+ Private Sub Foo()
706
+ End Sub
707
+ " ;
708
+ const string class1 =
709
+ @"Implements Interface1
710
+
711
+ Private Sub Interface1_Foo()
712
+ End Sub
713
+ " ;
714
+
715
+ var module1 =
716
+ $@ "
717
+ Private Property Get Cls() As { lhsTypeName }
718
+ Set Cls = expression
719
+ End Property
720
+ " ;
721
+
722
+ var vbe = new MockVbeBuilder ( )
723
+ . ProjectBuilder ( "TestProject" , ProjectProtection . Unprotected )
724
+ . AddComponent ( "Class1" , ComponentType . ClassModule , class1 )
725
+ . AddComponent ( "Interface1" , ComponentType . ClassModule , interface1 )
726
+ . AddComponent ( "Module1" , ComponentType . StandardModule , module1 )
727
+ . AddReference ( ReferenceLibrary . StdOle )
728
+ . AddProjectToVbeBuilder ( )
729
+ . Build ( )
730
+ . Object ;
731
+
732
+ var setTypeResolverMock = new Mock < ISetTypeResolver > ( ) ;
733
+ setTypeResolverMock . Setup ( m =>
734
+ m . SetTypeName ( It . IsAny < VBAParser . ExpressionContext > ( ) , It . IsAny < QualifiedModuleName > ( ) ) )
735
+ . Returns ( ( VBAParser . ExpressionContext context , QualifiedModuleName qmn ) => expressionFullTypeName ) ;
736
+
737
+ var inspectionResults = InspectionResults ( vbe , setTypeResolverMock . Object ) . ToList ( ) ;
738
+
739
+ Assert . AreEqual ( expectedResultsCount , inspectionResults . Count ) ;
740
+ }
741
+
583
742
[ Test ]
584
743
[ Category ( "Inspections" ) ]
585
744
[ TestCase ( "Class1" , "TestProject1.Class1" , 0 ) ]
586
745
[ TestCase ( "Interface1" , "TestProject1.Class1" , 0 ) ]
587
746
[ TestCase ( "Class1" , "TestProject1.Interface1" , 0 ) ]
588
- [ TestCase ( "Variant" , "Whatever " , 0 ) ] //Tokens.Variant cannot be used here because it is not a constant expression.
589
- [ TestCase ( "Object" , "Whatever " , 0 ) ]
590
- [ TestCase ( "Whatever " , "Variant" , 0 ) ]
591
- [ TestCase ( "Whatever " , "Object" , 0 ) ]
747
+ [ TestCase ( "Variant" , "Class1 " , 0 ) ] //Tokens.Variant cannot be used here because it is not a constant expression.
748
+ [ TestCase ( "Object" , "Class1 " , 0 ) ]
749
+ [ TestCase ( "Class1 " , "Variant" , 0 ) ]
750
+ [ TestCase ( "Class1 " , "Object" , 0 ) ]
592
751
[ TestCase ( "Class1" , "TestProject1.SomethingIncompatible" , 1 ) ]
593
752
[ TestCase ( "Class1" , "SomethingDifferent" , 1 ) ]
594
753
[ TestCase ( "TestProject1.Class1" , "OtherProject.Class1" , 1 ) ]
@@ -641,6 +800,53 @@ End Sub
641
800
Assert . AreEqual ( expectedResultsCount , inspectionResults . Count ) ;
642
801
}
643
802
803
+ [ Test ]
804
+ [ Category ( "Inspections" ) ]
805
+ [ TestCase ( "IUnknown" , "Class1" , 0 ) ]
806
+ [ TestCase ( "Class1" , ":stdole.IUnknown" , 0 ) ]
807
+ public void MockedSetTypeEvaluatorTest_Variable_IUnknown ( string lhsTypeName , string expressionFullTypeName , int expectedResultsCount )
808
+ {
809
+ const string interface1 =
810
+ @"
811
+ Private Sub Foo()
812
+ End Sub
813
+ " ;
814
+ const string class1 =
815
+ @"Implements Interface1
816
+
817
+ Private Sub Interface1_Foo()
818
+ End Sub
819
+ " ;
820
+
821
+ var module1 =
822
+ $@ "
823
+ Private Sub TestIt()
824
+ Dim cls As { lhsTypeName }
825
+
826
+ Set cls = expression
827
+ End Sub
828
+ " ;
829
+
830
+ var vbe = new MockVbeBuilder ( )
831
+ . ProjectBuilder ( "TestProject" , ProjectProtection . Unprotected )
832
+ . AddComponent ( "Class1" , ComponentType . ClassModule , class1 )
833
+ . AddComponent ( "Interface1" , ComponentType . ClassModule , interface1 )
834
+ . AddComponent ( "Module1" , ComponentType . StandardModule , module1 )
835
+ . AddReference ( ReferenceLibrary . StdOle )
836
+ . AddProjectToVbeBuilder ( )
837
+ . Build ( )
838
+ . Object ;
839
+
840
+ var setTypeResolverMock = new Mock < ISetTypeResolver > ( ) ;
841
+ setTypeResolverMock . Setup ( m =>
842
+ m . SetTypeName ( It . IsAny < VBAParser . ExpressionContext > ( ) , It . IsAny < QualifiedModuleName > ( ) ) )
843
+ . Returns ( ( VBAParser . ExpressionContext context , QualifiedModuleName qmn ) => expressionFullTypeName ) ;
844
+
845
+ var inspectionResults = InspectionResults ( vbe , setTypeResolverMock . Object ) . ToList ( ) ;
846
+
847
+ Assert . AreEqual ( expectedResultsCount , inspectionResults . Count ) ;
848
+ }
849
+
644
850
private static IEnumerable < IInspectionResult > InspectionResults ( IVBE vbe , ISetTypeResolver setTypeResolver )
645
851
{
646
852
using ( var state = MockParser . CreateAndParse ( vbe ) )
0 commit comments