public void Appendでサイズ制限を超えるとContinueが返される(int limit, int size, RecvStatus recvStatus) { //setUp var sut = new Data(limit); var expected = recvStatus; //exercise var actual = sut.Append(new byte[size]); //verify Assert.That(actual, Is.EqualTo(expected)); }
[TestCase(0, 2048, RecvStatus.Continue)] //制限なし public void Appendでサイズ制限を超えるとContinueが返される(int limit, int size, RecvStatus recvStatus) { //setUp var sut = new Data(limit); var expected = recvStatus; //exercise var actual = sut.Append(new byte[size]); //verify Assert.That(actual, Is.EqualTo(expected)); }
/// <summary> /// 受信処理 /// </summary> protected void recvTask() { int bytesToRead = 0; switch (recvStatus) { case RecvStatus.Ready: // バイト数チェック try { bytesToRead = serialPort.BytesToRead; if (bytesToRead < 1) { return; } // ヘッダチェック read(buffer, 0, 1); } catch { ts.TraceInformation("readで例外発生"); return; } // 受信ヘッダチェック if (CommandUtil.CheckHeader(buffer) == false) { ts.TraceInformation("受信ヘッダチェック異常"); return; } recvStatus = RecvStatus.HeaderReading; break; case RecvStatus.HeaderReading : // バイト数チェック try { bytesToRead = serialPort.BytesToRead; if (bytesToRead < 1) { return; } // ヘッダチェック read(buffer, 1, 1); } catch { ts.TraceInformation("readで例外発生"); return; } recvStatus = RecvStatus.CommandProcessing; break; case RecvStatus.CommandProcessing: // 本文チェック byte bodyLength = buffer[1]; try { // 本文の長さ以上のデータが読み込めれば続行する。 bytesToRead = serialPort.BytesToRead; if (bytesToRead < bodyLength+2) { return; } // 本文読み込み read(buffer, 2, bodyLength + 2); // コマンドをデコードする byte[] byteImage = new byte[bodyLength + 4]; Array.Copy(buffer, byteImage, bodyLength + 4); recvCommand = CommandUtil.decodeCommand(byteImage); // Ackを受信した場合 if (recvCommand.Cmd == 'w' || recvCommand.Cmd == 'r') { // 状態異常時 if (sendStatus != SendStatus.AckWaiting) { ts.TraceInformation("AckWaiting以外でAckを受け取ったため無視します。"); } // 正常時 else { sendStatus = SendStatus.CommandProcessing; sendAckCommand = recvCommand.Clone(); } } // Ack以外のコマンドを受信した場合 else { // コマンド実行 execCommand(recvCommand); // Ackの返信 respondAck(recvCommand); } } catch { ts.TraceInformation("コマンド受信異常"); } // シーケンスを終了 recvStatus = RecvStatus.Ready; break; } }