public void SheetAccessedUsingString_QuickFixWorks_AssigningSheetToVariable()
        {
            const string inputCode = @"
Public Sub Foo()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(""Sheet1"")
    ws.Cells(1, 1) = ""foo""
    Bar ws
End Sub

Public Sub Bar(ws As Worksheet)
End Sub";

            const string expectedCode = @"
Public Sub Foo()
    
    
    Sheet1.Cells(1, 1) = ""foo""
    Bar Sheet1
End Sub

Public Sub Bar(ws As Worksheet)
End Sub";

            using (var state = ArrangeParserAndParse(inputCode, out var component))
            {
                var inspection        = new SheetAccessedUsingStringInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                new AccessSheetUsingCodeNameQuickFix(state).Fix(inspectionResults.First());
                Assert.AreEqual(expectedCode, state.GetRewriter(component).GetText());
            }
        }
        public void SheetAccessedUsingString_DoesNotReturnResult_NoSheetWithGivenNameExists()
        {
            const string inputCode =
                @"Public Sub Foo()
    ThisWorkbook.Worksheets(""BadName"").Range(""A1"") = ""Foo""
    ThisWorkbook.Sheets(""BadName"").Range(""A1"") = ""Foo""
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new SheetAccessedUsingStringInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.AreEqual(0, inspectionResults.Count());
            }
        }
        public void SheetAccessedUsingString_DoesNotReturnResult_AccessingUsingWorkbooksProperty()
        {
            const string inputCode =
                @"Public Sub Foo()
    Workbooks(""Foo"").Worksheets(""Sheet1"").Range(""A1"") = ""Foo""
    Workbooks(""Foo"").Sheets(""Sheet1"").Range(""A1"") = ""Foo""
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new SheetAccessedUsingStringInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.AreEqual(0, inspectionResults.Count());
            }
        }
        public void SheetAccessedUsingString_ReturnsResult_AccessingUsingApplicationModule()
        {
            const string inputCode =
                @"Public Sub Foo()
    Application.Worksheets(""Sheet1"").Range(""A1"") = ""Foo""
    Application.Sheets(""Sheet1"").Range(""A1"") = ""Foo""
End Sub";

            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new SheetAccessedUsingStringInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.AreEqual(2, inspectionResults.Count());
            }
        }
        public void SheetAccessedUsingString_DoesNotReturnResult_SheetWithGivenNameExistsInAnotherProject()
        {
            const string inputCode =
                @"Public Sub Foo()
    ThisWorkbook.Worksheets(""SheetFromOtherProject"").Range(""A1"") = ""Foo""
    ThisWorkbook.Sheets(""SheetFromOtherProject"").Range(""A1"") = ""Foo""
End Sub";

            // Referenced project is created inside helper method
            using (var state = ArrangeParserAndParse(inputCode))
            {
                var inspection        = new SheetAccessedUsingStringInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                Assert.AreEqual(0, inspectionResults.Count());
            }
        }
        public void SheetAccessedUsingString_QuickFixWorks_UsingSheetThroughGlobalModule()
        {
            const string inputCode = @"
Public Sub Foo()
    Sheets(""Sheet1"").Range(""A1"") = ""foo""
End Sub";

            const string expectedCode = @"
Public Sub Foo()
    Sheet1.Range(""A1"") = ""foo""
End Sub";

            using (var state = ArrangeParserAndParse(inputCode, out var component))
            {
                var inspection        = new SheetAccessedUsingStringInspection(state);
                var inspectionResults = inspection.GetInspectionResults(CancellationToken.None);

                new AccessSheetUsingCodeNameQuickFix(state).Fix(inspectionResults.First());
                Assert.AreEqual(expectedCode, state.GetRewriter(component).GetText());
            }
        }