[haiku-commits] r42995 - in haiku/trunk/src/tests/add-ons: . mail mail/imap

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 30 Oct 2011 12:00:09 +0100 (CET)

Author: axeld
Date: 2011-10-30 12:00:09 +0100 (Sun, 30 Oct 2011)
New Revision: 42995
Changeset: https://dev.haiku-os.org/changeset/42995

Added:
   haiku/trunk/src/tests/add-ons/mail/
   haiku/trunk/src/tests/add-ons/mail/Jamfile
   haiku/trunk/src/tests/add-ons/mail/imap/
   haiku/trunk/src/tests/add-ons/mail/imap/Jamfile
   haiku/trunk/src/tests/add-ons/mail/imap/imap_tester.cpp
Modified:
   haiku/trunk/src/tests/add-ons/Jamfile
Log:
* Started a very simple test application for the IMAP add-on.


Modified: haiku/trunk/src/tests/add-ons/Jamfile
===================================================================
--- haiku/trunk/src/tests/add-ons/Jamfile       2011-10-30 10:53:07 UTC (rev 
42994)
+++ haiku/trunk/src/tests/add-ons/Jamfile       2011-10-30 11:00:09 UTC (rev 
42995)
@@ -3,6 +3,7 @@
 SubInclude HAIKU_TOP src tests add-ons input_server ;
 SubInclude HAIKU_TOP src tests add-ons index_server ;
 SubInclude HAIKU_TOP src tests add-ons kernel ;
+SubInclude HAIKU_TOP src tests add-ons mail ;
 SubInclude HAIKU_TOP src tests add-ons media ;
 SubInclude HAIKU_TOP src tests add-ons opengl ;
 SubInclude HAIKU_TOP src tests add-ons print ;

Added: haiku/trunk/src/tests/add-ons/mail/Jamfile
===================================================================
--- haiku/trunk/src/tests/add-ons/mail/Jamfile                          (rev 0)
+++ haiku/trunk/src/tests/add-ons/mail/Jamfile  2011-10-30 11:00:09 UTC (rev 
42995)
@@ -0,0 +1,3 @@
+SubDir HAIKU_TOP src tests add-ons mail ;
+
+SubInclude HAIKU_TOP src tests add-ons mail imap ;

Added: haiku/trunk/src/tests/add-ons/mail/imap/Jamfile
===================================================================
--- haiku/trunk/src/tests/add-ons/mail/imap/Jamfile                             
(rev 0)
+++ haiku/trunk/src/tests/add-ons/mail/imap/Jamfile     2011-10-30 11:00:09 UTC 
(rev 42995)
@@ -0,0 +1,29 @@
+SubDir HAIKU_TOP src tests add-ons mail imap ;
+
+SetSubDirSupportedPlatformsBeOSCompatible ;
+
+UsePrivateHeaders mail shared ;
+SubDirHdrs [ FDirName $(HAIKU_TOP) src tests add-ons kernel file_systems
+       fs_shell ] ;
+SubDirHdrs [ FDirName $(HAIKU_TOP) src add-ons mail_daemon inbound_protocols
+       imap imap_lib ] ;
+
+local libSources = IMAPFolders.cpp IMAPHandler.cpp IMAPMailbox.cpp
+       IMAPParser.cpp IMAPProtocol.cpp IMAPStorage.cpp ;
+
+SimpleTest imap_tester :
+       imap_tester.cpp
+       $(libSources)
+
+       # from fs_shell
+       argv.c
+
+       : be $(TARGET_LIBSUPC++) mail
+;
+
+SEARCH on [ FGristFiles $(libSources) ]
+       = [ FDirName $(HAIKU_TOP) src add-ons mail_daemon inbound_protocols imap
+               imap_lib ] ;
+
+SEARCH on [ FGristFiles argv.c ] = [ FDirName $(HAIKU_TOP) src tests add-ons
+       kernel file_systems fs_shell ] ;

Added: haiku/trunk/src/tests/add-ons/mail/imap/imap_tester.cpp
===================================================================
--- haiku/trunk/src/tests/add-ons/mail/imap/imap_tester.cpp                     
        (rev 0)
