public void SourceCodeReturnsContentForModule() { var codeModuleMock = new Mock <ICodeModule>(); codeModuleMock.Setup(m => m.Content()).Returns("TestTestTest"); var codeModule = codeModuleMock.Object; var module = new QualifiedModuleName("TestProject", string.Empty, "TestModule"); var projectsProvider = TestProvider(module, codeModule); var codePaneSourceHandler = new CodePaneSourceCodeHandler(projectsProvider); var expected = "TestTestTest"; var actual = codePaneSourceHandler.SourceCode(module); Assert.AreEqual(expected, actual); }
public void RewriteDoesNotRewriteIfNotDirty() { var codeModule = new Mock <ICodeModule>(); codeModule.Setup(m => m.Content()).Returns(string.Empty); codeModule.Setup(m => m.Clear()); var module = new QualifiedModuleName("TestProject", string.Empty, "TestModule"); var projectsProvider = TestProvider(module, codeModule.Object); var codePaneSourceHandler = new CodePaneSourceCodeHandler(projectsProvider); var tokenStream = new CommonTokenStream(new ListTokenSource(new List <IToken>())); var sut = new ModuleRewriter(module, tokenStream, codePaneSourceHandler); sut.Rewrite(); codeModule.Verify(m => m.Clear(), Times.Never); }
private static ICodePaneHandler InitializeSut(TestCodeString original, TestCodeString prettified, out Mock <ICodeModule> module, out Mock <ICodePane> pane) { var builder = new MockVbeBuilder(); var project = builder.ProjectBuilder("TestProject1", ProjectProtection.Unprotected) .AddComponent("Module1", ComponentType.StandardModule, ""); var vbe = builder.AddProject(project.Build()).Build(); module = new Mock <ICodeModule>(); pane = new Mock <ICodePane>(); pane.SetupProperty(m => m.Selection); module.Setup(m => m.DeleteLines(original.SnippetPosition.StartLine, original.SnippetPosition.LineCount)); module.Setup(m => m.InsertLines(original.SnippetPosition.StartLine, original.Code)); module.Setup(m => m.CodePane).Returns(pane.Object); module.Setup(m => m.GetLines(original.SnippetPosition)).Returns(prettified.Code); var sut = new CodePaneSourceCodeHandler(new ProjectsRepository(vbe.Object)); return(sut); }
public void RewriteClearsEntireModule() { var codeModule = new Mock <ICodeModule>(); codeModule.Setup(m => m.Clear()); var module = new QualifiedModuleName("TestProject", string.Empty, "TestModule"); var projectsProvider = TestProvider(module, codeModule.Object); var codePaneSourceHandler = new CodePaneSourceCodeHandler(projectsProvider); var tokenStream = new CommonTokenStream(new ListTokenSource(new List <IToken>())); var sut = new ModuleRewriter(module, tokenStream, codePaneSourceHandler); sut.InsertAfter(0, "test"); if (!sut.IsDirty) { sut.InsertBefore(0, "foo"); } sut.Rewrite(); codeModule.Verify(m => m.Clear()); }
public void AfterSubstituteCodeTheCorrespondingModuleContainsTheCodeProvided() { var code = "TestTestTest"; var codeModuleMock = new Mock <ICodeModule>(); codeModuleMock.Setup(m => m.Content()).Returns(() => code); codeModuleMock.Setup(m => m.CountOfLines).Returns(1); codeModuleMock.Setup(m => m.Clear()).Callback(() => code = string.Empty); codeModuleMock.Setup(m => m.InsertLines(It.IsAny <int>(), It.IsAny <string>())) .Callback((int start, string str) => code = code.Insert(start - 1, str)); var codeModule = codeModuleMock.Object; var module = new QualifiedModuleName("TestProject", string.Empty, "TestModule"); var projectsProvider = TestProvider(module, codeModule); var codePaneSourceHandler = new CodePaneSourceCodeHandler(projectsProvider); codePaneSourceHandler.SubstituteCode(module, "NewNewNew"); var expected = "NewNewNew"; var actual = codeModule.Content(); Assert.AreEqual(expected, actual); }
private static SmartConcatenationHandler InitializeSut(TestCodeString original, TestCodeString prettified, out Mock <ICodeModule> module, out Mock <ICodePane> pane, out AutoCompleteSettings settings) { var builder = new MockVbeBuilder(); var project = builder.ProjectBuilder("TestProject1", ProjectProtection.Unprotected) .AddComponent("Module1", ComponentType.StandardModule, ""); var vbe = builder.AddProject(project.Build()).Build(); module = new Mock <ICodeModule>(); pane = new Mock <ICodePane>(); pane.SetupProperty(m => m.Selection); var paneSelection = new Selection(original.SnippetPosition.StartLine + original.CaretPosition.StartLine, original.CaretPosition.StartColumn + 1); pane.Object.Selection = paneSelection; module.Setup(m => m.DeleteLines(original.SnippetPosition.StartLine, original.SnippetPosition.LineCount)); module.Setup(m => m.InsertLines(original.SnippetPosition.StartLine, original.Code)); module.Setup(m => m.CodePane).Returns(pane.Object); for (var i = 0; i < original.SnippetPosition.LineCount; i++) { var index = i; module.Setup(m => m.GetLines(index + 1, 1)).Returns(original.Lines[index]); } module.Setup(m => m.GetLines(original.SnippetPosition)).Returns(prettified.Code); module.Setup(m => m.GetLines(paneSelection.StartLine, paneSelection.LineCount)).Returns(prettified.CaretLine); settings = new AutoCompleteSettings { IsEnabled = true }; settings.SmartConcat.IsEnabled = true; settings.SmartConcat.ConcatVbNewLineModifier = ModifierKeySetting.CtrlKey; settings.SmartConcat.ConcatMaxLines = AutoCompleteSettings.ConcatMaxLinesMaxValue; var handler = new CodePaneSourceCodeHandler(new ProjectsRepository(vbe.Object)); var sut = new SmartConcatenationHandler(handler); return(sut); }
public static (SynchronousParseCoordinator parser, IRewritingManager rewritingManager) CreateWithRewriteManager(IVBE vbe, RubberduckParserState state, IProjectsRepository projectRepository, string serializedComProjectsPath = null) { var vbeVersion = double.Parse(vbe.Version, CultureInfo.InvariantCulture); var compilationArgumentsProvider = MockCompilationArgumentsProvider(vbeVersion); var compilationsArgumentsCache = new CompilationArgumentsCache(compilationArgumentsProvider); var path = serializedComProjectsPath ?? Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(typeof(MockParser)).Location), "Testfiles", "Resolver"); var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory(); var preprocessorParser = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory); var preprocessor = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache); var mainParseErrorListenerFactory = new MainParseErrorListenerFactory(); var mainTokenStreamParser = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory); var tokenStreamProvider = new SimpleVBAModuleTokenStreamProvider(); var stringParser = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor); var projectManager = new RepositoryProjectManager(projectRepository); var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager(); var supertypeClearer = new SynchronousSupertypeClearer(state); var parserStateManager = new SynchronousParserStateManager(state); var referenceRemover = new SynchronousReferenceRemover(state, moduleToModuleReferenceManager); var baseComDeserializer = new XmlComProjectSerializer(path); var comDeserializer = new StaticCachingComDeserializerDecorator(baseComDeserializer); var referencedDeclarationsCollector = new SerializedReferencedDeclarationsCollector(comDeserializer); var comSynchronizer = new SynchronousCOMReferenceSynchronizer( state, parserStateManager, projectRepository, referencedDeclarationsCollector); var builtInDeclarationLoader = new BuiltInDeclarationLoader( state, new List <ICustomDeclarationLoader> { new DebugDeclarations(state), new SpecialFormDeclarations(state), new FormEventDeclarations(state), new AliasDeclarations(state), }); var codePaneSourceCodeHandler = new CodePaneSourceCodeHandler(projectRepository); //We use the same handler because to achieve consistency between the return values. var attributesSourceCodeHandler = codePaneSourceCodeHandler; var moduleParser = new ModuleParser( codePaneSourceCodeHandler, attributesSourceCodeHandler, stringParser); var parseRunner = new SynchronousParseRunner( state, parserStateManager, moduleParser); var declarationResolveRunner = new SynchronousDeclarationResolveRunner( state, parserStateManager, comSynchronizer); var referenceResolveRunner = new SynchronousReferenceResolveRunner( state, parserStateManager, moduleToModuleReferenceManager, referenceRemover); var parsingStageService = new ParsingStageService( comSynchronizer, builtInDeclarationLoader, parseRunner, declarationResolveRunner, referenceResolveRunner ); var parsingCacheService = new ParsingCacheService( state, moduleToModuleReferenceManager, referenceRemover, supertypeClearer, compilationsArgumentsCache ); var tokenStreamCache = new StateTokenStreamCache(state); var moduleRewriterFactory = new ModuleRewriterFactory( codePaneSourceCodeHandler, attributesSourceCodeHandler); var rewriterProvider = new RewriterProvider(tokenStreamCache, moduleRewriterFactory); var rewriteSessionFactory = new RewriteSessionFactory(state, rewriterProvider); var rewritingManager = new RewritingManager(rewriteSessionFactory); var parser = new SynchronousParseCoordinator( state, parsingStageService, parsingCacheService, projectManager, parserStateManager, rewritingManager); return(parser, rewritingManager); }
// vbe is the com coclass interface from the interop assembly. // There is no shared interface between VBA and VB6 types, hence object. internal Parser(object vbe) : this() { if (_parser != null) { throw new InvalidOperationException("ParserState is already initialized."); } _vbe = RootComWrapperFactory.GetVbeWrapper(vbe); _vbeEvents = VBEEvents.Initialize(_vbe); var declarationFinderFactory = new ConcurrentlyConstructedDeclarationFinderFactory(); var projectRepository = new ProjectsRepository(_vbe); _state = new RubberduckParserState(_vbe, projectRepository, declarationFinderFactory, _vbeEvents); _state.StateChanged += _state_StateChanged; var vbeVersion = double.Parse(_vbe.Version, CultureInfo.InvariantCulture); var predefinedCompilationConstants = new VBAPredefinedCompilationConstants(vbeVersion); var typeLibProvider = new TypeLibWrapperProvider(projectRepository); var compilationArgumentsProvider = new CompilationArgumentsProvider(typeLibProvider, _dispatcher, predefinedCompilationConstants); var compilationsArgumentsCache = new CompilationArgumentsCache(compilationArgumentsProvider); var preprocessorErrorListenerFactory = new PreprocessingParseErrorListenerFactory(); var preprocessorParser = new VBAPreprocessorParser(preprocessorErrorListenerFactory, preprocessorErrorListenerFactory); var preprocessor = new VBAPreprocessor(preprocessorParser, compilationsArgumentsCache); var mainParseErrorListenerFactory = new MainParseErrorListenerFactory(); var mainTokenStreamParser = new VBATokenStreamParser(mainParseErrorListenerFactory, mainParseErrorListenerFactory); var tokenStreamProvider = new SimpleVBAModuleTokenStreamProvider(); var stringParser = new TokenStreamParserStringParserAdapterWithPreprocessing(tokenStreamProvider, mainTokenStreamParser, preprocessor); var projectManager = new RepositoryProjectManager(projectRepository); var moduleToModuleReferenceManager = new ModuleToModuleReferenceManager(); var parserStateManager = new ParserStateManager(_state); var referenceRemover = new ReferenceRemover(_state, moduleToModuleReferenceManager); var supertypeClearer = new SupertypeClearer(_state); var comLibraryProvider = new ComLibraryProvider(); var referencedDeclarationsCollector = new LibraryReferencedDeclarationsCollector(comLibraryProvider); var comSynchronizer = new COMReferenceSynchronizer(_state, parserStateManager, projectRepository, referencedDeclarationsCollector); var builtInDeclarationLoader = new BuiltInDeclarationLoader( _state, new List <ICustomDeclarationLoader> { new DebugDeclarations(_state), new SpecialFormDeclarations(_state), new FormEventDeclarations(_state), new AliasDeclarations(_state), //new RubberduckApiDeclarations(_state) } ); var codePaneSourceCodeHandler = new CodePaneSourceCodeHandler(projectRepository); var sourceFileHandler = _vbe.TempSourceFileHandler; var attributesSourceCodeHandler = new SourceFileHandlerSourceCodeHandlerAdapter(sourceFileHandler, projectRepository); var moduleParser = new ModuleParser( codePaneSourceCodeHandler, attributesSourceCodeHandler, stringParser); var parseRunner = new ParseRunner( _state, parserStateManager, moduleParser); var declarationResolveRunner = new DeclarationResolveRunner( _state, parserStateManager, comSynchronizer); var referenceResolveRunner = new ReferenceResolveRunner( _state, parserStateManager, moduleToModuleReferenceManager, referenceRemover); var parsingStageService = new ParsingStageService( comSynchronizer, builtInDeclarationLoader, parseRunner, declarationResolveRunner, referenceResolveRunner ); var parsingCacheService = new ParsingCacheService( _state, moduleToModuleReferenceManager, referenceRemover, supertypeClearer, compilationsArgumentsCache ); _parser = new SynchronousParseCoordinator( _state, parsingStageService, parsingCacheService, projectManager, parserStateManager ); }