MET08RESIHGCV - v2.43.4 - MethodBaseName

This commit is contained in:
2022-08-08 16:26:42 -07:00
parent 8bb1dcded7
commit 5d15be7ce2
44 changed files with 1402 additions and 358 deletions

View File

@ -26,10 +26,13 @@ namespace Adaptation._Tests.Shared;
public class AdaptationTesting : ISMTP
{
protected readonly string _DummyRoot;
protected readonly string _Environment;
protected readonly string _HostNameAndPort;
protected readonly bool _HasWaitForProperty;
protected readonly TestContext _TestContext;
protected readonly bool _SkipEquipmentDictionary;
protected readonly string _TestContextPropertiesAsJson;
protected readonly Dictionary<string, CellInstanceVersion> _CellInstanceVersions;
protected readonly Dictionary<string, EquipmentTypeVersion> _EquipmentTypeVersions;
protected readonly Dictionary<string, string> _ParameterizedModelObjectDefinitionTypes;
@ -38,10 +41,13 @@ public class AdaptationTesting : ISMTP
protected readonly Dictionary<string, IList<ModelObjectParameterDefinition>> _ModelObjectParameters;
protected readonly Dictionary<string, List<Tuple<string, string>>> _EquipmentDictionaryEventDescriptions;
public string DummyRoot => _DummyRoot;
public string Environment => _Environment;
public TestContext TestContext => _TestContext;
public string HostNameAndPort => _HostNameAndPort;
public bool HasWaitForProperty => _HasWaitForProperty;
public bool SkipEquipmentDictionary => _SkipEquipmentDictionary;
public string TestContextPropertiesAsJson => _TestContextPropertiesAsJson;
public Dictionary<string, CellInstanceVersion> CellInstanceVersions => _CellInstanceVersions;
public Dictionary<string, EquipmentTypeVersion> EquipmentTypeVersions => _EquipmentTypeVersions;
public Dictionary<string, IList<ModelObjectParameterDefinition>> ModelObjectParameters => _ModelObjectParameters;
@ -56,17 +62,22 @@ public class AdaptationTesting : ISMTP
void ISMTP.SendNormalPriorityEmailMessage(string subject, string body) => throw new NotImplementedException();
public AdaptationTesting(TestContext testContext, bool skipEquipmentDictionary)
public AdaptationTesting(string dummyRoot, TestContext testContext, bool skipEquipmentDictionary, string testContextPropertiesAsJson, bool hasWaitForProperty)
{
string environment = GetEnvironment(testContext);
string hostNameAndPort = GetHostNameAndPort(environment);
_DummyRoot = dummyRoot;
_TestContext = testContext;
_Environment = environment;
_HostNameAndPort = hostNameAndPort;
_HasWaitForProperty = hasWaitForProperty;
_SkipEquipmentDictionary = skipEquipmentDictionary;
_TestContextPropertiesAsJson = testContextPropertiesAsJson;
_CellInstanceVersions = new Dictionary<string, CellInstanceVersion>();
_EquipmentTypeVersions = new Dictionary<string, EquipmentTypeVersion>();
_EquipmentTypeVersions = new Dictionary<string, EquipmentTypeVersion>();
_ParameterizedModelObjectDefinitionTypes = new Dictionary<string, string>();
_ParameterizedModelObjectDefinitionTypes = new Dictionary<string, string>();
_EquipmentDictionaryVersions = new Dictionary<string, EquipmentDictionaryVersion>();
_FileConnectorConfigurations = new Dictionary<string, FileConnectorConfiguration>();
@ -94,23 +105,28 @@ public class AdaptationTesting : ISMTP
return result;
}
protected string GetTestResultsDirectory()
public static string GetTestResultsDirectory(string testContextTestResultsDirectory, bool hasWaitForProperty)
{
string result = string.Empty;
string testResults = "05_TestResults";
string checkDirectory = _TestContext.TestResultsDirectory;
if (string.IsNullOrEmpty(checkDirectory) || !checkDirectory.Contains(testResults))
throw new Exception();
string rootDirectory = Path.GetPathRoot(checkDirectory);
for (int i = 0; i < int.MaxValue; i++)
string checkDirectory = testContextTestResultsDirectory;
if (hasWaitForProperty && (string.IsNullOrEmpty(checkDirectory) || !checkDirectory.Contains(testResults)))
throw new Exception($"A:{checkDirectory}; B:{testResults};");
else if (!hasWaitForProperty && (string.IsNullOrEmpty(checkDirectory) || !checkDirectory.Contains(testResults)))
result = testContextTestResultsDirectory;
else
{
checkDirectory = Path.GetDirectoryName(checkDirectory);
if (string.IsNullOrEmpty(checkDirectory) || checkDirectory == rootDirectory)
break;
if (checkDirectory.EndsWith(testResults) && Directory.Exists(checkDirectory))
string rootDirectory = Path.GetPathRoot(checkDirectory);
for (int i = 0; i < int.MaxValue; i++)
{
result = checkDirectory;
break;
checkDirectory = Path.GetDirectoryName(checkDirectory);
if (string.IsNullOrEmpty(checkDirectory) || checkDirectory == rootDirectory)
break;
if (checkDirectory.EndsWith(testResults) && Directory.Exists(checkDirectory))
{
result = checkDirectory;
break;
}
}
}
if (string.IsNullOrEmpty(result))
@ -118,6 +134,12 @@ public class AdaptationTesting : ISMTP
return result;
}
private string GetTestResultsDirectory(bool hasWaitForProperty)
{
string result = GetTestResultsDirectory(_TestContext.TestResultsDirectory, hasWaitForProperty);
return result;
}
protected static string GetCellInstanceConnectionName(string cellInstanceConnectionName)
{
string result;
@ -170,28 +192,29 @@ public class AdaptationTesting : ISMTP
return results;
}
internal string[] GetSegments(string methodBaseName)
public static MethodBaseName GetMethodBaseName(string dummyRoot, string environment, bool hasWaitForProperty, string methodBaseName, string testResultsDirectory)
{
List<string> results;
string fileFullName;
MethodBaseName result;
string comment;
string[] textFiles;
string fileFullName;
string dummyDirectory;
string withActualCICN;
string separator = "__";
string textFileDirectory;
string connectionNameAndTicks;
string cellInstanceConnectionName;
string ticks = DateTime.Now.Ticks.ToString();
string cellInstanceConnectionNameFromMethodBaseName;
string testResultsDirectory = GetTestResultsDirectory();
string[] segments = methodBaseName.Split(new string[] { separator }, StringSplitOptions.None);
if (segments[0] != _Environment)
if (segments[0] != environment)
throw new Exception();
string rawVersionName = segments[1];
string rawCellInstanceName = segments[2];
string cellInstanceVersionName = segments[1].Replace('_', '.');
string cellInstanceName = segments[2].Replace('_', '-').Replace("_EQPT", "-EQPT");
string before = string.Concat(_Environment, separator, rawVersionName, separator, cellInstanceName, separator);
string before = string.Concat(environment, separator, rawVersionName, separator, cellInstanceName, separator);
string after = methodBaseName.Substring(before.Length);
string versionDirectory = Path.Combine(testResultsDirectory, _Environment, cellInstanceName, cellInstanceVersionName);
string versionDirectory = Path.Combine(testResultsDirectory, environment, cellInstanceName, cellInstanceVersionName);
if (!Directory.Exists(versionDirectory))
_ = Directory.CreateDirectory(versionDirectory);
comment = segments[segments.Length - 1];
@ -221,87 +244,76 @@ public class AdaptationTesting : ISMTP
cellInstanceConnectionNameFromMethodBaseName = after;
}
cellInstanceConnectionName = GetCellInstanceConnectionName(cellInstanceConnectionNameFromMethodBaseName);
string methodBaseNameWithActualCICN = GetMethodBaseNameWithActualCICN(methodBaseName, rawCellInstanceName, cellInstanceConnectionNameFromMethodBaseName, cellInstanceConnectionName, ticks);
withActualCICN = GetMethodBaseNameWithActualCICN(methodBaseName, rawCellInstanceName, cellInstanceConnectionNameFromMethodBaseName, cellInstanceConnectionName, ticks);
if (hasWaitForProperty)
dummyDirectory = string.Empty;
else if (string.IsNullOrEmpty(ticks))
dummyDirectory = string.Empty;
else
{
if (string.IsNullOrEmpty(dummyRoot))
throw new Exception($"{nameof(dummyRoot)} is empty!");
if (!withActualCICN.Contains(ticks))
throw new Exception($"{withActualCICN} doesn't contain {ticks}!");
segments = withActualCICN.Split(new string[] { ticks }, StringSplitOptions.None);
dummyDirectory = Path.Combine(dummyRoot, cellInstanceName, ticks, string.Join(null, segments));
if (!Directory.Exists(dummyDirectory))
_ = Directory.CreateDirectory(dummyDirectory);
}
if (string.IsNullOrEmpty(ticks))
{
textFiles = Array.Empty<string>();
fileFullName = Path.Combine(versionDirectory, methodBaseNameWithActualCICN, $"{cellInstanceConnectionNameFromMethodBaseName}.json");
textFileDirectory = string.Empty;
fileFullName = Path.Combine(versionDirectory, withActualCICN, $"{cellInstanceConnectionNameFromMethodBaseName}.json");
}
else
{
segments = methodBaseNameWithActualCICN.Split(new string[] { ticks }, StringSplitOptions.None);
string textDirectory = Path.Combine(versionDirectory, segments[0], string.Concat(ticks, segments[1]));
segments = withActualCICN.Split(new string[] { ticks }, StringSplitOptions.None);
textFileDirectory = Path.Combine(versionDirectory, segments[0], string.Concat(ticks, segments[1]));
fileFullName = Path.Combine(versionDirectory, segments[0], $"{cellInstanceConnectionNameFromMethodBaseName}.json");
if (!Directory.Exists(textDirectory))
}
result = new(after, before, cellInstanceConnectionName, cellInstanceConnectionNameFromMethodBaseName, cellInstanceName, cellInstanceVersionName, comment, dummyDirectory, fileFullName, rawCellInstanceName, rawVersionName, separator, testResultsDirectory, textFileDirectory, ticks, versionDirectory, withActualCICN);
return result;
}
private MethodBaseName GetMethodBaseName(MethodBase methodBase)
{
MethodBaseName result;
string testResultsDirectory = GetTestResultsDirectory(_HasWaitForProperty);
result = GetMethodBaseName(_DummyRoot, _Environment, _HasWaitForProperty, methodBase.Name, testResultsDirectory);
return result;
}
private string[] GetTextFiles(MethodBaseName mbn)
{
string[] results;
if (string.IsNullOrEmpty(mbn.TextFileDirectory))
results = Array.Empty<string>();
else if (!Directory.Exists(mbn.TextFileDirectory))
{
results = Array.Empty<string>();
if (!_HasWaitForProperty)
_ = Directory.CreateDirectory(mbn.TextFileDirectory);
else
{
textFiles = Array.Empty<string>();
string renameDirectory = Path.Combine(Path.GetDirectoryName(textDirectory), $"_Rename - {Path.GetFileName(textDirectory)}");
string renameDirectory = Path.Combine(Path.GetDirectoryName(mbn.TextFileDirectory), $"_Rename - {Path.GetFileName(mbn.TextFileDirectory)}");
_ = Directory.CreateDirectory(renameDirectory);
_ = Process.Start("explorer.exe", renameDirectory);
File.WriteAllText(Path.Combine(renameDirectory, $"{nameof(FileConnectorConfiguration.SourceFileFilter)}.txt"), string.Empty);
File.WriteAllText(Path.Combine(renameDirectory, $"{nameof(FileConnectorConfiguration.SourceFileLocation)}.txt"), string.Empty);
}
else
}
else
{
results = Directory.GetFiles(mbn.TextFileDirectory, "*.txt", SearchOption.TopDirectoryOnly);
if (!string.IsNullOrEmpty(mbn.Ticks) && _HasWaitForProperty && !results.Any())
{
textFiles = Directory.GetFiles(textDirectory, "*.txt", SearchOption.TopDirectoryOnly);
if (!textFiles.Any())
{
_ = Process.Start("explorer.exe", textDirectory);
File.WriteAllText(Path.Combine(textDirectory, "_ Why.why"), string.Empty);
}
_ = Process.Start("explorer.exe", mbn.TextFileDirectory);
File.WriteAllText(Path.Combine(mbn.TextFileDirectory, "_ Why.why"), string.Empty);
}
}
results = new List<string>
{
_Environment,
rawCellInstanceName,
cellInstanceName,
cellInstanceVersionName,
cellInstanceConnectionNameFromMethodBaseName,
cellInstanceConnectionName,
ticks,
comment,
fileFullName
};
results.AddRange(textFiles);
return results.ToArray();
}
internal string[] GetSegments(MethodBase methodBase)
{
string[] results = GetSegments(methodBase.Name);
return results;
}
internal static string GetEnvironment(string[] segments) => segments[0];
internal static string GetRawCellInstanceName(string[] segments) => segments[1];
internal static string GetCellInstanceName(string[] segments) => segments[2];
internal static string GetCellInstanceVersionName(string[] segments) => segments[3];
internal static string GetCellInstanceConnectionNameFromMethodBaseName(string[] segments) => segments[4];
internal static string GetCellInstanceConnectionName(string[] segments) => segments[5];
internal static string GetTicks(string[] segments) => segments[6];
internal static string GetComment(string[] segments) => segments[7];
internal static FileInfo GetFileName(string[] segments) => new(segments[8]);
internal static string[] GetTextFiles(string[] segments)
{
List<string> results = new();
if (segments.Length > 8)
{
for (int i = 9; i < segments.Length; i++)
results.Add(segments[i]);
}
return results.ToArray();
}
protected static Stream ToStream(string @this)
{
MemoryStream memoryStream = new();
@ -466,6 +478,7 @@ public class AdaptationTesting : ISMTP
AppendLine("#pragma warning disable CA2254").
AppendLine("#pragma warning disable IDE0060").
AppendLine().
AppendLine("internal static string DummyRoot { get; private set; }").
Append("internal static ").Append(cellInstanceNameWithoutHyphen).AppendLine(" EAFLoggingUnitTesting { get; private set; }");
else
throw new Exception();
@ -474,13 +487,15 @@ public class AdaptationTesting : ISMTP
else if (i == 1)
_ = stringBuilder.
AppendLine().
Append("public ").Append(cellInstanceNameWithoutHyphen).AppendLine("() : base(testContext: null, declaringType: null, skipEquipmentDictionary: false)").
Append("static ").Append(cellInstanceNameWithoutHyphen).AppendLine("() => DummyRoot = @\"\\\\messv02ecc1.ec.local\\EC_Characterization_Si\\Dummy\";").
AppendLine().
Append("public ").Append(cellInstanceNameWithoutHyphen).AppendLine("() : base(DummyRoot, testContext: null, declaringType: null, skipEquipmentDictionary: false)").
AppendLine("{").
AppendLine("if (EAFLoggingUnitTesting is null)").
AppendLine("throw new Exception();").
AppendLine("}").
AppendLine().
Append("public ").Append(cellInstanceNameWithoutHyphen).AppendLine("(TestContext testContext) : base(testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)").
Append("public ").Append(cellInstanceNameWithoutHyphen).AppendLine("(TestContext testContext) : base(DummyRoot, testContext, new StackFrame().GetMethod().DeclaringType, skipEquipmentDictionary: false)").
AppendLine("{").
AppendLine("}").
AppendLine();
@ -541,6 +556,9 @@ public class AdaptationTesting : ISMTP
if (i == 2)
{
_ = stringBuilder.
AppendLine("#if true").
AppendLine("[Ignore]").
AppendLine("#endif").
AppendLine("[TestMethod]").
Append("public void ").Append(methodName).Append("() => ").Append('_').Append(cellInstanceNameWithoutHyphen).Append('.').Append(methodName).AppendLine("();").AppendLine();
}
@ -550,13 +568,16 @@ public class AdaptationTesting : ISMTP
throw new Exception("Versions should match!");
equipmentTypeName = componentsCellComponentCellComponent.Equipment.EquipmentType.Name;
_ = stringBuilder.
AppendLine("#if true").
AppendLine("[Ignore]").
AppendLine("#endif").
AppendLine("[TestMethod]").
Append("public void ").Append(methodName).AppendLine("()").
AppendLine("{").
Append("string check = \"").Append(check.Split('\\').Last()).AppendLine("\";").
AppendLine("MethodBase methodBase = new StackFrame().GetMethod();").
AppendLine("EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, \" - Getting configuration\"));").
AppendLine("_ = Shared.AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);").
AppendLine("_ = AdaptationTesting.GetWriteConfigurationGetFileRead(methodBase, check, EAFLoggingUnitTesting.AdaptationTesting);").
AppendLine("EAFLoggingUnitTesting.Logger.LogInformation(string.Concat(methodBase.Name, \" - Exit\"));").
AppendLine("}").
AppendLine();
@ -879,32 +900,26 @@ public class AdaptationTesting : ISMTP
public string[] GetCSharpText(string testName)
{
string[] results;
string[] segments = GetSegments(testName);
FileInfo fileInfo = GetFileName(segments);
string cellInstanceName = GetCellInstanceName(segments);
string cellInstanceVersionName = GetCellInstanceVersionName(segments);
string cellInstanceConnectionName = GetCellInstanceConnectionName(segments);
if (!string.IsNullOrEmpty(cellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName))
string testResultsDirectory = GetTestResultsDirectory(_HasWaitForProperty);
MethodBaseName mbn = GetMethodBaseName(_DummyRoot, _Environment, _HasWaitForProperty, testName, testResultsDirectory);
FileInfo fileInfo = new(mbn.FileFullName);
if (!string.IsNullOrEmpty(mbn.CellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName))
_ = Directory.CreateDirectory(fileInfo.Directory.FullName);
Tuple<string, CellInstanceVersion> cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName);
results = GetCSharpTextB(fileInfo, cellInstanceName, cellInstanceVersionName, cellInstanceVersionTuple.Item2);
Tuple<string, CellInstanceVersion> cellInstanceVersionTuple = GetCellInstanceVersionTuple(mbn.CellInstanceName, mbn.CellInstanceVersionName);
results = GetCSharpTextB(fileInfo, mbn.CellInstanceName, mbn.CellInstanceVersionName, cellInstanceVersionTuple.Item2);
return results;
}
public string[] GetConfiguration(MethodBase methodBase)
{
string[] results;
string[] segments = GetSegments(methodBase.Name);
string ticks = GetTicks(segments);
FileInfo fileInfo = GetFileName(segments);
string cellInstanceName = GetCellInstanceName(segments);
string cellInstanceVersionName = GetCellInstanceVersionName(segments);
string cellInstanceConnectionName = GetCellInstanceConnectionName(segments);
if (!string.IsNullOrEmpty(cellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName))
MethodBaseName mbn = GetMethodBaseName(methodBase);
FileInfo fileInfo = new(mbn.FileFullName);
if (!string.IsNullOrEmpty(mbn.CellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName))
_ = Directory.CreateDirectory(fileInfo.Directory.FullName);
Tuple<string, CellInstanceVersion> cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName);
Tuple<string, FileConnectorConfiguration> fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, cellInstanceConnectionName);
if (string.IsNullOrEmpty(ticks) && fileConnectorConfigurationTuple.Item2?.FileScanningIntervalInSeconds is not null)
Tuple<string, CellInstanceVersion> cellInstanceVersionTuple = GetCellInstanceVersionTuple(mbn.CellInstanceName, mbn.CellInstanceVersionName);
Tuple<string, FileConnectorConfiguration> fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, mbn.CellInstanceConnectionName);
if (string.IsNullOrEmpty(mbn.Ticks) && fileConnectorConfigurationTuple.Item2?.FileScanningIntervalInSeconds is not null)
{
string fileScanningIntervalInSecondsLine;
string versionDirectory = Path.GetDirectoryName(fileInfo.DirectoryName);
@ -914,12 +929,12 @@ public class AdaptationTesting : ISMTP
fileScanningIntervalInSecondsLine = $"+\t{fileConnectorConfigurationTuple.Item2.FileScanningIntervalInSeconds.Value:+0000}\t{Path.GetFileName(fileInfo.DirectoryName)}";
File.AppendAllLines(Path.Combine(versionDirectory, "FileScanningIntervalInSeconds.txt"), new string[] { fileScanningIntervalInSecondsLine });
}
Tuple<string, string, string, EquipmentTypeVersion> equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName);
Tuple<string, string, string, EquipmentTypeVersion> equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceVersionTuple.Item2, mbn.CellInstanceConnectionName);
Tuple<string, string> parameterizedModelObjectDefinitionTypeTuple = GetParameterizedModelObjectDefinitionTypeTuple(equipmentTypeVersionTuple);
Tuple<string, IList<ModelObjectParameterDefinition>> modelObjectParametersTuple = GetModelObjectParameters(equipmentTypeVersionTuple);
Tuple<string, string, string, EquipmentDictionaryVersion> equipmentDictionaryVersionTuple = GetEquipmentDictionaryVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName, equipmentTypeVersionTuple.Item4);
Tuple<string, string, string, EquipmentDictionaryVersion> equipmentDictionaryVersionTuple = GetEquipmentDictionaryVersionTuple(cellInstanceVersionTuple.Item2, mbn.CellInstanceConnectionName, equipmentTypeVersionTuple.Item4);
Tuple<string, List<Tuple<string, string>>> equipmentDictionaryIsAlwaysEnabledEventsTuple = GetEquipmentDictionaryIsAlwaysEnabledEventsTuple(equipmentDictionaryVersionTuple);
Dictionary<string, object> objects = GetKeyValuePairs(cellInstanceName, cellInstanceVersionName, cellInstanceConnectionName, fileConnectorConfigurationTuple.Item2, equipmentTypeVersionTuple.Item2, parameterizedModelObjectDefinitionTypeTuple.Item2, modelObjectParametersTuple.Item2, equipmentDictionaryVersionTuple.Item2, equipmentDictionaryIsAlwaysEnabledEventsTuple.Item2);
Dictionary<string, object> objects = GetKeyValuePairs(mbn.CellInstanceName, mbn.CellInstanceVersionName, mbn.CellInstanceConnectionName, fileConnectorConfigurationTuple.Item2, equipmentTypeVersionTuple.Item2, parameterizedModelObjectDefinitionTypeTuple.Item2, modelObjectParametersTuple.Item2, equipmentDictionaryVersionTuple.Item2, equipmentDictionaryIsAlwaysEnabledEventsTuple.Item2);
string json = JsonSerializer.Serialize(objects, new JsonSerializerOptions { WriteIndented = true });
results = new string[] { fileInfo.FullName, json };
return results;
@ -928,22 +943,19 @@ public class AdaptationTesting : ISMTP
public IFileRead Get(MethodBase methodBase, string sourceFileLocation, string sourceFileFilter, bool useCyclicalForDescription)
{
IFileRead result;
string[] segments = GetSegments(methodBase.Name);
FileInfo fileInfo = GetFileName(segments);
string cellInstanceName = GetCellInstanceName(segments);
string cellInstanceVersionName = GetCellInstanceVersionName(segments);
MethodBaseName mbn = GetMethodBaseName(methodBase);
FileInfo fileInfo = new(mbn.FileFullName);
Dictionary<string, string> fileParameter = new();
string cellInstanceConnectionName = GetCellInstanceConnectionName(segments);
if (!string.IsNullOrEmpty(cellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName))
if (!string.IsNullOrEmpty(mbn.CellInstanceConnectionName) && !Directory.Exists(fileInfo.DirectoryName))
_ = Directory.CreateDirectory(fileInfo.Directory.FullName);
Dictionary<string, List<long>> dummyRuns = new();
Dictionary<long, List<string>> staticRuns = new();
Tuple<string, CellInstanceVersion> cellInstanceVersionTuple = GetCellInstanceVersionTuple(cellInstanceName, cellInstanceVersionName);
Tuple<string, FileConnectorConfiguration> fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, cellInstanceConnectionName);
Tuple<string, string, string, EquipmentTypeVersion> equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName);
Tuple<string, CellInstanceVersion> cellInstanceVersionTuple = GetCellInstanceVersionTuple(mbn.CellInstanceName, mbn.CellInstanceVersionName);
Tuple<string, FileConnectorConfiguration> fileConnectorConfigurationTuple = GetFileConnectorConfigurationTuple(cellInstanceVersionTuple, mbn.CellInstanceConnectionName);
Tuple<string, string, string, EquipmentTypeVersion> equipmentTypeVersionTuple = GetEquipmentTypeVersionTuple(cellInstanceVersionTuple.Item2, mbn.CellInstanceConnectionName);
Tuple<string, string> parameterizedModelObjectDefinitionTypeTuple = GetParameterizedModelObjectDefinitionTypeTuple(equipmentTypeVersionTuple);
Tuple<string, IList<ModelObjectParameterDefinition>> modelObjectParametersTuple = GetModelObjectParameters(equipmentTypeVersionTuple);
Tuple<string, string, string, EquipmentDictionaryVersion> equipmentDictionaryVersionTuple = GetEquipmentDictionaryVersionTuple(cellInstanceVersionTuple.Item2, cellInstanceConnectionName, equipmentTypeVersionTuple.Item4);
Tuple<string, string, string, EquipmentDictionaryVersion> equipmentDictionaryVersionTuple = GetEquipmentDictionaryVersionTuple(cellInstanceVersionTuple.Item2, mbn.CellInstanceConnectionName, equipmentTypeVersionTuple.Item4);
_ = GetEquipmentDictionaryIsAlwaysEnabledEventsTuple(equipmentDictionaryVersionTuple);
if (!string.IsNullOrEmpty(sourceFileLocation) && sourceFileLocation != fileConnectorConfigurationTuple.Item2.SourceFileLocation)
fileConnectorConfigurationTuple.Item2.SourceFileLocation = sourceFileLocation;
@ -975,33 +987,29 @@ public class AdaptationTesting : ISMTP
_ = Directory.CreateDirectory(fileConnectorConfigurationTuple.Item2.AlternateTargetFolder);
}
}
result = FileHandlers.CellInstanceConnectionName.Get(this, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfigurationTuple.Item2, equipmentTypeVersionTuple.Item2, parameterizedModelObjectDefinitionTypeTuple.Item2, modelObjectParametersTuple.Item2, equipmentDictionaryVersionTuple.Item2, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: false);
result = FileHandlers.CellInstanceConnectionName.Get(this, fileParameter, mbn.CellInstanceName, mbn.CellInstanceConnectionName, fileConnectorConfigurationTuple.Item2, equipmentTypeVersionTuple.Item2, parameterizedModelObjectDefinitionTypeTuple.Item2, modelObjectParametersTuple.Item2, equipmentDictionaryVersionTuple.Item2, dummyRuns, staticRuns, useCyclicalForDescription, isEAFHosted: false);
return result;
}
public string[] GetVariables(MethodBase methodBase, string check)
public string[] GetVariables(MethodBase methodBase, string check, bool validatePDSF = true)
{
string[] results;
string[] lines;
string ipdsfFile;
string textFileDirectory;
string[] segments;
string fileNameWithoutExtension;
string searchPattern = "*.ipdsf";
string methodBaseNameWithActualCICN;
string sourceFileFilter = string.Empty;
string sourceFileLocation = string.Empty;
string[] segments = GetSegments(methodBase);
string ticks = GetTicks(segments);
FileInfo fileInfo = GetFileName(segments);
string[] textFiles = GetTextFiles(segments);
string cellInstanceName = GetCellInstanceName(segments);
string rawCellInstanceName = GetRawCellInstanceName(segments);
string cellInstanceConnectionName = GetCellInstanceConnectionName(segments);
string cellInstanceConnectionNameFromMethodBaseName = GetCellInstanceConnectionNameFromMethodBaseName(segments);
string methodBaseNameWithActualCICN = GetMethodBaseNameWithActualCICN(methodBase.Name, rawCellInstanceName, cellInstanceConnectionNameFromMethodBaseName, cellInstanceConnectionName, ticks);
MethodBaseName mbn = GetMethodBaseName(methodBase);
string[] textFiles = GetTextFiles(mbn);
if (!textFiles.Any())
textFileDirectory = string.Empty;
else
textFileDirectory = Path.GetDirectoryName(textFiles[0]);
{
if (_HasWaitForProperty)
throw new Exception("Set text file!");
sourceFileLocation = mbn.DummyDirectory;
}
foreach (string textFile in textFiles)
{
lines = File.ReadAllLines(textFile);
@ -1012,18 +1020,20 @@ public class AdaptationTesting : ISMTP
sourceFileFilter = lines[0];
else if (fileNameWithoutExtension == nameof(FileConnectorConfiguration.SourceFileLocation))
{
segments = lines[0].Split(new string[] { ticks }, StringSplitOptions.None);
methodBaseNameWithActualCICN = GetMethodBaseNameWithActualCICN(methodBase.Name, mbn.RawCellInstanceName, mbn.CellInstanceConnectionNameFromMethodBaseName, mbn.CellInstanceConnectionName, mbn.Ticks);
segments = lines[0].Split(new string[] { mbn.Ticks }, StringSplitOptions.None);
if (segments.Length > 2)
throw new Exception("Ticks should only appear once in source file location!");
if (segments.Length != 2)
throw new Exception("Ticks missing from source file location!");
if (segments[1].Contains(ticks))
if (segments[1].Contains(mbn.Ticks))
throw new Exception("From source file location path should not contain ticks!");
if (!segments[1].EndsWith(methodBaseNameWithActualCICN.Replace(ticks, string.Empty)))
if (!segments[1].EndsWith(methodBaseNameWithActualCICN.Replace(mbn.Ticks, string.Empty)))
throw new Exception("Method name missing from source file location!");
sourceFileLocation = lines[0];
}
}
FileInfo fileInfo = new(mbn.FileFullName);
if (!Directory.Exists(fileInfo.Directory.FullName))
_ = Directory.CreateDirectory(fileInfo.Directory.FullName);
if (!fileInfo.Exists)
@ -1044,25 +1054,30 @@ public class AdaptationTesting : ISMTP
fileConnectorConfiguration.SourceFileFilter = sourceFileFilter;
if (!string.IsNullOrEmpty(sourceFileLocation))
fileConnectorConfiguration.SourceFileLocation = sourceFileLocation;
if (string.IsNullOrEmpty(sourceFileLocation))
ipdsfFile = searchPattern;
if (!validatePDSF)
ipdsfFile = string.Empty;
else
{
string ipdsfDirectory = Path.Combine(sourceFileLocation, "ipdsf");
if (!Directory.Exists(ipdsfDirectory))
if (string.IsNullOrEmpty(sourceFileLocation))
ipdsfFile = searchPattern;
else
{
string[] files = Directory.GetFiles(ipdsfDirectory, searchPattern, SearchOption.TopDirectoryOnly);
if (files.Any())
ipdsfFile = files[0];
else
string ipdsfDirectory = Path.Combine(sourceFileLocation, "ipdsf");
if (!Directory.Exists(ipdsfDirectory))
ipdsfFile = searchPattern;
else
{
string[] files = Directory.GetFiles(ipdsfDirectory, searchPattern, SearchOption.TopDirectoryOnly);
if (files.Any())
ipdsfFile = files[0];
else
ipdsfFile = searchPattern;
}
}
if (ipdsfFile == searchPattern)
throw new Exception();
}
if (ipdsfFile == searchPattern)
throw new Exception();
results = new string[] { fileInfo.FullName, json, fileConnectorConfiguration.SourceFileLocation, fileConnectorConfiguration.SourceFileFilter, ipdsfFile, textFileDirectory };
results = new string[] { fileInfo.FullName, json, fileConnectorConfiguration.SourceFileLocation, fileConnectorConfiguration.SourceFileFilter, ipdsfFile, mbn.TextFileDirectory };
if (string.IsNullOrEmpty(results[0]))
throw new Exception();
if (string.IsNullOrEmpty(results[1]))
@ -1071,7 +1086,7 @@ public class AdaptationTesting : ISMTP
throw new Exception();
if (string.IsNullOrEmpty(results[3]))
throw new Exception();
if (string.IsNullOrEmpty(results[4]))
if (validatePDSF && string.IsNullOrEmpty(results[4]))
throw new Exception();
if (string.IsNullOrEmpty(results[5]))
throw new Exception();
@ -1232,29 +1247,32 @@ public class AdaptationTesting : ISMTP
{
string result;
Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResult = fileRead.ReExtract();
Assert.IsFalse(string.IsNullOrEmpty(extractResult?.Item1));
Assert.IsTrue(extractResult.Item3.Length > 0, "extractResult Array Length check!");
Assert.IsNotNull(extractResult.Item4);
if (!validatePDSF)
_ = GetLogisticsColumnsAndBody(fileRead, logistics, extractResult, new(string.Empty, Array.Empty<string>(), Array.Empty<string>()));
else
if (!fileRead.IsDuplicator)
{
Tuple<string, string[], string[]> pdsf = GetLogisticsColumnsAndBody(variables[2], variables[4]);
Tuple<string, string[], string[]> pdsfNew = GetLogisticsColumnsAndBody(fileRead, logistics, extractResult, pdsf);
CompareSave(variables[5], pdsf, pdsfNew);
Assert.IsTrue(pdsf.Item1 == pdsfNew.Item1, "Item1 check!");
string[] json = GetItem2(pdsf, pdsfNew);
CompareSaveJSON(variables[5], json);
Assert.IsTrue(json[0] == json[1], "Item2 check!");
string[] join = GetItem3(pdsf, pdsfNew);
CompareSaveTSV(variables[5], join);
Assert.IsTrue(join[0] == join[1], "Item3 (Join) check!");
Assert.IsFalse(string.IsNullOrEmpty(extractResult?.Item1));
Assert.IsTrue(extractResult.Item3.Length > 0, "extractResult Array Length check!");
Assert.IsNotNull(extractResult.Item4);
if (!validatePDSF)
_ = GetLogisticsColumnsAndBody(fileRead, logistics, extractResult, new(string.Empty, Array.Empty<string>(), Array.Empty<string>()));
else
{
Tuple<string, string[], string[]> pdsf = GetLogisticsColumnsAndBody(variables[2], variables[4]);
Tuple<string, string[], string[]> pdsfNew = GetLogisticsColumnsAndBody(fileRead, logistics, extractResult, pdsf);
CompareSave(variables[5], pdsf, pdsfNew);
Assert.IsTrue(pdsf.Item1 == pdsfNew.Item1, "Item1 check!");
string[] json = GetItem2(pdsf, pdsfNew);
CompareSaveJSON(variables[5], json);
Assert.IsTrue(json[0] == json[1], "Item2 check!");
string[] join = GetItem3(pdsf, pdsfNew);
CompareSaveTSV(variables[5], join);
Assert.IsTrue(join[0] == join[1], "Item3 (Join) check!");
}
UpdatePassDirectory(variables[2]);
}
UpdatePassDirectory(variables[2]);
result = extractResult.Item1;
return result;
}
}
// namespace Adaptation._Tests.Helpers { public class AdaptationTesting { } }
// 2022-05-12 -> AdaptationTesting
// 2022-08-05 -> AdaptationTesting

