Skip to content

Commit da42209

Browse files
Changes in AnalyzeDSCClass to be called only for class based resource
1 parent 823ac98 commit da42209

File tree

2 files changed

+56
-27
lines changed

2 files changed

+56
-27
lines changed

Rules/DscExamplesPresent.cs

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -75,41 +75,37 @@ public IEnumerable<DiagnosticRecord> AnalyzeDSCClass(Ast ast, string fileName)
7575
{
7676
String resourceName = null;
7777

78-
// Obtain class based resource name
79-
IEnumerable<Ast> typeDefinitionAsts = (ast.FindAll(dscAst => dscAst is TypeDefinitionAst, true));
80-
foreach (TypeDefinitionAst typeDefinitionAst in typeDefinitionAsts)
78+
IEnumerable<Ast> dscClasses = ast.FindAll(item =>
79+
item is TypeDefinitionAst
80+
&& ((item as TypeDefinitionAst).IsClass)
81+
&& (item as TypeDefinitionAst).Attributes.Any(attr => String.Equals("DSCResource", attr.TypeName.FullName, StringComparison.OrdinalIgnoreCase)), true);
82+
83+
foreach (TypeDefinitionAst dscClass in dscClasses)
8184
{
82-
var attributes = typeDefinitionAst.Attributes;
83-
foreach(var attribute in attributes)
85+
resourceName = dscClass.Name;
86+
87+
String examplesQuery = "*" + resourceName + "*";
88+
Boolean examplesPresent = false;
89+
String expectedExamplesPath = fileName + "\\..\\Examples";
90+
91+
// Verify examples are present
92+
if (Directory.Exists(expectedExamplesPath))
8493
{
85-
if (attribute.TypeName.FullName.Equals("DscResource"))
94+
DirectoryInfo examplesFolder = new DirectoryInfo(expectedExamplesPath);
95+
FileInfo[] exampleFiles = examplesFolder.GetFiles(examplesQuery);
96+
if (exampleFiles.Length != 0)
8697
{
87-
resourceName = typeDefinitionAst.Name;
98+
examplesPresent = true;
8899
}
89100
}
90-
}
91-
92-
String examplesQuery = "*" + resourceName + "*";
93-
Boolean examplesPresent = false;
94-
String expectedExamplesPath = fileName + "\\..\\Examples";
95101

96-
// Verify examples are present
97-
if (Directory.Exists(expectedExamplesPath))
98-
{
99-
DirectoryInfo examplesFolder = new DirectoryInfo(expectedExamplesPath);
100-
FileInfo[] exampleFiles = examplesFolder.GetFiles(examplesQuery);
101-
if (exampleFiles.Length != 0)
102+
// Return error if no examples present
103+
if (!examplesPresent)
102104
{
103-
examplesPresent = true;
105+
yield return new DiagnosticRecord(string.Format(CultureInfo.CurrentCulture, Strings.DscExamplesPresentNoExamplesError, resourceName),
106+
null, GetName(), DiagnosticSeverity.Information, fileName);
104107
}
105-
}
106-
107-
// Return error if no examples present
108-
if (!examplesPresent)
109-
{
110-
yield return new DiagnosticRecord(string.Format(CultureInfo.CurrentCulture, Strings.DscExamplesPresentNoExamplesError, resourceName),
111-
null, GetName(), DiagnosticSeverity.Information, fileName);
112-
}
108+
}
113109
}
114110

115111
/// <summary>

Tests/Rules/DscExamplesPresent.tests.ps1

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,39 @@ Describe "DscExamplesPresent rule in class based resource" {
3232
$noViolations.Count | Should Be 0
3333
}
3434

35+
Remove-Item -Path $examplesPath -Recurse -Force
36+
}
37+
}
38+
39+
Describe "DscExamplesPresent rule in regular (non-class) based resource" {
40+
41+
$examplesPath = "$currentPath\Examples"
42+
$resourcePath = "$currentPath\DSCResources\MSFT_WaitForAll\MSFT_WaitForAll.psm1"
43+
44+
Context "When examples absent" {
45+
46+
$violations = Invoke-ScriptAnalyzer -ErrorAction SilentlyContinue $resourcePath | Where-Object {$_.RuleName -eq $ruleName}
47+
$violationMessage = "No examples found for resource 'MSFT_WaitForAll'"
48+
49+
It "has 1 missing examples violation" {
50+
$violations.Count | Should Be 1
51+
}
52+
53+
It "has the correct description message" {
54+
$violations[0].Message | Should Match $violationMessage
55+
}
56+
}
57+
58+
Context "When examples present" {
59+
New-Item -Path $examplesPath -ItemType Directory
60+
New-Item -Path "$examplesPath\MSFT_WaitForAll_Example.psm1" -ItemType File
61+
62+
$noViolations = Invoke-ScriptAnalyzer -ErrorAction SilentlyContinue $resourcePath | Where-Object {$_.RuleName -eq $ruleName}
63+
64+
It "returns no violations" {
65+
$noViolations.Count | Should Be 0
66+
}
67+
3568
Remove-Item -Path $examplesPath -Recurse -Force
3669
}
3770
}

0 commit comments

Comments
 (0)