/// <summary> /// Creates and returns an assignment for a parameter in the coverage group /// based on a specific combination that has not yet been covered in a test case. /// </summary> private bool AssignCoveredParameter( IDictionary <string, ParameterAssignment> parameterAssignments, TestSpecification testSpecification, CoverageGroup coverageGroup, IList <string> uncoveredCombination, int groupIndex) { string selectedParameter = coverageGroup.Parameters[groupIndex]; string selectedEquivalenceClass = uncoveredCombination[groupIndex]; if ((selectedParameter == null) || (selectedEquivalenceClass == null)) { return(false); } InputParameter inputParameter = testSpecification.InputParameters[selectedParameter]; if (inputParameter == null) { return(false); } ParameterAssignment parameterAssignment = new ParameterAssignment(); parameterAssignment.Set( inputParameter.Given, inputParameter.Name, inputParameter.Text, inputParameter.EquivalenceClasses[selectedEquivalenceClass]); parameterAssignments.Add(parameterAssignment.Name, parameterAssignment); return(true); }
/// <summary> /// Creates and returns an assignment for a parameter that is NOT in the coverage group /// by randomly selecting one of its equivalence classes. /// </summary> private bool AssignUncoveredParameter( IDictionary <string, ParameterAssignment> parameterAssignments, InputParameter inputParameter) { IList <string> equivalenceClassNames = inputParameter.EquivalenceClasses.Keys.ToList(); if ((equivalenceClassNames == null) || !equivalenceClassNames.Any()) { return(false); } int randomIndex = _random.Next(equivalenceClassNames.Count); string selectedEquivalenceClass = equivalenceClassNames[randomIndex]; if (string.IsNullOrEmpty(selectedEquivalenceClass)) { return(false); } ParameterAssignment parameterAssignment = new ParameterAssignment(); parameterAssignment.Set( inputParameter.Given, inputParameter.Name, inputParameter.Text, inputParameter.EquivalenceClasses[selectedEquivalenceClass]); parameterAssignments.Add(parameterAssignment.Name, parameterAssignment); return(true); }
/// <summary> /// Evaluates the constraints of a selected parameter, if any, and returns true /// or false based on the evaluation. /// </summary> private bool AssociatedParameterValuation( IDictionary <string, ParameterAssignment> parameterAssignments, InputParameter inputParameter) { if ((inputParameter != null) && (inputParameter.ConditionExpression != null) && !inputParameter.ConditionExpression.Match(parameterAssignments)) { return(false); } return(true); }
/// <summary> /// Reads the XML contents of the file into the test specification and returns true if successful. /// </summary> public bool ReadAsXml(string filenameWithPath) { string contentsAsString = FileHelper.ContentsAsString(filenameWithPath); XElement xTestSpecification = XmlHelper.Root(contentsAsString, "TestSpecification"); FieldsAsAttributes = XmlHelper.ElementOf(xTestSpecification, "FieldsAsAttributes") == "true"; string given = XmlField(xTestSpecification, "Given"); string name = XmlField(xTestSpecification, "Name"); string text = XmlField(xTestSpecification, "Text"); IList <CoverageGroup> coverageGroups = new List <CoverageGroup>(); foreach (XElement xCoverageGroup in XmlHelper.Children(xTestSpecification, "CoverageGroup")) { CoverageGroup coverageGroup = new CoverageGroup(); if (coverageGroup.ReadAsXml(xCoverageGroup)) { coverageGroups.Add(coverageGroup); } } IDictionary <string, InputParameter> inputParameters = new Dictionary <string, InputParameter>(); foreach (XElement xInputParameter in XmlHelper.Children(xTestSpecification, "InputParameter")) { InputParameter inputParameter = new InputParameter(); if (inputParameter.ReadAsXml(xInputParameter) && !inputParameters.ContainsKey(inputParameter.Name)) { inputParameters.Add(inputParameter.Name, inputParameter); } } IDictionary <string, ExpectedResult> expectedResults = new Dictionary <string, ExpectedResult>(); foreach (XElement xExpectedResult in XmlHelper.Children(xTestSpecification, "ExpectedResult")) { ExpectedResult expectedResult = new ExpectedResult(); if (expectedResult.ReadAsXml(xExpectedResult) && !expectedResults.ContainsKey(expectedResult.Name)) { expectedResults.Add(expectedResult.Name, expectedResult); } } bool compositeRead = Set(given, name, text, coverageGroups, inputParameters, expectedResults); compositeRead = compositeRead && Normalize(); compositeRead = compositeRead && UpdateDependencies(); return(compositeRead); }