-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Write tests ... #13
Comments
humm j'ai un peu de retard sur pester ... pas encore regarder comment fonctionnait le nouveau module depuis le breaking change de la 5.0 |
Le recherche du code perso dans un test a changé (rapido BeforeAll pour le partage de code), la syntaxe des assertions not be en -not -be et le formatage de sortie par défaut et d'autres trucs. Mais pour un usage basique tu passes un peu de temps à retrouver tes marques...
A l'origine je voulais essayer qq chose comme ça, en ayant à l'esprit la progression du code : $Break1=New-CodeUseCase 'Break absent' @'
$grade = 92
'@
$Break2=New-CodeUseCase 'Break IF without Break' @'
$Break1
if ($grade -ge 90) { "Grade A"}
'@
$Break3=New-CodeUseCase 'Break IFElse without Break' @'
$Break2
Else {"Grade B"}
'@ Mais au bout de 10 cas on a peut de mal à savoir ce que l'on manipule. Le New-CodeUseCase existe car je n'ai pas réussi à redéfinir la méthode ToString sur une hashtable $h=@{
Name='test'
Code=' if ($grade -ge 90) { "Grade A"}'
}|
Add-Member -MemberType ScriptMethod -name ToString { $This.Code} -Force -PassThru
"$h"
#System.Collections.Hashtable
"$($h.tostring())"
#if ($grade -ge 90) { "Grade A"}' Mais j'ai peut être loupé une marche... Je vais simplifier en : Function UseCase{
#New-PSCustomObjectFunction -Noun CodeUseCase -Parameters Name,Code -file
param(
[Parameter(Mandatory=$True,position=0)]
$Name,
[Parameter(Mandatory=$True,position=1)]
$Code
)
return $PSBoundParameters
}
$CodeUseCases=@(
UseCase 'Break IFElse without Break' @'
$grade = 92
elseif ($grade -ge 80) { "Grade B"}
'@
# UseCase ...
) |
$h=@{
Name='test'
Code={if($a){"x"}}
} non ? du coup h.code et hop ! surement raté klk chose aussi xD |
Oui tout à fait. |
En attendant une PR : #FlowChartCore init
$ModulePath='C:\Users\Laurent\Downloads\FlowChartCore\Code\bin\Debug\netstandard2.0'
if (-Not (Test-Path Env:GRAPHVIZ_DOT))
{ $Env:GRAPHVIZ_DOT='C:\Tools\Graphviz\bin' }
unblock-File "$ModulePath\DotNetGraph.dll"
unblock-File "$ModulePath\FlowchartCore.dll"
#first time, close and open PS console
Import-Module "$ModulePath\FlowchartCore.dll"
Function New-CodeUseCase{
#New-PSCustomObjectFunction -Noun CodeUseCase -Parameters Name,Code -file
param(
[Parameter(Mandatory=$True,position=0)]
[String] $Name,
[Parameter(Mandatory=$True,position=1)]
[ScriptBlock] $Code
)
@{
Name=$Name;
Code=$Code;
}
}
$CodeUseCases=@(
#Todo cas sans résultat
# New-CodeUseCase 'Break absent' {
# $grade = 92
# }
New-CodeUseCase 'Break IF without Break' {
$grade = 92
if ($grade -ge 90) { "Grade A"}
}
New-CodeUseCase 'Break IFElse without Break' {
$grade = 92
if ($grade -ge 90) { "Grade A"}
Else {"Grade B"}
}
New-CodeUseCase 'Break ElseIF without Break' {
$grade = 92
if ($grade -ge 90) { "Grade A"}
elseif ($grade -ge 80) { "Grade B"}
}
New-CodeUseCase 'Break at the end of code' {
$grade = 92
if ($grade -ge 90) { "Grade A"}
Break
}
New-CodeUseCase 'Break inside IF block' {
$grade = 92
if ($grade -ge 90) { "Grade A";Break}
}
#todo Token IF
New-CodeUseCase 'Break IF ElseIF Else' {
$grade = 92
if ($grade -ge 90) { "Grade A" }
elseif ($grade -ge 70) { "Grade C"}
else { "Grade D"}
}
#NOK
New-CodeUseCase 'Break IF ElseIF' {
$grade = 92
if ($grade -ge 90) { "Grade A" }
elseif ($grade -ge 70) { "Grade C"}
}
#NOK
New-CodeUseCase 'Break IF inside For loop' {
for ($i = 1; ; ++$i)
{
if ($i * $i -gt 50)
{
Get-ChildItem
}
}
}
)
# BeforeAll {
# $script:Parameters=@{
# AsText=$false
# NoDisplay=$true
# Strict=$true
# }
# #F°
# }
Describe "FlowChartCode " {
Context "When there is no violation" {
#On cherche à savoir si un type de construction est géré ou pas.
#Chacune des ces constructions doit renvoyer un résultat
It "<Name>." -TestCases $CodeUseCases {
param($Name,$Code)
$script:Result=$script:OutView=$script:OutViewAsText=$null
#Pas d'exception
{ [System.Diagnostics.CodeAnalysis.SuppressMessage('PSUseDeclaredVarsMoreThanAssigments', '')]
$script:Result=Find-FLowChartNodes -ScriptBlock $Code } | Should -Not -Throw
#Le résultat doit être renseigné
$script:Result |Should -Not -BeNullOrEmpty
{ [System.Diagnostics.CodeAnalysis.SuppressMessage('PSUseDeclaredVarsMoreThanAssigments', '')]
$script:OutView=New-FLowChartGraph -Nodes $script:Result} | Should -Not -Throw
$script:OutView |Should -Not -BeNullOrEmpty
# Même chose mais avec -CodeAsText
{ [System.Diagnostics.CodeAnalysis.SuppressMessage('PSUseDeclaredVarsMoreThanAssigments', '')]
$script:OutViewAsText=New-FLowChartGraph -Nodes $script:Result -CodeAsText} | Should -Not -Throw
$script:OutViewAsText|Should -Not -BeNullOrEmpty
}
}
} Il reste des chemins codés en dur à modifier ( avec un module on pourrait s'en affranchir). |
top! |
Par contre pourquoi l'histoire du path de graphviz @LaurentDardenne, je ne vois pas en quoi ça peut nous servir. il faut la dernière version de pester ? |
ok top! |
Peut être as-tu + chemins où il est installé, le mode verbose donne qq infos. Pour l'usage de graphviz : Write-FUGraph -InputObject $r -ShowGraph
export-PSGraph : Could not find GraphViz installed on this system. Please run 'Install-GraphViz' to install the needed
binaries and libraries. This module just a wrapper around GraphViz and is looking for it in the following paths:
C:\Program Files\NuGet\Packages\Graphviz*\dot.exe or C:\program files*\GraphViz*\bin\dot.exe or /usr/local/bin/dot or
/usr/bin/dot. Optionally pass a path to your dot.exe file with the GraphVizPath parameter
Au caractère C:\Users\Laurent\Downloads\PSFunctionExplorer\PSFunctionExplorer\PSFunctionExplorer.psm1:348 : 26
+ $graph | export-PSGraph @ExportAttrib Il existe une dépendance mais pas de contrôle sur son existence/accès |
Et surtout le module PSGraph fige le chemin d'installation... |
J'ai supprimé ma réponse sur l'histoire du path, j'ai oublié que les liens pointaient sur le référentiel cité... |
oh petard .. j'utilise tellement plus windows powershell sur ma machine ... il fallait en passer par la pour installer le module ... du coup faut que je check comment t as fait mais ça à l air top ! jamais écris des tests comme ça !!! very interessant ! |
par contre je comprends pas le test foire, mais quand je le fais manuellement ça fonctionne .. ! étrange |
Je regarde ça. |
Peut être un pb d'encodage de fichier... param($Name,$Code)
$code=[scriptblock]::Create("$code") repro: cd ..\FlowChartCore\Test\dev
$r=. .\Switch.UseCases.ps1
$Result=Find-FLowChartNodes -ScriptBlock ($r[-2].code)
$OutView=New-FLowChartGraph -Nodes $Result -CodeAsText
#New-FLowChartGraph : L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.
#Nom du paramètre : length Le référentiel est à jour de ton côté ? Que l'on utilise la même version. |
Pour retrouver le nœud posant pb: $Result=Find-FLowChartNodes -ScriptBlock ($r[-2].code)
$result[1].Children|%{write-host "$_";$_}|% {New-FLowChartGraph -Nodes $_ -CodeAsText}
#FlowChartCore.SwitchCaseNode
#New-FLowChartGraph : L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.
#Nom du paramètre : length
#FlowChartCore.SwitchCaseNode
#digraph "a" {
... Directement : New-FLowChartGraph -Nodes $result[1].Children[0] -CodeAsText
|
Vérifie si la classe ContinueNode doit redéclarer la méthode OffSetScriptBlockEnd. |
effectivement, il manquait un appel de méthode. |
Dans la branche Dev est-ce à dessein ? |
j'ai mergé avec la master |
Ok, les tests réussissent dorénavant. |
Il faudrait modifier le nom du fichier sur cette ligne . Il n'était pas dans la branche Dev. Et pour rappel ce fichier ne contient pas de tests fonctionnel. Invoke-Pester -Path .\Test -Output Detailed -ExcludeTagFilter 'DevUseCases' Et si tu veux le laisser, dans ce cas renommer le tag en 'UseCases' et simplifier : Invoke-Pester -Path .\Test -Output Detailed |
Au cas où j'ai trouvé ceci : |
C# tests
PS Tests
The text was updated successfully, but these errors were encountered: