Merge lp:~nskaggs/ubuntu-calendar-app/revert-212 into lp:ubuntu-calendar-app

Proposed by Nicholas Skaggs
Status: Merged
Approved by: Nicholas Skaggs
Approved revision: 219
Merged at revision: 213
Proposed branch: lp:~nskaggs/ubuntu-calendar-app/revert-212
Merge into: lp:ubuntu-calendar-app
Diff against target: 797 lines (+238/-295)
8 files modified
DayView.qml (+4/-3)
MonthView.qml (+17/-12)
WeekView.qml (+69/-69)
YearView.qml (+61/-63)
calendar.qml (+46/-101)
tests/autopilot/calendar_app/emulators.py (+3/-0)
tests/autopilot/calendar_app/tests/__init__.py (+29/-34)
tests/autopilot/calendar_app/tests/test_calendar.py (+9/-13)
To merge this branch: bzr merge lp:~nskaggs/ubuntu-calendar-app/revert-212
Reviewer Review Type Date Requested Status
Timo Jyrinki Approve
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve
Kunal Parmar Pending
Review via email: mp+211813@code.launchpad.net

Commit message

Revert rev 212

Description of the change

To post a comment you must log in.
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Nicholas Skaggs (nskaggs) wrote :

Kunal, re: https://code.launchpad.net/~pkunal-parmar/ubuntu-calendar-app/YearView-Optimization/+merge/208910/. This seems to indicate that rev 212 causes these failures. On the desktop I get segfaults with trunk, reverting to this version fixes those.

Do you think we can revert the revision or otherwise get it cleaned up so things work properly? I'm not sure what is causing the issues (qt 5.2, eds, something else) as I assume it worked when it landed? Regardless, this hopefully pinpoints things.

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Kunal Parmar (pkunal-parmar) wrote :

> Kunal, re: https://code.launchpad.net/~pkunal-parmar/ubuntu-calendar-app
> /YearView-Optimization/+merge/208910/. This seems to indicate that rev 212
> causes these failures. On the desktop I get segfaults with trunk, reverting to
> this version fixes those.
>
> Do you think we can revert the revision or otherwise get it cleaned up so
> things work properly? I'm not sure what is causing the issues (qt 5.2, eds,
> something else) as I assume it worked when it landed? Regardless, this
> hopefully pinpoints things.

As such I don't think, this rev 212 is causing this issue. Though I faced some lay outing issue after using Loader with Page. but I suspect some other thing is causing issue.

May be enabling EDS log might help us. At lest it is disabling some important warning message on my setup.
https://bugs.launchpad.net/ubuntu/+source/qtorganizer5-eds/+bug/1294426

I will analyze more to see it those changes is causing any issue.

Revision history for this message
Kunal Parmar (pkunal-parmar) wrote :

> Kunal, re: https://code.launchpad.net/~pkunal-parmar/ubuntu-calendar-app
> /YearView-Optimization/+merge/208910/. This seems to indicate that rev 212
> causes these failures. On the desktop I get segfaults with trunk, reverting to
> this version fixes those.

You mentioned you are getting segfault, as such I don't think calendar QML code can cause segfault, it must be from EDS then. Can you get backtrace information for the same ?

Revision history for this message
Nicholas Skaggs (nskaggs) wrote :

Kunal, as you mentioned in your bug getting a trace is difficult, but we can try.

Revision history for this message
Kunal Parmar (pkunal-parmar) wrote :

I was refering to coredump, backtrace.
I tried following, it worked partially,

>gdb qmlscene
It prompt to select file, select calendar.qml

try variable usecase which cause segfault.

once it happens,

type bt on gdb prompt.
You may get some useful information.

May be renato or olivier would know more about how to get it properly.

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
219. By Nicholas Skaggs

fix for flake8

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Nicholas Skaggs (nskaggs) wrote :
Revision history for this message
Timo Jyrinki (timo-jyrinki) wrote :

