1
/* This Source Code Form is subject to the terms of the Mozilla Public
2
* License, v. 2.0. If a copy of the MPL was not distributed with this
3
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
var calUtils = require("../shared-modules/calendar-utils");
6
var modalDialog = require("../shared-modules/modal-dialog");
7
var utils = require("../shared-modules/utils");
10
var calendar = "Mozmill";
12
var eventPath = '/{"tooltip":"itemTooltip","calendar":"' + calendar.toLowerCase() + '"}';
14
var setupModule = function(module) {
15
controller = mozmill.getMail3PaneController();
16
calUtils.createCalendar(controller, calendar);
19
var testWeeklyNRecurrence = function () {
20
controller.click(new elementslib.ID(controller.window.document, "calendar-tab-button"));
21
calUtils.switchToView(controller, "day");
22
calUtils.goToDate(controller, 2009, 1, 5);
24
// create weekly recurring event
25
controller.doubleClick(new elementslib.Lookup(controller.window.document,
26
calUtils.getEventBoxPath(controller, "day", calUtils.CANVAS_BOX, undefined, 1, hour)), 1, 1);
27
controller.waitFor(function() {return mozmill.utils.getWindows("Calendar:EventDialog").length > 0}, sleep);
28
let event = new mozmill.controller.MozMillController(mozmill.utils.getWindows("Calendar:EventDialog")[0]);
30
let md = new modalDialog.modalDialog(event.window);
31
md.start(setRecurrence);
32
event.waitForElement(new elementslib.ID(event.window.document, "item-repeat"));
33
event.select(new elementslib.ID(event.window.document, "item-repeat"), undefined, undefined, "custom");
35
event.click(new elementslib.ID(event.window.document, "button-save"));
39
let box = calUtils.getEventBoxPath(controller, "day", calUtils.EVENT_BOX, undefined, 1, hour)
42
// Monday, Tuesday, Wednesday, Thursday
43
for(let i = 0; i < 4; i++){
44
controller.assertNode(new elementslib.Lookup(controller.window.document, box));
45
calUtils.forward(controller, 1);
49
calUtils.forward(controller, 1);
50
controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, box));
53
calUtils.switchToView(controller, "week");
55
// Monday, Tuesday, Wednesday, Thursday
56
for(let i = 2; i < 6; i++){
57
box = calUtils.getEventBoxPath(controller, "week", calUtils.EVENT_BOX, undefined, i, hour)
59
controller.waitForElement(new elementslib.Lookup(controller.window.document, box));
63
box = calUtils.getEventBoxPath(controller, "week", calUtils.EVENT_BOX, undefined, 7, hour)
65
controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, box));
67
// check multiweek view
68
calUtils.switchToView(controller, "multiweek");
69
checkMultiWeekView("multiweek");
72
calUtils.switchToView(controller, "month");
73
checkMultiWeekView("month");
76
box = calUtils.getEventBoxPath(controller, "month", calUtils.EVENT_BOX, 2, 2, hour)
78
controller.click(new elementslib.Lookup(controller.window.document, box));
79
calUtils.handleParentDeletion(controller, false);
80
controller.keypress(new elementslib.ID(controller.window.document, "month-view"),
82
controller.waitForElementNotPresent(new elementslib.Lookup(controller.window.document, box));
85
function setRecurrence(recurrence){
87
recurrence.waitForElement(new elementslib.ID(recurrence.window.document, "period-list"));
88
recurrence.select(new elementslib.ID(recurrence.window.document, "period-list"), undefined, undefined, "1");
89
recurrence.sleep(sleep);
91
let mon = utils.getProperty("chrome://calendar/locale/dateFormat.properties", "day.2.Mmm");
92
let tue = utils.getProperty("chrome://calendar/locale/dateFormat.properties", "day.3.Mmm");
93
let wed = utils.getProperty("chrome://calendar/locale/dateFormat.properties", "day.4.Mmm");
94
let thu = utils.getProperty("chrome://calendar/locale/dateFormat.properties", "day.5.Mmm");
95
let sat = utils.getProperty("chrome://calendar/locale/dateFormat.properties", "day.7.Mmm");
97
let days = '/id("calendar-event-dialog-recurrence")/id("recurrence-pattern-groupbox")/'
98
+ 'id("recurrence-pattern-grid")/id("recurrence-pattern-rows")/id("recurrence-pattern-period-row")/'
99
+ 'id("period-deck")/id("period-deck-weekly-box")/[1]/id("daypicker-weekday")/anon({"anonid":"mainbox"})/';
101
// starting from Monday so it should be checked
102
recurrence.assertChecked(new elementslib.Lookup(recurrence.window.document, days + '{"label":"' + mon + '"}'));
103
// check Tuesday, Wednesday, Thursday and Saturday too
104
recurrence.click(new elementslib.Lookup(recurrence.window.document, days + '{"label":"' + tue + '"}'));
105
recurrence.click(new elementslib.Lookup(recurrence.window.document, days + '{"label":"' + wed + '"}'));
106
recurrence.click(new elementslib.Lookup(recurrence.window.document, days + '{"label":"' + thu + '"}'));
107
recurrence.click(new elementslib.Lookup(recurrence.window.document, days + '{"label":"' + sat + '"}'));
109
// set number of occurrences
110
recurrence.click(new elementslib.ID(recurrence.window.document, "recurrence-range-for"));
111
let input = '/id("calendar-event-dialog-recurrence")/id("recurrence-range-groupbox")/[1]/'
112
+ 'id("recurrence-duration")/id("recurrence-range-count-box")/id("repeat-ntimes-count")/'
113
+ 'anon({"class":"textbox-input-box numberbox-input-box"})/anon({"anonid":"input"})';
114
// replace previous number
115
recurrence.keypress(new elementslib.Lookup(recurrence.window.document, input), "a", {ctrlKey:true});
116
recurrence.type(new elementslib.Lookup(recurrence.window.document, input), "4");
119
recurrence.click(new elementslib.Lookup(recurrence.window.document, '/id("calendar-event-dialog-recurrence")/'
120
+ 'anon({"anonid":"buttons"})/{"dlgtype":"accept"}'));
123
function checkMultiWeekView(view){
126
// in month view event starts from 2nd row
127
if(view == "month") week++;
129
// Monday, Tuesday, Wednesday, Thursday
130
for(let i = 2; i < 6; i++){
131
let box = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, week, i, undefined)
133
controller.assertNode(new elementslib.Lookup(controller.window.document, box));
137
let box = calUtils.getEventBoxPath(controller, view, calUtils.EVENT_BOX, week, 7, undefined)
139
controller.assertNodeNotExist(new elementslib.Lookup(controller.window.document, box));
142
var teardownTest = function(module) {
143
calUtils.deleteCalendars(controller, calendar);