1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/macros.h"
6 #include "device/serial/serial_io_handler_posix.h"
7 #include "testing/gtest/include/gtest/gtest.h"
11 class SerialIoHandlerPosixTest : public testing::Test {
13 SerialIoHandlerPosixTest() = default;
15 void SetUp() override {
16 serial_io_handler_posix_ = new SerialIoHandlerPosix(nullptr);
19 void Initialize(bool parity_check_enabled,
20 const char* chars_stashed,
21 int num_chars_stashed) {
22 serial_io_handler_posix_->error_detect_state_ = ErrorDetectState::NO_ERROR;
23 serial_io_handler_posix_->parity_check_enabled_ = parity_check_enabled;
24 serial_io_handler_posix_->num_chars_stashed_ = num_chars_stashed;
25 for (int i = 0; i < num_chars_stashed; ++i) {
26 serial_io_handler_posix_->chars_stashed_[i] = chars_stashed[i];
30 void TestHelper(char* buffer,
33 ErrorDetectState error_detect_state_expected,
34 const char* chars_stashed_expected,
35 int num_chars_stashed_expected,
36 const char* buffer_expected,
37 int new_bytes_read_expected,
38 bool break_detected_expected,
39 bool parity_error_detected_expected) {
40 bool break_detected = false;
41 bool parity_error_detected = false;
42 int new_bytes_read = serial_io_handler_posix_->CheckReceiveError(
43 buffer, buffer_len, bytes_read, break_detected, parity_error_detected);
45 EXPECT_EQ(error_detect_state_expected,
46 serial_io_handler_posix_->error_detect_state_);
47 EXPECT_EQ(num_chars_stashed_expected,
48 serial_io_handler_posix_->num_chars_stashed_);
49 for (int i = 0; i < num_chars_stashed_expected; ++i) {
50 EXPECT_EQ(chars_stashed_expected[i],
51 serial_io_handler_posix_->chars_stashed_[i]);
53 EXPECT_EQ(new_bytes_read_expected, new_bytes_read);
54 for (int i = 0; i < new_bytes_read_expected; ++i) {
55 EXPECT_EQ(buffer_expected[i], buffer[i]);
57 EXPECT_EQ(break_detected_expected, break_detected);
58 EXPECT_EQ(parity_error_detected_expected, parity_error_detected);
62 scoped_refptr<SerialIoHandlerPosix> serial_io_handler_posix_;
65 DISALLOW_COPY_AND_ASSIGN(SerialIoHandlerPosixTest);
69 TEST_F(SerialIoHandlerPosixTest, NoErrorReadOnce) {
70 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
71 Initialize(true, "", 0);
73 char buffer[30] = {'a', 'b', 'c'};
75 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
76 0, "abc", 3, false, false);
82 TEST_F(SerialIoHandlerPosixTest, NoErrorReadTwiceBytesReadTwoAndOne) {
83 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
84 Initialize(true, "", 0);
86 char buffer_1[30] = {'a', 'b'};
88 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
89 0, "ab", 2, false, false);
91 char buffer_2[30] = {'c'};
93 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
94 0, "c", 1, false, false);
100 TEST_F(SerialIoHandlerPosixTest, NoErrorReadTwiceBytesReadOneAndTwo) {
101 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
102 Initialize(true, "", 0);
104 char buffer_1[30] = {'a'};
106 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
107 0, "a", 1, false, false);
109 char buffer_2[30] = {'b', 'c'};
111 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
112 0, "bc", 2, false, false);
119 TEST_F(SerialIoHandlerPosixTest, NoErrorReadThreeTimes) {
120 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
121 Initialize(true, "", 0);
123 char buffer_1[30] = {'a'};
125 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
126 0, "a", 1, false, false);
128 char buffer_2[30] = {'b'};
130 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
131 0, "b", 1, false, false);
133 char buffer_3[30] = {'c'};
135 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
136 0, "c", 1, false, false);
141 TEST_F(SerialIoHandlerPosixTest, BreakReadOnce) {
142 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
143 Initialize(true, "", 0);
145 char buffer[30] = {'\377', '\0', '\0'};
147 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
148 0, "", 0, true, false);
152 // 'a' 'b' '\377' '\0' '\0' 'c' 'd' 'e'
153 TEST_F(SerialIoHandlerPosixTest, BreakReadOnceHasBytesBeforeAndAfterBreak) {
154 for (int buffer_len = 8; buffer_len <= 20; ++buffer_len) {
155 Initialize(true, "", 0);
157 char buffer[30] = {'a', 'b', '\377', '\0', '\0', 'c', 'd', 'e'};
159 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
160 0, "abcde", 5, true, false);
166 TEST_F(SerialIoHandlerPosixTest, BreakReadTwiceBytesReadTwoAndOne) {
167 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
168 Initialize(true, "", 0);
170 char buffer_1[30] = {'\377', '\0'};
172 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
173 "\377\0", 2, "", 0, false, false);
175 char buffer_2[30] = {'\0'};
177 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
178 0, "", 0, true, false);
182 // 'a' 'b' 'c' '\377' '\0'
184 TEST_F(SerialIoHandlerPosixTest,
185 BreakReadTwiceBytesReadTwoAndOneHasBytesBeforeAndAfterBreak) {
186 for (int buffer_len = 5; buffer_len <= 20; ++buffer_len) {
187 Initialize(true, "", 0);
189 char buffer_1[30] = {'a', 'b', 'c', '\377', '\0'};
191 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
192 "\377\0", 2, "abc", 3, false, false);
194 char buffer_2[30] = {'\0', 'd', 'e'};
196 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
197 0, "de", 2, true, false);
203 TEST_F(SerialIoHandlerPosixTest, BreakReadTwiceBytesReadOneAndTwo) {
204 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
205 Initialize(true, "", 0);
207 char buffer_1[30] = {'\377'};
209 TestHelper(buffer_1, buffer_len, bytes_read,
210 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
212 char buffer_2[30] = {'\0', '\0'};
214 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
215 0, "", 0, true, false);
221 TEST_F(SerialIoHandlerPosixTest,
222 BreakReadTwiceBytesReadOneAndTwoHasBytesBeforeAndAfterBreak) {
223 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
224 Initialize(true, "", 0);
226 char buffer_1[30] = {'a', 'b', '\377'};
228 TestHelper(buffer_1, buffer_len, bytes_read,
229 ErrorDetectState::MARK_377_SEEN, "\377", 1, "ab", 2, false,
232 char buffer_2[30] = {'\0', '\0', 'c'};
234 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
235 0, "c", 1, true, false);
242 TEST_F(SerialIoHandlerPosixTest, BreakReadThreeTimes) {
243 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
244 Initialize(true, "", 0);
246 char buffer_1[30] = {'\377'};
248 TestHelper(buffer_1, buffer_len, bytes_read,
249 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
251 char buffer_2[30] = {'\0'};
253 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
254 "\377\0", 2, "", 0, false, false);
256 char buffer_3[30] = {'\0'};
258 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
259 0, "", 0, true, false);
266 TEST_F(SerialIoHandlerPosixTest,
267 BreakReadThreeTimesHasBytesBeforeAndAfterBreak) {
268 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
269 Initialize(true, "", 0);
271 char buffer_1[30] = {'a', '\377'};
273 TestHelper(buffer_1, buffer_len, bytes_read,
274 ErrorDetectState::MARK_377_SEEN, "\377", 1, "a", 1, false,
277 char buffer_2[30] = {'\0'};
279 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
280 "\377\0", 2, "", 0, false, false);
282 char buffer_3[30] = {'\0', 'b'};
284 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
285 0, "b", 1, true, false);
290 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadOnce) {
291 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
292 Initialize(true, "", 0);
294 char buffer[30] = {'\377', '\0', 'a'};
296 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
297 0, "", 0, false, true);
301 // 'b' 'c' '\377' '\0' 'a' 'd'
302 TEST_F(SerialIoHandlerPosixTest,
303 ParityErrorReadOnceHasBytesBeforeAndAfterParityError) {
304 for (int buffer_len = 6; buffer_len <= 20; ++buffer_len) {
305 Initialize(true, "", 0);
307 char buffer[30] = {'b', 'c', '\377', '\0', 'a', 'd'};
309 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
310 0, "bcd", 3, false, true);
316 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadTwiceBytesReadTwoAndOne) {
317 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
318 Initialize(true, "", 0);
320 char buffer_1[30] = {'\377', '\0'};
322 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
323 "\377\0", 2, "", 0, false, false);
325 char buffer_2[30] = {'a'};
327 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
328 0, "", 0, false, true);
335 SerialIoHandlerPosixTest,
336 ParityErrorReadTwiceBytesReadTwoAndOneHasBytesBeforeAndAfterParityError) {
337 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
338 Initialize(true, "", 0);
340 char buffer_1[30] = {'b', '\377', '\0'};
342 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
343 "\377\0", 2, "b", 1, false, false);
345 char buffer_2[30] = {'a', 'c', 'd'};
347 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
348 0, "cd", 2, false, true);
354 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadTwiceBytesReadOneAndTwo) {
355 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
356 Initialize(true, "", 0);
358 char buffer_1[30] = {'\377'};
360 TestHelper(buffer_1, buffer_len, bytes_read,
361 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
363 char buffer_2[30] = {'\0', 'a'};
365 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
366 0, "", 0, false, true);
373 SerialIoHandlerPosixTest,
374 ParityErrorReadTwiceBytesReadOneAndTwoHasBytesBeforeAndAfterParityError) {
375 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
376 Initialize(true, "", 0);
378 char buffer_1[30] = {'b', 'c', '\377'};
380 TestHelper(buffer_1, buffer_len, bytes_read,
381 ErrorDetectState::MARK_377_SEEN, "\377", 1, "bc", 2, false,
384 char buffer_2[30] = {'\0', 'a', 'd'};
386 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
387 0, "d", 1, false, true);
394 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadThreeTimes) {
395 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
396 Initialize(true, "", 0);
398 char buffer_1[30] = {'\377'};
400 TestHelper(buffer_1, buffer_len, bytes_read,
401 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
403 char buffer_2[30] = {'\0'};
405 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
406 "\377\0", 2, "", 0, false, false);
408 char buffer_3[30] = {'a'};
410 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
411 0, "", 0, false, true);
418 TEST_F(SerialIoHandlerPosixTest,
419 ParityErrorReadThreeTimesHasBytesBeforeAndAfterParityError) {
420 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
421 Initialize(true, "", 0);
423 char buffer_1[30] = {'b', '\377'};
425 TestHelper(buffer_1, buffer_len, bytes_read,
426 ErrorDetectState::MARK_377_SEEN, "\377", 1, "b", 1, false,
429 char buffer_2[30] = {'\0'};
431 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
432 "\377\0", 2, "", 0, false, false);
434 char buffer_3[30] = {'a', 'c'};
436 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
437 0, "c", 1, false, true);
442 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadOnce) {
443 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
444 Initialize(true, "", 0);
446 char buffer[30] = {'\377', '\377'};
448 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
449 0, "\377", 1, false, false);
453 // 'a' '\377' '\377' 'b' 'c'
454 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadOnceHasBytesBeforeAndAfterEOF) {
455 for (int buffer_len = 5; buffer_len <= 20; ++buffer_len) {
456 Initialize(true, "", 0);
458 char buffer[30] = {'a', '\377', '\377', 'b', 'c'};
460 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
461 0, "a\377bc", 4, false, false);
467 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadTwice) {
468 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
469 Initialize(true, "", 0);
471 char buffer_1[30] = {'\377'};
473 TestHelper(buffer_1, buffer_len, bytes_read,
474 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
476 char buffer_2[30] = {'\377'};
478 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
479 0, "\377", 1, false, false);
485 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadTwiceHasBytesBeforeAndAfterEOF) {
486 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
487 Initialize(true, "", 0);
489 char buffer_1[30] = {'a', '\377'};
491 TestHelper(buffer_1, buffer_len, bytes_read,
492 ErrorDetectState::MARK_377_SEEN, "\377", 1, "a", 1, false,
495 char buffer_2[30] = {'\377', 'b'};
497 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
498 0, "\377b", 2, false, false);
503 TEST_F(SerialIoHandlerPosixTest, ParityCheckDisabledReadOnce) {
504 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
505 Initialize(false, "", 0);
507 char buffer[30] = {'\377', '\0', 'a'};
509 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
510 0, "\377\0a", 3, false, false);
514 // 'b' '\377' '\0' 'a' 'c'
515 TEST_F(SerialIoHandlerPosixTest,
516 ParityCheckDisabledReadOnceHasBytesBeforeAndAfter) {
517 for (int buffer_len = 5; buffer_len <= 20; ++buffer_len) {
518 Initialize(false, "", 0);
520 char buffer[30] = {'b', '\377', '\0', 'a', 'c'};
522 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
523 0, "b\377\0ac", 5, false, false);
529 TEST_F(SerialIoHandlerPosixTest,
530 ParityCheckDisabledReadTwiceBytesReadTwoAndOne) {
532 Initialize(false, "", 0);
534 char buffer_1[30] = {'\377', '\0'};
536 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
537 "\377\0", 2, "", 0, false, false);
539 char buffer_2[30] = {'a'};
541 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
542 1, "\377\0", 2, false, false);
547 TEST_F(SerialIoHandlerPosixTest,
548 ParityCheckDisabledReadTwiceBytesReadTwoAndOneHasBytesAfter) {
550 Initialize(false, "", 0);
552 char buffer_1[30] = {'\377', '\0'};
554 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
555 "\377\0", 2, "", 0, false, false);
557 char buffer_2[30] = {'a', 'b'};
559 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "ab",
560 2, "\377\0", 2, false, false);
565 TEST_F(SerialIoHandlerPosixTest,
566 ParityCheckDisabledReadTwiceBytesReadTwoAndOneLargerBufferLen) {
567 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
568 Initialize(false, "", 0);
570 char buffer_1[30] = {'\377', '\0'};
572 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
573 "\377\0", 2, "", 0, false, false);
575 char buffer_2[30] = {'a'};
577 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
578 0, "\377\0a", 3, false, false);
585 SerialIoHandlerPosixTest,
586 ParityCheckDisabledReadTwiceBytesReadTwoAndOneBufferLenThreeHasBytesBeforeAndAfter) {
588 Initialize(false, "", 0);
590 char buffer_1[30] = {'b', '\377', '\0'};
592 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
593 "\377\0", 2, "b", 1, false, false);
595 char buffer_2[30] = {'a', 'c'};
597 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "c",
598 1, "\377\0a", 3, false, false);
604 SerialIoHandlerPosixTest,
605 ParityCheckDisabledReadTwiceBytesReadTwoAndOneLargerBufferLenHasBytesBeforeAndAfter) {
606 for (int buffer_len = 4; buffer_len <= 20; ++buffer_len) {
607 Initialize(false, "", 0);
609 char buffer_1[30] = {'b', '\377', '\0'};
611 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
612 "\377\0", 2, "b", 1, false, false);
614 char buffer_2[30] = {'a', 'c'};
616 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
617 0, "\377\0ac", 4, false, false);
623 TEST_F(SerialIoHandlerPosixTest,
624 ParityCheckDisabledReadTwiceBytesReadOneAndTwo) {
626 Initialize(false, "", 0);
628 char buffer_1[30] = {'\377'};
630 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
631 "\377", 1, "", 0, false, false);
633 char buffer_2[30] = {'\0', 'a'};
635 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
636 1, "\377\0", 2, false, false);
640 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
641 0, "a", 1, false, false);
646 TEST_F(SerialIoHandlerPosixTest,
647 ParityCheckDisabledReadTwiceBytesReadOneAndTwoHasBytesBefore) {
649 Initialize(false, "", 0);
651 char buffer_1[30] = {'b', '\377'};
653 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
654 "\377", 1, "b", 1, false, false);
656 char buffer_2[30] = {'\0', 'a'};
658 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
659 1, "\377\0", 2, false, false);
663 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
664 0, "a", 1, false, false);
669 TEST_F(SerialIoHandlerPosixTest,
670 ParityCheckDisabledReadTwiceBytesReadOneAndTwoLargerBufferLen) {
671 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
672 Initialize(false, "", 0);
674 char buffer_1[30] = {'\377'};
676 TestHelper(buffer_1, buffer_len, bytes_read,
677 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
679 char buffer_2[30] = {'\0', 'a'};
681 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
682 0, "\377\0a", 3, false, false);
689 SerialIoHandlerPosixTest,
690 ParityCheckDisabledReadTwiceBytesReadOneAndTwoBufferLenThreeHasBytesBeforeAndAfter) {
692 Initialize(false, "", 0);
694 char buffer_1[30] = {'b', '\377'};
696 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
697 "\377", 1, "b", 1, false, false);
699 char buffer_2[30] = {'\0', 'a', 'c'};
701 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "c",
702 1, "\377\0a", 3, false, false);
708 SerialIoHandlerPosixTest,
709 ParityCheckDisabledReadTwiceBytesReadOneAndTwoLargerBufferLenHasBytesBeforeAndAfter) {
710 for (int buffer_len = 4; buffer_len <= 20; ++buffer_len) {
711 Initialize(false, "", 0);
713 char buffer_1[30] = {'b', '\377'};
715 TestHelper(buffer_1, buffer_len, bytes_read,
716 ErrorDetectState::MARK_377_SEEN, "\377", 1, "b", 1, false,
719 char buffer_2[30] = {'\0', 'a', 'c'};
721 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
722 0, "\377\0ac", 4, false, false);
729 TEST_F(SerialIoHandlerPosixTest,
730 ParityCheckDisabledReadThreeTimesBufferLenOne) {
732 Initialize(false, "", 0);
734 char buffer_1[30] = {'\377'};
736 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
737 "\377", 1, "", 0, false, false);
739 char buffer_2[30] = {'\0'};
741 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
742 "\377\0", 2, "", 0, false, false);
744 char buffer_3[30] = {'a'};
746 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR,
747 "\0a", 2, "\377", 1, false, false);
753 TEST_F(SerialIoHandlerPosixTest,
754 ParityCheckDisabledReadThreeTimesBufferLenTwo) {
756 Initialize(false, "", 0);
758 char buffer_1[30] = {'\377'};
760 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
761 "\377", 1, "", 0, false, false);
763 char buffer_2[30] = {'\0'};
765 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
766 "\377\0", 2, "", 0, false, false);
768 char buffer_3[30] = {'a'};
770 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
771 1, "\377\0", 2, false, false);
777 TEST_F(SerialIoHandlerPosixTest,
778 ParityCheckDisabledReadThreeTimesLargerBufferLen) {
779 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
780 Initialize(false, "", 0);
782 char buffer_1[30] = {'\377'};
784 TestHelper(buffer_1, buffer_len, bytes_read,
785 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
787 char buffer_2[30] = {'\0'};
789 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
790 "\377\0", 2, "", 0, false, false);
792 char buffer_3[30] = {'a'};
794 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
795 0, "\377\0a", 3, false, false);
802 TEST_F(SerialIoHandlerPosixTest,
803 ParityCheckDisabledReadThreeTimesBufferLenThreeByteBeforeAndAfter) {
805 Initialize(false, "", 0);
807 char buffer_1[30] = {'b', '\377'};
809 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
810 "\377", 1, "b", 1, false, false);
812 char buffer_2[30] = {'\0'};
814 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
815 "\377\0", 2, "", 0, false, false);
817 char buffer_3[30] = {'a', 'c'};
819 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "c",
820 1, "\377\0a", 3, false, false);
826 TEST_F(SerialIoHandlerPosixTest,
827 ParityCheckDisabledReadThreeTimesLargerBufferLenHasBytesBeforeAndAfter) {
828 for (int buffer_len = 4; buffer_len <= 20; ++buffer_len) {
829 Initialize(false, "", 0);
831 char buffer_1[30] = {'b', '\377'};
833 TestHelper(buffer_1, buffer_len, bytes_read,
834 ErrorDetectState::MARK_377_SEEN, "\377", 1, "b", 1, false,
837 char buffer_2[30] = {'\0'};
839 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
840 "\377\0", 2, "", 0, false, false);
842 char buffer_3[30] = {'a', 'c'};
844 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
845 0, "\377\0ac", 4, false, false);
849 TEST_F(SerialIoHandlerPosixTest, BytesReadZero) {
850 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
851 Initialize(true, "", 0);
855 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
856 0, "", 0, false, false);
861 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadOnce) {
862 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
863 Initialize(true, "", 0);
865 char buffer[30] = {'\377', 'a', 'b'};
867 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
868 0, "\377ab", 3, false, false);
874 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadTwiceBytesReadTwoAndOne) {
875 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
876 Initialize(true, "", 0);
878 char buffer_1[30] = {'\377', 'a'};
880 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
881 0, "\377a", 2, false, false);
883 char buffer_2[30] = {'b'};
885 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
886 0, "b", 1, false, false);
892 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadTwiceBytesReadOneAndTwo) {
894 Initialize(true, "", 0);
896 char buffer_1[30] = {'\377'};
898 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
899 "\377", 1, "", 0, false, false);
901 char buffer_2[30] = {'a', 'b'};
903 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "b",
904 1, "\377a", 2, false, false);
909 TEST_F(SerialIoHandlerPosixTest,
910 InvalidSequenceReadTwiceBytesReadOneAndTwoLargerBufferLen) {
911 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
912 Initialize(true, "", 0);
914 char buffer_1[30] = {'\377'};
916 TestHelper(buffer_1, buffer_len, bytes_read,
917 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
919 char buffer_2[30] = {'a', 'b'};
921 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
922 0, "\377ab", 3, false, false);
929 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadThreeTimes) {
931 Initialize(true, "", 0);
933 char buffer_1[30] = {'\377'};
935 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
936 "\377", 1, "", 0, false, false);
938 char buffer_2[30] = {'a'};
940 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
941 1, "\377", 1, false, false);
943 char buffer_3[30] = {'b'};
945 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "b",
946 1, "a", 1, false, false);
952 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadThreeTimesLargerBufferLen) {
953 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
954 Initialize(true, "", 0);
956 char buffer_1[30] = {'\377'};
958 TestHelper(buffer_1, buffer_len, bytes_read,
959 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
961 char buffer_2[30] = {'a'};
963 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
964 0, "\377a", 2, false, false);
966 char buffer_3[30] = {'b'};
968 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
969 0, "b", 1, false, false);
973 // 'a' 'b' 'c' '\377'
974 TEST_F(SerialIoHandlerPosixTest, CharsStashedPreset) {
976 Initialize(true, "ab", 2);
978 char buffer[30] = {'c', '\377'};
980 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
981 "c\377", 2, "ab", 2, false, false);
984 // 'b' 'c' '\377' '\0' '\0' '\377' '\377' '\377' '\0' 'a' 'd' 'e'
985 TEST_F(SerialIoHandlerPosixTest, BreakAndEOFAndParityError) {
987 Initialize(true, "", 0);
989 char buffer[30] = {'b', 'c', '\377', '\0', '\0', '\377',
990 '\377', '\377', '\0', 'a', 'd', 'e'};
992 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", 0,
993 "bc\377de", 5, true, true);
996 // 'b' 'c' '\377' '\0' '\0' '\377'
997 // '\377' '\377' '\0'
999 TEST_F(SerialIoHandlerPosixTest, BreakAndEOFAndParityErrorReadThreeTimes) {
1000 for (int buffer_len = 6; buffer_len <= 20; ++buffer_len) {
1001 Initialize(true, "", 0);
1003 char buffer_1[30] = {'b', 'c', '\377', '\0', '\0', '\377'};
1005 TestHelper(buffer_1, buffer_len, bytes_read,
1006 ErrorDetectState::MARK_377_SEEN, "\377", 1, "bc", 2, true,
1009 char buffer_2[30] = {'\377', '\377', '\0'};
1011 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
1012 "\377\0", 2, "\377", 1, false, false);
1014 char buffer_3[30] = {'a', 'd', 'e'};
1016 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
1017 0, "de", 2, false, true);
1021 } // namespace device