This repository has been archived on 2026-08-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
donglora/vendor/proc-macro2/tests/comments.rs
T
swaitsandClaude Opus 4.6 3102fc747a feat: add display UI with splash screen, dashboard, and RSSI sparkline
Implement full SSD1306 OLED display support:
- Splash screen on boot (1.5s) with project name, version, board
- Dashboard showing radio state, config, counters, RSSI/SNR
- RSSI history sparkline (64-sample ring buffer, 2px-wide bars)
- DisplayOn/DisplayOff host commands routed via dedicated channel
- Pure render functions against generic DrawTarget (no hardware coupling)
- Display on/off control bypasses radio task entirely

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 20:42:54 -06:00

106 lines
3.4 KiB
Rust

#![allow(clippy::assertions_on_result_states, clippy::uninlined_format_args)]
use proc_macro2::{Delimiter, Literal, Spacing, TokenStream, TokenTree};
// #[doc = "..."] -> "..."
fn lit_of_outer_doc_comment(tokens: &TokenStream) -> Literal {
lit_of_doc_comment(tokens, false)
}
// #![doc = "..."] -> "..."
fn lit_of_inner_doc_comment(tokens: &TokenStream) -> Literal {
lit_of_doc_comment(tokens, true)
}
fn lit_of_doc_comment(tokens: &TokenStream, inner: bool) -> Literal {
let mut iter = tokens.clone().into_iter();
match iter.next().unwrap() {
TokenTree::Punct(punct) => {
assert_eq!(punct.as_char(), '#');
assert_eq!(punct.spacing(), Spacing::Alone);
}
_ => panic!("wrong token {:?}", tokens),
}
if inner {
match iter.next().unwrap() {
TokenTree::Punct(punct) => {
assert_eq!(punct.as_char(), '!');
assert_eq!(punct.spacing(), Spacing::Alone);
}
_ => panic!("wrong token {:?}", tokens),
}
}
iter = match iter.next().unwrap() {
TokenTree::Group(group) => {
assert_eq!(group.delimiter(), Delimiter::Bracket);
assert!(iter.next().is_none(), "unexpected token {:?}", tokens);
group.stream().into_iter()
}
_ => panic!("wrong token {:?}", tokens),
};
match iter.next().unwrap() {
TokenTree::Ident(ident) => assert_eq!(ident.to_string(), "doc"),
_ => panic!("wrong token {:?}", tokens),
}
match iter.next().unwrap() {
TokenTree::Punct(punct) => {
assert_eq!(punct.as_char(), '=');
assert_eq!(punct.spacing(), Spacing::Alone);
}
_ => panic!("wrong token {:?}", tokens),
}
match iter.next().unwrap() {
TokenTree::Literal(literal) => {
assert!(iter.next().is_none(), "unexpected token {:?}", tokens);
literal
}
_ => panic!("wrong token {:?}", tokens),
}
}
#[test]
fn closed_immediately() {
let stream = "/**/".parse::<TokenStream>().unwrap();
let tokens = stream.into_iter().collect::<Vec<_>>();
assert!(tokens.is_empty(), "not empty -- {:?}", tokens);
}
#[test]
fn incomplete() {
assert!("/*/".parse::<TokenStream>().is_err());
}
#[test]
fn lit() {
let stream = "/// doc".parse::<TokenStream>().unwrap();
let lit = lit_of_outer_doc_comment(&stream);
assert_eq!(lit.to_string(), "\" doc\"");
let stream = "//! doc".parse::<TokenStream>().unwrap();
let lit = lit_of_inner_doc_comment(&stream);
assert_eq!(lit.to_string(), "\" doc\"");
let stream = "/** doc */".parse::<TokenStream>().unwrap();
let lit = lit_of_outer_doc_comment(&stream);
assert_eq!(lit.to_string(), "\" doc \"");
let stream = "/*! doc */".parse::<TokenStream>().unwrap();
let lit = lit_of_inner_doc_comment(&stream);
assert_eq!(lit.to_string(), "\" doc \"");
}
#[test]
fn carriage_return() {
let stream = "///\r\n".parse::<TokenStream>().unwrap();
let lit = lit_of_outer_doc_comment(&stream);
assert_eq!(lit.to_string(), "\"\"");
let stream = "/**\r\n*/".parse::<TokenStream>().unwrap();
let lit = lit_of_outer_doc_comment(&stream);
assert_eq!(lit.to_string(), "\"\\r\\n\"");
"///\r".parse::<TokenStream>().unwrap_err();
"///\r \n".parse::<TokenStream>().unwrap_err();
"/**\r \n*/".parse::<TokenStream>().unwrap_err();
}