private static bool TryExtract(Json.Expressions.ObjectExpression json, out StateVersionTestCase testCase) { if (json.Members[TestTypeKey] is not Json.Expressions.ConstantExpression testTypeExpr) { testCase = default; return(false); } var testType = Type.GetType(testTypeExpr.Value.ToString()); if (testType == null) { testCase = default; return(false); } var testMethodExpr = json.Members[TestMethodKey] as Json.Expressions.ConstantExpression; var testMethodName = testMethodExpr.Value.ToString(); var testMethod = testType.GetMethod(testMethodName, TestArgs); if (testMethod == null) { testCase = default; return(false); } if (json.Members[SavedAtKey] is not Json.Expressions.ConstantExpression savedAtExpr || !long.TryParse(savedAtExpr.Value.ToString(), out var savedAt)) { testCase = default; return(false); } testCase = new StateVersionTestCase(testMethod, savedAt); return(true); }
public void Add(MemberInfo testMethod, long savedAt, byte[] state) { EnsureDirectory(); var fileNameBase = GetFileName(testMethod, savedAt); var stateFileName = fileNameBase + ".state"; File.WriteAllBytes(GetPath(stateFileName), state); var testCaseFileName = fileNameBase + ".json"; var testCase = new StateVersionTestCase(testMethod, savedAt); File.WriteAllText(GetPath(testCaseFileName), testCase.ToString()); }
public IEnumerable <StateVersionTestCase> GetTestCasesByMember(MemberInfo member) { var fileNameBase = GetFileNameBase(member); var regex = new Regex("^" + fileNameBase + @"_\d+\.json$", RegexOptions.Compiled); foreach (var f in Directory.GetFiles(BaseDirectory).Where(f => regex.IsMatch(Path.GetFileName(f)))) { if (StateVersionTestCase.TryParse(File.ReadAllText(f), out var testCase)) { Debug.Assert(testCase.TestMethod == member); yield return(testCase); } } }
public static bool TryParse(string data, out StateVersionTestCase testCase) { Json.Expressions.Expression json; try { json = Json.Expressions.Expression.Parse(data); } catch (Json.Parser.ParseException) { testCase = default; return(false); } var obj = json as Json.Expressions.ObjectExpression; if (json != null && obj == null) { testCase = default; return(false); } return(TryExtract(obj, out testCase)); }
public byte[] GetState(StateVersionTestCase testCase) { var stateFileName = GetFileName(testCase.TestMethod, testCase.SavedAt) + ".state"; return(File.ReadAllBytes(GetPath(stateFileName))); }