Serenity Operating System
at master 124 lines 2.9 kB view raw
1/* 2 * Copyright (c) 2020, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibTest/TestCase.h> 8 9#include <AK/MACAddress.h> 10#include <AK/Types.h> 11 12TEST_CASE(should_default_construct) 13{ 14 constexpr MACAddress sut {}; 15 static_assert(sut.is_zero()); 16 EXPECT(sut.is_zero()); 17} 18 19TEST_CASE(should_braces_construct) 20{ 21 constexpr MACAddress sut { 1, 2, 3, 4, 5, 6 }; 22 static_assert(!sut.is_zero()); 23 EXPECT(!sut.is_zero()); 24} 25 26TEST_CASE(should_construct_from_6_octets) 27{ 28 constexpr MACAddress sut(1, 2, 3, 4, 5, 6); 29 static_assert(!sut.is_zero()); 30 EXPECT(!sut.is_zero()); 31} 32 33TEST_CASE(should_provide_read_access_to_octet_by_index) 34{ 35 constexpr auto is_all_expected = [](auto& sut) { 36 for (auto i = 0u; i < sizeof(MACAddress); ++i) { 37 if (sut[i] != i + 1) { 38 return false; 39 } 40 } 41 return true; 42 }; 43 44 constexpr MACAddress sut(1, 2, 3, 4, 5, 6); 45 46 static_assert(is_all_expected(sut)); 47 48 for (auto i = 0u; i < sizeof(MACAddress); ++i) { 49 EXPECT_EQ(i + 1, sut[i]); 50 } 51} 52 53TEST_CASE(should_provide_write_access_to_octet_by_index) 54{ 55 constexpr auto sut = [] { 56 MACAddress m {}; 57 for (auto i = 0u; i < sizeof(MACAddress); ++i) { 58 m[i] = i + 1; 59 } 60 return m; 61 }(); 62 63 constexpr MACAddress expected(1, 2, 3, 4, 5, 6); 64 65 static_assert(expected == sut); 66} 67 68TEST_CASE(should_equality_compare) 69{ 70 constexpr MACAddress a(1, 2, 3, 4, 5, 6); 71 constexpr MACAddress b(1, 2, 3, 42, 5, 6); 72 73 static_assert(a == a); 74 static_assert(a != b); 75 76 EXPECT(a == a); 77 EXPECT(a != b); 78} 79 80TEST_CASE(should_string_format) 81{ 82 MACAddress sut(1, 2, 3, 4, 5, 6); 83 EXPECT_EQ("01:02:03:04:05:06", sut.to_deprecated_string()); 84} 85 86TEST_CASE(should_make_mac_address_from_string_numbers) 87{ 88 auto const sut = MACAddress::from_string("01:02:03:04:05:06"sv); 89 90 EXPECT(sut.has_value()); 91 EXPECT_EQ(1, sut.value()[0]); 92 EXPECT_EQ(2, sut.value()[1]); 93 EXPECT_EQ(3, sut.value()[2]); 94 EXPECT_EQ(4, sut.value()[3]); 95 EXPECT_EQ(5, sut.value()[4]); 96 EXPECT_EQ(6, sut.value()[5]); 97} 98 99TEST_CASE(should_make_mac_address_from_string_letters) 100{ 101 auto const sut = MACAddress::from_string("de:ad:be:ee:ee:ef"sv); 102 103 EXPECT(sut.has_value()); 104 EXPECT_EQ(u8 { 0xDE }, sut.value()[0]); 105 EXPECT_EQ(u8 { 0xAD }, sut.value()[1]); 106 EXPECT_EQ(u8 { 0xBE }, sut.value()[2]); 107 EXPECT_EQ(u8 { 0xEE }, sut.value()[3]); 108 EXPECT_EQ(u8 { 0xEE }, sut.value()[4]); 109 EXPECT_EQ(u8 { 0xEF }, sut.value()[5]); 110} 111 112TEST_CASE(should_make_empty_optional_from_bad_string) 113{ 114 auto const sut = MACAddress::from_string("bad string"sv); 115 116 EXPECT(!sut.has_value()); 117} 118 119TEST_CASE(should_make_empty_optional_from_out_of_range_values) 120{ 121 auto const sut = MACAddress::from_string("de:ad:be:ee:ee:fz"sv); 122 123 EXPECT(!sut.has_value()); 124}