diff --git a/Rubberduck.Parsing/Symbols/AliasDeclarations.cs b/Rubberduck.Parsing/Symbols/AliasDeclarations.cs index 1076d6015e..d2936b82b1 100644 --- a/Rubberduck.Parsing/Symbols/AliasDeclarations.cs +++ b/Rubberduck.Parsing/Symbols/AliasDeclarations.cs @@ -68,20 +68,21 @@ private IReadOnlyList AddAliasDeclarations() private void UpdateAliasFunctionModulesFromReferencedProjects(RubberduckParserState state) { - _conversionModule = state.AllDeclarations.SingleOrDefault( - item => item.IdentifierName == "Conversion" && item.Scope == "VBE7.DLL;VBA.Conversion"); + var finder = new DeclarationFinder(state.AllDeclarations, new CommentNode[] { }, new IAnnotation[] { }); - _fileSystemModule = state.AllDeclarations.SingleOrDefault( - item => item.IdentifierName == "FileSystem" && item.Scope == "VBE7.DLL;VBA.FileSystem"); - - _interactionModule = state.AllDeclarations.SingleOrDefault( - item => item.IdentifierName == "Interaction" && item.Scope == "VBE7.DLL;VBA.Interaction"); - - _stringsModule = state.AllDeclarations.SingleOrDefault( - item => item.IdentifierName == "Strings" && item.Scope == "VBE7.DLL;VBA.Strings"); + var vba = finder.FindProject("VBA"); + if (vba == null) + { + // If the VBA project is null, we haven't loaded any COM references; + // we're in a unit test and the mock project didn't setup any references. + return; + } - _dateTimeModule = state.AllDeclarations.SingleOrDefault( - item => item.IdentifierName == "DateTime" && item.Scope == "VBE7.DLL;VBA.DateTime"); + _conversionModule = finder.FindStdModule("Conversion", vba, true); + _fileSystemModule = finder.FindStdModule("FileSystem", vba, true); + _interactionModule = finder.FindStdModule("Interaction", vba, true); + _stringsModule = finder.FindStdModule("Strings", vba, true); + _dateTimeModule = finder.FindStdModule("DateTime", vba, true); } @@ -130,8 +131,7 @@ private List FunctionAliasesWithoutParameters() private FunctionDeclaration ErrorFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Conversion"), "Error"), + new QualifiedMemberName(_conversionModule.QualifiedName.QualifiedModuleName, "Error"), _conversionModule, _conversionModule, "Variant", @@ -149,8 +149,7 @@ private FunctionDeclaration ErrorFunction() private FunctionDeclaration HexFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Conversion"), "Hex"), + new QualifiedMemberName(_conversionModule.QualifiedName.QualifiedModuleName, "Hex"), _conversionModule, _conversionModule, "Variant", @@ -168,8 +167,7 @@ private FunctionDeclaration HexFunction() private FunctionDeclaration OctFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Conversion"), "Oct"), + new QualifiedMemberName(_conversionModule.QualifiedName.QualifiedModuleName, "Oct"), _conversionModule, _conversionModule, "Variant", @@ -187,8 +185,7 @@ private FunctionDeclaration OctFunction() private FunctionDeclaration StrFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Conversion"), "Str"), + new QualifiedMemberName(_conversionModule.QualifiedName.QualifiedModuleName, "Str"), _conversionModule, _conversionModule, "Variant", @@ -206,8 +203,7 @@ private FunctionDeclaration StrFunction() private FunctionDeclaration CurDirFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "FileSystem"), "CurDir"), + new QualifiedMemberName(_fileSystemModule.QualifiedName.QualifiedModuleName, "CurDir"), _fileSystemModule, _fileSystemModule, "Variant", @@ -225,8 +221,7 @@ private FunctionDeclaration CurDirFunction() private FunctionDeclaration CommandFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Interaction"), "Command"), + new QualifiedMemberName(_interactionModule.QualifiedName.QualifiedModuleName, "Command"), _interactionModule, _interactionModule, "Variant", @@ -244,8 +239,7 @@ private FunctionDeclaration CommandFunction() private FunctionDeclaration EnvironFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Interaction"), "Environ"), + new QualifiedMemberName(_interactionModule.QualifiedName.QualifiedModuleName, "Environ"), _interactionModule, _interactionModule, "Variant", @@ -263,8 +257,7 @@ private FunctionDeclaration EnvironFunction() private FunctionDeclaration ChrFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Chr"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "Chr"), _stringsModule, _stringsModule, "Variant", @@ -282,8 +275,7 @@ private FunctionDeclaration ChrFunction() private FunctionDeclaration ChrwFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "ChrW"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "ChrW"), _stringsModule, _stringsModule, "Variant", @@ -301,8 +293,7 @@ private FunctionDeclaration ChrwFunction() private FunctionDeclaration FormatFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Format"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "Format"), _stringsModule, _stringsModule, "Variant", @@ -320,8 +311,7 @@ private FunctionDeclaration FormatFunction() private FunctionDeclaration LCaseFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "LCase"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "LCase"), _stringsModule, _stringsModule, "Variant", @@ -339,8 +329,7 @@ private FunctionDeclaration LCaseFunction() private FunctionDeclaration LeftFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Left"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "Left"), _stringsModule, _stringsModule, "Variant", @@ -358,8 +347,7 @@ private FunctionDeclaration LeftFunction() private FunctionDeclaration LeftBFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "LeftB"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "LeftB"), _stringsModule, _stringsModule, "Variant", @@ -377,8 +365,7 @@ private FunctionDeclaration LeftBFunction() private FunctionDeclaration LTrimFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "LTrim"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "LTrim"), _stringsModule, _stringsModule, "Variant", @@ -396,8 +383,7 @@ private FunctionDeclaration LTrimFunction() private FunctionDeclaration MidFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Mid"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "Mid"), _stringsModule, _stringsModule, "Variant", @@ -415,8 +401,7 @@ private FunctionDeclaration MidFunction() private FunctionDeclaration MidBFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "MidB"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "MidB"), _stringsModule, _stringsModule, "Variant", @@ -434,8 +419,7 @@ private FunctionDeclaration MidBFunction() private FunctionDeclaration TrimFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Trim"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "Trim"), _stringsModule, _stringsModule, "Variant", @@ -453,8 +437,7 @@ private FunctionDeclaration TrimFunction() private FunctionDeclaration RightFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Right"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "Right"), _stringsModule, _stringsModule, "Variant", @@ -472,8 +455,7 @@ private FunctionDeclaration RightFunction() private FunctionDeclaration RightBFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "RightB"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "RightB"), _stringsModule, _stringsModule, "Variant", @@ -491,8 +473,7 @@ private FunctionDeclaration RightBFunction() private FunctionDeclaration RTrimFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "RTrim"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "RTrim"), _stringsModule, _stringsModule, "Variant", @@ -510,8 +491,7 @@ private FunctionDeclaration RTrimFunction() private FunctionDeclaration UCaseFunction() { return new FunctionDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "UCase"), + new QualifiedMemberName(_stringsModule.QualifiedName.QualifiedModuleName, "UCase"), _stringsModule, _stringsModule, "Variant", diff --git a/Rubberduck.Parsing/Symbols/DebugDeclarations.cs b/Rubberduck.Parsing/Symbols/DebugDeclarations.cs index 885d045d07..53a3268bd2 100644 --- a/Rubberduck.Parsing/Symbols/DebugDeclarations.cs +++ b/Rubberduck.Parsing/Symbols/DebugDeclarations.cs @@ -10,21 +10,23 @@ namespace Rubberduck.Parsing.Symbols public class DebugDeclarations : ICustomDeclarationLoader { public static Declaration DebugPrint; - private readonly DeclarationFinder _finder; + private readonly RubberduckParserState _state; public DebugDeclarations(RubberduckParserState state) { - _finder = new DeclarationFinder(state.AllDeclarations, new CommentNode[] { }, new IAnnotation[] { }); + _state = state; } public IReadOnlyList Load() { - if (ThereIsAGlobalBuiltInErrVariableDeclaration(_finder)) + var finder = new DeclarationFinder(_state.AllDeclarations, new CommentNode[] { }, new IAnnotation[] { }); + + if (ThereIsAGlobalBuiltInErrVariableDeclaration(finder)) { return new List(); } - var vba = _finder.FindProject("VBA"); + var vba = finder.FindProject("VBA"); if (vba == null) { // If the VBA project is null, we haven't loaded any COM references; diff --git a/Rubberduck.Parsing/Symbols/FormEventDeclarations.cs b/Rubberduck.Parsing/Symbols/FormEventDeclarations.cs index a0d558af19..dfb1d0e763 100644 --- a/Rubberduck.Parsing/Symbols/FormEventDeclarations.cs +++ b/Rubberduck.Parsing/Symbols/FormEventDeclarations.cs @@ -2,6 +2,7 @@ using System.Linq; using Rubberduck.Parsing.VBA; using Rubberduck.VBEditor; +using Rubberduck.Parsing.Annotations; namespace Rubberduck.Parsing.Symbols { @@ -28,8 +29,17 @@ public IReadOnlyList Load() private static Declaration FormsClassModuleFromParserState(RubberduckParserState state) { - return state.AllDeclarations.LastOrDefault(declaration => declaration.DeclarationType == DeclarationType.ClassModule - && declaration.Scope == "FM20.DLL;MSForms.FormEvents"); + var finder = new DeclarationFinder(state.AllDeclarations, new CommentNode[] { }, new IAnnotation[] { }); + + var msForms = finder.FindProject("MSForms"); + if (msForms == null) + { + // If the VBA project is null, we haven't loaded any COM references; + // we're in a unit test and the mock project didn't setup any references. + return null; + } + + return finder.FindStdModule("FormEvents", msForms, true); } @@ -61,10 +71,9 @@ private IReadOnlyList AddHiddenMSFormDeclarations(Declaration forms private static Declaration UserFormActivateEvent(Declaration formsClassModule) { return new Declaration( - new QualifiedMemberName( - new QualifiedModuleName("MSForms", "C:\\WINDOWS\\system32\\FM20.DLL", "FormEvents"), "Activate"), + new QualifiedMemberName(formsClassModule.QualifiedName.QualifiedModuleName, "Activate"), formsClassModule, - "FM20.DLL;MSForms.FormEvents", + formsClassModule.Scope, string.Empty, string.Empty, false, @@ -78,10 +87,9 @@ private static Declaration UserFormActivateEvent(Declaration formsClassModule) private static Declaration UserFormDeactivateEvent(Declaration formsClassModule) { return new Declaration( - new QualifiedMemberName( - new QualifiedModuleName("MSForms", "C:\\WINDOWS\\system32\\FM20.DLL", "FormEvents"), "Deactivate"), + new QualifiedMemberName(formsClassModule.QualifiedName.QualifiedModuleName, "Deactivate"), formsClassModule, - "FM20.DLL;MSForms.FormEvents", + formsClassModule.Scope, string.Empty, string.Empty, false, @@ -95,10 +103,9 @@ private static Declaration UserFormDeactivateEvent(Declaration formsClassModule) private static Declaration UserFormInitializeEvent(Declaration formsClassModule) { return new Declaration( - new QualifiedMemberName( - new QualifiedModuleName("MSForms", "C:\\WINDOWS\\system32\\FM20.DLL", "FormEvents"), "Initialize"), + new QualifiedMemberName(formsClassModule.QualifiedName.QualifiedModuleName, "Initialize"), formsClassModule, - "FM20.DLL;MSForms.FormEvents", + formsClassModule.Scope, string.Empty, string.Empty, false, @@ -112,10 +119,9 @@ private static Declaration UserFormInitializeEvent(Declaration formsClassModule) private static Declaration UserFormQueryCloseEvent(Declaration formsClassModule) { return new Declaration( - new QualifiedMemberName( - new QualifiedModuleName("MSForms", "C:\\WINDOWS\\system32\\FM20.DLL", "FormEvents"), "QueryClose"), + new QualifiedMemberName(formsClassModule.QualifiedName.QualifiedModuleName, "QueryClose"), formsClassModule, - "FM20.DLL;MSForms.FormEvents", + formsClassModule.Scope, string.Empty, string.Empty, false, @@ -129,8 +135,7 @@ private static Declaration UserFormQueryCloseEvent(Declaration formsClassModule) private static ParameterDeclaration UserFormQueryCloseEventCancelParameter(Declaration userFormQueryCloseEvent) { return new ParameterDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("MSForms", "C:\\WINDOWS\\system32\\FM20.DLL", "FormEvents"), "Cancel"), + new QualifiedMemberName(userFormQueryCloseEvent.QualifiedName.QualifiedModuleName, "Cancel"), userFormQueryCloseEvent, null, new Selection(), @@ -144,8 +149,7 @@ private static ParameterDeclaration UserFormQueryCloseEventCancelParameter(Decla private static ParameterDeclaration UserFormQueryCloseEventCloseModeParameter(Declaration userFormQueryCloseEvent) { return new ParameterDeclaration( - new QualifiedMemberName( - new QualifiedModuleName("MSForms", "C:\\WINDOWS\\system32\\FM20.DLL", "FormEvents"), "CloseMode"), + new QualifiedMemberName(userFormQueryCloseEvent.QualifiedName.QualifiedModuleName, "CloseMode"), userFormQueryCloseEvent, null, new Selection(), @@ -159,10 +163,9 @@ private static ParameterDeclaration UserFormQueryCloseEventCloseModeParameter(De private static Declaration UserFormResizeEvent(Declaration formsClassModule) { return new Declaration( - new QualifiedMemberName( - new QualifiedModuleName("MSForms", "C:\\WINDOWS\\system32\\FM20.DLL", "FormEvents"), "Resize"), + new QualifiedMemberName(formsClassModule.QualifiedName.QualifiedModuleName, "Resize"), formsClassModule, - "FM20.DLL;MSForms.FormEvents", + formsClassModule.Scope, string.Empty, string.Empty, false, @@ -176,10 +179,9 @@ private static Declaration UserFormResizeEvent(Declaration formsClassModule) private static Declaration UserFormTerminateEvent(Declaration formsClassModule) { return new Declaration( - new QualifiedMemberName( - new QualifiedModuleName("MSForms", "C:\\WINDOWS\\system32\\FM20.DLL", "FormEvents"), "Terminate"), + new QualifiedMemberName(formsClassModule.QualifiedName.QualifiedModuleName, "Terminate"), formsClassModule, - "FM20.DLL;MSForms.FormEvents", + formsClassModule.Scope, string.Empty, string.Empty, false, diff --git a/RubberduckTests/Refactoring/ExtractMethod/ExtractMethodParameterClassificationTests.cs b/RubberduckTests/Refactoring/ExtractMethod/ExtractMethodParameterClassificationTests.cs index eb4e9d4935..96983e6f99 100644 --- a/RubberduckTests/Refactoring/ExtractMethod/ExtractMethodParameterClassificationTests.cs +++ b/RubberduckTests/Refactoring/ExtractMethod/ExtractMethodParameterClassificationTests.cs @@ -53,8 +53,8 @@ public void shouldUseEachRuleInRulesCollectionToCheckEachReference() sut.classifyDeclarations(qSelection, declaration); //Assert - // 2 rules on 1 referencdes = 2 validation checks - var expectedToVerify = 2; + // 2 rules on 2 references = 4 validation checks + var expectedToVerify = 4; emRule.Verify(emr => emr.setValidFlag(It.IsAny(), selection), Times.Exactly(expectedToVerify)); diff --git a/RubberduckTests/RubberduckTests.csproj b/RubberduckTests/RubberduckTests.csproj index 91c2bb3e24..2dc2c781c6 100644 --- a/RubberduckTests/RubberduckTests.csproj +++ b/RubberduckTests/RubberduckTests.csproj @@ -89,7 +89,18 @@ - + + + + + + + + + + + + diff --git a/RubberduckTests/Symbols/AccessibilityCheckTests.cs b/RubberduckTests/Symbols/AccessibilityCheckTests.cs index 58ae03ffb8..50738ef1c2 100644 --- a/RubberduckTests/Symbols/AccessibilityCheckTests.cs +++ b/RubberduckTests/Symbols/AccessibilityCheckTests.cs @@ -462,7 +462,7 @@ public void PrivateEnumsAreNotAccessibleFromOtherModules() [TestMethod] - public void PublicEnumsInNonPrivateProceduralModulesAreNotAcessibleFromOtherProjects() + public void PublicEnumsInNonPrivateProceduralModulesAreAccessibleFromOtherProjects() { var calleeProjectDeclatation = GetTestProject("callee_test_project"); var calleeModuleDeclatation = GetTestProceduralModule(calleeProjectDeclatation, "callee_test_Module"); @@ -476,7 +476,7 @@ public void PublicEnumsInNonPrivateProceduralModulesAreNotAcessibleFromOtherProj [TestMethod] - public void GlobalEnumsInNonPrivateProceduralModulesAreNotAcessibleFromOtherProjects() + public void GlobalEnumsInNonPrivateProceduralModulesAreAccessibleFromOtherProjects() { var calleeProjectDeclatation = GetTestProject("callee_test_project"); var calleeModuleDeclatation = GetTestProceduralModule(calleeProjectDeclatation, "callee_test_Module"); @@ -490,7 +490,7 @@ public void GlobalEnumsInNonPrivateProceduralModulesAreNotAcessibleFromOtherProj [TestMethod] - public void ImplicitelyScopedEnumsInNonPrivateProceduralModulesAreNotAcessibleFromOtherProjects() + public void ImplicitelyScopedEnumsInNonPrivateProceduralModulesAreAccessibleFromOtherProjects() { var calleeProjectDeclatation = GetTestProject("callee_test_project"); var calleeModuleDeclatation = GetTestProceduralModule(calleeProjectDeclatation, "callee_test_Module"); @@ -503,6 +503,48 @@ public void ImplicitelyScopedEnumsInNonPrivateProceduralModulesAreNotAcessibleFr } + [TestMethod] + public void PublicEnumsInExposedClassesAreNotAccessibleFromOtherProjects() + { + var calleeProjectDeclatation = GetTestProject("callee_test_project"); + var calleeModuleDeclaration = GetTestClassModule(calleeProjectDeclatation, "callee_test_Module", true); + var enumDeclarartion = GetTestEnum(calleeModuleDeclaration, "x", Accessibility.Public); + var callingProjectDeclatation = GetTestProject("calling_test_project"); + var callingModuleDeclatation = GetTestClassModule(callingProjectDeclatation, "calling_test_Module"); + var functionDeclaration = GetTestFunction(callingModuleDeclatation, "callingFoo", Accessibility.Private); + + Assert.IsTrue(AccessibilityCheck.IsAccessible(callingProjectDeclatation, callingModuleDeclatation, functionDeclaration, enumDeclarartion)); + } + + + [TestMethod] + public void GlobalEnumsInExposedClassesAreAccessibleFromOtherProjects() + { + var calleeProjectDeclatation = GetTestProject("callee_test_project"); + var calleeModuleDeclaration = GetTestClassModule(calleeProjectDeclatation, "callee_test_Module", true); + var enumDeclarartion = GetTestEnum(calleeModuleDeclaration, "x", Accessibility.Global); + var callingProjectDeclatation = GetTestProject("calling_test_project"); + var callingModuleDeclatation = GetTestClassModule(callingProjectDeclatation, "calling_test_Module"); + var functionDeclaration = GetTestFunction(callingModuleDeclatation, "callingFoo", Accessibility.Private); + + Assert.IsTrue(AccessibilityCheck.IsAccessible(callingProjectDeclatation, callingModuleDeclatation, functionDeclaration, enumDeclarartion)); + } + + + [TestMethod] + public void ImplicitelyScopedEnumsInExposedClassesAreAcessibleFromOtherProjects() + { + var calleeProjectDeclatation = GetTestProject("callee_test_project"); + var calleeModuleDeclaration = GetTestClassModule(calleeProjectDeclatation, "callee_test_Module", true); + var enumDeclarartion = GetTestEnum(calleeModuleDeclaration, "x", Accessibility.Implicit); + var callingProjectDeclatation = GetTestProject("calling_test_project"); + var callingModuleDeclatation = GetTestClassModule(callingProjectDeclatation, "calling_test_Module"); + var functionDeclaration = GetTestFunction(callingModuleDeclatation, "callingFoo", Accessibility.Private); + + Assert.IsTrue(AccessibilityCheck.IsAccessible(callingProjectDeclatation, callingModuleDeclatation, functionDeclaration, enumDeclarartion)); + } + + //user type tests diff --git a/RubberduckTests/Symbols/PropertyGetDeclarationTests.cs b/RubberduckTests/Symbols/PropertyGetDeclarationTests.cs new file mode 100644 index 0000000000..a914723660 --- /dev/null +++ b/RubberduckTests/Symbols/PropertyGetDeclarationTests.cs @@ -0,0 +1,79 @@ +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Linq; +using Rubberduck.Parsing.Symbols; +using Rubberduck.VBEditor; +using Rubberduck.Parsing.VBA; + +namespace RubberduckTests.Symbols +{ + [TestClass] + public class PropertyGetDeclarationTests + { + [TestMethod] + public void PropertyGetsHaveDeclarationTypePropertyGet() + { + var propertyGet = GetTestPropertyGet("test", null); + + Assert.IsTrue(propertyGet.DeclarationType.HasFlag(DeclarationType.PropertyGet)); + } + + private static PropertyGetDeclaration GetTestPropertyGet(string name, Attributes attributes) + { + var qualifiedName = new QualifiedMemberName(StubQualifiedModuleName(), name); + return new PropertyGetDeclaration(qualifiedName, null, null, "test", null, "test", Accessibility.Implicit, null, Selection.Home, false, false, null, attributes); + } + + private static QualifiedModuleName StubQualifiedModuleName() + { + return new QualifiedModuleName("dummy", "dummy", "dummy"); + } + + + [TestMethod] + public void ByDefaultPropertyGetsDoNotHaveParameters() + { + var propertyGet = GetTestPropertyGet("test", null); + + Assert.IsFalse(propertyGet.Parameters.Any()); + } + + + [TestMethod] + public void ParametersReturnsTheParametersAddedViaAddParameters() + { + var propertyGet = GetTestPropertyGet("test", null); + var inputParameter = GetTestParameter("testParameter", false, false, false); + propertyGet.AddParameter(inputParameter); + var returnedParameter = propertyGet.Parameters.SingleOrDefault(); + + Assert.AreEqual(returnedParameter, inputParameter); + } + + private static ParameterDeclaration GetTestParameter(string name, bool isOptional, bool isByRef, bool isParamArray) + { + var qualifiedParameterName = new QualifiedMemberName(StubQualifiedModuleName(), name); + return new ParameterDeclaration(qualifiedParameterName, null, "test", null, "test", isOptional, isByRef, false, isParamArray); + } + + + [TestMethod] + public void ByDefaultPropertyGetsAreNotDefaultMembers() + { + var propertyGet = GetTestPropertyGet("test", null); + + Assert.IsFalse(propertyGet.IsDefaultMember); + } + + + [TestMethod] + public void PropertyGetsAreDefaultMembersIfTheyHaveTheDefaultMemberAttribute() + { + var attributes = new Attributes(); + attributes.AddDefaultMemberAttribute("test"); + var propertyGet = GetTestPropertyGet("test", attributes); + + Assert.IsTrue(propertyGet.IsDefaultMember); + } + } +} diff --git a/RubberduckTests/Symbols/PropertyLetDeclarationTests.cs b/RubberduckTests/Symbols/PropertyLetDeclarationTests.cs new file mode 100644 index 0000000000..21daa24d63 --- /dev/null +++ b/RubberduckTests/Symbols/PropertyLetDeclarationTests.cs @@ -0,0 +1,79 @@ +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Linq; +using Rubberduck.Parsing.Symbols; +using Rubberduck.VBEditor; +using Rubberduck.Parsing.VBA; + +namespace RubberduckTests.Symbols +{ + [TestClass] + public class PropertyLetDeclarationTests + { + [TestMethod] + public void PropertyLetsHaveDeclarationTypePropertyLet() + { + var propertyLet = GetTestPropertyLet("test", null); + + Assert.IsTrue(propertyLet.DeclarationType.HasFlag(DeclarationType.PropertyLet)); + } + + private static PropertyLetDeclaration GetTestPropertyLet(string name, Attributes attributes) + { + var qualifiedName = new QualifiedMemberName(StubQualifiedModuleName(), name); + return new PropertyLetDeclaration(qualifiedName, null, null, "test", Accessibility.Implicit, null, Selection.Home, false, null, attributes); + } + + private static QualifiedModuleName StubQualifiedModuleName() + { + return new QualifiedModuleName("dummy", "dummy", "dummy"); + } + + + [TestMethod] + public void ByDefaultPropertyLetsDoNotHaveParameters() + { + var propertyLet = GetTestPropertyLet("test", null); + + Assert.IsFalse(propertyLet.Parameters.Any()); + } + + + [TestMethod] + public void ParametersReturnsTheParametersAddedViaAddParameters() + { + var propertyLet = GetTestPropertyLet("test", null); + var inputParameter = GetTestParameter("testParameter", false, false, false); + propertyLet.AddParameter(inputParameter); + var returnedParameter = propertyLet.Parameters.SingleOrDefault(); + + Assert.AreEqual(returnedParameter, inputParameter); + } + + private static ParameterDeclaration GetTestParameter(string name, bool isOptional, bool isByRef, bool isParamArray) + { + var qualifiedParameterName = new QualifiedMemberName(StubQualifiedModuleName(), name); + return new ParameterDeclaration(qualifiedParameterName, null, "test", null, "test", isOptional, isByRef, false, isParamArray); + } + + + [TestMethod] + public void ByDefaultPropertyLetsAreNotDefaultMembers() + { + var propertyLet = GetTestPropertyLet("test", null); + + Assert.IsFalse(propertyLet.IsDefaultMember); + } + + + [TestMethod] + public void PropertyLetsAreDefaultMembersIfTheyHaveTheDefaultMemberAttribute() + { + var attributes = new Attributes(); + attributes.AddDefaultMemberAttribute("test"); + var propertyLet = GetTestPropertyLet("test", attributes); + + Assert.IsTrue(propertyLet.IsDefaultMember); + } + } +} diff --git a/RubberduckTests/Symbols/PropertySetDeclarationTests.cs b/RubberduckTests/Symbols/PropertySetDeclarationTests.cs new file mode 100644 index 0000000000..e34bcb12c3 --- /dev/null +++ b/RubberduckTests/Symbols/PropertySetDeclarationTests.cs @@ -0,0 +1,79 @@ +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Linq; +using Rubberduck.Parsing.Symbols; +using Rubberduck.VBEditor; +using Rubberduck.Parsing.VBA; + +namespace RubberduckTests.Symbols +{ + [TestClass] + public class PropertySetDeclarationTests + { + [TestMethod] + public void PropertySetsHaveDeclarationTypePropertySet() + { + var propertySet = GetTestPropertySet("test", null); + + Assert.IsTrue(propertySet.DeclarationType.HasFlag(DeclarationType.PropertySet)); + } + + private static PropertySetDeclaration GetTestPropertySet(string name, Attributes attributes) + { + var qualifiedName = new QualifiedMemberName(StubQualifiedModuleName(), name); + return new PropertySetDeclaration(qualifiedName, null, null, "test", Accessibility.Implicit, null, Selection.Home, false, null, attributes); + } + + private static QualifiedModuleName StubQualifiedModuleName() + { + return new QualifiedModuleName("dummy", "dummy", "dummy"); + } + + + [TestMethod] + public void ByDefaultPropertySetsDoNotHaveParameters() + { + var propertySet = GetTestPropertySet("test", null); + + Assert.IsFalse(propertySet.Parameters.Any()); + } + + + [TestMethod] + public void ParametersReturnsTheParametersAddedViaAddParameters() + { + var propertySet = GetTestPropertySet("test", null); + var inputParameter = GetTestParameter("testParameter", false, false, false); + propertySet.AddParameter(inputParameter); + var returnedParameter = propertySet.Parameters.SingleOrDefault(); + + Assert.AreEqual(returnedParameter, inputParameter); + } + + private static ParameterDeclaration GetTestParameter(string name, bool isOptional, bool isByRef, bool isParamArray) + { + var qualifiedParameterName = new QualifiedMemberName(StubQualifiedModuleName(), name); + return new ParameterDeclaration(qualifiedParameterName, null, "test", null, "test", isOptional, isByRef, false, isParamArray); + } + + + [TestMethod] + public void ByDefaultPropertySetsAreNotDefaultMembers() + { + var propertySet = GetTestPropertySet("test", null); + + Assert.IsFalse(propertySet.IsDefaultMember); + } + + + [TestMethod] + public void PropertySetsAreDefaultMembersIfTheyHaveTheDefaultMemberAttribute() + { + var attributes = new Attributes(); + attributes.AddDefaultMemberAttribute("test"); + var propertySet = GetTestPropertySet("test", attributes); + + Assert.IsTrue(propertySet.IsDefaultMember); + } + } +}