mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-19 15:43:20 +00:00
99 lines
2.5 KiB
C++
99 lines
2.5 KiB
C++
![]() |
/*
|
||
|
* Copyright (c) 2024, Sam Atkins <sam@ladybird.org>
|
||
|
*
|
||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||
|
*/
|
||
|
|
||
|
#include <AK/FlyString.h>
|
||
|
#include <AK/Vector.h>
|
||
|
#include <LibTest/TestCase.h>
|
||
|
#include <LibWeb/CSS/Parser/TokenStream.h>
|
||
|
|
||
|
namespace Web::CSS::Parser {
|
||
|
|
||
|
TEST_CASE(basic)
|
||
|
{
|
||
|
Vector<Token> tokens {
|
||
|
Token::create_ident("hello"_fly_string),
|
||
|
};
|
||
|
|
||
|
TokenStream stream { tokens };
|
||
|
EXPECT(!stream.is_empty());
|
||
|
EXPECT(stream.has_next_token());
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 1u);
|
||
|
|
||
|
// next_token() doesn't consume it
|
||
|
auto const& next = stream.next_token();
|
||
|
EXPECT(!stream.is_empty());
|
||
|
EXPECT(stream.has_next_token());
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 1u);
|
||
|
// Check what the token is
|
||
|
EXPECT(next.is(Token::Type::Ident));
|
||
|
EXPECT_EQ(next.ident(), "hello"_fly_string);
|
||
|
|
||
|
// consume_a_token() does consume it
|
||
|
auto const& consumed = stream.consume_a_token();
|
||
|
EXPECT(stream.is_empty());
|
||
|
EXPECT(!stream.has_next_token());
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 0u);
|
||
|
// Check what the token is
|
||
|
EXPECT(consumed.is(Token::Type::Ident));
|
||
|
EXPECT_EQ(consumed.ident(), "hello"_fly_string);
|
||
|
|
||
|
// Now, any further tokens should be EOF
|
||
|
EXPECT(stream.next_token().is(Token::Type::EndOfFile));
|
||
|
EXPECT(stream.consume_a_token().is(Token::Type::EndOfFile));
|
||
|
}
|
||
|
|
||
|
TEST_CASE(marks)
|
||
|
{
|
||
|
Vector<Token> tokens {
|
||
|
Token::create_ident("a"_fly_string),
|
||
|
Token::create_ident("b"_fly_string),
|
||
|
Token::create_ident("c"_fly_string),
|
||
|
Token::create_ident("d"_fly_string),
|
||
|
Token::create_ident("e"_fly_string),
|
||
|
Token::create_ident("f"_fly_string),
|
||
|
Token::create_ident("g"_fly_string),
|
||
|
};
|
||
|
TokenStream stream { tokens };
|
||
|
|
||
|
stream.mark(); // 0
|
||
|
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 7u);
|
||
|
|
||
|
stream.discard_a_token();
|
||
|
stream.discard_a_token();
|
||
|
stream.discard_a_token();
|
||
|
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 4u);
|
||
|
|
||
|
stream.mark(); // 3
|
||
|
|
||
|
stream.discard_a_token();
|
||
|
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 3u);
|
||
|
|
||
|
stream.restore_a_mark(); // Back to 3
|
||
|
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 4u);
|
||
|
|
||
|
stream.discard_a_token();
|
||
|
stream.discard_a_token();
|
||
|
stream.discard_a_token();
|
||
|
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 1u);
|
||
|
|
||
|
stream.mark(); // 6
|
||
|
|
||
|
stream.discard_a_mark();
|
||
|
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 1u);
|
||
|
|
||
|
stream.restore_a_mark(); // Back to 0
|
||
|
|
||
|
EXPECT_EQ(stream.remaining_token_count(), 7u);
|
||
|
}
|
||
|
|
||
|
}
|