Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion lib/src/private/imap/status_parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import 'response_parser.dart';
/// Parses status responses
class StatusParser extends ResponseParser<Mailbox> {
/// Creates a new parser
StatusParser(this.box) : _regex = RegExp(r'(STATUS "[^"]+?" )(.*)');
// Matches both a quoted ("INBOX") and an unquoted atom (INBOX) mailbox
// name: servers such as Dovecot return the atom form in STATUS responses.
StatusParser(this.box)
: _regex = RegExp(r'(STATUS (?:"[^"]+?"|[^ (]+) )(.*)');

/// The current mailbox
Mailbox box;
Expand Down
122 changes: 61 additions & 61 deletions test/src/imap/status_parser_test.dart
Original file line number Diff line number Diff line change
@@ -1,61 +1,61 @@
import 'package:enough_mail/enough_mail.dart';
import 'package:enough_mail/src/private/imap/all_parsers.dart';
import 'package:enough_mail/src/private/imap/imap_response.dart';
import 'package:enough_mail/src/private/imap/imap_response_line.dart';
import 'package:test/test.dart';
// cSpell:disable
void main() {
test('Status with unseen', () {
const responseText = 'STATUS "[Gmail]/Spam" (UNSEEN 13)';
final details = ImapResponse()..add(ImapResponseLine(responseText));
final box = Mailbox(
encodedName: 'Spam',
encodedPath: '[Gmail]/Spam',
flags: [MailboxFlag.junk],
pathSeparator: '/',
);
final parser = StatusParser(box);
final response = Response<Mailbox>()..status = ResponseStatus.ok;
final processed = parser.parseUntagged(details, response);
expect(processed, true);
expect(box.messagesUnseen, 13);
});
test('Status with unseen, messages, uidnext, uidvalidity', () {
const responseText =
'STATUS "[Gmail]/Spam" (MESSAGES 123 UNSEEN 13 UIDVALIDITY 2222 UIDNEXT 876)';
final details = ImapResponse()..add(ImapResponseLine(responseText));
final box = Mailbox(
encodedName: 'Spam',
encodedPath: '[Gmail]/Spam',
flags: [MailboxFlag.junk],
pathSeparator: '/',
);
final parser = StatusParser(box);
final response = Response<Mailbox>()..status = ResponseStatus.ok;
final processed = parser.parseUntagged(details, response);
expect(processed, true);
expect(box.messagesUnseen, 13);
expect(box.messagesExists, 123);
expect(box.uidValidity, 2222);
expect(box.uidNext, 876);
});
test('Status of Mailbox with name containing brackets', () {
const responseText =
'STATUS "upper level.Funny folder (with brackets)" (MESSAGES 2)';
final details = ImapResponse()..add(ImapResponseLine(responseText));
final box = Mailbox(
encodedName: 'Funny folder (with brackets)',
encodedPath: 'upper level.Funny folder (with brackets)',
flags: [MailboxFlag.junk],
pathSeparator: '.',
);
final parser = StatusParser(box);
final response = Response<Mailbox>()..status = ResponseStatus.ok;
final processed = parser.parseUntagged(details, response);
expect(processed, true);
expect(box.messagesExists, 2);
});
}
import 'package:enough_mail/enough_mail.dart';
import 'package:enough_mail/src/private/imap/all_parsers.dart';
import 'package:enough_mail/src/private/imap/imap_response.dart';
import 'package:enough_mail/src/private/imap/imap_response_line.dart';
import 'package:test/test.dart';
// cSpell:disable

void main() {
test('Status with unseen', () {
const responseText = 'STATUS "[Gmail]/Spam" (UNSEEN 13)';
final details = ImapResponse()..add(ImapResponseLine(responseText));
final box = Mailbox(
encodedName: 'Spam',
encodedPath: '[Gmail]/Spam',
flags: [MailboxFlag.junk],
pathSeparator: '/',
);
final parser = StatusParser(box);
final response = Response<Mailbox>()..status = ResponseStatus.ok;
final processed = parser.parseUntagged(details, response);
expect(processed, true);
expect(box.messagesUnseen, 13);
});

test('Status with unseen, messages, uidnext, uidvalidity', () {
const responseText =
'STATUS "[Gmail]/Spam" (MESSAGES 123 UNSEEN 13 UIDVALIDITY 2222 UIDNEXT 876)';
final details = ImapResponse()..add(ImapResponseLine(responseText));
final box = Mailbox(
encodedName: 'Spam',
encodedPath: '[Gmail]/Spam',
flags: [MailboxFlag.junk],
pathSeparator: '/',
);
final parser = StatusParser(box);
final response = Response<Mailbox>()..status = ResponseStatus.ok;
final processed = parser.parseUntagged(details, response);
expect(processed, true);
expect(box.messagesUnseen, 13);
expect(box.messagesExists, 123);
expect(box.uidValidity, 2222);
expect(box.uidNext, 876);
});

test('Status of Mailbox with name containing brackets', () {
const responseText =
'STATUS "upper level.Funny folder (with brackets)" (MESSAGES 2)';
final details = ImapResponse()..add(ImapResponseLine(responseText));
final box = Mailbox(
encodedName: 'Funny folder (with brackets)',
encodedPath: 'upper level.Funny folder (with brackets)',
flags: [MailboxFlag.junk],
pathSeparator: '.',
);
final parser = StatusParser(box);
final response = Response<Mailbox>()..status = ResponseStatus.ok;
final processed = parser.parseUntagged(details, response);
expect(processed, true);
expect(box.messagesExists, 2);
});
}
Loading