forked from lavina/lavina
irc: allow PART without a reason
This commit is contained in:
parent
adece11fef
commit
36b0d50d51
|
@ -271,11 +271,10 @@ async fn scenario_two_users() -> Result<()> {
|
|||
// The first user should receive the message
|
||||
s1.expect(":tester2 PRIVMSG #test :Hello").await?;
|
||||
// Leave the channel from the first user
|
||||
// TODO implement irc PART command
|
||||
// s1.send("PART #test").await?;
|
||||
// s1.expect(":tester1 PART #test").await?;
|
||||
s1.send("PART #test").await?;
|
||||
s1.expect(":tester1 PART #test").await?;
|
||||
// The second user should receive the PART message
|
||||
// s2.expect(":tester1 PART #test").await?;
|
||||
s2.expect(":tester1 PART #test").await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ pub enum ClientMessage {
|
|||
},
|
||||
Part {
|
||||
chan: Chan,
|
||||
message: Str,
|
||||
message: Option<Str>,
|
||||
},
|
||||
/// `PRIVMSG <target> :<msg>`
|
||||
PrivateMessage {
|
||||
|
@ -194,14 +194,20 @@ fn client_message_topic(input: &str) -> IResult<&str, ClientMessage> {
|
|||
fn client_message_part(input: &str) -> IResult<&str, ClientMessage> {
|
||||
let (input, _) = tag("PART ")(input)?;
|
||||
let (input, chan) = chan(input)?;
|
||||
let (input, _) = tag(" ")(input)?;
|
||||
let (input, t) = opt(tag(" "))(input)?;
|
||||
match t {
|
||||
Some(_) => (),
|
||||
None => {
|
||||
return Ok((input, ClientMessage::Part { chan, message: None }));
|
||||
}
|
||||
}
|
||||
let (input, r) = opt(tag(":"))(input)?;
|
||||
let (input, message) = match r {
|
||||
Some(_) => token(input)?,
|
||||
None => receiver(input)?,
|
||||
};
|
||||
|
||||
let message = message.into();
|
||||
let message = Some(message.into());
|
||||
Ok((input, ClientMessage::Part { chan, message }))
|
||||
}
|
||||
|
||||
|
@ -369,7 +375,18 @@ mod test {
|
|||
let input = "PART #chan :Pokasiki !!!";
|
||||
let expected = ClientMessage::Part {
|
||||
chan: Chan::Global("chan".into()),
|
||||
message: "Pokasiki !!!".into(),
|
||||
message: Some("Pokasiki !!!".into()),
|
||||
};
|
||||
|
||||
let result = client_message(input);
|
||||
assert_matches!(result, Ok(result) => assert_eq!(expected, result));
|
||||
}
|
||||
#[test]
|
||||
fn test_client_message_part_empty() {
|
||||
let input = "PART #chan";
|
||||
let expected = ClientMessage::Part {
|
||||
chan: Chan::Global("chan".into()),
|
||||
message: None,
|
||||
};
|
||||
|
||||
let result = client_message(input);
|
||||
|
|
Loading…
Reference in New Issue