private void interactionsPerfValidate(interactionType rsp)
        {
            Assert.AreEqual(interactionTypeType.performance, rsp.type);
            correctResponsesTypeCorrectResponsePerformance[] responses = new correctResponsesTypeCorrectResponsePerformance[rsp.correctResponses.Items.Length];
            for (int ii = 0; ii < rsp.correctResponses.Items.Length; ii++)
            {
                responses[ii] = (correctResponsesTypeCorrectResponsePerformance)rsp.correctResponses.Items[ii];
            }
            learnerResponseTypeLearnerResponsePerformance[] lResponses = new learnerResponseTypeLearnerResponsePerformance[rsp.learnerResponse.Items.Length];
            for (int ii = 0; ii < rsp.learnerResponse.Items.Length; ii++)
            {
                lResponses[ii] = (learnerResponseTypeLearnerResponsePerformance)rsp.learnerResponse.Items[ii];
            }
            Assert.AreEqual(rsp.result, interactionTypeResult.incorrect);
            Assert.IsTrue(rsp.resultSpecified);

            Assert.AreEqual(2, responses.Length, "response count");
            Assert.AreEqual(2, responses[0].step.Length, "response 1 step count");
            Assert.AreEqual(2, responses[1].step.Length, "response 2 step count");
            Assert.AreEqual(2, rsp.learnerResponse.Items.Length, "learner response count");

            Assert.AreEqual("answer 1", lResponses[0].stepAnswer.Item.ToString(), "learner response 1 step 1 answer");
            Assert.AreEqual("step_1", lResponses[0].stepName, "learner response 1 step 1 name");
            Assert.AreEqual("23", lResponses[1].stepAnswer.Item.ToString(), "learner response 2 step 1 answer");
            Assert.AreEqual("step_2_min_42", lResponses[1].stepName, "learner response 2 step 1 name");

            perfValidateStep(responses[0].step[1], "step_2_min_42", 42M, null, "response 1 step 1");
            perfValidateStep(responses[0].step[0], "step_1", "answer 1", "response 1 step 1");
            perfValidateStep(responses[1].step[0], "step_1_max_100", null, 100M, "response 2 step 1");
            perfValidateStep(responses[1].step[1], "step_2_minmax_no_limit", null, null, "response 2 step 2");
        }
        public void interactionsPerformanceTest()
        {
            LETSIRTE_Service client = getClient();

            string int2ID = "Performance_interaction_upd";

            cocdType        cocd = client.Get();
            interactionType perf = cocd.GetInteraction(int2ID, true);

            perf.type             = interactionTypeType.performance;
            perf.correctResponses = new correctResponsesType();
            perf.correctResponses.ItemsElementName = new ItemsChoiceType[] { ItemsChoiceType.correctResponsePerformance, ItemsChoiceType.correctResponsePerformance };
            correctResponsesTypeCorrectResponsePerformance rsp  = new correctResponsesTypeCorrectResponsePerformance();
            correctResponsesTypeCorrectResponsePerformance rsp2 = new correctResponsesTypeCorrectResponsePerformance();

            perf.correctResponses.Items = new object[] { rsp, rsp2 };

            rsp.step = new correctResponsesTypeCorrectResponsePerformanceStep[] {
                new correctResponsesTypeCorrectResponsePerformanceStep("step_1", "answer 1"),
                new correctResponsesTypeCorrectResponsePerformanceStep("step_2_min_42", 42M, null)
            };
            rsp2.step = new correctResponsesTypeCorrectResponsePerformanceStep[] {
                new correctResponsesTypeCorrectResponsePerformanceStep("step_1_max_100", null, 100M),
                new correctResponsesTypeCorrectResponsePerformanceStep("step_2_minmax_no_limit", null, null)
            };

            perf.description       = new interactionTypeDescription();
            perf.description.Value = "performance interaction";
            perf.learnerResponse   = new learnerResponseType();
            perf.learnerResponse.ItemsElementName = new ItemsChoiceType1[] { ItemsChoiceType1.learnerResponsePerformance, ItemsChoiceType1.learnerResponsePerformance };
            learnerResponseTypeLearnerResponsePerformance lrsp  = new learnerResponseTypeLearnerResponsePerformance();
            learnerResponseTypeLearnerResponsePerformance lrsp2 = new learnerResponseTypeLearnerResponsePerformance();

            perf.learnerResponse.Items = new object[] { lrsp, lrsp2 };
            lrsp.stepName        = "step_1";
            lrsp.stepAnswer      = new learnerResponseTypeLearnerResponsePerformanceStepAnswer();
            lrsp.stepAnswer.Item = "answer 1";

            lrsp2.stepName        = "step_2_min_42";
            lrsp2.stepAnswer      = new learnerResponseTypeLearnerResponsePerformanceStepAnswer();
            lrsp2.stepAnswer.Item = 23M; // WRONG!

            perf.result          = interactionTypeResult.incorrect;
            perf.resultSpecified = true;

            interactionsPerfValidate(cocd.GetInteraction(int2ID, false));

            cocd.exit          = exit.suspend;
            cocd.exitSpecified = true;
            client.Set(cocd);
            cocd = client.Get();

            interactionsPerfValidate(cocd.GetInteraction(int2ID, false));
        }