private RestData.Header find(ICollection <RestData.Header> actualHeaders, RestData.Header expectedHeader) { foreach (RestData.Header h in actualHeaders) { bool nameMatches = h.Name.Equals(expectedHeader.Name); string expectedRegexPattern = expectedHeader.Value; if (!string.IsNullOrWhiteSpace(expectedRegexPattern)) { expectedRegexPattern = expectedRegexPattern.Trim(); // Was failing to match a URL with a query string because the "?" was parsed // as a regex metacharacter. So if the regex pattern appears to be a // URL assume the "?" represents the start of the query string and escape it. if (expectedRegexPattern.ToLower().StartsWith("http://") || expectedRegexPattern.ToLower().StartsWith("https://")) { expectedRegexPattern = expectedRegexPattern.Replace("?", @"\?"); } } bool valueMatches = StringTools.regex(h.Value, expectedRegexPattern); if (nameMatches && valueMatches) { return(h); } } return(null); }
public override bool Equals(object expectedObj, object actualObj) { if (expectedObj == null || actualObj == null) { return(false); } // r1 and r2 are Map<String, String> containing either the header // from the HTTP response or the data value in the expected cell // equals checks for r1 being a subset of r2 ICollection <RestData.Header> expected = (ICollection <RestData.Header>)expectedObj; ICollection <RestData.Header> actual = (ICollection <RestData.Header>)actualObj; foreach (RestData.Header k in expected) { RestData.Header aHdr = find(actual, k); if (aHdr == null) { addError("not found: [" + k.Name + " : " + k.Value + "]"); } } return(Errors.Count == 0); }
public void Should_Match_Expected_Header_Containing_Regex() { // Arrange. RestData.Header expectedContentTypeHeaderWithRegex = new RestData.Header("content-type", "application/my-xml;.+"); RestData.Header actualContentTypeHeader = new RestData.Header("content-type", "application/my-xml;charset=UTF-8"); IList <RestData.Header> expectedHeaders = new List <RestData.Header> { expectedContentTypeHeaderWithRegex }; IList <RestData.Header> actualHeaders = new List <RestData.Header> { actualContentTypeHeader }; // Act. bool actualResult = _adapter.Equals(expectedHeaders, actualHeaders); // Assert. Assert.IsTrue(actualResult); }