mozilla
Your Search Results

    MozMill Testing

    For general Mozmill knowledge see en/Mozmill_Tests first.

    Event creation test using CalendarUtils

    Before you go on to read CalendarUtils reference you can try it out with the following example test. In order to do that save the code next to shared-modules folder in calendar/test/mozmill in your local comm-central repository.

    var RELATIVE_ROOT = './shared-modules';
    var MODULE_REQUIRES = ['CalendarUtils'];
    
    var sleep = 500;
    
    var setupModule = function(module) {
      controller = mozmill.getMail3PaneController();
    }
    
    var testCreateEvent = function () {
      // making sure day view is active
      CalendarUtils.switchToView("day", controller);
     
      // click at 10 am
      controller.doubleClick(new elementslib.Lookup(controller.window.document,
        CalendarUtils.getEventBoxPath("day", CalendarUtils.CANVAS_BOX, undefined, 1, 10, controller)));
      controller.waitForEval('utils.getWindows("Calendar:EventDialog").length > 0', sleep);
      let event = new mozmill.controller.MozMillController(mozmill.utils
        .getWindows("Calendar:EventDialog")[0]);
      // waiting for event dialog
      event.sleep(sleep);
     
      // give it title
      CalendarUtils.setData({title: "Mozmill event", reminder: 0}, event);
     
      // save it
      event.click(new elementslib.ID(event.window.document, "button-save"));
      controller.sleep(sleep);
     
      let box = CalendarUtils.getEventBoxPath("day", CalendarUtils.EVENT_BOX, undefined, 1, 10, controller)
        + '/{"tooltip":"itemTooltip"}';
     
      // make sure it was added to view
      controller.assertNode(new elementslib.Lookup(controller.window.document, box));
     
      // delete event
      controller.click(new elementslib.Lookup(controller.window.document, box));
      controller.keypress(new elementslib.ID(controller.window.document, "day-view"), "VK_DELETE", {});
      controller.sleep(sleep);
     
      // verify that it was deleted
      controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, box));
    }
    

    Then load it into Mozmill IDE and run!

    Note that this test only depends on CalendarUtils module, whenever you need to interact with modal dialogs (the ones that steal focus from every other Thunderbird window you have open) you need ModalDialogAPI from QA test repository. Just copy it from there into calendar shared-modules folder and add a reference to MODULE_REQUIRES. You may also find other modules in there useful for your calendar tests.

    Utility functions

    acceptSendingNotificationMail

    CalendarUtils.acceptNotificationMail();

    Sets Mozmill up to click OK in the dialog asking if you want to notify attendees of a new or changed event. Call before saving an event with attendees.

    handleAddingAttachment

    CalendarUtils.handleAddingAttachment(url);
    
    Example:
    CalendarUtils.handleAddingAttachment("http://mozilla.org");
    

    Sets Mozmill up to enter an url in attachment dialog. Triggering the dialog itself either using a button or a menu option is needed afterwards.

    handleOccurrenceDeletion

    CalendarUtils.handleOccurrenceDeletion(attendees);
    
    Example:
    CalendarUtils.handleOccurrenceDeletion(true); 
    

    Sets Mozmill up to handle event deletion. Chooses to delete a specific occurrence of a repeating event and depending on argument value either notifies attendees or not if there are attendees. You only need this if you're interacting with a repeating event. To trigger event deletion dialog you can send VK_DELETE to event.

    handleParentDeletion

    CalendarUtils.handleParentDeletion(attendees);
    
    Example:
    CalendarUtils.handleParentDeletion(true);
    

    Sets Mozmill up to handle event deletion. Chooses to delete all occurrences of a repeating event and depending on argument value either notifies attendees or not if there are attendees. You only need this if you're interacting with a repeating event. To trigger event deletion dialog you can send VK_DELETE to event.

    handleOccurrenceModification

    CalendarUtils.handleOccurrenceModification(attendees);
    
    Example:
    CalendarUtils.handleOccurrenceModification(true);
    

    Sets Mozmill up to handle event modification. Chooses to modify a specific occurrence of a repeating event and depending on argument value either notifies attendees or not if there are attendees. You only need this if you're interacting with a repeating event. To trigger event modification dialog you need to open repeating event using doubleclick.

    handleParentModification

    CalendarUtils.handleParentModification(attendees);
    
    Example:
    CalendarUtils.handleParentModification(true);
    

    Sets Mozmill up to handle event modification. Chooses to modify all occurrences of a repeating event and depending on argument value either notifies attendees or not if there are attendees. You only need this if you're interacting with a repeating event. To trigger event modification dialog you need to open repeating event using doubleclick.

    switchToView

    CalendarUtils.switchToView(view, controller);
    
    Example:
    CalendarUtils.switchToView("day", controller);  // other valid options: week, multiweek, month
    

    Switches main calendar view to a single day, week, multiple weeks or month.

    goToDate

    CalendarUtils.goToDate(year, month, day, controller);
    
    Example:
    CalendarUtils.goToDate(2010, 1, 1, controller); // 1st January 2010

    Changes active day using minimonth calendar.

    getEventBoxPath

    CalendarUtils.getEventBoxPath(view, option, row, column, hour, controller);
    
    Examples:
    // to edit an event at 8am in day view
    CalendarUtils.getEventBoxPath("day", CalendarUtils.EVENT_BOX, undefined, 1, 8, controller);
    // the create/edit allday event on third day of the week in week view
    CalendarUtils.getEventBoxPath("week", CalendarUtils.ALLDAY, undefined, 3, undefined, controller);
    // to create event on third day in the second row in month view
    CalendarUtils.getEventBoxPath("month", CalendarUtils.CANVAS_BOX, 2, 3, undefined, controller);
    

    Lookup expressions for events in view aren't pretty, this is a helper function to get most of the needed path. You need to add the last level yourself, for example to get a full lookup string for event in calendar named Mozmill you'd use

    CalendarUtils.getEventBoxPath("month", CalendarUtils.EVENT_BOX, 2, 3, undefined, controller)
      + '/{"tooltip":"itemTooltip","calendar":"Mozmill"}';
    

    It will work for events that are the only events on a given hour (day and week views) or day (multiweek and month views). In cases when view layout is more complicated there's no good way to abstract expressions as it depends on the exact timing of events. For creating a new event you need canvas box, for editing an existing one you need event box. Allday only applies to day and week views where there's a special area at the top for such events.

    forward

    CalendarUtils.forward(n);
    
    Example:
    CalendarUtils.forward(2); // go forward 2 days, 2 weeks or 2 months depending on active view

    back

    CalendarUtils.back(n);
    
    Example:
    CalendarUtils.back(3); // go back 3 days, 3 weeks or 3 months depending on active view

    deleteCalendars

    CalendarUtils.deleteCalendars(calendar);
    
    Example:
    CalendarUtils.deleteCalendars("Mozmill");

    Deletes all calendars with given name. Useful for cleanup at the end of test.

    createCalendar

    CalendarUtils.createCalendar(calendar);
    
    Example:
    CalendarUtils.createCalendar("Mozmill");

    Creates new local calendar with given name and selects it in calendar list. Useful for test setup.

    setData

    setData(data, event);
    
    Example:
    setData({title: "title", location: "location", description: "description"}, eventDialogController);
    

    Other attributes you can specify:

    • category (string) - category label
    • allday (boolean)
    • startdate, starttime, enddate, enddate (Date objects)
    • repeat (one of none/daily/weekly/every.weekday/bi.weekly/monthly/yearly/custom)
    • timezone (boolean, true for calendar default timezone, false for local time)
    • reminder (integer) - option index
    • priority (one of none/low/normal/high)
    • privacy (one of public/confidential/private
    • status (one of none/tentative/confirmed/cancelled
    • freebusy (one of free/busy
    • attachment.add (string)
    • attachment.remove (string)

    Note that while most replace previous values, attachment.add and attachment.remove modify attachment list, so that after two attachment.add's you'll have two attachments.

    findEventsInNode

     CalendarUtils.findEventsInNode(node, eventNodes);
    

    Retrieve all xul nodes named calendar-event-box inside parent node.

    • node - parent xul node, you can get it from an elementslib object using getNode()
    • eventNodes - xul nodes found are saved as an array into variable passed in

    Useful when you want to do more complex assertions regarding events' positions (for example verify that no overlapping eventboxes are present) and need to retrieve all events in view.

    Document Tags and Contributors

    Tags: 
    Contributors to this page: Sheppy, merike, fscholz
    Last updated by: fscholz,