public static void XacmlResponseAssert(XacmlContextResponse responseData, XacmlContextResponse evaluatedResponse) {
            var responseResults = responseData.Results.ToList();
            var evaluationResults = evaluatedResponse.Results.ToList();

            Assert.AreEqual(responseResults.Count, evaluationResults.Count, "Results count mismatch");

            for (int i = 0; i < responseResults.Count; i++) {
                Assert.AreEqual(responseResults[i].ResourceId, evaluationResults[i].ResourceId);
                Assert.AreEqual(responseResults[i].Decision, evaluationResults[i].Decision, evaluationResults[i].Status.StatusMessage);
                // UNDONE: Assert.AreEqual(responseResults[i].Status.StatusCode.Value, evaluationResults[i].Status.StatusCode.Value);

                Assert.AreEqual(responseResults[i].Attributes.Count, evaluationResults[i].Attributes.Count, "Attributes count mismatch");
                foreach (var responseAttribute in responseResults[i].Attributes) {
                    var evaluateAttribute = evaluationResults[i].Attributes.First(a => a.Category == responseAttribute.Category);
                    Assert.AreEqual(responseAttribute.Attributes.Count, evaluateAttribute.Attributes.Count);
                }

                Assert.AreEqual(responseResults[i].Obligations.Count, evaluationResults[i].Obligations.Count, "Obligations count mismatch");
                Assert.AreEqual(responseResults[i].Advices.Count, evaluationResults[i].Advices.Count, "Advices count mismatch");

                Assert.AreEqual(responseResults[i].PolicyIdReferences.Count, evaluationResults[i].PolicyIdReferences.Count, "PolicyIdentifierList - Policy count mismatch");
                Assert.AreEqual(responseResults[i].PolicySetIdReferences.Count, evaluationResults[i].PolicySetIdReferences.Count, "PolicyIdentifierList - PolicySet count mismatch");
            }
        }
        public void WriteResponse_11()
        {
            var response = new XacmlContextResponse(new XacmlContextResult(XacmlContextDecision.NotApplicable, new XacmlContextStatus(XacmlContextStatusCode.Success)));

            StringBuilder builder = new StringBuilder();
            using (XmlWriter writer = XmlWriter.Create(builder))
            {
                var serializer = new Xacml11ProtocolSerializer();
                serializer.WriteContextResponse(writer, response);
            }

            string xml = builder.ToString();
            ValidateMessage(xml, @"..\..\_Data\cs-xacml-schema-context-01.xsd");
        }
        public virtual XacmlContextResponse ReadContextResponse(XmlReader reader) {
            Contract.Requires<ArgumentNullException>(reader != null, "reader");

            if (!XacmlProtocolSerializer.CanReadContext(reader, XacmlConstants.ElementNames.Response, this.version.NamespaceContext)) {
                throw Diagnostic.DiagnosticTools.ExceptionUtil.ThrowHelperError(new InvalidOperationException());
            }

            reader.ReadStartElement(XacmlConstants.ElementNames.Response, this.version.NamespaceContext);

            List<XacmlContextResult> results = new List<XacmlContextResult>();
            this.ReadList(results, XacmlConstants.ElementNames.Result, this.version.NamespaceContext, ReadContextResult, reader, isRequired: true);

            XacmlContextResponse result = new XacmlContextResponse(results);

            reader.ReadEndElement();

            return result;
        }
        /// <summary>
        /// public void WriteResponse
        /// </summary>
        /// <param name="writer">XmlWriter writer</param>
        /// <param name="data">XacmlContextResponse data</param>
        public virtual void WriteContextResponse(XmlWriter writer, XacmlContextResponse data) {
            Contract.Requires<ArgumentNullException>(writer != null);
            Contract.Requires<ArgumentNullException>(data != null);

            writer.WriteStartElement(XacmlConstants.Prefixes.Context, XacmlConstants.ElementNames.Response, this.version.NamespaceContext);

            // Results

            if (data.Results.Count == 0) {
                throw Diagnostic.DiagnosticTools.ExceptionUtil.ThrowHelperError(new XacmlSerializationException("Results is empty"));
            }

            foreach (var result in data.Results) {
                this.WriteContextResult(writer, result);
            }

            writer.WriteEndElement();
        }