MegaBites-AI/Windows-powershell
0372
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System;5using System.Collections.Generic;6using System.Management.Automation.Language;7using Xunit;8 9namespace PSTests.Parallel10{11 internal sealed class MyICustomAstVisitor2 : ICustomAstVisitor212 {13 public object DefaultVisit(Ast ast) => ast.GetType().Name;14 }15 16 internal sealed class MyDefaultCustomAstVisitor2 : DefaultCustomAstVisitor217 {18 public override object DefaultVisit(Ast ast) => ast.GetType().Name;19 }20 21 internal sealed class MyAstVisitor2 : AstVisitor222 {23 public List<string> Commands { get; }24 25 public MyAstVisitor2()26 {27 Commands = new List<string>();28 }29 30 public override AstVisitAction DefaultVisit(Ast ast)31 {32 if (ast is CommandAst commandAst && commandAst.CommandElements[0] is StringConstantExpressionAst str)33 {34 Commands.Add(str.Value);35 }36 37 return AstVisitAction.Continue;38 }39 }40 41 public static class AstDefaultVisitTests42 {43 [Fact]44 public static void TestCustomAstVisitor()45 {46 var ast = Parser.ParseInput("a | b", out _, out _);47 var expected = nameof(NamedBlockAst);48 49 var myVisitor1 = new MyICustomAstVisitor2();50 var result1 = ast.EndBlock.Accept(myVisitor1);51 Assert.Equal(expected, result1);52 53 var myVisitor2 = new MyDefaultCustomAstVisitor2();54 var result2 = ast.EndBlock.Accept(myVisitor2);55 Assert.Equal(expected, result2);56 }57 58 [Fact]59 public static void TestAstVisitor()60 {61 var ast = Parser.ParseInput("a | b", out _, out _);62 var myVisitor = new MyAstVisitor2();63 64 ast.Visit(myVisitor);65 Assert.Equal(2, myVisitor.Commands.Count);66 Assert.Equal("a", myVisitor.Commands[0]);67 Assert.Equal("b", myVisitor.Commands[1]);68 }69 }70}71 