• Lexical
Show / Hide Table of Contents
  • Lexical.FileSystem
    • Introduction
    • Abstractions
      • IFileSystem
        • IFileSystem
        • IFileSystemBrowse
        • IFileSystemCreateDirectory
        • IFileSystemDelete
        • IFileSystemFileAttribute
        • IFileSystemMount
        • IFileSystemMove
        • IFileSystemObserve
        • IFileSystemOpen
      • IEvent
      • IEntry
      • IOption
      • IToken
    • FileSystem
    • VirtualFileSystem
    • MemoryFileSystem
    • EmbeddedFileSystem
    • HttpFileSystem
    • Decoration
    • IFileProvider
    • Utility
      • DisposeList
      • FileScanner
      • VisitTree
      • File Operation
  • Lexical.FileProvider
    • Introduction
    • Package
    • Package.Abstractions
    • Root
    • Zip
    • Dll
    • SharpCompress
    • SharpZipLib
    • FileScanner
    • Utils
  • Lexical.Localization
    • Introduction
    • Tutorial
    • Asset
      • IAsset
      • IStringAsset
    • Line
      • ILine
      • ILineFactory
      • ILineRoot
      • ILineFormat
      • ILineLogger
      • LineComparer
    • File
      • ILineReader
      • ILineWriter
      • Ini
      • Json
      • Xml
      • Resx
      • Resources
    • Miscellaneous
      • Plurality
      • ICulturePolicy
      • IStringFormat
      • Dependency Injection
    • Practices
      • Class Library
      • Class Library DI
      • Class Library DI opt.
  • Lexical.Utilities
    • Introduction
    • UnicodeString
    • FileScanner
    • Permutation
    • Tuples
    • StructList

Lexical.Utils.Permutation

Lexical.Utils.Permutation is a class library for unit testing. It's a toolkit for feeding different variations of parameters.

PermutationSetup is populated with properties and possible values.

PermutationSetup permutation = new PermutationSetup();

// Add property "Color"
permutation.Add("Color", "Red");
permutation.Add("Color", "Green");
permutation.Add("Color", "Blue");

// Add property "Number"
permutation.Add("Number", "10");
permutation.Add("Number", "100");
permutation.Add("Number", "1000");

// Add property "Size"
permutation.Add("Size", "Small");
permutation.Add("Size", "Medium");
permutation.Add("Size", "Large");

Every scenario can be iterated.

foreach (Scenario scenario in permutation.Scenarios)
{
    string color = scenario["Color"].Name;
    string number = scenario["Number"].Name;
    string size = scenario["Size"].Name;

    Console.WriteLine($"Color={color}, Number={number}, Size={size}");
}

The result. (Click here)

Color=Red, Number=10, Size=Small
Color=Green, Number=10, Size=Small
Color=Blue, Number=10, Size=Small
Color=Red, Number=100, Size=Small
Color=Green, Number=100, Size=Small
Color=Blue, Number=100, Size=Small
Color=Red, Number=1000, Size=Small
Color=Green, Number=1000, Size=Small
Color=Blue, Number=1000, Size=Small
Color=Red, Number=10, Size=Medium
Color=Green, Number=10, Size=Medium
Color=Blue, Number=10, Size=Medium
Color=Red, Number=100, Size=Medium
Color=Green, Number=100, Size=Medium
Color=Blue, Number=100, Size=Medium
Color=Red, Number=1000, Size=Medium
Color=Green, Number=1000, Size=Medium
Color=Blue, Number=1000, Size=Medium
Color=Red, Number=10, Size=Large
Color=Green, Number=10, Size=Large
Color=Blue, Number=10, Size=Large
Color=Red, Number=100, Size=Large
Color=Green, Number=100, Size=Large
Color=Blue, Number=100, Size=Large
Color=Red, Number=1000, Size=Large
Color=Green, Number=1000, Size=Large
Color=Blue, Number=1000, Size=Large

Each value can be associated with an object. The object is initialized with a delegate Func<Run, object>, and can be cleaned with another delegate Action<Run>.

PermutationSetup permutation = new PermutationSetup();

// Add property "Color"
permutation.Add("Color", "Red", null, run => Color.Red, run => { /*finalizer here*/ });
permutation.Add("Color", "Green", null, run => Color.Green);
permutation.Add("Color", "Blue", null, run => Color.Blue);

// Add property "Number"
permutation.Add("Number", "10", null, run => 10);
permutation.Add("Number", "100", null, run => 100);
permutation.Add("Number", "1000", null, run => 1000);

// Add property "Size"
permutation.Add("Size", "Small", null, run => Size.Small);
permutation.Add("Size", "Medium", null, run => Size.Medium);
permutation.Add("Size", "Large", null, run => Size.Large);

Use Run() to execute the initializers and finalizers.

foreach (Scenario scenario in permutation.Scenarios)
{
    using (Run run = scenario.Run().Initialize())
    {
        Color color = (Color)run["Color"];
        int number = (int)run["Number"];
        Size size = (Size)run["Size"];

        Console.WriteLine($"Color={color}, Number={number}, Size={size}");
    }
}

Enums used in this permutation

enum Color { Red, Green, Blue }
enum Size { Small, Medium, Large }
Back to top Copyright © 2015-2020 Toni Kalajainen