/// <summary> /// Read parameters as the message content. /// </summary> /// <param name="messageReader">The message reader to use for reading.</param> /// <param name="functionImport">The function import to pass to the parameter reader.</param> /// <returns>A ComplexInstance representing parameters.</returns> public object ReadParameters(ODataMessageReaderTestWrapper messageReader, IEdmOperationImport functionImport) { // TODO: ODataLib test item: Add new ODataPayloadElement for parameters payload ODataParameterReader parameterReader = messageReader.CreateODataParameterReader(functionImport); ODataParameters odataParameters = new ODataParameters(); List<ODataProperty> parameters = new List<ODataProperty>(); try { // read the start of the parameters this.assert.AreEqual(ODataParameterReaderState.Start, parameterReader.State, "Reader states don't match."); while (parameterReader.Read()) { switch (parameterReader.State) { case ODataParameterReaderState.Value: odataParameters.Add(new KeyValuePair<string,object>(parameterReader.Name, parameterReader.Value)); break; case ODataParameterReaderState.Entry: ODataReader entryReader = parameterReader.CreateEntryReader(); entryReader.Read(); this.assert.AreEqual(ODataReaderState.EntryStart, entryReader.State, "Reader states don't match."); odataParameters.Add(new KeyValuePair<string,object>(parameterReader.Name, this.ReadEntry(entryReader))); this.assert.AreEqual(ODataReaderState.EntryEnd, entryReader.State, "Reader states don't match."); this.assert.IsFalse(entryReader.Read(), "Read() should return false after EntryEnd."); this.assert.AreEqual(ODataReaderState.Completed, entryReader.State, "Reader states don't match."); break; case ODataParameterReaderState.Feed: ODataReader feedReader = parameterReader.CreateFeedReader(); feedReader.Read(); this.assert.AreEqual(ODataReaderState.FeedStart, feedReader.State, "Reader states don't match."); odataParameters.Add(new KeyValuePair<string,object>(parameterReader.Name, this.ReadFeed(feedReader))); this.assert.AreEqual(ODataReaderState.FeedEnd, feedReader.State, "Reader states don't match."); this.assert.IsFalse(feedReader.Read(), "Read() should return false after EntryEnd."); this.assert.AreEqual(ODataReaderState.Completed, feedReader.State, "Reader states don't match."); break; case ODataParameterReaderState.Collection: ODataCollectionReader collectionReader = parameterReader.CreateCollectionReader(); odataParameters.Add(new KeyValuePair<string,object>(parameterReader.Name, this.ReadCollection(collectionReader))); break; default: this.assert.Fail("Unexpected state: " + parameterReader.State); break; } } this.assert.AreEqual(ODataParameterReaderState.Completed, parameterReader.State, "Reader states don't match."); return odataParameters; } catch (Exception e) { if (ExceptionUtilities.IsCatchable(e)) { this.assert.AreEqual(ODataParameterReaderState.Exception, parameterReader.State, "Expected the reader to be in 'Exception' state."); } throw; } }