This branch fix the x86 crasher, although obviously it may not be the complete solution.

I've a better, locally backtraced trace at bug #1294995

review: Approve
Revision history for this message
Timo Jyrinki (timo-jyrinki) wrote :

Ignore the previous backtrace link, the bug #1294181 has even better backtrace with QV4_FORCE_INTERPRETER=1.

Revision history for this message
Nicholas Skaggs (nskaggs) wrote :

Thanks Timo. The calendar team have decided to land this revert and then re-propose the changes to track the bug.

Revision history for this message
Nicholas Skaggs (nskaggs) wrote :

By changes I mean, re-propose to merge r212 which this merge is reverting. Otherwise calendar trunk won't be impacted by the bug and we don't want to loose sight of it. Proposing a new merge with the changes again should provide a testbed for getting them fixed.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'DayView.qml'
2--- DayView.qml 2014-03-06 11:47:25 +0000
3+++ DayView.qml 2014-03-20 03:03:05 +0000
4@@ -4,8 +4,7 @@
5 import "dateExt.js" as DateExt
6 import "ViewType.js" as ViewType
7
8-
9-Page{
10+Item{
11 id: root
12 objectName: "DayView"
13
14@@ -13,11 +12,13 @@
15
16 Column {
17 id: column
18- anchors.fill: parent
19 anchors.top: parent.top
20 anchors.topMargin: units.gu(1.5)
21+ width: parent.width; height: parent.height
22 spacing: units.gu(1)
23
24+ anchors.fill: parent
25+
26 ViewHeader{
27 id: viewHeader
28 date: currentDay
29
30=== modified file 'MonthView.qml'
31--- MonthView.qml 2014-03-06 14:45:43 +0000
32+++ MonthView.qml 2014-03-20 03:03:05 +0000
33@@ -3,18 +3,23 @@
34 import "dateExt.js" as DateExt
35 import "colorUtils.js" as Color
36
37-Page{
38- id: root
39+Page {
40+ id: monthViewPage
41+ objectName: "MonthView"
42
43 property var currentMonth: DateExt.today();
44+
45 signal dateSelected(var date);
46
47- anchors.fill: parent
48-
49 PathViewBase{
50 id: monthViewPath
51- objectName: "MonthView"
52- anchors.fill: parent
53+
54+ property var startMonth: currentMonth;
55+
56+ anchors.top:parent.top
57+
58+ width:parent.width
59+ height: parent.height
60
61 onNextItemHighlighted: {
62 nextMonth();
63@@ -25,11 +30,11 @@
64 }
65
66 function nextMonth() {
67- currentMonth = addMonth(root.currentMonth,1);
68+ currentMonth = addMonth(currentMonth,1);
69 }
70
71 function previousMonth(){
72- currentMonth = addMonth(root.currentMonth,-1);
73+ currentMonth = addMonth(currentMonth,-1);
74 }
75
76 function addMonth(date,month){
77@@ -49,16 +54,16 @@
78 function getMonthDate() {
79 switch( monthViewPath.indexType(index)) {
80 case 0:
81- return monthViewPath.addMonth(root.currentMonth,0);
82+ return monthViewPath.startMonth;
83 case -1:
84- return monthViewPath.addMonth(root.currentMonth,-1);
85+ return monthViewPath.addMonth(monthViewPath.startMonth,-1);
86 case 1:
87- return monthViewPath.addMonth(root.currentMonth,1);
88+ return monthViewPath.addMonth(monthViewPath.startMonth,1);
89 }
90 }
91
92 onDateSelected: {
93- root.dateSelected(date);
94+ monthViewPage.dateSelected(date);
95 }
96 }
97 }
98
99=== modified file 'WeekView.qml'
100--- WeekView.qml 2014-03-06 11:47:25 +0000
101+++ WeekView.qml 2014-03-20 03:03:05 +0000
102@@ -4,82 +4,82 @@
103 import "dateExt.js" as DateExt
104 import "ViewType.js" as ViewType
105
106-Page{
107+Column {
108 id: root
109+ objectName: "WeekView"
110+
111 property var dayStart: new Date();
112 property var firstDay: dayStart.weekStart(Qt.locale().firstDayOfWeek);
113-
114- Column {
115- objectName: "WeekView"
116-
117- anchors.fill: parent
118- anchors.top: parent.top
119- anchors.topMargin: units.gu(1.5)
120- spacing: units.gu(1)
121-
122- ViewHeader{
123- id: viewHeader
124- date: dayStart
125- }
126-
127- TimeLineHeader{
128- id: weekHeader
129- objectName: "weekHeader"
130- type: typeWeek
131- date: weekViewPath.weekStart
132- }
133-
134- PathViewBase{
135- id: weekViewPath
136-
137- property var visibleWeek: root.dayStart.weekStart(Qt.locale().firstDayOfWeek);
138- property var weekStart: weekViewPath.visibleWeek
139+ anchors.top: parent.top
140+ anchors.topMargin: units.gu(1.5)
141+ spacing: units.gu(1)
142+
143+ anchors.fill: parent
144+
145+ ViewHeader{
146+ id: viewHeader
147+ date: dayStart
148+ }
149+
150+ TimeLineHeader{
151+ id: weekHeader
152+ objectName: "weekHeader"
153+ type: ViewType.ViewTypeWeek
154+ date: weekViewPath.weekStart
155+ }
156+
157+ PathViewBase{
158+ id: weekViewPath
159+
160+ property var visibleWeek: dayStart.weekStart(Qt.locale().firstDayOfWeek);
161+ property var weekStart: weekViewPath.visibleWeek
162+
163+ width: parent.width
164+ height: root.height - weekViewPath.y
165+
166+ onNextItemHighlighted: {
167+ nextWeek();
168+ weekHeader.incrementCurrentIndex()
169+ }
170+
171+ onPreviousItemHighlighted: {
172+ previousWeek();
173+ weekHeader.decrementCurrentIndex()
174+ }
175+
176+ function nextWeek() {
177+ var weekStartDay = visibleWeek.weekStart(Qt.locale().firstDayOfWeek);
178+ dayStart = weekStartDay.addDays(7);
179+ }
180+
181+ function previousWeek(){
182+ var weekStartDay = visibleWeek.weekStart(Qt.locale().firstDayOfWeek);
183+ dayStart = weekStartDay.addDays(-7);
184+ }
185+
186+ delegate: TimeLineBaseComponent {
187+ id: timeLineView
188+
189+ type: ViewType.ViewTypeWeek
190
191 width: parent.width
192- height: root.height - weekViewPath.y
193-
194- onNextItemHighlighted: {
195- nextWeek();
196- weekHeader.incrementCurrentIndex()
197- }
198-
199- onPreviousItemHighlighted: {
200- previousWeek();
201- weekHeader.decrementCurrentIndex()
202- }
203-
204- function nextWeek() {
205- var weekStartDay = visibleWeek.weekStart(Qt.locale().firstDayOfWeek);
206- dayStart = weekStartDay.addDays(7);
207- }
208-
209- function previousWeek(){
210- var weekStartDay = visibleWeek.weekStart(Qt.locale().firstDayOfWeek);
211- dayStart = weekStartDay.addDays(-7);
212- }
213-
214- delegate: TimeLineBaseComponent {
215- id: timeLineView
216-
217- type: typeWeek
218-
219- width: parent.width
220- height: parent.height
221- startDay: getWeekStart();
222-
223- function getWeekStart() {
224- switch( weekViewPath.indexType(index)) {
225- case 0:
226- return weekViewPath.weekStart;
227- case -1:
228- var weekStartDay= weekViewPath.weekStart.weekStart(Qt.locale().firstDayOfWeek);
229- return weekStartDay.addDays(-7);
230- case 1:
231- var weekStartDay = weekViewPath.weekStart.weekStart(Qt.locale().firstDayOfWeek);
232- return weekStartDay.addDays(7);
233- }
234+ height: parent.height
235+ startDay: getWeekStart();
236+
237+ function getWeekStart() {
238+ switch( weekViewPath.indexType(index)) {
239+ case 0:
240+ return weekViewPath.weekStart;
241+ case -1:
242+ var weekStartDay= weekViewPath.weekStart.weekStart(Qt.locale().firstDayOfWeek);
243+ return weekStartDay.addDays(-7);
244+ case 1:
245+ var weekStartDay = weekViewPath.weekStart.weekStart(Qt.locale().firstDayOfWeek);
246+ return weekStartDay.addDays(7);
247 }
248 }
249 }
250 }
251 }
252+
253+
254
255=== modified file 'YearView.qml'
256--- YearView.qml 2014-03-06 11:43:48 +0000
257+++ YearView.qml 2014-03-20 03:03:05 +0000
258@@ -3,78 +3,76 @@
259
260 import "dateExt.js" as DateExt
261
262-Page {
263+PathViewBase {
264 id: root
265 objectName: "YearView"
266+
267 property var currentYear: DateExt.today();
268+
269 signal monthSelected(var date);
270
271- PathViewBase {
272- id: pathView
273-
274- anchors.fill: parent
275-
276- onNextItemHighlighted: {
277- root.currentYear = pathView.getDateFromYear(root.currentYear.getFullYear() + 1);
278- }
279-
280- onPreviousItemHighlighted: {
281- root.currentYear = pathView.getDateFromYear(root.currentYear.getFullYear() - 1);
282- }
283-
284- function getDateFromYear(year) {
285- return new Date(year,0,1,0,0,0,0);
286- }
287-
288- delegate: GridView{
289- id: yearView
290- clip: true
291-
292- property bool isCurrentItem: index == pathView.currentIndex
293- property var year: getYear();
294-
295- function getYear() {
296- switch( pathView.indexType(index)) {
297- case 0:
298- return root.currentYear;
299- case -1:
300- return pathView.getDateFromYear(root.currentYear.getFullYear() - 1);
301- case 1:
302- return pathView.getDateFromYear(root.currentYear.getFullYear() + 1);
303- }
304+ anchors.fill: parent
305+
306+ onNextItemHighlighted: {
307+ currentYear = getDateFromYear(currentYear.getFullYear() + 1);
308+ }
309+
310+ onPreviousItemHighlighted: {
311+ currentYear = getDateFromYear(currentYear.getFullYear() - 1);
312+ }
313+
314+ function getDateFromYear(year) {
315+ return new Date(year,0,1,0,0,0,0);
316+ }
317+
318+ delegate: GridView{
319+ id: yearView
320+ clip: true
321+
322+ property bool isCurrentItem: index == root.currentIndex
323+ property var year: getYear();
324+
325+ function getYear() {
326+ switch( root.indexType(index)) {
327+ case 0:
328+ return currentYear;
329+ case -1:
330+ return getDateFromYear(currentYear.getFullYear() - 1);
331+ case 1:
332+ return getDateFromYear(currentYear.getFullYear() + 1);
333 }
334-
335- width: parent.width
336- height: parent.height
337- anchors.top: parent.top
338-
339- readonly property int minCellWidth: units.gu(30)
340- cellWidth: Math.floor(Math.min.apply(Math, [3, 4].map(function(n)
341+ }
342+
343+ width: parent.width
344+ height: parent.height
345+ anchors.top: parent.top
346+
347+ readonly property int minCellWidth: units.gu(30)
348+ cellWidth: Math.floor(Math.min.apply(Math, [3, 4].map(function(n)
349 { return ((width / n >= minCellWidth) ? width / n : width / 2) })))
350
351- cellHeight: cellWidth * 1.4
352-
353- model: 12 /* months in a year */
354- delegate: Item {
355- width: yearView.cellWidth
356- height: yearView.cellHeight
357-
358- MonthComponent{
359- id: monthComponent
360- monthDate: new Date(yearView.year.getFullYear(),index,1,0,0,0,0)
361+ cellHeight: cellWidth * 1.4
362+
363+ model: 12 /* months in a year */
364+ delegate: Item {
365+ width: yearView.cellWidth
366+ height: yearView.cellHeight
367+
368+ MonthComponent{
369+ id: monthComponent
370+ monthDate: new Date(yearView.year.getFullYear(),index,1,0,0,0,0)
371+ anchors.fill: parent
372+ anchors.margins: units.gu(0.5)
373+
374+ dayLabelFontSize:"x-small"
375+ dateLabelFontSize: "medium"
376+ monthLabelFontSize: "medium"
377+ yearLabelFontSize: "small"
378+
379+ MouseArea{
380 anchors.fill: parent
381- anchors.margins: units.gu(0.5)
382-
383- dayLabelFontSize:"x-small"
384- dateLabelFontSize: "medium"
385- monthLabelFontSize: "medium"
386- yearLabelFontSize: "small"
387-
388- MouseArea{
389- anchors.fill: parent
390- onClicked: {
391- root.monthSelected(monthComponent.monthDate);
392- }
393+ onClicked: {
394+ root.monthSelected(monthComponent.monthDate);
395 }
396 }
397 }
398
399=== modified file 'calendar.qml'
400--- calendar.qml 2014-03-12 00:17:00 +0000
401+++ calendar.qml 2014-03-20 03:03:05 +0000
402@@ -76,16 +76,14 @@
403 property int endtime: -1;
404
405 onCurrentDayChanged: {
406- if( monthPage.item
407- && monthPage.item.currentMonth !== undefined
408- && !monthPage.item.currentMonth.isSameDay(currentDay))
409- monthPage.item.currentMonth = currentDay.midnight();
410-
411- if( dayPage.item && !dayPage.item.currentDay.isSameDay(currentDay))
412- dayPage.item.currentDay = currentDay
413-
414- if( weekPage.item && !weekPage.item.dayStart.isSameDay(currentDay))
415- weekPage.item.dayStart = currentDay
416+ if( monthView.currentMonth !== undefined && !monthView.currentMonth.isSameDay(currentDay))
417+ monthView.currentMonth = currentDay.midnight();
418+
419+ if( !dayView.currentDay.isSameDay(currentDay))
420+ dayView.currentDay = currentDay
421+
422+ if( !weekView.dayStart.isSameDay(currentDay))
423+ weekView.dayStart = currentDay
424
425 setStartEndDateToModel();
426 }
427@@ -135,13 +133,13 @@
428 var difference = endTime - startTime;
429
430 if (difference > month)
431- return yearTab.index; // Year view
432+ return 0; // Year view
433 else if (difference > 7 * day)
434- return monthTab.index; // Month view}
435+ return 1; // Month view}
436 else if (difference > day)
437- return weekTab.index; // Week view
438+ return 2; // Week view
439 else
440- return dayTab.index; // Day view
441+ return 3; // Day view
442 }
443
444 // This function parse the argument
445@@ -180,17 +178,17 @@
446 }
447 else {
448 // If no endtime has been setted, open the starttime date in day view
449- tabs.selectedTabIndex = dayTab.index;
450+ tabs.selectedTabIndex = 3;
451 }
452 } // End of else if (starttime)
453 else {
454 // Due to bug #1231558 {if (args.defaultArgument.at(0))} is always true
455 // After the fix we can delete this else
456- tabs.selectedTabIndex = monthTab.index;
457+ tabs.selectedTabIndex= 1;
458 }
459 } // End of if about args.values
460 else {
461- tabs.selectedTabIndex = monthTab.index;
462+ tabs.selectedTabIndex= 1;
463 }
464
465 globalModel = GlobalModel.globalModel();
466@@ -235,124 +233,71 @@
467
468 Tabs{
469 id: tabs
470-
471 Tab{
472- id: yearTab
473 objectName: "yearTab"
474 title: i18n.tr("Year")
475- page: Loader{
476- id: yearPage
477+ page: Page{
478 objectName: "yearPage"
479- anchors {
480- top: parent.top
481- left: parent.left
482- right: parent.right
483- bottom: parent.bottom
484- }
485- source: (tabs.selectedTab === yearTab) ? Qt.resolvedUrl("YearView.qml") : ""
486-
487- onLoaded:{
488- item.tools = commonToolBar
489- }
490-
491- Connections{
492- target: yearPage.item
493+ anchors.fill: parent
494+ tools: commonToolBar
495+ YearView{
496 onMonthSelected: {
497- tabs.selectedTabIndex = monthTab.index
498+ tabs.selectedTabIndex = 1
499 var now = DateExt.today();
500 if( date.getMonth() === now.getMonth()
501 && date.getFullYear() === now.getFullYear()) {
502- tabPage.currentDay = now;
503+ monthView.currentMonth = now
504 } else {
505- tabPage.currentDay = date.midnight();
506+ monthView.currentMonth = date.midnight();
507 }
508 }
509 }
510 }
511 }
512-
513 Tab {
514 id: monthTab
515 objectName: "monthTab"
516 title: i18n.tr("Month")
517-
518- page: Loader{
519- id: monthPage
520- anchors {
521- top: parent.top
522- left: parent.left
523- right: parent.right
524- bottom: parent.bottom
525- }
526-
527- source: (tabs.selectedTab === monthTab) ? Qt.resolvedUrl("MonthView.qml") : ""
528-
529- onLoaded: {
530- item.currentMonth = tabPage.currentDay.midnight();
531- item.tools = commonToolBar
532- }
533-
534- Connections{
535- target: monthPage.item
536- onDateSelected: {
537- tabs.selectedTabIndex = dayTab.index
538- tabPage.currentDay = date;
539- }
540+ page: MonthView{
541+ anchors.fill: parent
542+ tools: commonToolBar
543+ id: monthView
544+
545+ onDateSelected: {
546+ tabs.selectedTabIndex = 3
547+ tabPage.currentDay = date;
548 }
549 }
550 }
551-
552 Tab{
553- id: weekTab
554 objectName: "weekTab"
555 title: i18n.tr("Week")
556- page: Loader{
557- id: weekPage
558- anchors {
559- top: parent.top
560- left: parent.left
561- right: parent.right
562- bottom: parent.bottom
563- }
564- source: (tabs.selectedTab === weekTab) ? Qt.resolvedUrl("WeekView.qml") : ""
565-
566- onLoaded: {
567- item.dayStart = tabPage.currentDay;
568- item.tools = commonToolBar
569- }
570-
571- Connections{
572- target: weekPage.item
573+ page: Page{
574+ anchors.fill: parent
575+ tools: commonToolBar
576+ WeekView{
577+ id: weekView
578+ anchors.fill: parent
579+
580 onDayStartChanged: {
581- tabPage.currentDay = weekPage.item.dayStart;
582+ tabPage.currentDay = dayStart;
583 }
584 }
585 }
586 }
587
588 Tab{
589- id: dayTab
590 objectName: "dayTab"
591 title: i18n.tr("Day")
592- page: Loader{
593- id: dayPage
594- anchors {
595- top: parent.top
596- left: parent.left
597- right: parent.right
598- bottom: parent.bottom
599- }
600- source: (tabs.selectedTab === dayTab) ? Qt.resolvedUrl("DayView.qml") : ""
601-
602- onLoaded: {
603- item.currentDay = tabPage.currentDay;
604- item.tools = commonToolBar
605- }
606-
607- Connections{
608- target: dayPage.item
609+ page: Page{
610+ anchors.fill: parent
611+ tools: commonToolBar
612+ DayView{
613+ id: dayView
614+ anchors.fill: parent
615+
616 onCurrentDayChanged: {
617- tabPage.currentDay = dayPage.item.currentDay;
618+ tabPage.currentDay = currentDay;
619 }
620 }
621 }
622
623=== modified file 'tests/autopilot/calendar_app/emulators.py'
624--- tests/autopilot/calendar_app/emulators.py 2013-12-16 21:32:43 +0000
625+++ tests/autopilot/calendar_app/emulators.py 2014-03-20 03:03:05 +0000
626@@ -103,3 +103,6 @@
627 def get_month_name(self, component):
628 return component.wait_select_single(
629 "Label", objectName="monthLabel").text
630+
631+ def get_num_events(self):
632+ return len(self.select_many("EventBubble"))
633
634=== modified file 'tests/autopilot/calendar_app/tests/__init__.py'
635--- tests/autopilot/calendar_app/tests/__init__.py 2014-01-31 21:15:52 +0000
636+++ tests/autopilot/calendar_app/tests/__init__.py 2014-03-20 03:03:05 +0000
637@@ -22,6 +22,12 @@
638 import shutil
639 import logging
640
641+try:
642+ from unittest import mock
643+except ImportError:
644+ import mock
645+import tempfile
646+
647 from autopilot.input import Mouse, Touch, Pointer
648 from autopilot.platform import model
649 from autopilot.testcase import AutopilotTestCase
650@@ -45,15 +51,11 @@
651
652 local_location = "../../calendar.qml"
653 installed_location = "/usr/share/calendar-app/calendar.qml"
654- sqlite_dir = os.path.expanduser(
655- "~/.local/share/com.ubuntu.calendar/Databases")
656- backup_dir = sqlite_dir + ".backup"
657
658 def setUp(self):
659 self.pointing_device = Pointer(self.input_device_class.create())
660+ self.home_dir = self._patch_home()
661 super(CalendarTestCase, self).setUp()
662- self.temp_move_sqlite_db()
663- self.addCleanup(self.restore_sqlite_db)
664
665 #turn off the OSK so it doesn't block screen elements
666 if model() != 'Desktop':
667@@ -73,6 +75,7 @@
668 self.launch_test_click()
669
670 def launch_test_local(self):
671+ logger.debug("Running via local installation")
672 self.app = self.launch_test_application(
673 "qmlscene",
674 self.local_location,
675@@ -80,6 +83,7 @@
676 emulator_base=toolkit_emulators.UbuntuUIToolkitEmulatorBase)
677
678 def launch_test_installed(self):
679+ logger.debug("Running via installed debian package")
680 self.app = self.launch_test_application(
681 "qmlscene",
682 self.installed_location,
683@@ -87,39 +91,30 @@
684 emulator_base=toolkit_emulators.UbuntuUIToolkitEmulatorBase)
685
686 def launch_test_click(self):
687+ logger.debug("Running via click package")
688 self.app = self.launch_click_package(
689 "com.ubuntu.calendar",
690 emulator_base=toolkit_emulators.UbuntuUIToolkitEmulatorBase)
691
692- def temp_move_sqlite_db(self):
693- try:
694- shutil.rmtree(self.backup_dir)
695- except:
696- pass
697- else:
698- logger.warning("Prexisting backup database found and removed")
699-
700- try:
701- shutil.move(self.sqlite_dir, self.backup_dir)
702- except:
703- logger.warning("No current database found")
704- else:
705- logger.debug("Backed up database")
706-
707- def restore_sqlite_db(self):
708- if os.path.exists(self.backup_dir):
709- if os.path.exists(self.sqlite_dir):
710- try:
711- shutil.rmtree(self.sqlite_dir)
712- except:
713- logger.error("Failed to remove test database and restore" /
714- "database")
715- return
716- try:
717- shutil.move(self.backup_dir, self.sqlite_dir)
718- except:
719- logger.error("Failed to restore database")
720+ def _patch_home(self):
721+ #make a temp dir
722+ temp_dir = tempfile.mkdtemp()
723+ logger.debug("Created fake home directory " + temp_dir)
724+ self.addCleanup(shutil.rmtree, temp_dir)
725+ #if the Xauthority file is in home directory
726+ #make sure we copy it to temp home, otherwise do nothing
727+ xauth = os.path.expanduser(os.path.join('~', '.Xauthority'))
728+ if os.path.isfile(xauth):
729+ logger.debug("Copying .Xauthority to fake home " + temp_dir)
730+ shutil.copyfile(
731+ os.path.expanduser(os.path.join('~', '.Xauthority')),
732+ os.path.join(temp_dir, '.Xauthority'))
733+ patcher = mock.patch.dict('os.environ', {'HOME': temp_dir})
734+ patcher.start()
735+ logger.debug("Patched home to fake home directory " + temp_dir)
736+ self.addCleanup(patcher.stop)
737+ return temp_dir
738
739 @property
740 def main_view(self):
741- return self.app.select_single(emulators.MainView)
742+ return self.app.wait_select_single(emulators.MainView)
743
744=== modified file 'tests/autopilot/calendar_app/tests/test_calendar.py'
745--- tests/autopilot/calendar_app/tests/test_calendar.py 2014-01-11 06:05:42 +0000
746+++ tests/autopilot/calendar_app/tests/test_calendar.py 2014-03-20 03:03:05 +0000
747@@ -11,7 +11,7 @@
748
749 from autopilot.matchers import Eventually
750
751-from testtools.matchers import Equals, Not, Is
752+from testtools.matchers import Equals, Not, Is, NotEquals
753
754 import time
755
756@@ -46,6 +46,10 @@
757
758 def test_new_event(self):
759 """test add new event """
760+ #go to today
761+ self.main_view.switch_to_tab("dayTab")
762+ self.main_view.open_toolbar().click_button("todaybutton")
763+ num_events = self.main_view.get_num_events()
764
765 #click on new event button
766 self.main_view.open_toolbar().click_button("neweventbutton")
767@@ -68,7 +72,7 @@
768 ok = picker.select_single("Button", objectName="TimePickerOKButton")
769 self.pointing_device.click_object(ok)
770
771- # Set the end time
772+ ## Set the end time
773 end_time_field = self.main_view.get_event_end_time_field()
774 self.pointing_device.click_object(end_time_field)
775 picker = self.main_view.get_time_picker()
776@@ -83,18 +87,10 @@
777 self.keyboard.type("My location")
778 self.assertThat(location_field.text, Eventually(Equals("My location")))
779
780- #input people
781- people_field = self.main_view.get_event_people_field()
782- self.pointing_device.click_object(people_field)
783- self.assertThat(people_field.activeFocus, Eventually(Equals(True)))
784- self.keyboard.type("Me")
785- self.assertThat(people_field.text, Eventually(Equals("Me")))
786-
787 #click save button
788 self.main_view.open_toolbar().click_button("eventSaveButton")
789
790 #verify that the event has been created in timeline
791- self.main_view.switch_to_tab("dayTab")
792- self.assertThat(lambda: self.main_view.get_label_with_text(
793- eventTitle, root=self.main_view.get_day_view()),
794- Eventually(Not(Is(None))))
795+ self.main_view.open_toolbar().click_button("todaybutton")
796+ self.assertThat(self.main_view.get_num_events,
797+ Eventually(NotEquals(num_events)))

Subscribers

People subscribed via source and target branches

to status/vote changes: