public void shouldExtractTheTextForTheNewProcByCallingConstructLinesOfProc()
            {
                var newProc    = @"
Public Sub NewMethod()
    DebugPrint ""a""
End Sub";
                var extraction = new Mock <ExtractMethodExtraction>()
                {
                    CallBase = true
                };
                IExtractMethodExtraction SUT = extraction.Object;
                var codeModule = new Mock <ICodeModuleWrapper>();
                var model      = new Mock <IExtractMethodModel>();
                var selection  = new Selection(1, 1, 1, 1);
                var methodMock = new Mock <ExtractedMethod>()
                {
                    CallBase = true
                };
                var method = methodMock.Object;

                method.Accessibility = Accessibility.Private;
                method.Parameters    = new List <ExtractedParameter>();
                method.MethodName    = "NewMethod";
                methodMock.Setup(m => m.NewMethodCall()).Returns("theMethodCall");
                model.Setup(m => m.PositionForNewMethod).Returns(selection);
                model.Setup(m => m.Method).Returns(method);
                extraction.Setup(em => em.constructLinesOfProc(It.IsAny <ICodeModuleWrapper>(), It.IsAny <IExtractMethodModel>())).Returns(newProc);

                SUT.apply(codeModule.Object, model.Object, selection);

                extraction.Verify(extr => extr.constructLinesOfProc(codeModule.Object, model.Object));
            }
            public void shouldInsertMethodCall()
            {
                var extraction = new Mock <ExtractMethodExtraction>()
                {
                    CallBase = true
                };
                IExtractMethodExtraction SUT = extraction.Object;
                var codeModule = new Mock <ICodeModuleWrapper>();
                var model      = new Mock <IExtractMethodModel>();
                var selection  = new Selection(7, 1, 7, 1);

                model.Setup(m => m.PositionForNewMethod).Returns(selection);
                var methodMock = new Mock <ExtractedMethod>()
                {
                    CallBase = true
                };
                var method = methodMock.Object;

                method.Accessibility = Accessibility.Private;
                method.Parameters    = new List <ExtractedParameter>();
                method.MethodName    = "NewMethod";
                methodMock.Setup(m => m.NewMethodCall()).Returns("theMethodCall");
                model.Setup(m => m.Method).Returns(method);

                extraction.Setup(em => em.constructLinesOfProc(It.IsAny <ICodeModuleWrapper>(), It.IsAny <IExtractMethodModel>())).Returns("theMethodCall");
                extraction.Setup(em => em.removeSelection(It.IsAny <ICodeModuleWrapper>(), It.IsAny <IEnumerable <Selection> >()));

                var inserted = new List <Tuple <int, string> >();

                codeModule.Setup(cm => cm.InsertLines(It.IsAny <int>(), It.IsAny <string>()))
                .Callback <int, string>((line, data) => inserted.Add(Tuple.Create(line, data)));

                SUT.apply(codeModule.Object, model.Object, selection);

                // selection.StartLine = 7
                var expected = Tuple.Create(7, "theMethodCall");
                var actual   = inserted[1];

                //Make sure the second insert inserted the methodCall higher up.
                Assert.AreEqual(expected, actual);
            }
        public void Refactor()
        {
            // TODO : move all this presenter code out

            /*
             * var presenter = _factory.Create();
             * if (presenter == null)
             * {
             *  OnInvalidSelection();
             *  return;
             * }
             *
             */
            var qualifiedSelection = _codeModule.QualifiedSelection;

            if (qualifiedSelection == null)
            {
                return;
            }

            var selection    = qualifiedSelection.Value.Selection;
            var selectedCode = _codeModule.GetLines(selection);
            var model        = _createMethodModel(qualifiedSelection, selectedCode);

            if (model == null)
            {
                return;
            }

            /*
             * var success = presenter.Show(model,_createProc);
             * if (!success)
             * {
             *  return;
             * }
             */

            _extraction.apply(_codeModule, model, selection);

            _onParseRequest(this);
        }
            public void shouldInsertNewMethodAtGivenLineNoBeforeInsertingMethodCall()
            {
                var newProc    = @"
Public Sub NewMethod()
    DebugPrint ""a""
End Sub";
                var extraction = new Mock <ExtractMethodExtraction>()
                {
                    CallBase = true
                };
                IExtractMethodExtraction SUT = extraction.Object;
                var codeModule = new Mock <ICodeModuleWrapper>();
                var model      = new Mock <IExtractMethodModel>();
                var selection  = new Selection(1, 1, 1, 1);

                model.Setup(m => m.PositionForNewMethod).Returns(selection);
                var method = new ExtractedMethod();

                method.Accessibility = Accessibility.Private;
                method.Parameters    = new List <ExtractedParameter>();
                method.MethodName    = "NewMethod";
                model.Setup(m => m.Method).Returns(method);
                extraction.Setup(em => em.constructLinesOfProc(It.IsAny <ICodeModuleWrapper>(), It.IsAny <IExtractMethodModel>())).Returns(newProc);
                extraction.Setup(em => em.removeSelection(It.IsAny <ICodeModuleWrapper>(), It.IsAny <IEnumerable <Selection> >()));

                var inserted = new List <Tuple <int, string> >();

                codeModule.Setup(cm => cm.InsertLines(It.IsAny <int>(), It.IsAny <string>())).Callback <int, string>((line, data) => inserted.Add(Tuple.Create(line, data)));
                SUT.apply(codeModule.Object, model.Object, selection);

                var expected = Tuple.Create(selection.StartLine, newProc);
                var actual   = inserted[0];

                //Make sure the first insert inserted the rows.
                Assert.AreEqual(expected, actual);
            }