コード例 #1
0
        public void LowerCaseKeywordNext()
        {
            var code = new[]
            {
                "Dim i As Long",
                "Dim maxRow As Long",
                "",
                "maxRow = 120",
                "For i = 20 To maxRow Step 19",
                "",
                "Sheet5.Range(Rows(i), Rows(i + 4)).Cut Sheet61.Range(Rows(i))",
                "next i"
            };

            var output = new[]
            {
                "Dim i As Long",
                "Dim maxRow As Long",
                "",
                "maxRow = 120",
                "For i = 20 To maxRow Step 19",
                "",
                "    Sheet5.Range(Rows(i), Rows(i + 4)).Cut Sheet61.Range(Rows(i))",
                "next i"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(output.SequenceEqual(actual));
        }
コード例 #2
0
        public void WorksOutsideOfProcedures()
        {
            var code = new[]
            {
                "#Const Foo = Bar 'Comment",
                "Private Sub Test()",
                "End Sub"
            };

            var expected = new[]
            {
                "#Const Foo = Bar                                 'Comment",
                "",
                "Private Sub Test()",
                "End Sub"
            };

            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.EndOfLineCommentStyle = EndOfLineCommentStyle.AlignInColumn;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #3
0
        public void StandardGapWorks()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "Debug.Print 'Comment",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "    Debug.Print        'Comment",
                "End Sub"
            };


            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.EndOfLineCommentStyle = EndOfLineCommentStyle.StandardGap;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #4
0
        public void IgnoreOperatorsInContinuationsOnWorks()
        {
            var code = new[]
            {
                "Private Function Test() As String",
                @"Test = ""String that is "" _",
                @"& ""split into multiple "" _",
                @"& ""lines.""",
                "End Function"
            };

            var expected = new[]
            {
                "Private Function Test() As String",
                @"    Test = ""String that is "" _",
                @"         & ""split into multiple "" _",
                @"         & ""lines.""",
                "End Function"
            };

            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.IgnoreOperatorsInContinuations = true;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #5
0
        public void AlignInColumnFallsBackToOneSpace()
        {
            var code = new[]
            {
                "Private Sub Test()",
                @"Debug.Print ""This string ends with a comment."" 'Comment",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                @"    Debug.Print ""This string ends with a comment."" 'Comment",
                "End Sub"
            };

            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.EndOfLineCommentStyle = EndOfLineCommentStyle.AlignInColumn;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #6
0
        public void MultipleFunctionCallsWorks()
        {
            var code = new[]
            {
                "Private Function Foo()",
                "Foo = Bar(A, B, C + 1) = D * Baz(E, F, G) / (4 * X * Y) * Bar(A + 1, B + 1, C) _",
                "+ (D * (Bar(E, F, G) / D ^ 2 + Baz(X, Y, Z) / (2 * X)))",
                "End Function"
            };

            var expected = new[]
            {
                "Private Function Foo()",
                "    Foo = Bar(A, B, C + 1) = D * Baz(E, F, G) / (4 * X * Y) * Bar(A + 1, B + 1, C) _",
                "          + (D * (Bar(E, F, G) / D ^ 2 + Baz(X, Y, Z) / (2 * X)))",
                "End Function"
            };

            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.IgnoreOperatorsInContinuations = false;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #7
0
        public void ContinuationsInProcedureDeclarationsWithAlignWorks()
        {
            var code = new[]
            {
                "Sub MySub()",
                "Dim x1 As Integer, x2 _",
                "As Integer",
                "End Sub"
            };

            var expected = new[]
            {
                "Sub MySub()",
                "    Dim x1    As Integer, x2 _",
                "              As Integer",
                "End Sub"
            };

            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.IndentFirstDeclarationBlock = true;
                s.AlignDims      = true;
                s.AlignDimColumn = 15;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #8
0
        public void ModulePrecompilerDirectivesWork()
        {
            var code = new[]
            {
                "#Const Foo = Bar",
                "#If Foo Then",
                "Const Baz = 1",
                "#Else",
                "Const Baz = 2",
                "#End If"
            };

            var expected = new[]
            {
                "#Const Foo = Bar",
                "#If Foo Then",
                "    Const Baz = 1",
                "#Else",
                "    Const Baz = 2",
                "#End If"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #9
0
        public void IndentationResetsAfterEnum()
        {
            var code = new[]
            {
                "Public Enum Foo",
                "X = 1",
                "Y = 2",
                "End Enum",
                "",
                "Private Sub Test()",
                "If Foo Then",
                "Debug.Print",
                "End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Public Enum Foo",
                "    X = 1",
                "    Y = 2",
                "End Enum",
                "",
                "Private Sub Test()",
                "    If Foo Then",
                "        Debug.Print",
                "    End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #10
0
        public void LineNumbersWithColonWork()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "5: If Foo Then",
                "10: Debug.Print",
                "15: End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "5:  If Foo Then",
                "10:     Debug.Print",
                "15: End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #11
0
        public void LineNumberLongerThanIndentFallsBackToOneSpace()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "10000 If Foo Then",
                "10001 Debug.Print",
                "10002 End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "10000 If Foo Then",
                "10001   Debug.Print",
                "10002 End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #12
0
        public void HexLineNumbersWork()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "&HAAA If Foo Then",
                "&HABE Debug.Print",
                "&HAD2 End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "2730 If Foo Then",
                "2750    Debug.Print",
                "2770 End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #13
0
        public void LineNumbersAreNotIncludedInIndentAmount()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "5 If Foo Then",
                "10 Debug.Print",
                "15 End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "5   If Foo Then",
                "10      Debug.Print",
                "15  End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #14
0
        public void SingleLineElseIfElseStatementWorks()
        {
            var code = new[]
            {
                "Public Sub Test()",
                "If x Then",
                "NotFoobar",
                "ElseIf Foo And Bar Then Foobar",
                "Else",
                "Baz",
                "End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Public Sub Test()",
                "    If x Then",
                "        NotFoobar",
                "    ElseIf Foo And Bar Then Foobar",
                "    Else",
                "        Baz",
                "    End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #15
0
        public void DoWhileOnTwoLinesWorks()
        {
            var code = new[]
            {
                "Public Sub Test()",
                "Do _",
                "While X < 10: X = X + 1: Loop",
                "Debug.Print X",
                "End Sub"
            };

            var expected = new[]
            {
                "Public Sub Test()",
                "    Do _",
                "        While X < 10: X = X + 1: Loop",
                "    Debug.Print X",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #16
0
        public void OverIndentationLeftAligns()
        {
            var code = new[]
            {
                "        Private Sub Test()",
                "            If Foo Then",
                "                Debug.Print",
                "            End If",
                "        End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "    If Foo Then",
                "        Debug.Print",
                "    End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #17
0
        public void ContinuedIfThenWorks()
        {
            var code = new[]
            {
                "Public Sub Test()",
                "If _",
                "Foo = True _",
                "Then",
                "Debug.Print",
                "End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Public Sub Test()",
                "    If _",
                "        Foo = True _",
                "              Then",
                "        Debug.Print",
                "    End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #18
0
        public void ElseIfStatementWorks()
        {
            var code = new[]
            {
                "Public Function Test() As Integer",
                "If Foo = 1 Then",
                "Bar = 3",
                "ElseIf Foo = 3 Then",
                "Bar = 1",
                "End If",
                "Test = Bar",
                "End Function"
            };

            var expected = new[]
            {
                "Public Function Test() As Integer",
                "    If Foo = 1 Then",
                "        Bar = 3",
                "    ElseIf Foo = 3 Then",
                "        Bar = 1",
                "    End If",
                "    Test = Bar",
                "End Function"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #19
0
        public void MultiLineContinuedFunctionWorks()
        {
            var code = new[]
            {
                "Public Sub Test()",
                "Debug.Print Foo(Var1, Var2, _",
                "Var3, Var4, _",
                "Var5)",
                "End Sub"
            };

            var expected = new[]
            {
                "Public Sub Test()",
                "    Debug.Print Foo(Var1, Var2, _",
                "                    Var3, Var4, _",
                "                    Var5)",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #20
0
        public void SubFooTokenIsNotInterpretedAsProcedureStart()
        {
            var code = new[]
            {
                "Public Sub Test()",
                "If Subject = 0 Then",
                "Subject = 1",
                "End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Public Sub Test()",
                "    If Subject = 0 Then",
                "        Subject = 1",
                "    End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #21
0
        public void ContinuationWithOnlyCommentWorks()
        {
            var code = new[]
            {
                "Sub MySub()",
                "Debug.Print Foo _",
                "'Is this and end of line comment or not...?",
                "End Sub"
            };

            var expected = new[]
            {
                "Sub MySub()",
                "    Debug.Print Foo _",
                "                'Is this and end of line comment or not...?",
                "End Sub"
            };

            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.AlignCommentsWithCode       = false;
                s.IndentFirstDeclarationBlock = true;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #22
0
        public void AlignmentAnchorsInStringLiteralsAreIgnored()
        {
            var code = new[]
            {
                "Sub Test()",
                "Dim LoremIpsum As String",
                @"LoremIpsum = ""Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dictum,"" & vbCrLf _",
                @"& ""felis in tempor finibus, arcu lectus molestie urna, eget interdum turpis"" & vbCrLf _",
                @"& ""tellus ac diam. Nulla mauris lectus, vulputate et fringilla ac, iaculis eget urna."" & vbCrLf _",
                @"& ""Ut feugiat felis lacinia eros vestibulum facilisis. Ut euismod dapibus augue,"" & vbCrLf _",
                @"& ""lacinia elementum elit dictum in. Nam in imperdiet tortor. Curabitur efficitur libero"" & vbCrLf _",
                @"& ""lacus, et placerat metus sodales sit amet.""",
                "Debug.Print LoremIpsum",
                "End Sub"
            };

            var expected = new[]
            {
                "Sub Test()",
                "    Dim LoremIpsum As String",
                @"    LoremIpsum = ""Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dictum,"" & vbCrLf _",
                @"               & ""felis in tempor finibus, arcu lectus molestie urna, eget interdum turpis"" & vbCrLf _",
                @"               & ""tellus ac diam. Nulla mauris lectus, vulputate et fringilla ac, iaculis eget urna."" & vbCrLf _",
                @"               & ""Ut feugiat felis lacinia eros vestibulum facilisis. Ut euismod dapibus augue,"" & vbCrLf _",
                @"               & ""lacinia elementum elit dictum in. Nam in imperdiet tortor. Curabitur efficitur libero"" & vbCrLf _",
                @"               & ""lacus, et placerat metus sodales sit amet.""",
                "    Debug.Print LoremIpsum",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #23
0
        public void MultipleSplitNamedParametersAlignCorrectly()
        {
            var code = new[]
            {
                "Sub Foo()",
                "Debug.Print WorksheetFunction.Sum(arg1:=1, arg2:=2, arg3 _",
                ":=3, arg4:=4, arg5:=6, arg6 _",
                ":=6)",
                "End Sub"
            };

            var expected = new[]
            {
                "Sub Foo()",
                "    Debug.Print WorksheetFunction.Sum(arg1:=1, arg2:=2, arg3 _",
                "                                      :=3, arg4:=4, arg5:=6, arg6 _",
                "                                      :=6)",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #24
0
        public void IfThenDoesntGetMangled()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "If (Foo And Bar) Or Baz Then",
                @"Debug.Print ""Foo & Bar | Baz""",
                "End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "    If (Foo And Bar) Or Baz Then",
                @"        Debug.Print ""Foo & Bar | Baz""",
                "    End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #25
0
        public void CommentOnlyLineIgnoresEndOfLineSetting()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "'Comment",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "    'Comment",
                "End Sub"
            };

            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.EndOfLineCommentStyle = EndOfLineCommentStyle.AlignInColumn;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #26
0
        public void MultilineCommentAlignsCorrectly()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "'Long multiline comment _",
                "blah blah blah, etc. _",
                "etc.",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "    'Long multiline comment _",
                "    blah blah blah, etc. _",
                "    etc.",
                "End Sub"
            };

            var indenter = new Indenter(null, () => IndenterSettingsTests.GetMockIndenterSettings());
            var actual   = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #27
0
        public void WorksInsideEnums()
        {
            var code = new[]
            {
                "Public Enum Foo",
                "X = 1 'Comment",
                "Y = 2",
                "End Enum"
            };

            var expected = new[]
            {
                "Public Enum Foo",
                "    X = 1                                        'Comment",
                "    Y = 2",
                "End Enum"
            };

            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.EndOfLineCommentStyle = EndOfLineCommentStyle.AlignInColumn;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #28
0
        public void ContinuedEndOfLineCommentAligned()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "Dim Foo As Integer 'End of line comment _",
                "Continued end of line comment",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "    Dim Foo As Integer                           'End of line comment _",
                "                                                 Continued end of line comment",
                "End Sub"
            };

            var indenter = new Indenter(null, () =>
            {
                var s = IndenterSettingsTests.GetMockIndenterSettings();
                s.EndOfLineCommentStyle = EndOfLineCommentStyle.AlignInColumn;
                s.EndOfLineCommentColumnSpaceAlignment = 50;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #29
0
        public void MixedSelectSyntaxWorks()
        {
            var code = new[]
            {
                "Public Sub Test()",
                "Select Case Foo",
                @"Case 1: Debug.Print ""Foo""",
                "Case 2",
                @"Debug.Print ""Bar""",
                "End Select",
                "End Sub"
            };

            var expected = new[]
            {
                "Public Sub Test()",
                "    Select Case Foo",
                @"        Case 1: Debug.Print ""Foo""",
                "        Case 2",
                @"            Debug.Print ""Bar""",
                "    End Select",
                "End Sub"
            };

            var indenter = new Indenter(null, () =>
            {
                var s        = IndenterSettingsTests.GetMockIndenterSettings();
                s.IndentCase = true;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }
コード例 #30
0
        public void IndentSpacesSettingIsUsed()
        {
            var code = new[]
            {
                "Private Sub Test()",
                "If Foo Then",
                "Debug.Print",
                "End If",
                "End Sub"
            };

            var expected = new[]
            {
                "Private Sub Test()",
                "   If Foo Then",
                "      Debug.Print",
                "   End If",
                "End Sub"
            };

            var indenter = new Indenter(null, () =>
            {
                var s          = IndenterSettingsTests.GetMockIndenterSettings();
                s.IndentSpaces = 3;
                return(s);
            });
            var actual = indenter.Indent(code);

            Assert.IsTrue(expected.SequenceEqual(actual));
        }