My BDD Naming Macro


Update: this blog is no longer active. For new posts and RSS subscriptions, please go to http://saintgimp.org.

Over the years several people have shared the Visual Studio macros they use to make the BDD boxcar naming style easier to work with.  I thought I’d add my own, not because it’s any better than the others but because it’s built for a slightly different workflow and someone might find it useful.

First, here’s the macro:

Imports System

Imports System.Windows.Forms

Imports EnvDTE

Imports EnvDTE80

Imports System.Diagnostics

 

Public Module BDDNaming

 

    Public Sub ReplaceSpacesInTestNameWithUnderscores()

        If DTE.ActiveDocument Is Nothing Then Return

 

        Dim selection As TextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)

        If selection.IsEmpty Then

            ReplaceSpacesAtEditPoint(selection)

        Else

            ReplaceSpacesInSelection(selection)

        End If

    End Sub

 

    Private Sub ReplaceSpacesInSelection(ByVal selection As TextSelection)

        Dim text As String = selection.Text

        text = text.ToLower()

        text = text.Replace(” “, “_”)

        text = text.Replace(“”””, String.Empty)

        selection.Text = text

    End Sub

 

    Private Sub ReplaceSpacesAtEditPoint(ByVal selection As TextSelection)

        selection.CharLeft(True, 1)

        While selection.Text(0) <> “””” AndAlso (Not selection.ActivePoint.AtStartOfLine)

            selection.CharLeft(True, 1)

        End While

 

        If selection.Text(0) = “””” Then

            ReplaceSpacesInSelection(selection)

            DeleteTrailingQuote(selection)

        Else

            selection.CharRight(False, 1)

        End If

    End Sub

 

    Private Sub DeleteTrailingQuote(ByVal selection As TextSelection)

        selection.CharRight(True, 1)

        If selection.Text(0) = “””” Then

            selection.Delete()

        Else

            selection.CharLeft(False, 1)

        End If

    End Sub

End Module

 

I usually bind this macro to Alt– (Alt-[dash]) because it’s easy to remember and it’s not bound by default to anything important.

To use it, I start by typing an open quote mark where I want to type a BDD context or spec name.  I use Resharper so it automatically inserts two quote marks for me, but the macro works equally well without Resharper.  The quotes prevent Intellisense from freaking out as I start to type the context or spec name:

    public class “”

Then I type the context or spec name as a normal sentence using the space bar like so:

    public class “when a message with no eligible listeners is sent”

Then I hit Alt– to convert the sentence to a proper boxcar-style identifier:

    public class when_a_message_with_no_eligible_listeners_is_sent

I can also highlight any arbitrary piece of text and hit Alt– to convert the spaces to underscores.

Other people like to put a lot of boilerplate code into the macro to make it easier to set up contexts and specs quickly, but I prefer this macro that does just one thing and does it well.  Hopefully someone else will find it useful too!

Comments (2)

  1. smaclell says:

    Cool macros! Thank you for sharing.

    Are you using the Machine.Specifications framework? I am not sure if the other BDD frameworks support this but it might be handy to support both apostrophes (‘ as in it’s)and qoutes (" as in "phrase"). The syntax for each is pretty straight forward with it_s naturally becoming it’s and __phrase__ becoming "phrase".

  2. Eric Lee says:

    @smaclell Yes, I’m using MSpec and you’re right, those would be handy MSpec features to support, though I haven’t taken advantage of them much in my own work yet, which is why they’re not built into the macro.  If you get around to adding that support, let me know!