View File

@ -10,13 +10,13 @@ public class EAFLoggingUnitTesting : LoggingUnitTesting, IDisposable
public AdaptationTesting AdaptationTesting => _AdaptationTesting;
public EAFLoggingUnitTesting(TestContext testContext, Type declaringType, bool skipEquipmentDictionary) :
public EAFLoggingUnitTesting(string dummyRoot, TestContext testContext, Type declaringType, bool skipEquipmentDictionary) :
base(testContext, declaringType)
{
if (testContext is null || declaringType is null)
_AdaptationTesting = null;
else
_AdaptationTesting = new AdaptationTesting(testContext, skipEquipmentDictionary);
_AdaptationTesting = new AdaptationTesting(dummyRoot, testContext, skipEquipmentDictionary, _TestContextPropertiesAsJson, _HasWaitForProperty);
}
public new void Dispose()

View File

@ -0,0 +1,45 @@
namespace Adaptation._Tests.Shared;
public class MethodBaseName
{
public string After { get; private set; }
public string Before { get; private set; }
public string CellInstanceConnectionName { get; private set; }
public string CellInstanceConnectionNameFromMethodBaseName { get; private set; }
public string CellInstanceName { get; private set; }
public string CellInstanceVersionName { get; private set; }
public string Comment { get; private set; }
public string DummyDirectory { get; private set; }
public string FileFullName { get; private set; }
public string RawCellInstanceName { get; private set; }
public string RawVersionName { get; private set; }
public string Separator { get; private set; }
public string TestResultsDirectory { get; private set; }
public string TextFileDirectory { get; private set; }
public string Ticks { get; private set; }
public string VersionDirectory { get; private set; }
public string WithActualCICN { get; private set; }
public MethodBaseName(string after, string before, string cellInstanceConnectionName, string cellInstanceConnectionNameFromMethodBaseName, string cellInstanceName, string cellInstanceVersionName, string comment, string dummyDirectory, string fileFullName, string rawCellInstanceName, string rawVersionName, string separator, string testResultsDirectory, string textFileDirectory, string ticks, string versionDirectory, string withActualCICN)
{
After = after;
Before = before;
CellInstanceConnectionName = cellInstanceConnectionName;
CellInstanceConnectionNameFromMethodBaseName = cellInstanceConnectionNameFromMethodBaseName;
CellInstanceName = cellInstanceName;
CellInstanceVersionName = cellInstanceVersionName;
Comment = comment;
DummyDirectory = dummyDirectory;
FileFullName = fileFullName;
RawCellInstanceName = rawCellInstanceName;
RawVersionName = rawVersionName;
Separator = separator;
TestResultsDirectory = testResultsDirectory;
TextFileDirectory = textFileDirectory;
Ticks = ticks;
VersionDirectory = versionDirectory;
WithActualCICN = withActualCICN;
}
}