+++ haiku/trunk/src/tests/add-ons/mail/imap/imap_tester.cpp     2011-10-30 
11:00:09 UTC (rev 42995)
@@ -0,0 +1,198 @@
+#include "IMAPFolders.h"
+#include "IMAPMailbox.h"
+#include "IMAPStorage.h"
+
+#include "argv.h"
+
+
+struct cmd_entry {
+       char*   name;
+       void    (*func)(int argc, char **argv);
+       char*   help;
+};
+
+
+static void do_help(int argc, char** argv);
+
+
+extern const char* __progname;
+static const char* kProgramName = __progname;
+
+static IMAPStorage sStorage;
+static IMAPMailbox sMailbox(sStorage);
+
+
+static void
+error(const char* context, status_t status)
+{
+       fprintf(stderr, "Error during %s: %s\n", context, strerror(status));
+}
+
+
+static void
+usage()
+{
+       printf("Usage: %s <server> <username> <password>\n", kProgramName);
+       exit(1);
+}
+
+
+// #pragma mark -
+
+
+static void
+do_select(int argc, char** argv)
+{
+       const char* folder = "INBOX";
+       if (argc > 1)
+               folder = argv[1];
+
+       status_t status = sMailbox.SelectMailbox(folder);
+       if (status != B_OK)
+               error("select", status);
+}
+
+
+static void
+do_folders(int argc, char** argv)
+{
+       IMAPFolders folder(sMailbox);
+       FolderList folders;
+       status_t status = folder.GetFolders(folders);
+       if (status != B_OK)
+               error("folders", status);
+
+       for (size_t i = 0; i < folders.size(); i++) {
+               printf(" %s %s\n", folders[i].subscribed ? "*" : " ",
+                       folders[i].folder.String());
+       }
+}
+
+
+static void
+do_raw(int argc, char** argv)
+{
+       // build command back again
+       char command[4096];
+       command[0] = '\0';
+
+       for (int i = 1; i < argc; i++) {
+               if (i > 1)
+                       strlcat(command, " ", sizeof(command));
+               strlcat(command, argv[i], sizeof(command));
+       }
+
+       class RawCommand : public IMAPCommand {
+       public:
+               RawCommand(const char* command)
+                       :
+                       fCommand(command)
+               {
+               }
+
+               BString Command()
+               {
+                       return fCommand;
+               }
+
+               bool Handle(const BString& response)
+               {
+                       return false;
+               }
+
+       private:
+               const char* fCommand;
+       };
+       RawCommand rawCommand(command);
+       status_t status = sMailbox.ProcessCommand(&rawCommand, 60 * 1000);
+       if (status != B_OK)
+               error("raw", status);
+}
+
+
+static cmd_entry sBuiltinCommands[] = {
+       {"select", do_select, "Selects a mailbox, defaults to INBOX"},
+       {"folders", do_folders, "List of existing folders"},
+       {"raw", do_raw, "Issue a raw command to the server"},
+       {"help", do_help, "prints this help text"},
+       {"quit", NULL, "exits the application"},
+       {NULL, NULL, NULL},
+};
+
+
+static void
+do_help(int argc, char** argv)
+{
+       printf("Available commands:\n");
+
+       for (cmd_entry* command = sBuiltinCommands; command->name != NULL;
+                       command++) {
+               printf("%8s - %s\n", command->name, command->help);
+       }
+}
+
+
+// #pragma mark -
+
+
+int
+main(int argc, char** argv)
+{
+       if (argc < 4)
+               usage();
+
+       const char* server = argv[1];
+       const char* user = argv[2];
+       const char* password = argv[3];
+       bool useSSL = argc > 4;
+       uint16 port = useSSL ? 995 : 143;
+
+       printf("Connecting to \"%s\" as %s\n", server, user);
+
+       status_t status = sMailbox.Connect(server, user, password, useSSL, 
port);
+       if (status != B_OK) {
+               error("connect", status);
+               return 1;
+       }
+
+       while (true) {
+               printf("> ");
+               fflush(stdout);
+
+               char line[1024];
+               if (fgets(line, sizeof(line), stdin) == NULL)
+                       break;
+
+        argc = 0;
+        argv = build_argv(line, &argc);
+        if (argv == NULL || argc == 0)
+            continue;
+
+               if (!strcmp(argv[0], "quit")
+                       || !strcmp(argv[0], "exit")
+                       || !strcmp(argv[0], "q"))
+                       break;
+
+        int length = strlen(argv[0]);
+               bool found = false;
+
+               for (cmd_entry* command = sBuiltinCommands; command->name != 
NULL;
+                               command++) {
+                       if (!strncmp(command->name, argv[0], length)) {
+                               command->func(argc, argv);
+                               found = true;
+                               break;
+                       }
+               }
+
+               if (!found) {
+                       fprintf(stderr, "Unknown command \"%s\". Type \"help\" 
for a "
+                               "list of commands.\n", argv[0]);
+               }
+
+               free(argv);
+       }
+
+
+       return 0;
+}


Other related posts:

  • » [haiku-commits] r42995 - in haiku/trunk/src/tests/add-ons: . mail mail/imap - axeld