using System.Collections.Generic;
using System.Collections;
private static string _testPackageName = "packageTestName";
private static string _testFileName = "packageReproTestFileName.eut.json";
private static string _testStepName = "stepTestName";
private static string _testFileName2 = "packageReproTestFileName.eut.json";
static void Main(string[] args)
Console.WriteLine("{0} serialized, result: ", typeof(Package));
Console.WriteLine(File.ReadAllText(_testFileName));
Assert.AreEqual(File.ReadAllText(_testFileName), File.ReadAllText(_testFileName2));
Console.WriteLine("It Worked!");
static void SaveAndLoadWithStep()
Package pkg = new Package(_testPackageName);
PrecedenceConstraint testPC = new PrecedenceConstraint(testStep.Name, StepPrecedenceValue.Completion);
testStep.PrecedenceConstraints.Add(testPC);
PackageIO.SaveAsJsonFile(pkg, _testFileName);
Package resultPkg = PackageIO.LoadFromJsonFile(_testFileName);
PackageIO.SaveAsJsonFile(resultPkg, _testFileName2);
public static class PackageIO
public static void SaveAsJsonFile(Package pkg, string FullyQualifiedFileName)
var options = new JsonSerializerOptions
jsonString = JsonSerializer.Serialize(pkg, options);
File.WriteAllText(FullyQualifiedFileName, jsonString);
public static Package LoadFromJsonFile(string FullyQualifiedFileName)
string jsonstring = File.ReadAllText(FullyQualifiedFileName);
result = JsonSerializer.Deserialize<Package>(jsonstring);
private Steps<Step> _steps;
_steps = new Steps<Step>();
public Package(string name) : this()
public enum StepExecStatus
private PrecedenceConstraints<PrecedenceConstraint> _precedenceConstraints;
private StepExecStatus _execStatus;
internal StepExecStatus ExecStatus
get { return _execStatus; }
set { _execStatus = value; }
internal StepExecStatus Execute()
return StepExecStatus.Completed;
public PrecedenceConstraints<PrecedenceConstraint> PrecedenceConstraints
get { return _precedenceConstraints; }
set { _precedenceConstraints = value; }
_precedenceConstraints = new PrecedenceConstraints<PrecedenceConstraint>();
_execStatus = StepExecStatus.Waiting;
public class Steps<T> : IList<T> where T:Step
private readonly List<T> _steps = new List<T>();
public T GetStepByPos(int pos)
#region Required implementation for IList
public int IndexOf(T item)
return _steps.IndexOf(item);
public void Insert(int index, T item)
_steps.Insert(index, item);
public void RemoveAt(int index)
public bool Contains(T item)
return _steps.Contains(item);
public void CopyTo(T[] array, int arrayIndex)
_steps.CopyTo(array, arrayIndex);
public bool Remove(T item)
return _steps.Remove(item);
IEnumerator<T> IEnumerable<T>.GetEnumerator()
return _steps.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
return _steps.GetEnumerator();
get { return _steps.Count; }
get { return _steps[index]; }
set { _steps[index] = value; }
public enum StepPrecedenceValue
public class PrecedenceConstraint
private string _sourceStepName;
private StepPrecedenceValue _constraintValue;
private bool _constraintMet;
public PrecedenceConstraint() { }
public PrecedenceConstraint(string itemName, StepPrecedenceValue value)
_sourceStepName = itemName;
_constraintValue = value;
public string SourceStepName
get { return _sourceStepName; }
set { _sourceStepName = value; }
public StepPrecedenceValue ConstraintValue
get { return _constraintValue; }
set { _constraintValue = value; }
public bool ConstraintMet
get { return GetConstraintMet(); }
set { _constraintMet = value; }
private bool GetConstraintMet()
public class PrecedenceConstraints<T> : IList<T> where T:PrecedenceConstraint
private readonly IList<T> _precedenceConstraints = new List<T>();
get { return _precedenceConstraints[index]; }
set { _precedenceConstraints[index] = value; }
get { return _precedenceConstraints.Count; }
_precedenceConstraints.Add(item);
_precedenceConstraints.Clear();
public bool Contains(T item)
return _precedenceConstraints.Contains(item);
public void CopyTo(T[] array, int arrayIndex)
_precedenceConstraints.CopyTo(array, arrayIndex);
public IEnumerator<T> GetEnumerator()
return _precedenceConstraints.GetEnumerator();
public int IndexOf(T item)
return _precedenceConstraints.IndexOf(item);
public void Insert(int index, T item)
_precedenceConstraints.Insert(index, item);
public bool Remove(T item)
return _precedenceConstraints.Remove(item);
public void RemoveAt(int index)
_precedenceConstraints.RemoveAt(index); ;
IEnumerator IEnumerable.GetEnumerator()
return _precedenceConstraints.GetEnumerator();
internal bool IsSatisfied()