View File

@ -13,9 +13,13 @@ namespace Adaptation._Tests.Shared;
public class UnitTesting
{
protected readonly bool _HasWaitForProperty;
protected readonly IsEnvironment _IsEnvironment;
protected readonly string _TestContextPropertiesAsJson;
public IsEnvironment IsEnvironment => _IsEnvironment;
public bool HasWaitForProperty => _HasWaitForProperty;
public string TestContextPropertiesAsJson => _TestContextPropertiesAsJson;
public UnitTesting(TestContext testContext, Type declaringType)
{
@ -23,18 +27,23 @@ public class UnitTesting
_IsEnvironment = null;
else
{
string waitFor = "\"WaitFor\":";
string projectDirectory = GetProjectDirectory(testContext);
string json = JsonSerializer.Serialize(testContext.Properties);
_TestContextPropertiesAsJson = JsonSerializer.Serialize(testContext.Properties, new JsonSerializerOptions { WriteIndented = true });
_HasWaitForProperty = _TestContextPropertiesAsJson.Contains(waitFor);
string vsCodeDirectory = Path.Combine(projectDirectory, ".vscode");
if (!Directory.Exists(vsCodeDirectory))
_ = Directory.CreateDirectory(vsCodeDirectory);
string launchText = GetLaunchText();
File.WriteAllText(Path.Combine(vsCodeDirectory, "launch.json"), launchText);
for (int i = 0; i < int.MaxValue; i++)
if (_HasWaitForProperty)
{
if (!json.Contains("Debugger.IsAttached") || Debugger.IsAttached)
break;
Thread.Sleep(500);
for (int i = 0; i < int.MaxValue; i++)
{
if (!_TestContextPropertiesAsJson.Contains($"{waitFor} \"Debugger.IsAttached\"") || Debugger.IsAttached)
break;
Thread.Sleep(500);
}
}
MethodBase methodBase = declaringType.GetMethod(testContext.TestName);
if (methodBase is not null)