diff options
50 files changed, 1491 insertions, 1325 deletions
diff --git a/com.canonical.Unity.gschema.xml b/com.canonical.Unity.gschema.xml index 5e878af7e..5fffffe4b 100644 --- a/com.canonical.Unity.gschema.xml +++ b/com.canonical.Unity.gschema.xml @@ -46,7 +46,7 @@ <key type="as" name="favorites"> <default>[ 'application://ubiquity-gtkui.desktop', 'application://nautilus-home.desktop', 'application://firefox.desktop', 'application://libreoffice-writer.desktop', 'application://libreoffice-calc.desktop', 'application://libreoffice-impress.desktop', 'application://ubuntu-software-center.desktop', 'application://ubuntuone-installer.desktop', 'application://ubuntu-amazon-default.desktop', 'application://UbuntuOneMusiconeubuntucom.desktop', 'application://gnome-control-center.desktop', 'unity://running-apps', 'unity://expo-icon', 'unity://devices' ]</default> <summary>List of items that should be shown by default in the launcher</summary> - <description>These items can be application://desktop-id.desktop, device://uiid and unity://special-id (including unity://running-apps that specifies the position of the ran applications, unity://devices the position of the attached devices, unity://expo-icon the position of the workspace switcher and unity://show-desktop-icon the position of the show-desktop icon); the order of this list determines the launcher items position.</description> + <description>These items can be: application://desktop-id.desktop, device://uiid and unity://special-id (including: unity://running-apps (icons of running applications) unity://devices (icons of attached devices), unity://expo-icon (icon of the workspace switcher) and unity://desktop-icon (the show-desktop icon)); the order of this list determines the launcher item's position.</description> </key> <key type="s" name="favorite-migration"> <default>''</default> diff --git a/debian/changelog b/debian/changelog index 011a10cc4..04860cb77 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,14 +1,66 @@ -unity (6.12.0daily13.01.25.1-0ubuntu2) UNRELEASED; urgency=low +unity (6.12.0daily13.02.04.1-0ubuntu1) raring; urgency=low * debian/control: - recommends indicator-sync so it gets installed by default (lp: #1053482) + - recommends indicator-bluetooth as well (lp: #1111314) [ Łukasz 'sil2100' Zemczak ] * debian/control: - bump compiz build-dep due to the last ABI break - -- Sebastien Bacher <seb128@ubuntu.com> Thu, 31 Jan 2013 11:39:19 +0100 + [ Brandon Schaefer ] + * [regression] Clicking on the indicators when the Dash is open no + longer closes the Dash. (LP: #1109150) + * [staging][raring] Dash Maximise/Restore button depends on the + launcher icon size. (LP: #1101310) + + [ Romain Perier ] + * The Dash closes when trying to switch to the Command lens (Alt+F2) + (LP: #1019457) + + [ Marco Trevisan (Treviño) ] + * Launcher can have smaller size on monitor resolution change (LP: + #1105382) + * Dragging down a window from the panel on an external monitor, + restores it at wrong offset (LP: #1104043) + * [regression] Alt+Tab/Alt+grave brings other window to the front but + loses focus entirely. (LP: #1111620) + * Quicklist items need a way to be ellipsized (LP: #1111471) + + [ Charles Kerr <charles.kerr@canonical.com>, Andrea Azzarone ] + * the GObject subclasses in tests/ don't dispose() properly (LP: + #986875) + + [ Nicolas d'Offay ] + * Speed up dash blur (LP: #1102410) + + [ Manuel de la Pena ] + * API changes to FindKeyFocusArea in the Preview class stops more + complicated previous fom setting the correct focus (LP: #1102387) + + [ MC Return ] + * Wrong description in Dconf key + com.canonical.unity.launcher.favorites (LP: #1112560) + * Keyboard shortcut overlay says Ctrl+Super+Down "minimises" the + current window, but it doesn't (LP: #966099) + + [ Andrea Azzarone ] + * unmounting any gvfs-mounted device from unity menu crashes compiz + (LP: #1111389) + * compiz crashed with SIGSEGV in async_wrapper_callback() from + g_simple_async_result_complete() from + _g_simple_async_result_complete_with_cancellable() from + unmount_reply() (LP: #1102926) + + [ Łukasz 'sil2100' Zemczak ] + * SwitcherControllerImpl autopilot test failures in unity - + 6.12.0daily13.01.29.2-0ubuntu1 (LP: #1109192) + + [ Automatic PS uploader ] + * Automatic snapshot from revision 3117 + + -- Automatic PS uploader <ps-jenkins@lists.canonical.com> Mon, 04 Feb 2013 09:59:13 +0000 unity (6.12.0daily13.01.25.1-0ubuntu1) raring; urgency=low diff --git a/debian/control b/debian/control index a69eb7c52..a0bbfb8cb 100644 --- a/debian/control +++ b/debian/control @@ -76,6 +76,7 @@ Recommends: gnome-control-center-unity, indicator-appmenu, indicator-application, indicator-sound, + indicator-bluetooth, indicator-datetime, indicator-messages, indicator-printers, diff --git a/launcher/Launcher.cpp b/launcher/Launcher.cpp index 61d251f9f..5f97d9bf1 100644 --- a/launcher/Launcher.cpp +++ b/launcher/Launcher.cpp @@ -2227,21 +2227,25 @@ void Launcher::RecvMouseMove(int x, int y, int dx, int dy, unsigned long button_ EventLogic(); } -void Launcher::RecvMouseWheel(int x, int y, int wheel_delta, unsigned long button_flags, unsigned long key_flags) +void Launcher::RecvMouseWheel(int /*x*/, int /*y*/, int wheel_delta, unsigned long /*button_flags*/, unsigned long key_flags) { if (!_hovered) return; + bool alt_pressed = nux::GetKeyModifierState(key_flags, nux::NUX_STATE_ALT); + + if (alt_pressed) + ScrollLauncher(wheel_delta); +} + +void Launcher::ScrollLauncher(int wheel_delta) +{ if (wheel_delta < 0) - { - // scroll up + // scroll down _launcher_drag_delta -= 25; - } else - { - // scroll down + // scroll up _launcher_drag_delta += 25; - } EnsureAnimation(); } diff --git a/launcher/Launcher.h b/launcher/Launcher.h index 5b8d2ea09..0d40eb18f 100644 --- a/launcher/Launcher.h +++ b/launcher/Launcher.h @@ -118,6 +118,8 @@ public: virtual void RecvQuicklistOpened(QuicklistView* quicklist); virtual void RecvQuicklistClosed(QuicklistView* quicklist); + void ScrollLauncher(int wheel_delta); + int GetMouseX() const; int GetMouseY() const; diff --git a/launcher/QuicklistMenuItem.cpp b/launcher/QuicklistMenuItem.cpp index d026bf6da..195e9d5b4 100644 --- a/launcher/QuicklistMenuItem.cpp +++ b/launcher/QuicklistMenuItem.cpp @@ -29,6 +29,7 @@ namespace unity { const char* QuicklistMenuItem::MARKUP_ENABLED_PROPERTY = "unity-use-markup"; +const char* QuicklistMenuItem::MAXIMUM_LABEL_WIDTH_PROPERTY = "unity-max-label-width"; const char* QuicklistMenuItem::OVERLAY_MENU_ITEM_PROPERTY = "unity-overlay-item"; NUX_IMPLEMENT_OBJECT_TYPE(QuicklistMenuItem); @@ -279,9 +280,15 @@ void QuicklistMenuItem::DrawText(nux::CairoGraphics& cairo, int width, int heigh std::shared_ptr<PangoFontDescription> desc(pango_font_description_from_string(font_name), pango_font_description_free); pango_layout_set_font_description(layout, desc.get()); pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR); - pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END); pango_layout_set_markup_with_accel(layout, _text.c_str(), -1, '_', nullptr); + if (GetMaxLabelWidth() > 0) + { + int max_width = std::min<int>(GetMaximumWidth(), GetMaxLabelWidth()); + pango_layout_set_width(layout, max_width * PANGO_SCALE); + pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END); + } + PangoContext* pangoCtx = pango_layout_get_context(layout); // is not ref'ed pango_cairo_context_set_font_options(pangoCtx, gdk_screen_get_font_options(screen)); @@ -339,9 +346,7 @@ void QuicklistMenuItem::EnableLabelMarkup(bool enabled) { if (IsMarkupEnabled() != enabled) { - dbusmenu_menuitem_property_set_bool(_menu_item, MARKUP_ENABLED_PROPERTY, enabled); - - _text = ""; + dbusmenu_menuitem_property_set_bool(_menu_item, MARKUP_ENABLED_PROPERTY, enabled ? TRUE : FALSE); InitializeText(); } } @@ -355,6 +360,23 @@ bool QuicklistMenuItem::IsMarkupEnabled() const return (markup != FALSE); } +void QuicklistMenuItem::SetMaxLabelWidth(int max_width) +{ + if (GetMaxLabelWidth() != max_width) + { + dbusmenu_menuitem_property_set_int(_menu_item, MAXIMUM_LABEL_WIDTH_PROPERTY, max_width); + InitializeText(); + } +} + +int QuicklistMenuItem::GetMaxLabelWidth() const +{ + if (!_menu_item) + return -1; + + return dbusmenu_menuitem_property_get_int(_menu_item, MAXIMUM_LABEL_WIDTH_PROPERTY); +} + bool QuicklistMenuItem::IsOverlayQuicklist() const { if (!_menu_item) diff --git a/launcher/QuicklistMenuItem.h b/launcher/QuicklistMenuItem.h index ce2bc4133..30777bb95 100644 --- a/launcher/QuicklistMenuItem.h +++ b/launcher/QuicklistMenuItem.h @@ -61,6 +61,10 @@ public: void EnableLabelMarkup(bool enabled); bool IsMarkupEnabled() const; + + void SetMaxLabelWidth(int max_width); + int GetMaxLabelWidth() const; + bool IsOverlayQuicklist() const; void Activate() const; @@ -81,6 +85,7 @@ public: sigc::signal<void, QuicklistMenuItem*, int, int> sigMouseDrag; static const char* MARKUP_ENABLED_PROPERTY; + static const char* MAXIMUM_LABEL_WIDTH_PROPERTY; static const char* OVERLAY_MENU_ITEM_PROPERTY; protected: diff --git a/launcher/VolumeImp.cpp b/launcher/VolumeImp.cpp index 7ef4a9367..c63d4d1a0 100644 --- a/launcher/VolumeImp.cpp +++ b/launcher/VolumeImp.cpp @@ -206,12 +206,13 @@ public: glib::Object<GMount> mount(g_volume_get_mount(volume_)); glib::Object<GMountOperation> op(gtk_mount_operation_new(nullptr)); - g_mount_unmount_with_operation(mount, (GMountUnmountFlags) 0, op, - cancellable_, [] (GObject* source_object, GAsyncResult* res, gpointer /*user_data*/) - { - GMount* mount = G_MOUNT(source_object); - g_mount_unmount_with_operation_finish(mount, res, nullptr); - }, nullptr); + g_mount_unmount_with_operation(mount, (GMountUnmountFlags) 0, op, cancellable_, + &VolumeImp::Impl::FinishUmount, nullptr); + } + + static void FinishUmount(GObject* object, GAsyncResult* res, gpointer) + { + g_mount_unmount_with_operation_finish(G_MOUNT(object), res, nullptr); } VolumeImp* parent_; diff --git a/panel/PanelMenuView.cpp b/panel/PanelMenuView.cpp index 81f9e5b01..d3416562e 100644 --- a/panel/PanelMenuView.cpp +++ b/panel/PanelMenuView.cpp @@ -80,25 +80,63 @@ PanelMenuView::PanelMenuView() , menus_discovery_fadein_(DEFAULT_DISCOVERY_FADEIN) , menus_discovery_fadeout_(DEFAULT_DISCOVERY_FADEOUT) { - layout_->SetContentDistribution(nux::MAJOR_POSITION_START); BamfWindow* active_win = bamf_matcher_get_active_window(matcher_); if (BAMF_IS_WINDOW(active_win)) active_xid_ = bamf_window_get_xid(active_win); - view_opened_signal_.Connect(matcher_, "view-opened", - sigc::mem_fun(this, &PanelMenuView::OnViewOpened)); - view_closed_signal_.Connect(matcher_, "view-closed", - sigc::mem_fun(this, &PanelMenuView::OnViewClosed)); + SetupPanelMenuViewSignals(); + SetupWindowButtons(); + SetupTitlebarGrabArea(); + SetupWindowManagerSignals(); + SetupUBusManagerInterests(); + + style_changed_connection_ = panel::Style::Instance().changed.connect([&] { + window_buttons_->ComputeContentSize(); + layout_->SetLeftAndRightPadding(window_buttons_->GetContentWidth(), 0); + + Refresh(true); + FullRedraw(); + }); + + opacity = 0.0f; + + Refresh(); + FullRedraw(); +} + +PanelMenuView::~PanelMenuView() +{ + style_changed_connection_.disconnect(); + window_buttons_->UnParentObject(); + titlebar_grab_area_->UnParentObject(); +} + +void PanelMenuView::SetupPanelMenuViewSignals() +{ active_win_changed_signal_.Connect(matcher_, "active-window-changed", sigc::mem_fun(this, &PanelMenuView::OnActiveWindowChanged)); active_app_changed_signal_.Connect(matcher_, "active-application-changed", sigc::mem_fun(this, &PanelMenuView::OnActiveAppChanged)); + view_opened_signal_.Connect(matcher_, "view-opened", + sigc::mem_fun(this, &PanelMenuView::OnViewOpened)); + view_closed_signal_.Connect(matcher_, "view-closed", + sigc::mem_fun(this, &PanelMenuView::OnViewClosed)); + + mouse_enter.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseEnter)); + mouse_leave.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseLeave)); + + opacity_animator_.updated.connect(sigc::mem_fun(this, &PanelMenuView::OnFadeAnimatorUpdated)); +} + +void PanelMenuView::SetupWindowButtons() +{ window_buttons_ = new WindowButtons(); window_buttons_->SetParentObject(this); window_buttons_->monitor = monitor_; window_buttons_->controlled_window = active_xid_; + window_buttons_->opacity = 0.0f; window_buttons_->SetLeftAndRightPadding(MAIN_LEFT_PADDING, MENUBAR_PADDING); window_buttons_->SetMaximumHeight(panel::Style::Instance().panel_height); window_buttons_->ComputeContentSize(); @@ -109,9 +147,18 @@ PanelMenuView::PanelMenuView() window_buttons_->opacity.changed.connect(sigc::hide(sigc::mem_fun(this, &PanelMenuView::QueueDraw))); AddChild(window_buttons_.GetPointer()); + SetupLayout(); +} + +void PanelMenuView::SetupLayout() +{ + layout_->SetContentDistribution(nux::MAJOR_POSITION_START); layout_->SetLeftAndRightPadding(window_buttons_->GetContentWidth(), 0); layout_->SetBaseHeight(panel::Style::Instance().panel_height); +} +void PanelMenuView::SetupTitlebarGrabArea() +{ titlebar_grab_area_ = new PanelTitlebarGrabArea(); titlebar_grab_area_->SetParentObject(this); titlebar_grab_area_->activate_request.connect(sigc::mem_fun(this, &PanelMenuView::OnMaximizedActivate)); @@ -120,8 +167,13 @@ PanelMenuView::PanelMenuView() titlebar_grab_area_->grab_started.connect(sigc::mem_fun(this, &PanelMenuView::OnMaximizedGrabStart)); titlebar_grab_area_->grab_move.connect(sigc::mem_fun(this, &PanelMenuView::OnMaximizedGrabMove)); titlebar_grab_area_->grab_end.connect(sigc::mem_fun(this, &PanelMenuView::OnMaximizedGrabEnd)); + titlebar_grab_area_->mouse_enter.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseEnter)); + titlebar_grab_area_->mouse_leave.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseLeave)); AddChild(titlebar_grab_area_.GetPointer()); +} +void PanelMenuView::SetupWindowManagerSignals() +{ WindowManager& wm = WindowManager::Default(); wm.window_minimized.connect(sigc::mem_fun(this, &PanelMenuView::OnWindowMinimized)); wm.window_unminimized.connect(sigc::mem_fun(this, &PanelMenuView::OnWindowUnminimized)); @@ -138,43 +190,16 @@ PanelMenuView::PanelMenuView() wm.initiate_expo.connect(sigc::mem_fun(this, &PanelMenuView::OnExpoInitiate)); wm.terminate_expo.connect(sigc::mem_fun(this, &PanelMenuView::OnExpoTerminate)); wm.screen_viewport_switch_ended.connect(sigc::mem_fun(this, &PanelMenuView::OnExpoTerminate)); +} - style_changed_connection_ = panel::Style::Instance().changed.connect([&] { - window_buttons_->ComputeContentSize(); - layout_->SetLeftAndRightPadding(window_buttons_->GetContentWidth(), 0); - - Refresh(true); - FullRedraw(); - }); - - mouse_enter.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseEnter)); - mouse_leave.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseLeave)); - //mouse_move.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseMove)); - - titlebar_grab_area_->mouse_enter.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseEnter)); - titlebar_grab_area_->mouse_leave.connect(sigc::mem_fun(this, &PanelMenuView::OnPanelViewMouseLeave)); - +void PanelMenuView::SetupUBusManagerInterests() +{ ubus_manager_.RegisterInterest(UBUS_SWITCHER_SHOWN, sigc::mem_fun(this, &PanelMenuView::OnSwitcherShown)); ubus_manager_.RegisterInterest(UBUS_LAUNCHER_START_KEY_NAV, sigc::mem_fun(this, &PanelMenuView::OnLauncherKeyNavStarted)); ubus_manager_.RegisterInterest(UBUS_LAUNCHER_END_KEY_NAV, sigc::mem_fun(this, &PanelMenuView::OnLauncherKeyNavEnded)); ubus_manager_.RegisterInterest(UBUS_LAUNCHER_START_KEY_SWITCHER, sigc::mem_fun(this, &PanelMenuView::OnLauncherKeyNavStarted)); ubus_manager_.RegisterInterest(UBUS_LAUNCHER_END_KEY_SWITCHER, sigc::mem_fun(this, &PanelMenuView::OnLauncherKeyNavEnded)); ubus_manager_.RegisterInterest(UBUS_LAUNCHER_SELECTION_CHANGED, sigc::mem_fun(this, &PanelMenuView::OnLauncherSelectionChanged)); - - opacity_animator_.updated.connect(sigc::mem_fun(this, &PanelMenuView::OnFadeAnimatorUpdated)); - - opacity = 0.0f; - window_buttons_->opacity = 0.0f; - - Refresh(); - FullRedraw(); -} - -PanelMenuView::~PanelMenuView() -{ - style_changed_connection_.disconnect(); - window_buttons_->UnParentObject(); - titlebar_grab_area_->UnParentObject(); } void PanelMenuView::OverlayShown() @@ -234,12 +259,6 @@ nux::Area* PanelMenuView::FindAreaUnderMouse(const nux::Point& mouse_position, n Area* found_area = nullptr; - if (overlay_showing_) - { - if (window_buttons_) - return window_buttons_->FindAreaUnderMouse(mouse_position, event_type); - } - if (!we_control_active_) { /* When the current panel is not active, it all behaves like a grab-area */ @@ -256,7 +275,7 @@ nux::Area* PanelMenuView::FindAreaUnderMouse(const nux::Point& mouse_position, n } } - if (titlebar_grab_area_ && !overlay_showing_) + if (titlebar_grab_area_) { found_area = titlebar_grab_area_->FindAreaUnderMouse(mouse_position, event_type); NUX_RETURN_VALUE_IF_NOTNULL(found_area, found_area); @@ -317,28 +336,28 @@ void PanelMenuView::OnFadeAnimatorUpdated(double progress) { if (opacity_animator_.GetFinishValue() == 1.0f) /* Fading in... */ { - if (DrawMenus() && opacity() != 1.0f) + if (ShouldDrawMenus() && opacity() != 1.0f) opacity = progress; - if (DrawWindowButtons() && window_buttons_->opacity() != 1.0f) + if (ShouldDrawButtons() && window_buttons_->opacity() != 1.0f) window_buttons_->opacity = progress; } else if (opacity_animator_.GetFinishValue() == 0.0f) /* Fading out... */ { - if (!DrawMenus() && opacity() != 0.0f) + if (!ShouldDrawMenus() && opacity() != 0.0f) opacity = progress; - if (!DrawWindowButtons() && window_buttons_->opacity() != 0.0f) + if (!ShouldDrawButtons() && window_buttons_->opacity() != 0.0f) window_buttons_->opacity = progress; } } -bool PanelMenuView::DrawMenus() const +bool PanelMenuView::ShouldDrawMenus() const { WindowManager& wm = WindowManager::Default(); bool screen_grabbed = (wm.IsExpoActive() || wm.IsScaleActive()); - if (we_control_active_ && !overlay_showing_ && !screen_grabbed && + if (we_control_active_ && !screen_grabbed && !switcher_showing_ && !launcher_keynav_ && !entries_.empty()) { if (is_inside_ || last_active_view_ || show_now_activated_ || new_application_) @@ -350,15 +369,11 @@ bool PanelMenuView::DrawMenus() const return false; } -bool PanelMenuView::DrawWindowButtons() const +bool PanelMenuView::ShouldDrawButtons() const { WindowManager& wm = WindowManager::Default(); bool screen_grabbed = (wm.IsExpoActive() || wm.IsScaleActive()); - // TODO: We need to refactor this code to extract the window button logic - if (overlay_showing_) - return false; - if (we_control_active_ && is_maximized_ && !screen_grabbed && !launcher_keynav_ && !switcher_showing_) { @@ -371,19 +386,68 @@ bool PanelMenuView::DrawWindowButtons() const return false; } -void PanelMenuView::Draw(nux::GraphicsEngine& GfxContext, bool force_draw) +bool PanelMenuView::ShouldDrawFadingTitle() const { - nux::Geometry const& geo = GetGeometry(); - int button_width = window_buttons_->GetContentWidth(); - const float factor = 4; - button_width /= factor; + return (!ShouldDrawButtons() && we_control_active_ && HasVisibleMenus() && + (ShouldDrawMenus() || (opacity() > 0.0f && window_buttons_->opacity() == 0.0f))); +} + +bool PanelMenuView::HasVisibleMenus() const +{ + for (auto const& entry : entries_) + if (entry.second->IsVisible()) + return true; + + return false; +} + +double PanelMenuView::GetTitleOpacity() const +{ + double title_opacity = 1.0f; + bool has_menu = HasVisibleMenus(); + bool is_title_soild = we_control_active_ && (!has_menu || opacity() == 0.0) && + window_buttons_->opacity() == 0.0; + + if (!is_title_soild) + { + if (has_menu) + title_opacity -= std::max<double>(opacity(), window_buttons_->opacity()); + else + title_opacity -= window_buttons_->opacity(); + + if (!ShouldDrawButtons() && !ShouldDrawMenus()) + { + // If we're fading-out the buttons/menus, let's fade-in quickly the title + title_opacity = CLAMP(title_opacity + 0.1f, 0.0f, 1.0f); + } + else + { + // If we're fading-in the buttons/menus, let's fade-out quickly the title + title_opacity = CLAMP(title_opacity - 0.2f, 0.0f, 1.0f); + } + } + + return title_opacity; +} + +void PanelMenuView::UpdateLastGeometry(nux::Geometry const& geo) +{ if (geo != last_geo_) { last_geo_ = geo; QueueRelayout(); Refresh(true); } +} + +void PanelMenuView::Draw(nux::GraphicsEngine& GfxContext, bool force_draw) +{ + if (overlay_showing_) + return; + + nux::Geometry const& geo = GetGeometry(); + UpdateLastGeometry(geo); GfxContext.PushClippingRectangle(geo); @@ -393,123 +457,18 @@ void PanelMenuView::Draw(nux::GraphicsEngine& GfxContext, bool force_draw) rop.SrcBlend = GL_ONE; rop.DstBlend = GL_ONE_MINUS_SRC_ALPHA; - nux::ColorLayer layer(nux::Color(0x00000000), true, rop); - nux::GetPainter().PushDrawLayer(GfxContext, GetGeometry(), &layer); + nux::ColorLayer layer(nux::color::Transparent, true, rop); + nux::GetPainter().PushDrawLayer(GfxContext, geo, &layer); if (title_texture_) { guint blend_alpha = 0, blend_src = 0, blend_dest = 0; - bool draw_menus = DrawMenus(); - bool draw_window_buttons = DrawWindowButtons(); - bool has_menu = false; - bool draw_faded_title = false; GfxContext.GetRenderStates().GetBlend(blend_alpha, blend_src, blend_dest); - for (auto const& entry : entries_) + if (ShouldDrawFadingTitle()) { - if (entry.second->IsVisible()) - { - has_menu = true; - break; - } - } - - if (!draw_window_buttons && we_control_active_ && has_menu && - (draw_menus || (opacity() > 0.0f && window_buttons_->opacity() == 0.0f))) - { - draw_faded_title = true; - } - - if (draw_faded_title) - { - bool build_gradient = false; - nux::SURFACE_LOCKED_RECT lockrect; - lockrect.pBits = 0; - bool locked = false; - - if (gradient_texture_.IsNull() || (gradient_texture_->GetWidth() != geo.width)) - { - build_gradient = true; - } - else - { - if (gradient_texture_->LockRect(0, &lockrect, nullptr) != OGL_OK) - build_gradient = true; - else - locked = true; - - if (!lockrect.pBits) - { - build_gradient = true; - - if (locked) - gradient_texture_->UnlockRect(0); - } - } - - if (build_gradient) - { - nux::NTextureData texture_data(nux::BITFMT_R8G8B8A8, geo.width, 1, 1); - - gradient_texture_ = nux::GetGraphicsDisplay()->GetGpuDevice()-> - CreateSystemCapableDeviceTexture(texture_data.GetWidth(), - texture_data.GetHeight(), 1, texture_data.GetFormat()); - locked = (gradient_texture_->LockRect(0, &lockrect, nullptr) == OGL_OK); - } - - BYTE* dest_buffer = (BYTE*) lockrect.pBits; - int gradient_opacity = 255.0f * opacity(); - int buttons_opacity = 255.0f * window_buttons_->opacity(); - - int first_step = button_width * (factor - 1); - int second_step = button_width * factor; - - for (int x = 0; x < geo.width && dest_buffer && locked; x++) - { - BYTE r, g, b, a; - - r = 223; - g = 219; - b = 210; - - if (x < first_step) - { - int color_increment = (first_step - x) * 4; - - r = CLAMP(r + color_increment, r, 0xff); - g = CLAMP(g + color_increment, g, 0xff); - b = CLAMP(b + color_increment, b, 0xff); - a = 0xff - buttons_opacity; - } - else if (x < second_step) - { - a = 0xff - gradient_opacity * (((float)x - (first_step)) / - (float)(button_width)); - } - else - { - if (!draw_menus) - { - a = 0xff - gradient_opacity; - } - else - { - // If we're fading-out the title, it's better to quickly hide - // the transparent right-most area - a = CLAMP(0xff - gradient_opacity - 0x55, 0x00, 0xff); - } - } - - *(dest_buffer + 4 * x + 0) = (r * a) / 0xff; //red - *(dest_buffer + 4 * x + 1) = (g * a) / 0xff; //green - *(dest_buffer + 4 * x + 2) = (b * a) / 0xff; //blue - *(dest_buffer + 4 * x + 3) = a; - } - - // FIXME Nux shouldn't make unity to crash if we try to unlock a wrong rect - if (locked) - gradient_texture_->UnlockRect(0); + UpdateTitleGradientTexture(); GfxContext.GetRenderStates().SetBlend(true, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); @@ -525,35 +484,9 @@ void PanelMenuView::Draw(nux::GraphicsEngine& GfxContext, bool force_draw) texxform1, nux::color::White); } - else if (!overlay_showing_) + else { - double title_opacity = 0.0f; - - if (we_control_active_ && window_buttons_->opacity() == 0.0 && - (!has_menu || (has_menu && opacity() == 0.0))) - { - title_opacity = 1.0f; - } - else - { - title_opacity = 1.0f; - - if (has_menu) - title_opacity -= std::max<double>(opacity(), window_buttons_->opacity()); - else - title_opacity -= window_buttons_->opacity(); - - if (!draw_window_buttons && !draw_menus) - { - // If we're fading-out the buttons/menus, let's fade-in quickly the title - title_opacity = CLAMP(title_opacity + 0.1f, 0.0f, 1.0f); - } - else - { - // If we're fading-in the buttons/menus, let's fade-out quickly the title - title_opacity = CLAMP(title_opacity - 0.2f, 0.0f, 1.0f); - } - } + double title_opacity = GetTitleOpacity(); if (title_opacity > 0.0f) { @@ -572,11 +505,109 @@ void PanelMenuView::Draw(nux::GraphicsEngine& GfxContext, bool force_draw) GfxContext.PopClippingRectangle(); } +void PanelMenuView::UpdateTitleGradientTexture() +{ + float const factor = 4; + float button_width = window_buttons_->GetContentWidth() / 4; + + nux::Geometry const& geo = GetGeometry(); + nux::SURFACE_LOCKED_RECT lockrect; + bool build_gradient = false; + bool locked = false; + lockrect.pBits = 0; + + if (gradient_texture_.IsNull() || (gradient_texture_->GetWidth() != geo.width)) + { + build_gradient = true; + } + else + { + if (gradient_texture_->LockRect(0, &lockrect, nullptr) != OGL_OK) + build_gradient = true; + else + locked = true; + + if (!lockrect.pBits) + { + build_gradient = true; + + if (locked) + gradient_texture_->UnlockRect(0); + } + } + + if (build_gradient) + { + nux::NTextureData texture_data(nux::BITFMT_R8G8B8A8, geo.width, 1, 1); + + gradient_texture_ = nux::GetGraphicsDisplay()->GetGpuDevice()-> + CreateSystemCapableDeviceTexture(texture_data.GetWidth(), + texture_data.GetHeight(), 1, texture_data.GetFormat()); + + locked = (gradient_texture_->LockRect(0, &lockrect, nullptr) == OGL_OK); + } + + BYTE* dest_buffer = (BYTE*) lockrect.pBits; + int gradient_opacity = 255.0f * opacity(); + int buttons_opacity = 255.0f * window_buttons_->opacity(); + + int first_step = button_width * (factor - 1); + int second_step = button_width * factor; + + for (int x = 0; x < geo.width && dest_buffer && locked; x++) + { + BYTE r, g, b, a; + + r = 223; + g = 219; + b = 210; + + if (x < first_step) + { + int color_increment = (first_step - x) * 4; + + r = CLAMP(r + color_increment, r, 0xff); + g = CLAMP(g + color_increment, g, 0xff); + b = CLAMP(b + color_increment, b, 0xff); + a = 0xff - buttons_opacity; + } + else if (x < second_step) + { + a = 0xff - gradient_opacity * (((float)x - (first_step)) / (button_width)); + } + else + { + if (ShouldDrawMenus()) + { + // If we're fading-out the title, it's better to quickly hide + // the transparent right-most area + a = CLAMP(0xff - gradient_opacity - 0x55, 0x00, 0xff); + } + else + { + a = 0xff - gradient_opacity; + } + } + + dest_buffer[4 * x] = (r * a) / 0xff; + dest_buffer[4 * x + 1] = (g * a) / 0xff; + dest_buffer[4 * x + 2] = (b * a) / 0xff; + dest_buffer[4 * x + 3] = a; + } + + // FIXME Nux shouldn't make unity to crash if we try to unlock a wrong rect + if (locked) + gradient_texture_->UnlockRect(0); +} + void PanelMenuView::DrawContent(nux::GraphicsEngine& GfxContext, bool force_draw) { + if (overlay_showing_) + return; + nux::Geometry const& geo = GetGeometry(); - bool draw_menus = DrawMenus(); - bool draw_buttons = DrawWindowButtons(); + bool draw_menus = ShouldDrawMenus(); + bool draw_buttons = ShouldDrawButtons(); GfxContext.PushClippingRectangle(geo); @@ -600,9 +631,9 @@ void PanelMenuView::DrawContent(nux::GraphicsEngine& GfxContext, bool force_draw new_app_menu_shown_ = false; } } - else /* if (!draw_menus) */ + else { - if (opacity() != 0.0f && !overlay_showing_) + if (opacity() != 0.0f) { layout_->ProcessDraw(GfxContext, true); StartFadeOut(new_app_menu_shown_ ? menus_discovery_fadeout_ : -1); @@ -619,7 +650,7 @@ void PanelMenuView::DrawContent(nux::GraphicsEngine& GfxContext, bool force_draw if (window_buttons_->opacity() != 1.0f) StartFadeIn(); } - else if (/*!draw_buttons &&*/ window_buttons_->opacity() != 0.0f) + else if (window_buttons_->opacity() != 0.0f) { window_buttons_->ProcessDraw(GfxContext, true); @@ -698,7 +729,7 @@ std::string PanelMenuView::GetActiveViewName(bool use_appname) const return label; } -void PanelMenuView::DrawTitle(cairo_t *cr_real, nux::Geometry const& geo, std::string const& label) const +void PanelMenuView::UpdateTitleTexture(cairo_t *cr_real, nux::Geometry const& geo, std::string const& label) const { using namespace panel; cairo_t* cr; @@ -847,7 +878,7 @@ void PanelMenuView::Refresh(bool force) cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR); cairo_paint(cr); - DrawTitle(cr, geo, panel_title_); + UpdateTitleTexture(cr, geo, panel_title_); cairo_destroy(cr); @@ -1368,9 +1399,6 @@ void PanelMenuView::OnMaximizedActivate(int x, int y) void PanelMenuView::OnMaximizedRestore(int x, int y) { - if (overlay_showing_) - return; - Window maximized = GetMaximizedWindow(); if (maximized != 0) @@ -1382,9 +1410,6 @@ void PanelMenuView::OnMaximizedRestore(int x, int y) void PanelMenuView::OnMaximizedLower(int x, int y) { - if (overlay_showing_) - return; - Window maximized = GetMaximizedWindow(); if (maximized != 0) @@ -1504,8 +1529,8 @@ void PanelMenuView::AddProperties(GVariantBuilder* builder) .add("desktop_active", (panel_title_ == desktop_name_)) .add("monitor", monitor_) .add("active_window", active_xid_) - .add("draw_menus", DrawMenus()) - .add("draw_window_buttons", DrawWindowButtons()) + .add("draw_menus", ShouldDrawMenus()) + .add("draw_window_buttons", ShouldDrawButtons()) .add("controls_active_window", we_control_active_) .add("fadein_duration", menus_fadein_) .add("fadeout_duration", menus_fadeout_) diff --git a/panel/PanelMenuView.h b/panel/PanelMenuView.h index c7d083ad1..286af408a 100644 --- a/panel/PanelMenuView.h +++ b/panel/PanelMenuView.h @@ -73,6 +73,13 @@ protected: private: friend class TestPanelMenuView; + void SetupPanelMenuViewSignals(); + void SetupWindowButtons(); + void SetupLayout(); + void SetupTitlebarGrabArea(); + void SetupWindowManagerSignals(); + void SetupUBusManagerInterests(); + void OnActiveChanged(PanelIndicatorEntryView* view, bool is_active); void OnViewOpened(BamfMatcher* matcher, BamfView* view); void OnViewClosed(BamfMatcher* matcher, BamfView* view); @@ -105,7 +112,11 @@ private: void FullRedraw(); std::string GetCurrentTitle() const; void Refresh(bool force = false); - void DrawTitle(cairo_t *cr_real, nux::Geometry const& geo, std::string const& label) const; + + void UpdateTitleTexture(cairo_t *cr_real, nux::Geometry const& geo, std::string const& label) const; + + void UpdateLastGeometry(nux::Geometry const& geo); + void UpdateTitleGradientTexture(); void OnPanelViewMouseEnter(int x, int y, unsigned long mouse_button_state, unsigned long special_keys_state); void OnPanelViewMouseLeave(int x, int y, unsigned long mouse_button_state, unsigned long special_keys_state); @@ -128,8 +139,12 @@ private: bool IsValidWindow(Window xid) const; bool IsWindowUnderOurControl(Window xid) const; - bool DrawMenus() const; - bool DrawWindowButtons() const; + bool ShouldDrawMenus() const; + bool ShouldDrawButtons() const; + bool ShouldDrawFadingTitle() const; + bool HasVisibleMenus() const; + + double GetTitleOpacity() const; void StartFadeIn(int duration = -1); void StartFadeOut(int duration = -1); diff --git a/panel/PanelView.cpp b/panel/PanelView.cpp index d4ca2481b..8e95eef9a 100644 --- a/panel/PanelView.cpp +++ b/panel/PanelView.cpp @@ -526,8 +526,11 @@ void PanelView::ForceUpdateBackground() UpdateBackground(); indicators_->QueueDraw(); - menu_view_->QueueDraw(); tray_->QueueDraw(); + + if (!overlay_is_open_) + menu_view_->QueueDraw(); + QueueDraw(); } diff --git a/po/POTFILES.in b/po/POTFILES.in index 3e92b2efb..801b82e6c 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -31,7 +31,7 @@ plugins/unityshell/src/unityshell.cpp plugins/unityshell/unityshell.xml.in shortcuts/ShortcutHintPrivate.cpp shortcuts/ShortcutView.cpp -shortcuts/CompizShortcutsModeller.cpp +shortcuts/CompizShortcutModeller.cpp services/panel-service.c unity-shared/DashStyle.cpp unity-shared/SearchBar.cpp diff --git a/services/panel-service.c b/services/panel-service.c index e8468fb93..b23890d9d 100644 --- a/services/panel-service.c +++ b/services/panel-service.c @@ -108,7 +108,7 @@ static const gchar * indicator_order[][2] = { {"libapplication.so", "gsd-keyboard-xkb"}, /* keyboard layout selector */ {"libmessaging.so", NULL}, /* indicator-messages */ {"libpower.so", NULL}, /* indicator-power */ - {"libapplication.so", "bluetooth-manager"}, /* bluetooth manager */ + {"libbluetooth.so", NULL}, /* indicator-bluetooth */ {"libnetwork.so", NULL}, /* indicator-network */ {"libnetworkmenu.so", NULL}, /* indicator-network */ {"libapplication.so", "nm-applet"}, /* network manager */ diff --git a/shortcuts/CompizShortcutModeller.cpp b/shortcuts/CompizShortcutModeller.cpp index ac2527b56..b28c29cd7 100644 --- a/shortcuts/CompizShortcutModeller.cpp +++ b/shortcuts/CompizShortcutModeller.cpp @@ -42,7 +42,7 @@ namespace // Compiz Core Options const std::string CORE_OPTION_SHOW_DESKTOP_KEY = "show_desktop_key"; const std::string CORE_OPTION_MAXIMIZE_WINDOW_KEY = "maximize_window_key"; - const std::string CORE_OPTION_UNMAXIMIZE_WINDOW_KEY = "unmaximize_window_key"; + const std::string CORE_OPTION_UNMAXIMIZE_OR_MINIMIZE_WINDOW_KEY = "unmaximize_or_minimize_window_key"; const std::string CORE_OPTION_CLOSE_WINDOW_KEY = "close_window_key"; const std::string CORE_OPTION_WINDOW_MENU_KEY = "window_menu_key"; @@ -304,7 +304,7 @@ void CompizModeller::AddWindowsHints(std::list<shortcut::AbstractHint::Ptr> &hin _("Restores or minimises the current window."), shortcut::OptionType::COMPIZ_KEY, CORE_PLUGIN_NAME, - CORE_OPTION_UNMAXIMIZE_WINDOW_KEY)); + CORE_OPTION_UNMAXIMIZE_OR_MINIMIZE_WINDOW_KEY)); hints.push_back(std::make_shared<shortcut::Hint>(windows, "", _(" or Right"), _("Semi-maximise the current window."), diff --git a/shortcuts/StandaloneShortcuts.cpp b/shortcuts/StandaloneShortcuts.cpp index 95b604a46..395bd27a3 100644 --- a/shortcuts/StandaloneShortcuts.cpp +++ b/shortcuts/StandaloneShortcuts.cpp @@ -226,7 +226,7 @@ struct StandaloneModeller : shortcut::AbstractModeller _("Restores or minimises the current window."), shortcut::OptionType::COMPIZ_KEY, "core", - "unmaximize_window_key"))); + "unmaximize_or_minimize_window_key"))); hints.push_back(std::shared_ptr<shortcut::AbstractHint>(new shortcut::MockHint(_("Windows"), "", _(" or Right"), _("Semi-maximises the current window."), diff --git a/tests/MockWindowManager.h b/tests/MockWindowManager.h index e517cbbb3..3758bc520 100644 --- a/tests/MockWindowManager.h +++ b/tests/MockWindowManager.h @@ -33,6 +33,7 @@ class MockWindowManager : public WindowManager ~MockWindowManager(); MOCK_CONST_METHOD0(GetActiveWindow, Window()); + MOCK_CONST_METHOD0(GetWindowsInStackingOrder, std::vector<Window>()); MOCK_CONST_METHOD1(IsWindowDecorated, bool(Window)); MOCK_CONST_METHOD1(IsWindowMaximized, bool(Window)); MOCK_CONST_METHOD1(IsWindowOnCurrentDesktop, bool(Window)); @@ -58,6 +59,7 @@ class MockWindowManager : public WindowManager MOCK_METHOD1(Activate, void(Window)); MOCK_METHOD1(Raise, void(Window)); MOCK_METHOD1(Lower, void(Window)); + MOCK_METHOD2(RestackBelow, void(Window, Window)); MOCK_METHOD0(TerminateScale, void()); MOCK_CONST_METHOD0(IsScaleActive, bool()); diff --git a/tests/autopilot/unity/emulators/dash.py b/tests/autopilot/unity/emulators/dash.py index eaf4d472a..ee6c404b3 100644 --- a/tests/autopilot/unity/emulators/dash.py +++ b/tests/autopilot/unity/emulators/dash.py @@ -20,20 +20,23 @@ import dbus logger = logging.getLogger(__name__) -class Dash(KeybindingsHelper): - """ - An emulator class that makes it easier to interact with the unity dash. - """ +class DashController(UnityIntrospectionObject, KeybindingsHelper): + """The main dash controller object.""" + + def get_dash_view(self): + """Get the dash view that's attached to this controller.""" + return self.get_children_by_type(DashView)[0] - def __init__(self): - super(Dash, self).__init__() - controllers = DashController.get_all_instances() - assert(len(controllers) == 1) - self.controller = controllers[0] + def hide_dash_via_dbus(self): + """ Emulate a DBus call for dash hiding """ + dash_object = dbus.SessionBus().get_object('com.canonical.Unity', + '/com/canonical/Unity/Dash') + dash_iface = dbus.Interface(dash_object, 'com.canonical.Unity.Dash') + dash_iface.HideDash() @property def view(self): - return self.controller.get_dash_view() + return self.get_dash_view() def toggle_reveal(self): """ @@ -63,21 +66,6 @@ class Dash(KeybindingsHelper): self.visible.wait_for(False) @property - def visible(self): - """Returns if the dash is currently visible""" - return self.controller.visible - - @property - def monitor(self): - """The monitor where the dash is""" - return self.controller.monitor - - @property - def ideal_monitor(self): - """The ideal monitor for the dash to appear on""" - return self.controller.ideal_monitor - - @property def search_string(self): return self.searchbar.search_string @@ -157,21 +145,6 @@ class Dash(KeybindingsHelper): return (self.view.x, self.view.y, self.view.width, self.view.height) -class DashController(UnityIntrospectionObject): - """The main dash controller object.""" - - def get_dash_view(self): - """Get the dash view that's attached to this controller.""" - return self.get_children_by_type(DashView)[0] - - def hide_dash_via_dbus(self): - """ Emulate a DBus call for dash hiding """ - dash_object = dbus.SessionBus().get_object('com.canonical.Unity', - '/com/canonical/Unity/Dash') - dash_iface = dbus.Interface(dash_object, 'com.canonical.Unity.Dash') - dash_iface.HideDash() - - class DashView(UnityIntrospectionObject): """The dash view.""" diff --git a/tests/autopilot/unity/emulators/hud.py b/tests/autopilot/unity/emulators/hud.py index b43fb8c46..fa3fa8e1e 100644 --- a/tests/autopilot/unity/emulators/hud.py +++ b/tests/autopilot/unity/emulators/hud.py @@ -19,16 +19,17 @@ from unity.emulators.dash import SearchBar from unity.emulators.icons import HudEmbeddedIcon, HudLauncherIcon -class Hud(KeybindingsHelper): - """An emulator class that makes it easier to iteract with unity hud.""" - - def __init__(self): - super (Hud, self).__init__() - controllers = HudController.get_all_instances() - assert(len(controllers) == 1) - self.controller = controllers[0] +class HudController(UnityIntrospectionObject, KeybindingsHelper): + """Proxy object for the Unity Hud Controller.""" + + def __init__(self, *args, **kwargs): + super(HudController, self).__init__(*args, **kwargs) self.keyboard = Keyboard() + def get_hud_view(self): + views = self.get_children_by_type(HudView) + return views[0] if views else None + def ensure_hidden(self): """Hides the hud if it's not already hidden.""" if self.visible: @@ -77,17 +78,12 @@ class Hud(KeybindingsHelper): @property def view(self): """Returns the HudView.""" - return self.controller.get_hud_view() - - @property - def visible(self): - """Is the Hud visible?""" - return self.controller.visible + return self.get_hud_view() @property def searchbar(self): """Returns the searchbar attached to the hud.""" - return self.controller.get_hud_view().searchbar + return self.get_hud_view().searchbar @property def search_string(self): @@ -96,24 +92,19 @@ class Hud(KeybindingsHelper): @property def is_locked_launcher(self): - return self.controller.locked_to_launcher + return self.locked_to_launcher @property def monitor(self): - return self.controller.hud_monitor - - @property - def ideal_monitor(self): - """The target monitor for the Hud to appear on.""" - return self.controller.ideal_monitor + return self.hud_monitor @property def geometry(self): - return (self.controller.x, self.controller.y, self.controller.width, self.controller.height) + return (self.x, self.y, self.width, self.height) @property def selected_button(self): - view = self.controller.get_hud_view() + view = self.get_hud_view() if view: return view.selected_button else: @@ -134,7 +125,7 @@ class Hud(KeybindingsHelper): @property def num_buttons(self): - view = self.controller.get_hud_view() + view = self.get_hud_view() if view: return view.num_buttons else: @@ -158,13 +149,6 @@ class HudView(UnityIntrospectionObject): return (self.x, self.y, self.width, self.height) -class HudController(UnityIntrospectionObject): - """Proxy object for the Unity Hud Controller.""" - - def get_hud_view(self): - views = self.get_children_by_type(HudView) - return views[0] if views else None - class HudButton(UnityIntrospectionObject): """Proxy object for the hud buttons.""" diff --git a/tests/autopilot/unity/emulators/launcher.py b/tests/autopilot/unity/emulators/launcher.py index c7f00f571..636e986a3 100644 --- a/tests/autopilot/unity/emulators/launcher.py +++ b/tests/autopilot/unity/emulators/launcher.py @@ -51,7 +51,7 @@ class LauncherController(UnityIntrospectionObject): @property def model(self): """Return the launcher model.""" - models = LauncherModel.get_all_instances() + models = self.get_children_by_type(LauncherModel) assert(len(models) == 1) return models[0] diff --git a/tests/autopilot/unity/emulators/switcher.py b/tests/autopilot/unity/emulators/switcher.py index d675ecafb..af2809123 100644 --- a/tests/autopilot/unity/emulators/switcher.py +++ b/tests/autopilot/unity/emulators/switcher.py @@ -29,7 +29,13 @@ class SwitcherMode(): DETAIL = 2 -class Switcher(KeybindingsHelper): +class SwitcherDirection(): + """Directions the switcher can switch in.""" + FORWARDS = 0 + BACKWARDS = 1 + + +class SwitcherController(UnityIntrospectionObject, KeybindingsHelper): """A class for interacting with the switcher. Abstracts out switcher implementation, and makes the necessary functionality available @@ -37,29 +43,30 @@ class Switcher(KeybindingsHelper): """ - DIRECTION_FORWARDS = 0 - DIRECTION_BACKWARDS = 1 - - def __init__(self): - super(Switcher, self).__init__() + def __init__(self, *args, **kwargs): + super(SwitcherController, self).__init__(*args, **kwargs) self._mouse = Mouse() - controllers = SwitcherController.get_all_instances() - assert(len(controllers) == 1) - self.controller = controllers[0] + + def get_switcher_view(self): + views = self.get_children_by_type(SwitcherView) + return views[0] if views else None @property - def visible(self): - """Is the switcher currently visible + def view(self): + """Returns the SwitcherView.""" + return self.get_switcher_view() - """ - return self.controller.visible + @property + def model(self): + models = self.get_children_by_type(SwitcherModel) + return models[0] if models else None @property def icons(self): """The set of icons in the switcher model """ - return self.controller.model.icons + return self.model.icons @property def current_icon(self): @@ -69,28 +76,28 @@ class Switcher(KeybindingsHelper): @property def selection_index(self): """The index of the currently selected icon""" - return self.controller.model.selection_index + return self.model.selection_index @property def label(self): """The current switcher label""" - return self.controller.view.label + return self.view.label @property def label_visible(self): """The switcher label visibility""" - return self.controller.view.label_visible + return self.view.label_visible @property def mode(self): """Returns the SwitcherMode that the switcher is currently in.""" if not self.visible: return None - if self.controller.model.detail_selection and not self.controller.model.only_detail_on_viewport: + if self.model.detail_selection and not self.model.only_detail_on_viewport: return SwitcherMode.DETAIL, SwitcherMode.ALL - elif self.controller.model.detail_selection: + elif self.model.detail_selection: return SwitcherMode.DETAIL - elif not self.controller.model.only_detail_on_viewport: + elif not self.model.only_detail_on_viewport: return SwitcherMode.ALL else: return SwitcherMode.NORMAL @@ -108,7 +115,7 @@ class Switcher(KeybindingsHelper): elif mode == SwitcherMode.ALL: logger.debug("Initiating switcher in 'all workspaces' mode. Ctrl+Alt+Tab") self.keybinding_hold_part_then_tap("switcher/reveal_all") - self.controller.model.only_detail_on_viewport.wait_for(False) + self.model.only_detail_on_viewport.wait_for(False) def next_icon(self): """Move to the next icon.""" @@ -123,12 +130,12 @@ class Switcher(KeybindingsHelper): def select_icon(self, direction, **kwargs): """Select an icon in the switcher. - direction must be one of Switcher.DIRECTION_FORWARDS or Switcher.DIRECTION_BACKWARDS. + direction must be one of SwitcherDirection.FORWARDS or SwitcherDirection.BACKWARDS. The keyword arguments are used to select an icon. For example, you might do this to select the 'Show Desktop' icon: - >>> self.switcher.select_icon(Switcher.DIRECTION_BACKWARDS, tooltip_text="Show Desktop") + >>> self.switcher.select_icon(SwitcherDirection.BACKWARDS, tooltip_text="Show Desktop") The switcher must be initiated already, and must be in normal mode when this method is called, or a RuntimeError will be raised. @@ -139,10 +146,10 @@ class Switcher(KeybindingsHelper): if self.mode == SwitcherMode.DETAIL: raise RuntimeError("Switcher must be initiated in normal mode before calling this method.") - if direction not in (self.DIRECTION_BACKWARDS, self.DIRECTION_FORWARDS): - raise ValueError("direction must be one of Switcher.DIRECTION_BACKWARDS, Switcher.DIRECTION_FORWARDS") + if direction not in (SwitcherDirection.BACKWARDS, SwitcherDirection.FORWARDS): + raise ValueError("direction must be one of SwitcherDirection.BACKWARDS, SwitcherDirection.FORWARDS") - for i in self.controller.model.icons: + for i in self.model.icons: current_icon = self.current_icon passed=True for key,val in kwargs.iteritems(): @@ -150,9 +157,9 @@ class Switcher(KeybindingsHelper): passed=False if passed: return - if direction == self.DIRECTION_FORWARDS: + if direction == SwitcherDirection.FORWARDS: self.next_icon() - elif direction == self.DIRECTION_BACKWARDS: + elif direction == SwitcherDirection.BACKWARDS: self.previous_icon() raise ValueError("No icon found in switcher model that matches: %r" % kwargs) @@ -164,20 +171,20 @@ class Switcher(KeybindingsHelper): """ logger.debug("Cancelling switcher.") self.keybinding("switcher/cancel") - self.controller.visible.wait_for(False) + self.visible.wait_for(False) def terminate(self): """Stop switcher without activating the selected icon.""" logger.debug("Terminating switcher.") self.keybinding("switcher/cancel") self.keybinding_release("switcher/reveal_normal") - self.controller.visible.wait_for(False) + self.visible.wait_for(False) def select(self): """Stop switcher and activate the selected icon.""" logger.debug("Stopping switcher") self.keybinding_release("switcher/reveal_normal") - self.controller.visible.wait_for(False) + self.visible.wait_for(False) def next_via_mouse(self): """Move to the next icon using the mouse scroll wheel.""" @@ -194,24 +201,24 @@ class Switcher(KeybindingsHelper): @property def detail_selection_index(self): """The index of the currently selected detail""" - return self.controller.model.detail_selection_index + return self.model.detail_selection_index @property def detail_current_count(self): """The number of shown details""" - return self.controller.model.detail_current_count + return self.model.detail_current_count def show_details(self): """Show detail mode.""" logger.debug("Showing details view.") self.keybinding("switcher/detail_start") - self.controller.model.detail_selection.wait_for(True) + self.model.detail_selection.wait_for(True) def hide_details(self): """Hide detail mode.""" logger.debug("Hiding details view.") self.keybinding("switcher/detail_stop") - self.controller.model.detail_selection.wait_for(False) + self.model.detail_selection.wait_for(False) def next_detail(self): """Move to next detail in the switcher.""" @@ -224,18 +231,6 @@ class Switcher(KeybindingsHelper): self.keybinding("switcher/detail_prev") -class SwitcherController(UnityIntrospectionObject): - """An emulator class for interacting with the switcher controller.""" - - @property - def view(self): - return self.get_children_by_type(SwitcherView)[0] - - @property - def model(self): - return self.get_children_by_type(SwitcherModel)[0] - - class SwitcherView(UnityIntrospectionObject): """An emulator class for interacting with with SwitcherView.""" @@ -246,4 +241,3 @@ class SwitcherModel(UnityIntrospectionObject): @property def icons(self): return self.get_children_by_type(SimpleLauncherIcon) - diff --git a/tests/autopilot/unity/emulators/unity.py b/tests/autopilot/unity/emulators/unity.py index 6f0a31be9..22fdde19b 100644 --- a/tests/autopilot/unity/emulators/unity.py +++ b/tests/autopilot/unity/emulators/unity.py @@ -11,6 +11,17 @@ from __future__ import absolute_import from dbus import Interface, SessionBus +from unity.emulators import UnityIntrospectionObject +from unity.emulators.dash import DashController +from unity.emulators.hud import HudController +from unity.emulators.launcher import LauncherController +from unity.emulators.panel import PanelController +from unity.emulators.screen import Screen +from unity.emulators.shortcut_hint import ShortcutController +from unity.emulators.switcher import SwitcherController +from unity.emulators.window_manager import WindowManager + + # acquire the debugging dbus object UNITY_BUS_NAME = 'com.canonical.Unity' DEBUG_PATH = '/com/canonical/Unity/Debug' @@ -59,3 +70,37 @@ def log_unity_message(severity, message): """ get_dbus_logging_interface().LogMessage(severity, message) + +class Unity(UnityIntrospectionObject): + + @property + def screen(self): + return self.get_children_by_type(Screen)[0] + + @property + def dash(self): + return self.get_children_by_type(DashController)[0] + + @property + def hud(self): + return self.get_children_by_type(HudController)[0] + + @property + def launcher(self): + return self.get_children_by_type(LauncherController)[0] + + @property + def panels(self): + return self.get_children_by_type(PanelController)[0] + + @property + def switcher(self): + return self.get_children_by_type(SwitcherController)[0] + + @property + def shortcut_hint(self): + return self.get_children_by_type(ShortcutController)[0] + + @property + def window_manager(self): + return self.get_children_by_type(WindowManager)[0] diff --git a/tests/autopilot/unity/tests/__init__.py b/tests/autopilot/unity/tests/__init__.py index 164f8dba7..0d8d09c62 100644 --- a/tests/autopilot/unity/tests/__init__.py +++ b/tests/autopilot/unity/tests/__init__.py @@ -32,18 +32,12 @@ from testtools.matchers import Equals from unittest.case import SkipTest from unity.emulators import ensure_unity_is_running -from unity.emulators.screen import Screen -from unity.emulators.dash import Dash -from unity.emulators.hud import Hud -from unity.emulators.launcher import LauncherController -from unity.emulators.panel import PanelController -from unity.emulators.switcher import Switcher -from unity.emulators.window_manager import WindowManager from unity.emulators.workspace import WorkspaceManager from unity.emulators.unity import ( set_log_severity, start_log_to_file, reset_logging, + Unity ) @@ -53,9 +47,6 @@ log = getLogger(__name__) class UnityTestCase(AutopilotTestCase): """Unity test case base class, with improvments specific to Unity tests.""" - def __init__(self, *args): - super(UnityTestCase, self).__init__(*args) - def setUp(self): super(UnityTestCase, self).setUp() try: @@ -91,19 +82,19 @@ class UnityTestCase(AutopilotTestCase): log.warning("Test changed the active workspace, changing it back...") self.workspace.switch_to(self._initial_workspace_num) # Have we left the dash open? - if not self.well_behaved(self.dash, visible=False): + if not self.well_behaved(self.unity.dash, visible=False): well_behaved = False reasons.append("The test left the dash open.") log.warning("Test left the dash open, closing it...") - self.dash.ensure_hidden() + self.unity.dash.ensure_hidden() # ... or the hud? - if not self.well_behaved(self.hud, visible=False): + if not self.well_behaved(self.unity.hud, visible=False): well_behaved = False reasons.append("The test left the hud open.") log.warning("Test left the hud open, closing it...") self.hud.ensure_hidden() # Are we in show desktop mode? - if not self.well_behaved(self.window_manager, showdesktop_active=False): + if not self.well_behaved(self.unity.window_manager, showdesktop_active=False): well_behaved = False reasons.append("The test left the system in show_desktop mode.") log.warning("Test left the system in show desktop mode, exiting it...") @@ -116,15 +107,15 @@ class UnityTestCase(AutopilotTestCase): # exception. win = self.start_app_window('Calculator', locale='C') count = 1 - while self.window_manager.showdesktop_active: + while self.unity.window_manager.showdesktop_active: self.keybinding("window/show_desktop") sleep(count) count+=1 if count > 10: break win.close() - self.window_manager.showdesktop_active.wait_for(False) - for launcher in self.launcher.get_launchers(): + self.unity.window_manager.showdesktop_active.wait_for(False) + for launcher in self.unity.launcher.get_launchers(): if not self.well_behaved(launcher, in_keynav_mode=False): well_behaved = False reasons.append("The test left the launcher keynav mode enabled.") @@ -154,46 +145,8 @@ class UnityTestCase(AutopilotTestCase): return True @property - def screen(self): - if not getattr(self, '__screen', None): - self.__screen = self._get_screen() - return self.__screen - - @property - def dash(self): - if not getattr(self, '__dash', None): - self.__dash = Dash() - return self.__dash - - @property - def hud(self): - if not getattr(self, '__hud', None): - self.__hud = Hud(); - return self.__hud - - @property - def launcher(self): - if not getattr(self, '__launcher', None): - self.__launcher = self._get_launcher_controller() - return self.__launcher - - @property - def panels(self): - if not getattr(self, '__panels', None): - self.__panels = self._get_panel_controller() - return self.__panels - - @property - def switcher(self): - if not getattr(self, '__switcher', None): - self.__switcher = Switcher() - return self.__switcher - - @property - def window_manager(self): - if not getattr(self, '__window_manager', None): - self.__window_manager = self._get_window_manager() - return self.__window_manager + def unity(self): + return Unity.get_root_instance() @property def workspace(self): @@ -201,26 +154,6 @@ class UnityTestCase(AutopilotTestCase): self.__workspace = WorkspaceManager() return self.__workspace - def _get_screen(self): - screens = Screen.get_all_instances() - self.assertThat(len(screens), Equals(1)) - return screens[0] - - def _get_launcher_controller(self): - controllers = LauncherController.get_all_instances() - self.assertThat(len(controllers), Equals(1)) - return controllers[0] - - def _get_panel_controller(self): - controllers = PanelController.get_all_instances() - self.assertThat(len(controllers), Equals(1)) - return controllers[0] - - def _get_window_manager(self): - managers = WindowManager.get_all_instances() - self.assertThat(len(managers), Equals(1)) - return managers[0] - def _setUpUnityLogging(self): self._unity_log_file_name = mktemp(prefix=self.shortDescription()) start_log_to_file(self._unity_log_file_name) diff --git a/tests/autopilot/unity/tests/launcher/__init__.py b/tests/autopilot/unity/tests/launcher/__init__.py index 8f7602d92..4d659c128 100644 --- a/tests/autopilot/unity/tests/launcher/__init__.py +++ b/tests/autopilot/unity/tests/launcher/__init__.py @@ -56,4 +56,4 @@ class LauncherTestCase(UnityTestCase): def get_launcher(self): """Get the launcher for the current scenario.""" - return self.launcher.get_launcher_for_monitor(self.launcher_monitor) + return self.unity.launcher.get_launcher_for_monitor(self.launcher_monitor) diff --git a/tests/autopilot/unity/tests/launcher/test_capture.py b/tests/autopilot/unity/tests/launcher/test_capture.py index 6783301bf..844cd6721 100644 --- a/tests/autopilot/unity/tests/launcher/test_capture.py +++ b/tests/autopilot/unity/tests/launcher/test_capture.py @@ -37,7 +37,7 @@ class LauncherCaptureTests(UnityTestCase): def setHideMode(self, mode): self.set_unity_option('launcher_hide_mode', mode) - launcher = self.launcher.get_launcher_for_monitor(0) + launcher = self.unity.launcher.get_launcher_for_monitor(0) self.assertThat(launcher.hidemode, Eventually(Equals(mode))) def leftMostMonitor(self): diff --git a/tests/autopilot/unity/tests/launcher/test_icon_behavior.py b/tests/autopilot/unity/tests/launcher/test_icon_behavior.py index d8ebdff93..56e231b57 100644 --- a/tests/autopilot/unity/tests/launcher/test_icon_behavior.py +++ b/tests/autopilot/unity/tests/launcher/test_icon_behavior.py @@ -45,7 +45,7 @@ class LauncherIconsTests(LauncherTestCase): self.addCleanup(self.call_gsettings_cmd, 'set', 'com.canonical.Unity.Launcher', 'favorites', old_fav) self.call_gsettings_cmd('set', 'com.canonical.Unity.Launcher', 'favorites', new_fav) - icon = self.launcher.model.get_children_by_type(ExpoLauncherIcon)[0] + icon = self.unity.launcher.model.get_children_by_type(ExpoLauncherIcon)[0] self.assertThat(icon, NotEquals(None)) self.assertThat(icon.visible, Eventually(Equals(True))) @@ -53,7 +53,7 @@ class LauncherIconsTests(LauncherTestCase): def ensure_calculator_in_launcher_and_not_running(self): calc = self.start_app("Calculator") - calc_icon = self.launcher.model.get_icon(desktop_id=calc.desktop_file) + calc_icon = self.unity.launcher.model.get_icon(desktop_id=calc.desktop_file) self.addCleanup(self.launcher_instance.unlock_from_launcher, calc_icon) self.launcher_instance.lock_to_launcher(calc_icon) self.close_all_app("Calculator") @@ -67,21 +67,21 @@ class LauncherIconsTests(LauncherTestCase): def test_bfb_tooltip_disappear_when_dash_is_opened(self): """Tests that the bfb tooltip disappear when the dash is opened.""" - bfb = self.launcher.model.get_bfb_icon() + bfb = self.unity.launcher.model.get_bfb_icon() self.mouse.move(bfb.center_x, bfb.center_y) self.assertThat(bfb.get_tooltip().active, Eventually(Equals(True))) - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) self.assertThat(bfb.get_tooltip().active, Eventually(Equals(False))) def test_bfb_tooltip_is_disabled_when_dash_is_open(self): """Tests the that bfb tooltip is disabled when the dash is open.""" - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) - bfb = self.launcher.model.get_bfb_icon() + bfb = self.unity.launcher.model.get_bfb_icon() self.mouse.move(bfb.center_x, bfb.center_y) # Tooltips are lazy-created in Unity, so if the BFB tooltip has never @@ -94,8 +94,8 @@ class LauncherIconsTests(LauncherTestCase): def test_shift_click_opens_new_application_instance(self): """Shift+Clicking MUST open a new instance of an already-running application.""" app = self.start_app("Calculator") - icon = self.launcher.model.get_icon(desktop_id=app.desktop_file) - launcher_instance = self.launcher.get_launcher_for_monitor(0) + icon = self.unity.launcher.model.get_icon(desktop_id=app.desktop_file) + launcher_instance = self.unity.launcher.get_launcher_for_monitor(0) self.keyboard.press("Shift") self.addCleanup(self.keyboard.release, "Shift") @@ -114,9 +114,9 @@ class LauncherIconsTests(LauncherTestCase): self.assertVisibleWindowStack([char_win2, calc_win, char_win1]) - char_icon = self.launcher.model.get_icon( + char_icon = self.unity.launcher.model.get_icon( desktop_id=char_win2.application.desktop_file) - calc_icon = self.launcher.model.get_icon( + calc_icon = self.unity.launcher.model.get_icon( desktop_id=calc_win.application.desktop_file) self.launcher_instance.click_launcher_icon(calc_icon) @@ -160,12 +160,12 @@ class LauncherIconsTests(LauncherTestCase): self.assertVisibleWindowStack([char_win2, char_win1]) self.assertProperty(char_win2, is_focused=True) - char_icon = self.launcher.model.get_icon(desktop_id=char_app.desktop_file) + char_icon = self.unity.launcher.model.get_icon(desktop_id=char_app.desktop_file) self.addCleanup(self.keybinding, "spread/cancel") self.launcher_instance.click_launcher_icon(char_icon) - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) - self.assertThat(self.window_manager.scale_active_for_group, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active_for_group, Eventually(Equals(True))) def test_while_in_scale_mode_the_dash_will_still_open(self): """If scale is initiated through the laucher pressing super must close @@ -178,28 +178,28 @@ class LauncherIconsTests(LauncherTestCase): self.assertVisibleWindowStack([char_win2, char_win1]) self.assertProperty(char_win2, is_focused=True) - char_icon = self.launcher.model.get_icon(desktop_id=char_app.desktop_file) + char_icon = self.unity.launcher.model.get_icon(desktop_id=char_app.desktop_file) self.launcher_instance.click_launcher_icon(char_icon) - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) - self.assertThat(self.dash.visible, Eventually(Equals(True))) - self.assertThat(self.window_manager.scale_active, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(False))) def test_icon_shows_on_quick_application_reopen(self): """Icons must stay on launcher when an application is quickly closed/reopened.""" calc = self.start_app("Calculator") desktop_file = calc.desktop_file - calc_icon = self.launcher.model.get_icon(desktop_id=desktop_file) + calc_icon = self.unity.launcher.model.get_icon(desktop_id=desktop_file) self.assertThat(calc_icon.visible, Eventually(Equals(True))) self.close_all_app("Calculator") calc = self.start_app("Calculator") sleep(2) - calc_icon = self.launcher.model.get_icon(desktop_id=desktop_file) + calc_icon = self.unity.launcher.model.get_icon(desktop_id=desktop_file) self.assertThat(calc_icon, NotEquals(None)) self.assertThat(calc_icon.visible, Eventually(Equals(True))) @@ -212,15 +212,15 @@ class LauncherIconsTests(LauncherTestCase): self.skipTest("This test requires enabled workspaces.") self.keybinding("expo/start") - self.assertThat(self.window_manager.expo_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.expo_active, Eventually(Equals(True))) self.addCleanup(self.keybinding, "expo/cancel") - bfb = self.launcher.model.get_bfb_icon() + bfb = self.unity.launcher.model.get_bfb_icon() self.mouse.move(bfb.center_x, bfb.center_y) self.mouse.click(button=3) self.assertThat(self.launcher_instance.quicklist_open, Eventually(Equals(True))) - self.assertThat(self.window_manager.expo_active, Eventually(Equals(False))) + self.assertThat(self.unity.window_manager.expo_active, Eventually(Equals(False))) def test_expo_launcher_icon_initiates_expo(self): """Clicking on the expo launcher icon must start the expo.""" @@ -231,7 +231,7 @@ class LauncherIconsTests(LauncherTestCase): self.addCleanup(self.keybinding, "expo/cancel") self.launcher_instance.click_launcher_icon(expo) - self.assertThat(self.window_manager.expo_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.expo_active, Eventually(Equals(True))) def test_expo_launcher_icon_terminates_expo(self): """Clicking on the expo launcher icon when expo is active must close it.""" @@ -239,13 +239,13 @@ class LauncherIconsTests(LauncherTestCase): self.skipTest("This test requires enabled workspaces.") self.keybinding("expo/start") - self.assertThat(self.window_manager.expo_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.expo_active, Eventually(Equals(True))) self.addCleanup(self.keybinding, "expo/cancel") expo = self.ensure_expo_launcher_icon() self.launcher_instance.click_launcher_icon(expo) - self.assertThat(self.window_manager.expo_active, Eventually(Equals(False))) + self.assertThat(self.unity.window_manager.expo_active, Eventually(Equals(False))) def test_unminimize_initially_minimized_windows(self): """Make sure initially minimized windows can be unminimized.""" @@ -255,7 +255,7 @@ class LauncherIconsTests(LauncherTestCase): } window = self.launch_test_window(window_spec) - icon = self.launcher.model.get_icon(desktop_id=window.application.desktop_file) + icon = self.unity.launcher.model.get_icon(desktop_id=window.application.desktop_file) self.launcher_instance.click_launcher_icon(icon) self.assertThat(lambda: window.x_win.get_wm_state()['state'], Eventually(Equals(Xutil.NormalState))) @@ -268,7 +268,7 @@ class LauncherIconsTests(LauncherTestCase): } window = self.launch_test_window(window_spec) - icon = self.launcher.model.get_icon(desktop_id=window.application.desktop_file) + icon = self.unity.launcher.model.get_icon(desktop_id=window.application.desktop_file) self.launcher_instance.click_launcher_icon(icon) self.assertThat(lambda: window.x_win.get_wm_state()['state'], Eventually(Equals(Xutil.NormalState))) @@ -291,7 +291,7 @@ class LauncherDragIconsBehavior(LauncherTestCase): # Normally we'd use get_icon(desktop_id="...") but we're expecting it to # not exist, and we don't want to wait for 10 seconds, so we do this # the old fashioned way. - get_icon_fn = lambda: self.launcher.model.get_children_by_type( + get_icon_fn = lambda: self.unity.launcher.model.get_children_by_type( ApplicationLauncherIcon, desktop_id="gcalctool.desktop") calc_icon = get_icon_fn() if calc_icon: @@ -304,15 +304,15 @@ class LauncherDragIconsBehavior(LauncherTestCase): self.ensure_calc_icon_not_in_launcher() calc = self.start_app("Calculator") - calc_icon = self.launcher.model.get_icon(desktop_id=calc.desktop_file) - bfb_icon = self.launcher.model.get_bfb_icon() + calc_icon = self.unity.launcher.model.get_icon(desktop_id=calc.desktop_file) + bfb_icon = self.unity.launcher.model.get_bfb_icon() self.launcher_instance.drag_icon_to_position( calc_icon, IconDragType.AFTER, bfb_icon, self.drag_type) - moved_icon = self.launcher.model.\ + moved_icon = self.unity.launcher.model.\ get_launcher_icons_for_monitor(self.launcher_monitor)[1] self.assertThat(moved_icon.id, Equals(calc_icon.id)) @@ -321,9 +321,9 @@ class LauncherDragIconsBehavior(LauncherTestCase): self.ensure_calc_icon_not_in_launcher() calc = self.start_app("Calculator") - calc_icon = self.launcher.model.get_icon(desktop_id=calc.desktop_file) - bfb_icon = self.launcher.model.get_bfb_icon() - trash_icon = self.launcher.model.get_trash_icon() + calc_icon = self.unity.launcher.model.get_icon(desktop_id=calc.desktop_file) + bfb_icon = self.unity.launcher.model.get_bfb_icon() + trash_icon = self.unity.launcher.model.get_trash_icon() # Move a known icon to the top as it needs to be more than 2 icon # spaces away for this test to actually do anything @@ -341,7 +341,7 @@ class LauncherDragIconsBehavior(LauncherTestCase): self.drag_type) # Must be the last bamf icon - not necessarily the third-from-end icon. - refresh_fn = lambda: self.launcher.model.get_launcher_icons()[-2].id + refresh_fn = lambda: self.unity.launcher.model.get_launcher_icons()[-2].id self.assertThat(refresh_fn, Eventually(Equals(calc_icon.id)), - "Launcher icons are: %r" % self.launcher.model.get_launcher_icons()) + "Launcher icons are: %r" % self.unity.launcher.model.get_launcher_icons()) diff --git a/tests/autopilot/unity/tests/launcher/test_keynav.py b/tests/autopilot/unity/tests/launcher/test_keynav.py index 69b0e5ac7..1836bbe91 100644 --- a/tests/autopilot/unity/tests/launcher/test_keynav.py +++ b/tests/autopilot/unity/tests/launcher/test_keynav.py @@ -33,21 +33,21 @@ class LauncherKeyNavTests(LauncherTestCase): def safe_quit_keynav(self): """Quit the keynav mode if it's engaged.""" - if self.launcher.key_nav_is_active: + if self.unity.launcher.key_nav_is_active: self.launcher_instance.key_nav_cancel() def test_launcher_keynav_initiate(self): """Tests we can initiate keyboard navigation on the launcher.""" self.start_keynav_with_cleanup_cancel() - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(True))) - self.assertThat(self.launcher.key_nav_is_grabbed, Eventually(Equals(True))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(True))) + self.assertThat(self.unity.launcher.key_nav_is_grabbed, Eventually(Equals(True))) def test_launcher_keynav_cancel(self): """Test that we can exit keynav mode.""" self.launcher_instance.key_nav_start() self.launcher_instance.key_nav_cancel() - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(False))) - self.assertThat(self.launcher.key_nav_is_grabbed, Eventually(Equals(False))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) + self.assertThat(self.unity.launcher.key_nav_is_grabbed, Eventually(Equals(False))) def test_launcher_keynav_cancel_resume_focus(self): """Test that ending the launcher keynav resume the focus.""" @@ -63,7 +63,7 @@ class LauncherKeyNavTests(LauncherTestCase): def test_launcher_keynav_starts_at_index_zero(self): """Test keynav mode starts at index 0.""" self.start_keynav_with_cleanup_cancel() - self.assertThat(self.launcher.key_nav_selection, Eventually(Equals(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(Equals(0))) def test_launcher_keynav_forward(self): """Must be able to move forwards while in keynav mode.""" @@ -75,37 +75,37 @@ class LauncherKeyNavTests(LauncherTestCase): # make sure that the index has increased. This opens us to the # possibility that the launcher really is skipping forward more than one # icon at a time, but we can't do much about that. - self.assertThat(self.launcher.key_nav_selection, Eventually(GreaterThan(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(0))) def test_launcher_keynav_prev_works(self): """Must be able to move backwards while in keynav mode.""" self.start_keynav_with_cleanup_cancel() self.launcher_instance.key_nav_next() - self.assertThat(self.launcher.key_nav_selection, Eventually(GreaterThan(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(0))) self.launcher_instance.key_nav_prev() - self.assertThat(self.launcher.key_nav_selection, Eventually(Equals(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(Equals(0))) def test_launcher_keynav_cycling_forward(self): """Launcher keynav must loop through icons when cycling forwards""" self.start_keynav_with_cleanup_cancel() prev_icon = 0 - for icon in range(1, self.launcher.model.num_launcher_icons()): + for icon in range(1, self.unity.launcher.model.num_launcher_icons()): self.launcher_instance.key_nav_next() # FIXME We can't directly check for selection/icon number equalty # since the launcher model also contains "hidden" icons that aren't # shown, so the selection index can increment by more than 1. - self.assertThat(self.launcher.key_nav_selection, Eventually(GreaterThan(prev_icon))) - prev_icon = self.launcher.key_nav_selection + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(prev_icon))) + prev_icon = self.unity.launcher.key_nav_selection self.launcher_instance.key_nav_next() - self.assertThat(self.launcher.key_nav_selection, Eventually(Equals(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(Equals(0))) def test_launcher_keynav_cycling_backward(self): """Launcher keynav must loop through icons when cycling backwards""" self.start_keynav_with_cleanup_cancel() self.launcher_instance.key_nav_prev() - # FIXME We can't directly check for self.launcher.num_launcher_icons - 1 - self.assertThat(self.launcher.key_nav_selection, Eventually(GreaterThan(1))) + # FIXME We can't directly check for self.unity.launcher.num_launcher_icons - 1 + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(1))) def test_launcher_keynav_can_open_and_close_quicklist(self): """Tests that we can open and close a quicklist from keynav mode.""" @@ -115,15 +115,15 @@ class LauncherKeyNavTests(LauncherTestCase): self.assertThat(self.launcher_instance.quicklist_open, Eventually(Equals(True))) self.launcher_instance.key_nav_exit_quicklist() self.assertThat(self.launcher_instance.quicklist_open, Eventually(Equals(False))) - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(True))) - self.assertThat(self.launcher.key_nav_is_grabbed, Eventually(Equals(True))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(True))) + self.assertThat(self.unity.launcher.key_nav_is_grabbed, Eventually(Equals(True))) def test_launcher_keynav_mode_toggles(self): """Tests that keynav mode toggles with Alt+F1.""" # was initiated in setup. self.start_keynav_with_cleanup_cancel() self.keybinding("launcher/keynav") - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(False))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) def test_launcher_keynav_activate_keep_focus(self): """Activating a running launcher icon must focus it.""" @@ -151,59 +151,58 @@ class LauncherKeyNavTests(LauncherTestCase): self.launcher_instance.key_nav_activate() self.addCleanup(self.keybinding, "expo/cancel") - self.assertThat(self.panels.get_active_panel().title, Eventually(Equals("Ubuntu Desktop"))) + self.assertThat(self.unity.panels.get_active_panel().title, Eventually(Equals("Ubuntu Desktop"))) def test_launcher_keynav_expo_exit_on_esc(self): """Esc should quit expo when entering it from KeyNav.""" if self.workspace.num_workspaces < 2: self.skipTest("This test requires enabled more than one workspace.") - self.start_keynav_with_cleanup_cancel() self.launcher_instance.keyboard_select_icon(tooltip_text="Workspace Switcher") self.launcher_instance.key_nav_activate() self.keyboard.press_and_release("Escape") - self.assertThat(self.window_manager.expo_active, Eventually(Equals(False))) + self.assertThat(self.unity.window_manager.expo_active, Eventually(Equals(False))) def test_launcher_keynav_alt_tab_quits(self): """Tests that alt+tab exits keynav mode.""" self.start_keynav_with_cleanup_cancel() self.keybinding("switcher/reveal_normal") - self.addCleanup(self.switcher.terminate) - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(False))) + self.addCleanup(self.unity.switcher.terminate) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) def test_launcher_keynav_alt_grave_quits(self): """Tests that alt+` exits keynav mode.""" self.start_keynav_with_cleanup_cancel() # Can't use switcher emulat here since the switcher won't appear. self.keybinding("switcher/reveal_details") - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(False))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) def test_launcher_keynav_cancel_doesnt_activate_icon(self): """This tests when canceling keynav the current icon doesnt activate.""" self.start_keynav_with_cleanup_cancel() self.keyboard.press_and_release("Escape") - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) def test_alt_f1_closes_dash(self): """Pressing Alt+F1 when the Dash is open must close the Dash and start keynav.""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.start_keynav_with_cleanup_cancel() - self.assertThat(self.dash.visible, Equals(False)) - self.assertThat(self.launcher.key_nav_is_active, Equals(True)) + self.assertThat(self.unity.dash.visible, Equals(False)) + self.assertThat(self.unity.launcher.key_nav_is_active, Equals(True)) def test_alt_f1_closes_hud(self): """Pressing Alt+F1 when the HUD is open must close the HUD and start keynav.""" - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.start_keynav_with_cleanup_cancel() - self.assertThat(self.hud.visible, Equals(False)) - self.assertThat(self.launcher.key_nav_is_active, Equals(True)) + self.assertThat(self.unity.hud.visible, Equals(False)) + self.assertThat(self.unity.launcher.key_nav_is_active, Equals(True)) def test_launcher_keynav_cancel_on_click_outside(self): """A single click outside of launcher must cancel keynav.""" @@ -212,36 +211,36 @@ class LauncherKeyNavTests(LauncherTestCase): self.launcher_instance.move_mouse_to_right_of_launcher() self.mouse.click() - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(False))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) def test_launcher_keynav_cancel_on_click_icon(self): """A single click on a launcher icon must cancel keynav.""" calc_win = self.start_app_window('Calculator', locale = 'C') calc_app = calc_win.application - calc_icon = self.launcher.model.get_icon(desktop_id=calc_app.desktop_file) + calc_icon = self.unity.launcher.model.get_icon(desktop_id=calc_app.desktop_file) self.start_keynav_with_cleanup_cancel() self.launcher_instance.click_launcher_icon(calc_icon) - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(False))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) def test_launcher_keynav_cancel_on_quicklist_activate(self): """A single click on a quicklist item must cancel keynav.""" self.start_keynav_with_cleanup_cancel() self.launcher_instance.key_nav_enter_quicklist() - bfb_icon = self.launcher.model.get_bfb_icon() + bfb_icon = self.unity.launcher.model.get_bfb_icon() bfb_ql = bfb_icon.get_quicklist() bfb_ql.click_item(bfb_ql.selected_item) - self.addCleanup(self.dash.ensure_hidden) + self.addCleanup(self.unity.dash.ensure_hidden) - self.assertThat(self.dash.visible, Eventually(Equals(True))) - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(True))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) def test_launcher_keynav_changes_panel(self): """The panel title must change when in key nav mode.""" self.start_keynav_with_cleanup_cancel() - self.assertThat(self.panels.get_active_panel().title, Eventually(Equals("Search your computer and online sources"))) + self.assertThat(self.unity.panels.get_active_panel().title, Eventually(Equals("Search your computer and online sources"))) diff --git a/tests/autopilot/unity/tests/launcher/test_reveal.py b/tests/autopilot/unity/tests/launcher/test_reveal.py index 45976fa7b..d1bfb22b8 100644 --- a/tests/autopilot/unity/tests/launcher/test_reveal.py +++ b/tests/autopilot/unity/tests/launcher/test_reveal.py @@ -79,21 +79,21 @@ class LauncherRevealTests(LauncherTestCase): char_win2 = self.start_app_window("Character Map") char_app = char_win1.application - char_icon = self.launcher.model.get_icon(desktop_id=char_app.desktop_file) + char_icon = self.unity.launcher.model.get_icon(desktop_id=char_app.desktop_file) self.launcher_instance.click_launcher_icon(char_icon, move_mouse_after=False) - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) self.launcher_instance.click_launcher_icon(char_icon, move_mouse_after=False) self.assertThat(self.launcher_instance.is_showing, Eventually(Equals(True))) - self.assertThat(self.window_manager.scale_active, Eventually(Equals(False))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(False))) def test_launcher_stays_open_after_icon_click(self): """Clicking on a launcher icon must not hide the launcher.""" char_win = self.start_app_window("Character Map") char_app = char_win.application - char_icon = self.launcher.model.get_icon(desktop_id=char_app.desktop_file) + char_icon = self.unity.launcher.model.get_icon(desktop_id=char_app.desktop_file) self.launcher_instance.click_launcher_icon(char_icon, move_mouse_after=False) # Have to sleep to give the launcher time to hide (what the old behavior was) @@ -103,13 +103,13 @@ class LauncherRevealTests(LauncherTestCase): def test_new_icon_has_the_shortcut(self): """New icons should have an associated shortcut""" - if self.launcher.model.num_bamf_launcher_icons() >= 10: + if self.unity.launcher.model.num_bamf_launcher_icons() >= 10: self.skip("There are already more than 9 icons in the launcher") desktop_file = self.KNOWN_APPS['Calculator']['desktop-file'] - if self.launcher.model.get_icon(desktop_id=desktop_file) != None: + if self.unity.launcher.model.get_icon(desktop_id=desktop_file) != None: self.skip("Calculator icon is already on the launcher.") self.start_app('Calculator') - icon = self.launcher.model.get_icon(desktop_id=desktop_file) + icon = self.unity.launcher.model.get_icon(desktop_id=desktop_file) self.assertThat(icon.shortcut, GreaterThan(0)) diff --git a/tests/autopilot/unity/tests/launcher/test_shortcut.py b/tests/autopilot/unity/tests/launcher/test_shortcut.py index 9cb3093ff..28d661395 100644 --- a/tests/autopilot/unity/tests/launcher/test_shortcut.py +++ b/tests/autopilot/unity/tests/launcher/test_shortcut.py @@ -37,7 +37,7 @@ class LauncherShortcutTests(LauncherTestCase): self.launcher_instance.switcher_start() self.addCleanup(self.launcher_instance.switcher_cancel) - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(True))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(True))) self.assertThat(self.launcher_instance.shortcuts_shown, Eventually(Equals(True))) def test_launcher_switcher_next_keeps_shortcuts(self): diff --git a/tests/autopilot/unity/tests/launcher/test_switcher.py b/tests/autopilot/unity/tests/launcher/test_switcher.py index 786826f12..ad3d3c590 100644 --- a/tests/autopilot/unity/tests/launcher/test_switcher.py +++ b/tests/autopilot/unity/tests/launcher/test_switcher.py @@ -36,14 +36,14 @@ class LauncherSwitcherTests(LauncherTestCase): def safe_quit_switcher(self): """Quit the keynav mode if it's engaged.""" - if self.launcher.key_nav_is_active: + if self.unity.launcher.key_nav_is_active: self.launcher_instance.switcher_cancel() def test_launcher_switcher_cancel(self): """Test that ending the launcher switcher actually works.""" self.launcher_instance.switcher_start() self.launcher_instance.switcher_cancel() - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(False))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) def test_launcher_switcher_cancel_resume_focus(self): """Test that ending the launcher switcher resume the focus.""" @@ -63,9 +63,9 @@ class LauncherSwitcherTests(LauncherTestCase): """Test that starting the Launcher switcher puts the keyboard focus on item 0.""" self.start_switcher_with_cleanup_cancel() - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(True))) - self.assertThat(self.launcher.key_nav_is_grabbed, Eventually(Equals(False))) - self.assertThat(self.launcher.key_nav_selection, Eventually(Equals(0))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(True))) + self.assertThat(self.unity.launcher.key_nav_is_grabbed, Eventually(Equals(False))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(Equals(0))) def test_launcher_switcher_next(self): """Moving to the next launcher item while switcher is activated must work.""" @@ -77,13 +77,13 @@ class LauncherSwitcherTests(LauncherTestCase): # make sure that the index has increased. This opens us to the # possibility that the launcher really is skipping forward more than one # icon at a time, but we can't do much about that. - self.assertThat(self.launcher.key_nav_selection, Eventually(GreaterThan(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(0))) def test_launcher_switcher_prev(self): """Moving to the previous launcher item while switcher is activated must work.""" self.start_switcher_with_cleanup_cancel() self.launcher_instance.switcher_prev() - self.assertThat(self.launcher.key_nav_selection, Eventually(NotEquals(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(NotEquals(0))) def test_launcher_switcher_down(self): """Pressing the down arrow key while switcher is activated must work.""" @@ -95,13 +95,13 @@ class LauncherSwitcherTests(LauncherTestCase): # make sure that the index has increased. This opens us to the # possibility that the launcher really is skipping forward more than one # icon at a time, but we can't do much about that. - self.assertThat(self.launcher.key_nav_selection, Eventually(GreaterThan(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(0))) def test_launcher_switcher_up(self): """Pressing the up arrow key while switcher is activated must work.""" self.start_switcher_with_cleanup_cancel() self.launcher_instance.switcher_up() - self.assertThat(self.launcher.key_nav_selection, Eventually(NotEquals(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(NotEquals(0))) def test_launcher_switcher_next_doesnt_show_shortcuts(self): """Moving forward in launcher switcher must not show launcher shortcuts.""" @@ -123,25 +123,25 @@ class LauncherSwitcherTests(LauncherTestCase): """Launcher Switcher must loop through icons when cycling forwards""" self.start_switcher_with_cleanup_cancel() prev_icon = 0 - num_icons = self.launcher.model.num_launcher_icons() + num_icons = self.unity.launcher.model.num_launcher_icons() logger.info("This launcher has %d icons", num_icons) for icon in range(1, num_icons): self.launcher_instance.switcher_next() # FIXME We can't directly check for selection/icon number equalty # since the launcher model also contains "hidden" icons that aren't # shown, so the selection index can increment by more than 1. - self.assertThat(self.launcher.key_nav_selection, Eventually(GreaterThan(prev_icon))) - prev_icon = self.launcher.key_nav_selection + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(prev_icon))) + prev_icon = self.unity.launcher.key_nav_selection self.launcher_instance.switcher_next() - self.assertThat(self.launcher.key_nav_selection, Eventually(Equals(0))) + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(Equals(0))) def test_launcher_switcher_cycling_backward(self): """Launcher Switcher must loop through icons when cycling backwards""" self.start_switcher_with_cleanup_cancel() self.launcher_instance.switcher_prev() - # FIXME We can't directly check for self.launcher.num_launcher_icons - 1 - self.assertThat(self.launcher.key_nav_selection, Eventually(GreaterThan(1))) + # FIXME We can't directly check for self.unity.launcher.num_launcher_icons - 1 + self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(1))) def test_launcher_switcher_activate_keep_focus(self): """Activating a running launcher icon should focus the application.""" @@ -165,4 +165,4 @@ class LauncherSwitcherTests(LauncherTestCase): sleep(.25) self.keyboard.press_and_release("Escape") sleep(.25) - self.assertThat(self.launcher.key_nav_is_active, Eventually(Equals(False))) + self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) diff --git a/tests/autopilot/unity/tests/launcher/test_visual.py b/tests/autopilot/unity/tests/launcher/test_visual.py index 6b1fd7805..620e2e596 100644 --- a/tests/autopilot/unity/tests/launcher/test_visual.py +++ b/tests/autopilot/unity/tests/launcher/test_visual.py @@ -28,9 +28,9 @@ class LauncherVisualTests(LauncherTestCase): Tests fix for bug #913569. """ - bfb = self.launcher.model.get_bfb_icon() + bfb = self.unity.launcher.model.get_bfb_icon() self.mouse.move(bfb.center_x, bfb.center_y) - self.dash.ensure_visible() + self.unity.dash.ensure_visible() sleep(1) # We can't use 'launcher_instance.switcher_start()' since it moves the mouse. self.keybinding_hold_part_then_tap("launcher/switcher") @@ -38,15 +38,15 @@ class LauncherVisualTests(LauncherTestCase): self.addCleanup(self.keybinding, "launcher/switcher/exit") self.keybinding_tap("launcher/switcher/next") - for icon in self.launcher.model.get_launcher_icons(): + for icon in self.unity.launcher.model.get_launcher_icons(): self.assertThat(icon.desaturated, Eventually(Equals(False))) def test_opening_dash_desaturates_icons(self): """Opening the dash must desaturate all the launcher icons.""" - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) - for icon in self.launcher.model.get_launcher_icons(): + for icon in self.unity.launcher.model.get_launcher_icons(): if isinstance(icon, BFBLauncherIcon): self.assertThat(icon.desaturated, Eventually(Equals(False))) else: @@ -58,19 +58,19 @@ class LauncherVisualTests(LauncherTestCase): x,y,w,h = launcher_instance.geometry self.mouse.move(x + w/2, y + h/2) sleep(.5) - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) - for icon in self.launcher.model.get_launcher_icons(): + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) + for icon in self.unity.launcher.model.get_launcher_icons(): self.assertThat(icon.desaturated, Eventually(Equals(False))) def test_mouse_over_with_dash_open_desaturates_icons(self): """Moving mouse over launcher with dash open must saturate icons.""" launcher_instance = self.get_launcher() - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) sleep(.5) x,y,w,h = launcher_instance.geometry self.mouse.move(x + w/2, y + h/2) sleep(.5) - for icon in self.launcher.model.get_launcher_icons(): + for icon in self.unity.launcher.model.get_launcher_icons(): self.assertThat(icon.desaturated, Eventually(Equals(False))) diff --git a/tests/autopilot/unity/tests/test_command_lens.py b/tests/autopilot/unity/tests/test_command_lens.py index 13db7a2da..403e16062 100644 --- a/tests/autopilot/unity/tests/test_command_lens.py +++ b/tests/autopilot/unity/tests/test_command_lens.py @@ -24,38 +24,38 @@ class CommandLensSearchTests(UnityTestCase): gettext.install("unity-lens-applications") def tearDown(self): - self.dash.ensure_hidden() + self.unity.dash.ensure_hidden() super(CommandLensSearchTests, self).tearDown() def test_no_results(self): """An empty string should get no results.""" - self.dash.reveal_command_lens() - command_lens = self.dash.get_current_lens() + self.unity.dash.reveal_command_lens() + command_lens = self.unity.dash.get_current_lens() - if self.dash.search_string != "": + if self.unity.dash.search_string != "": self.keyboard.press_and_release("Delete") - self.assertThat(self.dash.search_string, Eventually(Equals(""))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals(""))) results_category = command_lens.get_category_by_name(_("Results")) self.assertThat(results_category.is_visible, Eventually(Equals(False))) def test_results_category_appears(self): """Results category must appear when there are some results.""" - self.dash.reveal_command_lens() - command_lens = self.dash.get_current_lens() + self.unity.dash.reveal_command_lens() + command_lens = self.unity.dash.get_current_lens() # lots of apps start with 'a'... self.keyboard.type("a") - self.assertThat(self.dash.search_string, Eventually(Equals("a"))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals("a"))) results_category = command_lens.get_category_by_name(_("Results")) self.assertThat(results_category.is_visible, Eventually(Equals(True))) def test_result_category_actually_contains_results(self): """With a search string of 'a', the results category must contain some results.""" - self.dash.reveal_command_lens() - command_lens = self.dash.get_current_lens() + self.unity.dash.reveal_command_lens() + command_lens = self.unity.dash.get_current_lens() # lots of apps start with 'a'... self.keyboard.type("a") - self.assertThat(self.dash.search_string, Eventually(Equals("a"))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals("a"))) results_category = command_lens.get_category_by_name(_("Results")) results = results_category.get_results() self.assertTrue(results) @@ -66,7 +66,7 @@ class CommandLensSearchTests(UnityTestCase): self.close_all_app("Text Editor") sleep(1) - self.dash.reveal_command_lens() + self.unity.dash.reveal_command_lens() self.keyboard.type("g") sleep(1) self.keyboard.type("edit", 0.1) @@ -77,12 +77,12 @@ class CommandLensSearchTests(UnityTestCase): def test_ctrl_tab_switching(self): """Pressing Ctrl+Tab after launching command lens must switch to Home lens.""" - self.dash.reveal_command_lens() + self.unity.dash.reveal_command_lens() self.keybinding("dash/lens/next") - self.assertThat(self.dash.active_lens, Eventually(Equals("home.lens"))) + self.assertThat(self.unity.dash.active_lens, Eventually(Equals("home.lens"))) def test_ctrl_shift_tab_switching(self): """Pressing Ctrl+Shift+Tab after launching command lens must switch to Video lens.""" - self.dash.reveal_command_lens() + self.unity.dash.reveal_command_lens() self.keybinding("dash/lens/prev") - self.assertThat(self.dash.active_lens, Eventually(Equals("video.lens"))) + self.assertThat(self.unity.dash.active_lens, Eventually(Equals("video.lens"))) diff --git a/tests/autopilot/unity/tests/test_dash.py b/tests/autopilot/unity/tests/test_dash.py index 24923dec2..0109b0f3b 100644 --- a/tests/autopilot/unity/tests/test_dash.py +++ b/tests/autopilot/unity/tests/test_dash.py @@ -24,9 +24,9 @@ class DashTestCase(UnityTestCase): super(DashTestCase, self).setUp() self.set_unity_log_level("unity.shell.compiz", "DEBUG") self.set_unity_log_level("unity.launcher", "DEBUG") - self.dash.ensure_hidden() + self.unity.dash.ensure_hidden() # On shutdown, ensure hidden too. Also add a delay. Cleanup is LIFO. - self.addCleanup(self.dash.ensure_hidden) + self.addCleanup(self.unity.dash.ensure_hidden) self.addCleanup(sleep, 1) @@ -35,68 +35,68 @@ class DashRevealTests(DashTestCase): def test_dash_reveal(self): """Ensure we can show and hide the dash.""" - self.dash.ensure_visible() - self.dash.ensure_hidden() + self.unity.dash.ensure_visible() + self.unity.dash.ensure_hidden() def test_application_lens_shortcut(self): """Application lense must reveal when Super+a is pressed.""" - self.dash.reveal_application_lens() - self.assertThat(self.dash.active_lens, Eventually(Equals('applications.lens'))) + self.unity.dash.reveal_application_lens() + self.assertThat(self.unity.dash.active_lens, Eventually(Equals('applications.lens'))) def test_music_lens_shortcut(self): """Music lense must reveal when Super+w is pressed.""" - self.dash.reveal_music_lens() - self.assertThat(self.dash.active_lens, Eventually(Equals('music.lens'))) + self.unity.dash.reveal_music_lens() + self.assertThat(self.unity.dash.active_lens, Eventually(Equals('music.lens'))) def test_file_lens_shortcut(self): """File lense must reveal when Super+f is pressed.""" - self.dash.reveal_file_lens() - self.assertThat(self.dash.active_lens, Eventually(Equals('files.lens'))) + self.unity.dash.reveal_file_lens() + self.assertThat(self.unity.dash.active_lens, Eventually(Equals('files.lens'))) def test_video_lens_shortcut(self): """Video lens must reveal when super+v is pressed.""" - self.dash.reveal_video_lens() - self.assertThat(self.dash.active_lens, Eventually(Equals('video.lens'))) + self.unity.dash.reveal_video_lens() + self.assertThat(self.unity.dash.active_lens, Eventually(Equals('video.lens'))) def test_command_lens_shortcut(self): """Run Command lens must reveat on alt+F2.""" - self.dash.reveal_command_lens() - self.assertThat(self.dash.active_lens, Eventually(Equals('commands.lens'))) + self.unity.dash.reveal_command_lens() + self.assertThat(self.unity.dash.active_lens, Eventually(Equals('commands.lens'))) def test_can_go_from_dash_to_command_lens(self): """Switch to command lens without closing the dash.""" - self.dash.ensure_visible() - self.dash.reveal_command_lens() - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.unity.dash.ensure_visible() + self.unity.dash.reveal_command_lens() + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) def test_alt_f4_close_dash(self): """Dash must close on alt+F4.""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.keyboard.press_and_release("Alt+F4") - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) def test_alt_f4_close_dash_with_capslock_on(self): """Dash must close on Alt+F4 even when the capslock is turned on.""" self.keyboard.press_and_release("Caps_Lock") self.addCleanup(self.keyboard.press_and_release, "Caps_Lock") - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.keyboard.press_and_release("Alt+F4") - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) def test_closes_mouse_down_outside(self): """Test that a mouse down outside of the dash closes the dash.""" - self.dash.ensure_visible() - current_monitor = self.dash.monitor + self.unity.dash.ensure_visible() + current_monitor = self.unity.dash.monitor - (x,y,w,h) = self.dash.geometry + (x,y,w,h) = self.unity.dash.geometry (screen_x,screen_y,screen_w,screen_h) = self.screen_geo.get_monitor_geometry(current_monitor) self.mouse.move(x + w + (screen_w-((screen_x-x)+w))/2, y + h + (screen_h-((screen_y-y)+h))/2) self.mouse.click() - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) def test_closes_then_focuses_window_on_mouse_down(self): """If 2 windows are open with 1 maximized and the non-maxmized @@ -107,7 +107,7 @@ class DashRevealTests(DashTestCase): self.keybinding("window/maximize") self.start_app("Calculator") - self.dash.ensure_visible() + self.unity.dash.ensure_visible() #Click bottom right of the screen w = self.screen_geo.get_screen_width() @@ -117,6 +117,7 @@ class DashRevealTests(DashTestCase): self.assertProperty(char_win, is_active=True) + class DashRevealWithSpreadTests(DashTestCase): """Test the interaction of the Dash with the Spead/Scale @@ -134,49 +135,49 @@ class DashRevealWithSpreadTests(DashTestCase): def test_dash_closes_on_spread(self): """This test shows that when the spread is initiated, the dash closes.""" self.start_placeholder_app() - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.addCleanup(self.keybinding, "spread/cancel") self.keybinding("spread/start") - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) def test_dash_opens_when_in_spread(self): """This test shows the dash opens when in spread mode.""" self.start_placeholder_app() self.keybinding("spread/start") - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) - self.dash.ensure_visible() - self.assertThat(self.dash.visible, Eventually(Equals(True))) + self.unity.dash.ensure_visible() + self.assertThat(self.unity.dash.visible, Eventually(Equals(True))) def test_command_lens_opens_when_in_spread(self): """This test shows the command lens opens when in spread mode.""" self.start_placeholder_app() self.keybinding("spread/start") - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) - self.dash.reveal_command_lens() - self.assertThat(self.dash.active_lens, Eventually(Equals('commands.lens'))) + self.unity.dash.reveal_command_lens() + self.assertThat(self.unity.dash.active_lens, Eventually(Equals('commands.lens'))) def test_lens_opens_when_in_spread(self): """This test shows that any lens opens when in spread mode.""" self.start_placeholder_app() self.keybinding("spread/start") - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) - self.dash.reveal_application_lens() - self.assertThat(self.dash.active_lens, Eventually(Equals('applications.lens'))) + self.unity.dash.reveal_application_lens() + self.assertThat(self.unity.dash.active_lens, Eventually(Equals('applications.lens'))) class DashSearchInputTests(DashTestCase): """Test features involving input to the dash search""" def assertSearchText(self, text): - self.assertThat(self.dash.search_string, Eventually(Equals(text))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals(text))) def test_search_keyboard_focus(self): """Dash must put keyboard focus on the search bar at all times.""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.keyboard.type("Hello") self.assertSearchText("Hello") @@ -192,28 +193,28 @@ class DashMultiKeyTests(DashSearchInputTests): def test_multi_key(self): """Pressing 'Multi_key' must not add any characters to the search.""" - self.dash.reveal_application_lens() + self.unity.dash.reveal_application_lens() self.keyboard.press_and_release('Multi_key') self.keyboard.type("o") self.assertSearchText("") def test_multi_key_o(self): """Pressing the sequences 'Multi_key' + '^' + 'o' must produce 'ô'.""" - self.dash.reveal_application_lens() + self.unity.dash.reveal_application_lens() self.keyboard.press_and_release('Multi_key') self.keyboard.type("^o") self.assertSearchText(u'\xf4') def test_multi_key_copyright(self): """Pressing the sequences 'Multi_key' + 'c' + 'o' must produce '©'.""" - self.dash.reveal_application_lens() + self.unity.dash.reveal_application_lens() self.keyboard.press_and_release('Multi_key') self.keyboard.type("oc") self.assertSearchText(u'\xa9') def test_multi_key_delete(self): """Pressing 'Multi_key' must not get stuck looking for a sequence.""" - self.dash.reveal_application_lens() + self.unity.dash.reveal_application_lens() self.keyboard.type("dd") self.keyboard.press_and_release('Multi_key') self.keyboard.press_and_release('BackSpace') @@ -226,21 +227,21 @@ class DashKeyNavTests(DashTestCase): def test_lensbar_gets_keyfocus(self): """Test that the lensbar gets key focus after using Down keypresses.""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() # Make sure that the lens bar can get the focus - for i in range(self.dash.get_num_rows()): + for i in range(self.unity.dash.get_num_rows()): self.keyboard.press_and_release("Down") - lensbar = self.dash.view.get_lensbar() + lensbar = self.unity.dash.view.get_lensbar() self.assertThat(lensbar.focused_lens_icon, Eventually(NotEquals(''))) def test_lensbar_focus_changes(self): """Lensbar focused icon should change with Left and Right keypresses.""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() - for i in range(self.dash.get_num_rows()): + for i in range(self.unity.dash.get_num_rows()): self.keyboard.press_and_release("Down") - lensbar = self.dash.view.get_lensbar() + lensbar = self.unity.dash.view.get_lensbar() current_focused_icon = lensbar.focused_lens_icon @@ -252,12 +253,12 @@ class DashKeyNavTests(DashTestCase): def test_lensbar_enter_activation(self): """Must be able to activate LensBar icons that have focus with an Enter keypress.""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() - for i in range(self.dash.get_num_rows()): + for i in range(self.unity.dash.get_num_rows()): self.keyboard.press_and_release("Down") self.keyboard.press_and_release("Right") - lensbar = self.dash.view.get_lensbar() + lensbar = self.unity.dash.view.get_lensbar() focused_icon = lensbar.focused_lens_icon self.keyboard.press_and_release("Enter") @@ -269,12 +270,12 @@ class DashKeyNavTests(DashTestCase): def test_focus_returns_to_searchbar(self): """This test makes sure that the focus is returned to the searchbar of the newly activated lens.""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() - for i in range(self.dash.get_num_rows()): + for i in range(self.unity.dash.get_num_rows()): self.keyboard.press_and_release("Down") self.keyboard.press_and_release("Right") - lensbar = self.dash.view.get_lensbar() + lensbar = self.unity.dash.view.get_lensbar() focused_icon = lensbar.focused_lens_icon self.keyboard.press_and_release("Enter") @@ -284,7 +285,7 @@ class DashKeyNavTests(DashTestCase): # Now we make sure if the newly activated lens searchbar have the focus. self.keyboard.type("HasFocus") - self.assertThat(self.dash.search_string, Eventually(Equals("HasFocus"))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals("HasFocus"))) def test_category_header_keynav(self): """ Tests that a category header gets focus when 'down' is pressed after the @@ -294,10 +295,10 @@ class DashKeyNavTests(DashTestCase): focused, not the first and from doing this it seems that it's common for a header other than the first to get focus. """ - self.dash.ensure_visible() + self.unity.dash.ensure_visible() # Make sure that a category have the focus. self.keyboard.press_and_release("Down") - lens = self.dash.get_current_lens() + lens = self.unity.dash.get_current_lens() category = lens.get_focused_category() self.assertIsNot(category, None) # Make sure that the category is highlighted. @@ -305,13 +306,13 @@ class DashKeyNavTests(DashTestCase): def test_control_tab_lens_cycle(self): """This test makes sure that Ctrl+Tab cycles lenses.""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.keyboard.press('Control') self.keyboard.press_and_release('Tab') self.keyboard.release('Control') - lensbar = self.dash.view.get_lensbar() + lensbar = self.unity.dash.view.get_lensbar() self.assertEqual(lensbar.active_lens, u'applications.lens') self.keyboard.press('Control') @@ -324,8 +325,8 @@ class DashKeyNavTests(DashTestCase): def test_tab_cycle_category_headers(self): """ Makes sure that pressing tab cycles through the category headers""" - self.dash.ensure_visible() - lens = self.dash.get_current_lens() + self.unity.dash.ensure_visible() + lens = self.unity.dash.get_current_lens() # Test that tab cycles through the categories. # + 1 is to cycle back to first header @@ -336,20 +337,20 @@ class DashKeyNavTests(DashTestCase): def test_tab_with_filter_bar(self): """ This test makes sure that Tab works well with the filter bara.""" - self.dash.reveal_application_lens() - lens = self.dash.get_current_lens() + self.unity.dash.reveal_application_lens() + lens = self.unity.dash.get_current_lens() # Tabs to last category for i in range(lens.get_num_visible_categories()): self.keyboard.press_and_release('Tab') self.keyboard.press_and_release('Tab') - self.assertThat(self.dash.searchbar.expander_has_focus, Eventually(Equals(True))) + self.assertThat(self.unity.dash.searchbar.expander_has_focus, Eventually(Equals(True))) filter_bar = lens.get_filterbar() - if not self.dash.searchbar.showing_filters: + if not self.unity.dash.searchbar.showing_filters: self.keyboard.press_and_release('Enter') - self.assertThat(self.dash.searchbar.showing_filters, Eventually(Equals(True))) + self.assertThat(self.unity.dash.searchbar.showing_filters, Eventually(Equals(True))) self.addCleanup(filter_bar.ensure_collapsed) for i in range(filter_bar.get_num_filters()): @@ -366,8 +367,8 @@ class DashKeyNavTests(DashTestCase): """This test makes sure that bottom-up key navigation works well in the dash filter bar. """ - self.dash.reveal_application_lens() - lens = self.dash.get_current_lens() + self.unity.dash.reveal_application_lens() + lens = self.unity.dash.get_current_lens() filter_bar = lens.get_filterbar() # Need to ensure the filter expander has focus, so if it's already @@ -399,21 +400,21 @@ class DashClipboardTests(DashTestCase): def test_ctrl_a(self): """ This test if ctrl+a selects all text """ - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.keyboard.type("SelectAll") - self.assertThat(self.dash.search_string, Eventually(Equals("SelectAll"))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals("SelectAll"))) self.keyboard.press_and_release("Ctrl+a") self.keyboard.press_and_release("Delete") - self.assertThat(self.dash.search_string, Eventually(Equals(''))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals(''))) def test_ctrl_c(self): """ This test if ctrl+c copies text into the clipboard """ - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.keyboard.type("Copy") - self.assertThat(self.dash.search_string, Eventually(Equals("Copy"))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals("Copy"))) self.keyboard.press_and_release("Ctrl+a") self.keyboard.press_and_release("Ctrl+c") @@ -422,44 +423,44 @@ class DashClipboardTests(DashTestCase): def test_ctrl_x(self): """ This test if ctrl+x deletes all text and copys it """ - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.keyboard.type("Cut") - self.assertThat(self.dash.search_string, Eventually(Equals("Cut"))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals("Cut"))) self.keyboard.press_and_release("Ctrl+a") self.keyboard.press_and_release("Ctrl+x") - self.assertThat(self.dash.search_string, Eventually(Equals(""))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals(""))) self.assertThat(get_clipboard_contents, Eventually(Equals('Cut'))) def test_ctrl_c_v(self): """ This test if ctrl+c and ctrl+v copies and pastes text""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.keyboard.type("CopyPaste") - self.assertThat(self.dash.search_string, Eventually(Equals("CopyPaste"))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals("CopyPaste"))) self.keyboard.press_and_release("Ctrl+a") self.keyboard.press_and_release("Ctrl+c") self.keyboard.press_and_release("Ctrl+v") self.keyboard.press_and_release("Ctrl+v") - self.assertThat(self.dash.search_string, Eventually(Equals('CopyPasteCopyPaste'))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals('CopyPasteCopyPaste'))) def test_ctrl_x_v(self): """ This test if ctrl+x and ctrl+v cuts and pastes text""" - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.keyboard.type("CutPaste") - self.assertThat(self.dash.search_string, Eventually(Equals("CutPaste"))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals("CutPaste"))) self.keyboard.press_and_release("Ctrl+a") self.keyboard.press_and_release("Ctrl+x") self.keyboard.press_and_release("Ctrl+v") self.keyboard.press_and_release("Ctrl+v") - self.assertThat(self.dash.search_string, Eventually(Equals('CutPasteCutPaste'))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals('CutPasteCutPaste'))) def test_middle_click_paste(self): """Tests if Middle mouse button pastes into searchbar""" @@ -469,28 +470,28 @@ class DashClipboardTests(DashTestCase): self.keyboard.type("ThirdButtonPaste") self.keyboard.press_and_release("Ctrl+a") - self.dash.ensure_visible() + self.unity.dash.ensure_visible() - self.mouse.move(self.dash.searchbar.x + self.dash.searchbar.width / 2, - self.dash.searchbar.y + self.dash.searchbar.height / 2) + self.mouse.move(self.unity.dash.searchbar.x + self.unity.dash.searchbar.width / 2, + self.unity.dash.searchbar.y + self.unity.dash.searchbar.height / 2) self.mouse.click(button=2) - self.assertThat(self.dash.search_string, Eventually(Equals('ThirdButtonPaste'))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals('ThirdButtonPaste'))) class DashKeyboardFocusTests(DashTestCase): """Tests that keyboard focus works.""" def assertSearchText(self, text): - self.assertThat(self.dash.search_string, Eventually(Equals(text))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals(text))) def test_filterbar_expansion_leaves_kb_focus(self): """Expanding or collapsing the filterbar must keave keyboard focus in the search bar. """ - self.dash.reveal_application_lens() - filter_bar = self.dash.get_current_lens().get_filterbar() + self.unity.dash.reveal_application_lens() + filter_bar = self.unity.dash.get_current_lens().get_filterbar() filter_bar.ensure_collapsed() self.keyboard.type("hello") @@ -502,8 +503,8 @@ class DashKeyboardFocusTests(DashTestCase): def test_keep_focus_on_application_opens(self): """The Dash must keep key focus as well as stay open if an app gets opened from an external source. """ - self.dash.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.start_app_window("Calculator") sleep(1) @@ -517,33 +518,33 @@ class DashLensResultsTests(DashTestCase): def test_results_message_empty_search(self): """This tests a message is not shown when there is no text.""" - self.dash.reveal_application_lens() - lens = self.dash.get_current_lens() + self.unity.dash.reveal_application_lens() + lens = self.unity.dash.get_current_lens() self.assertThat(lens.no_results_active, Eventually(Equals(False))) def test_results_message(self): """This test no mesage will be shown when results are there.""" - self.dash.reveal_application_lens() + self.unity.dash.reveal_application_lens() self.keyboard.type("Terminal") - self.assertThat(self.dash.search_string, Eventually(Equals("Terminal"))) - lens = self.dash.get_current_lens() + self.assertThat(self.unity.dash.search_string, Eventually(Equals("Terminal"))) + lens = self.unity.dash.get_current_lens() self.assertThat(lens.no_results_active, Eventually(Equals(False))) def test_no_results_message(self): """This test shows a message will appear in the lens.""" - self.dash.reveal_application_lens() + self.unity.dash.reveal_application_lens() self.keyboard.type("qwerlkjzvxc") - self.assertThat(self.dash.search_string, Eventually(Equals("qwerlkjzvxc"))) - lens = self.dash.get_current_lens() + self.assertThat(self.unity.dash.search_string, Eventually(Equals("qwerlkjzvxc"))) + lens = self.unity.dash.get_current_lens() self.assertThat(lens.no_results_active, Eventually(Equals(True))) def test_results_update_on_filter_changed(self): """This test makes sure the results change when filters change.""" gettext.install("unity-lens-applications") - self.dash.reveal_application_lens() - lens = self.dash.get_current_lens() + self.unity.dash.reveal_application_lens() + lens = self.unity.dash.get_current_lens() self.keyboard.type(" ") - self.assertThat(self.dash.search_string, Eventually(Equals(" "))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals(" "))) results_category = lens.get_category_by_name(_("Installed")) old_results = results_category.get_results() @@ -556,12 +557,12 @@ class DashLensResultsTests(DashTestCase): self.keyboard.press_and_release('Tab') self.keyboard.press_and_release('Tab') - self.assertThat(self.dash.searchbar.expander_has_focus, Eventually(Equals(True))) + self.assertThat(self.unity.dash.searchbar.expander_has_focus, Eventually(Equals(True))) filter_bar = lens.get_filterbar() - if not self.dash.searchbar.showing_filters: + if not self.unity.dash.searchbar.showing_filters: self.keyboard.press_and_release('Enter') - self.assertThat(self.dash.searchbar.showing_filters, Eventually(Equals(True))) + self.assertThat(self.unity.dash.searchbar.showing_filters, Eventually(Equals(True))) if add_cleanup: self.addCleanup(filter_bar.ensure_collapsed) @@ -593,9 +594,9 @@ class DashVisualTests(DashTestCase): def test_closing_dash_hides_current_lens(self): """When exiting from the dash the current lens must set it self to not visible.""" - self.dash.ensure_visible() - lens = self.dash.get_current_lens() - self.dash.ensure_hidden() + self.unity.dash.ensure_visible() + lens = self.unity.dash.get_current_lens() + self.unity.dash.ensure_hidden() self.assertThat(lens.visible, Eventually(Equals(False))) @@ -604,20 +605,20 @@ class DashVisualTests(DashTestCase): has a non-default width. """ self.set_unity_option('icon_size', 60) - self.dash.ensure_visible() + self.unity.dash.ensure_visible() - monitor = self.dash.monitor - launcher = self.launcher.get_launcher_for_monitor(monitor) + monitor = self.unity.dash.monitor + launcher = self.unity.launcher.get_launcher_for_monitor(monitor) - self.assertThat(self.dash.geometry[0], Eventually(Equals(launcher.geometry[0] + launcher.geometry[2] - 1))) + self.assertThat(self.unity.dash.geometry[0], Eventually(Equals(launcher.geometry[0] + launcher.geometry[2] - 1))) def test_see_more_result_alignment(self): """The see more results label should be baseline aligned with the category name label. """ - self.dash.reveal_application_lens() + self.unity.dash.reveal_application_lens() - lens = self.dash.get_current_lens() + lens = self.unity.dash.get_current_lens() groups = lens.get_groups() for group in groups: @@ -632,8 +633,8 @@ class DashLensBarTests(DashTestCase): def setUp(self): super(DashLensBarTests, self).setUp() - self.dash.ensure_visible() - self.lensbar = self.dash.view.get_lensbar() + self.unity.dash.ensure_visible() + self.lensbar = self.unity.dash.view.get_lensbar() def test_click_inside_highlight(self): """Lens selection should work when clicking in @@ -653,37 +654,37 @@ class DashBorderTests(DashTestCase): """ def setUp(self): super(DashBorderTests, self).setUp() - self.dash.ensure_visible() + self.unity.dash.ensure_visible() def test_click_right_border(self): """Clicking on the right dash border should do nothing, *NOT* close the dash. """ - if (self.dash.view.form_factor != "desktop"): + if (self.unity.dash.view.form_factor != "desktop"): self.skip("Not in desktop form-factor.") - x = self.dash.view.x + self.dash.view.width + self.dash.view.right_border_width / 2 - y = self.dash.view.y + self.dash.view.height / 2 + x = self.unity.dash.view.x + self.unity.dash.view.width + self.unity.dash.view.right_border_width / 2 + y = self.unity.dash.view.y + self.unity.dash.view.height / 2 self.mouse.move(x, y) self.mouse.click() - self.assertThat(self.dash.visible, Eventually(Equals(True))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(True))) def test_click_bottom_border(self): """Clicking on the bottom dash border should do nothing, *NOT* close the dash. """ - if (self.dash.view.form_factor != "desktop"): + if (self.unity.dash.view.form_factor != "desktop"): self.skip("Not in desktop form-factor.") - x = self.dash.view.x + self.dash.view.width / 2 - y = self.dash.view.y + self.dash.view.height + self.dash.view.bottom_border_height / 2 + x = self.unity.dash.view.x + self.unity.dash.view.width / 2 + y = self.unity.dash.view.y + self.unity.dash.view.height + self.unity.dash.view.bottom_border_height / 2 self.mouse.move(x, y) self.mouse.click() - self.assertThat(self.dash.visible, Eventually(Equals(True))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(True))) class CategoryHeaderTests(DashTestCase): @@ -694,13 +695,13 @@ class CategoryHeaderTests(DashTestCase): the view. """ gettext.install("unity-lens-applications", unicode=True) - lens = self.dash.reveal_application_lens() - self.addCleanup(self.dash.ensure_hidden) + lens = self.unity.dash.reveal_application_lens() + self.addCleanup(self.unity.dash.ensure_hidden) category = lens.get_category_by_name(_("Installed")) is_expanded = category.is_expanded - self.mouse.move(self.dash.view.x + self.dash.view.width / 2, + self.mouse.move(self.unity.dash.view.x + self.unity.dash.view.width / 2, category.header_y + category.header_height / 2) self.mouse.click() @@ -720,19 +721,19 @@ class PreviewInvocationTests(DashTestCase): """ gettext.install("unity-lens-applications", unicode=True) - lens = self.dash.reveal_application_lens() - self.addCleanup(self.dash.ensure_hidden) + lens = self.unity.dash.reveal_application_lens() + self.addCleanup(self.unity.dash.ensure_hidden) category = lens.get_category_by_name(_("More suggestions")) results = category.get_results() result = results[0] # result.preview handles finding xy co-ords and right mouse-click result.preview() - self.assertThat(self.dash.preview_displaying, Eventually(Equals(True))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(True))) self.keyboard.press_and_release("Escape") - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_files_lens_preview_open_close(self): """Right-clicking on a files lens result must show its @@ -748,8 +749,8 @@ class PreviewInvocationTests(DashTestCase): self.addCleanup(self.close_all_app, 'Text Editor') self.assertProperty(gedit_win, is_focused=True) - lens = self.dash.reveal_file_lens() - self.addCleanup(self.dash.ensure_hidden) + lens = self.unity.dash.reveal_file_lens() + self.addCleanup(self.unity.dash.ensure_hidden) category = lens.get_category_by_name(_("Recent")) refresh_results_fn = lambda: len(category.get_results()) @@ -758,18 +759,18 @@ class PreviewInvocationTests(DashTestCase): result = results[0] # result.preview handles finding xy co-ords and right mouse-click result.preview() - self.assertThat(self.dash.preview_displaying, Eventually(Equals(True))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(True))) self.keyboard.press_and_release("Escape") - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_music_lens_preview_open_close(self): """Right-clicking on a music lens result must show its preview. """ - lens = self.dash.reveal_music_lens() - self.addCleanup(self.dash.ensure_hidden) + lens = self.unity.dash.reveal_music_lens() + self.addCleanup(self.unity.dash.ensure_hidden) category = lens.get_category_by_name("Songs") # Incase there was no music ever played we skip the test instead @@ -782,11 +783,11 @@ class PreviewInvocationTests(DashTestCase): result = results[0] # result.preview handles finding xy co-ords and right mouse-click result.preview() - self.assertThat(self.dash.preview_displaying, Eventually(Equals(True))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(True))) self.keyboard.press_and_release("Escape") - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_video_lens_preview_open_close(self): """Right-clicking on a video lens result must show its @@ -805,8 +806,8 @@ class PreviewInvocationTests(DashTestCase): self.skipTest("This lens is probably empty") return category - lens = self.dash.reveal_video_lens() - self.addCleanup(self.dash.ensure_hidden) + lens = self.unity.dash.reveal_video_lens() + self.addCleanup(self.unity.dash.ensure_hidden) self.assertThat(lambda: get_category(lens), Eventually(NotEquals(None))) category = get_category(lens) @@ -816,26 +817,26 @@ class PreviewInvocationTests(DashTestCase): result = results[0] # result.preview handles finding xy co-ords and right mouse-click result.preview() - self.assertThat(self.dash.preview_displaying, Eventually(Equals(True))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(True))) self.keyboard.press_and_release("Escape") - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_preview_key(self): """Pressing menu key on a selected dash result must show its preview. """ gettext.install("unity-lens-applications", unicode=True) - lens = self.dash.reveal_application_lens() - self.addCleanup(self.dash.ensure_hidden) + lens = self.unity.dash.reveal_application_lens() + self.addCleanup(self.unity.dash.ensure_hidden) category = lens.get_category_by_name(_("More suggestions")) results = category.get_results() result = results[0] # result.preview_key() handles finding xy co-ords and key press result.preview_key() - self.assertThat(self.dash.preview_displaying, Eventually(Equals(True))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(True))) class PreviewNavigateTests(DashTestCase): @@ -845,8 +846,8 @@ class PreviewNavigateTests(DashTestCase): super(PreviewNavigateTests, self).setUp() gettext.install("unity-lens-applications", unicode=True) - lens = self.dash.reveal_application_lens() - self.addCleanup(self.dash.ensure_hidden) + lens = self.unity.dash.reveal_application_lens() + self.addCleanup(self.unity.dash.ensure_hidden) results_category = lens.get_category_by_name(_("More suggestions")) # wait for results (we need 4 results to perorm the multi-navigation tests) @@ -856,9 +857,10 @@ class PreviewNavigateTests(DashTestCase): result = results[2] # 2 so we can navigate left result.preview() - self.assertThat(self.dash.view.preview_displaying, Eventually(Equals(True))) + self.assertThat(self.unity.dash.view.preview_displaying, Eventually(Equals(True))) + self.assertThat(self.unity.dash.view.get_preview_container, Eventually(NotEquals(None))) - self.preview_container = self.dash.view.get_preview_container() + self.preview_container = self.unity.dash.view.get_preview_container() def test_navigate_left(self): """Tests that left navigation works with previews.""" @@ -882,7 +884,7 @@ class PreviewNavigateTests(DashTestCase): # Test close preview after navigate self.keyboard.press_and_release("Escape") - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_navigate_left_multi(self): """Tests that multiple left navigation works with previews.""" @@ -927,7 +929,7 @@ class PreviewNavigateTests(DashTestCase): # Test close preview after navigate self.keyboard.press_and_release("Escape") - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_navigate_right_multi(self): """Tests that multiple right navigation works with previews.""" @@ -959,7 +961,7 @@ class PreviewNavigateTests(DashTestCase): self.keyboard.press_and_release("Escape") - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) class PreviewClickCancelTests(DashTestCase): @@ -967,8 +969,8 @@ class PreviewClickCancelTests(DashTestCase): def setUp(self): super(PreviewClickCancelTests, self).setUp() - lens = self.dash.reveal_application_lens() - self.addCleanup(self.dash.ensure_hidden) + lens = self.unity.dash.reveal_application_lens() + self.addCleanup(self.unity.dash.ensure_hidden) # Only testing an application preview for this test. self.keyboard.type("Software Updater") results_category = lens.get_category_by_name(_("Installed")) @@ -976,9 +978,9 @@ class PreviewClickCancelTests(DashTestCase): result = results[0] result.preview() - self.assertThat(self.dash.view.preview_displaying, Eventually(Equals(True))) + self.assertThat(self.unity.dash.view.preview_displaying, Eventually(Equals(True))) - self.preview_container = self.dash.view.get_preview_container() + self.preview_container = self.unity.dash.view.get_preview_container() def test_left_click_on_preview_icon_cancel_preview(self): """Left click on preview icon must close preview.""" @@ -989,7 +991,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=1) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_middle_click_on_preview_icon_cancel_preview(self): """Middle click on preview icon must close preview.""" @@ -1000,7 +1002,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=2) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_right_click_on_preview_icon_cancel_preview(self): """Right click on preview icon must close preview.""" @@ -1011,7 +1013,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=3) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_left_click_on_preview_image_cancel_preview(self): """Left click on preview image must cancel the preview.""" @@ -1022,7 +1024,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=1) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_middle_click_on_preview_image_cancel_preview(self): """Middle click on preview image must cancel the preview.""" @@ -1033,7 +1035,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=2) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_right_click_on_preview_image_cancel_preview(self): """Right click on preview image must cancel the preview.""" @@ -1044,7 +1046,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=3) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_left_click_on_preview_text_cancel_preview(self): """Left click on some preview text must cancel the preview.""" @@ -1055,7 +1057,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=1) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_middle_click_on_preview_text_cancel_preview(self): """Middle click on some preview text must cancel the preview.""" @@ -1066,7 +1068,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=2) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_right_click_on_preview_text_cancel_preview(self): """Right click on some preview text must cancel the preview.""" @@ -1077,7 +1079,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=3) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_left_click_on_preview_ratings_widget_cancel_preview(self): """Left click on the ratings widget must cancel the preview.""" @@ -1088,7 +1090,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=1) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_middle_click_on_preview_ratings_widget_cancel_preview(self): """Middle click on the ratings widget must cancel the preview.""" @@ -1099,7 +1101,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=2) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_right_click_on_preview_ratings_widget_cancel_preview(self): """Right click on the ratings widget must cancel the preview.""" @@ -1110,7 +1112,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=3) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_left_click_on_preview_info_hint_cancel_preview(self): """Left click on the info hint must cancel the preview.""" @@ -1121,7 +1123,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=1) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_middle_click_on_preview_info_hint_cancel_preview(self): """Middle click on the info hint must cancel the preview.""" @@ -1132,7 +1134,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=2) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) def test_right_click_on_preview_info_hint_cancel_preview(self): """Right click on the info hint must cancel the preview.""" @@ -1143,7 +1145,7 @@ class PreviewClickCancelTests(DashTestCase): self.mouse.move(tx, ty) self.mouse.click(button=3) - self.assertThat(self.dash.preview_displaying, Eventually(Equals(False))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(False))) class DashDBusIfaceTests(DashTestCase): @@ -1151,10 +1153,10 @@ class DashDBusIfaceTests(DashTestCase): def test_dash_hide(self): """Ensure we can hide the dash via HideDash() dbus method.""" - self.dash.ensure_visible() - self.dash.controller.hide_dash_via_dbus() - self.assertThat(self.dash.visible, Eventually(Equals(False))) - self.dash.ensure_hidden() + self.unity.dash.ensure_visible() + self.unity.dash.hide_dash_via_dbus() + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) + self.unity.dash.ensure_hidden() class DashCrossMonitorsTests(DashTestCase): @@ -1169,27 +1171,27 @@ class DashCrossMonitorsTests(DashTestCase): """If the dash is opened, then the mouse is moved to another monitor and the keyboard is used. The Dash must not move to that monitor. """ - current_monitor = self.dash.ideal_monitor + current_monitor = self.unity.dash.ideal_monitor - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) self.screen_geo.move_mouse_to_monitor((current_monitor + 1) % self.screen_geo.get_num_monitors()) self.keyboard.type("abc") - self.assertThat(self.dash.ideal_monitor, Eventually(Equals(current_monitor))) + self.assertThat(self.unity.dash.ideal_monitor, Eventually(Equals(current_monitor))) def test_dash_close_on_cross_monitor_click(self): """Dash must close when clicking on a window in a different screen.""" - self.addCleanup(self.dash.ensure_hidden) + self.addCleanup(self.unity.dash.ensure_hidden) for monitor in range(self.screen_geo.get_num_monitors()-1): self.screen_geo.move_mouse_to_monitor(monitor) - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.screen_geo.move_mouse_to_monitor(monitor+1) sleep(.5) self.mouse.click() - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) diff --git a/tests/autopilot/unity/tests/test_home_lens.py b/tests/autopilot/unity/tests/test_home_lens.py index 65de6875c..38539a3d6 100644 --- a/tests/autopilot/unity/tests/test_home_lens.py +++ b/tests/autopilot/unity/tests/test_home_lens.py @@ -22,22 +22,22 @@ class HomeLensSearchTests(UnityTestCase): super(HomeLensSearchTests, self).setUp() def tearDown(self): - self.dash.ensure_hidden() + self.unity.dash.ensure_hidden() super(HomeLensSearchTests, self).tearDown() def test_quick_run_app(self): """Hitting enter runs an application even though a search might not have fully finished yet. - + """ if self.app_is_running("Text Editor"): self.close_all_app("Text Editor") sleep(1) kb = self.keyboard - self.dash.ensure_visible() + self.unity.dash.ensure_visible() kb.type("g") - self.assertThat(self.dash.search_string, Eventually(Equals("g"))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals("g"))) kb.type("edit", 0.1) kb.press_and_release("Enter", 0.1) self.addCleanup(self.close_all_app, "Text Editor") diff --git a/tests/autopilot/unity/tests/test_hud.py b/tests/autopilot/unity/tests/test_hud.py index 0e85e7f6f..97938b9d9 100644 --- a/tests/autopilot/unity/tests/test_hud.py +++ b/tests/autopilot/unity/tests/test_hud.py @@ -47,12 +47,12 @@ class HudTestsBase(UnityTestCase): super(HudTestsBase, self).setUp() def tearDown(self): - self.hud.ensure_hidden() + self.unity.hud.ensure_hidden() super(HudTestsBase, self).tearDown() def get_num_active_launcher_icons(self): num_active = 0 - for icon in self.launcher.model.get_launcher_icons(): + for icon in self.unity.launcher.model.get_launcher_icons(): if icon.active and icon.visible: num_active += 1 return num_active @@ -77,56 +77,56 @@ class HudBehaviorTests(HudTestsBase): self.screen_geo.move_mouse_to_monitor(self.hud_monitor) def test_no_initial_values(self): - self.hud.ensure_visible() - self.assertThat(self.hud.num_buttons, Equals(0)) - self.assertThat(self.hud.selected_button, Equals(0)) + self.unity.hud.ensure_visible() + self.assertThat(self.unity.hud.num_buttons, Equals(0)) + self.assertThat(self.unity.hud.selected_button, Equals(0)) def test_check_a_values(self): - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type('a') - self.assertThat(self.hud.search_string, Eventually(Equals('a'))) - self.assertThat(self.hud.num_buttons, Eventually(Equals(5))) - self.assertThat(self.hud.selected_button, Eventually(Equals(1))) + self.assertThat(self.unity.hud.search_string, Eventually(Equals('a'))) + self.assertThat(self.unity.hud.num_buttons, Eventually(Equals(5))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(1))) def test_up_down_arrows(self): - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type('a') - self.assertThat(self.hud.search_string, Eventually(Equals('a'))) + self.assertThat(self.unity.hud.search_string, Eventually(Equals('a'))) self.keyboard.press_and_release('Down') - self.assertThat(self.hud.selected_button, Eventually(Equals(2))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(2))) self.keyboard.press_and_release('Down') - self.assertThat(self.hud.selected_button, Eventually(Equals(3))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(3))) self.keyboard.press_and_release('Down') - self.assertThat(self.hud.selected_button, Eventually(Equals(4))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(4))) self.keyboard.press_and_release('Down') - self.assertThat(self.hud.selected_button, Eventually(Equals(5))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(5))) # Down again stays on 5. self.keyboard.press_and_release('Down') - self.assertThat(self.hud.selected_button, Eventually(Equals(5))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(5))) self.keyboard.press_and_release('Up') - self.assertThat(self.hud.selected_button, Eventually(Equals(4))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(4))) self.keyboard.press_and_release('Up') - self.assertThat(self.hud.selected_button, Eventually(Equals(3))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(3))) self.keyboard.press_and_release('Up') - self.assertThat(self.hud.selected_button, Eventually(Equals(2))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(2))) self.keyboard.press_and_release('Up') - self.assertThat(self.hud.selected_button, Eventually(Equals(1))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(1))) # Up again stays on 1. self.keyboard.press_and_release('Up') - self.assertThat(self.hud.selected_button, Eventually(Equals(1))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(1))) def test_no_reset_selected_button(self): """Hud must not change selected button when results update over time.""" # TODO - this test doesn't test anything. Onmy system the results never update. # ideally we'd send artificial results to the hud from the test. - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type('is') - self.assertThat(self.hud.search_string, Eventually(Equals('is'))) + self.assertThat(self.unity.hud.search_string, Eventually(Equals('is'))) self.keyboard.press_and_release('Down') - self.assertThat(self.hud.selected_button, Eventually(Equals(2))) + self.assertThat(self.unity.hud.selected_button, Eventually(Equals(2))) # long sleep to let the service send updated results sleep(10) - self.assertThat(self.hud.selected_button, Equals(2)) + self.assertThat(self.unity.hud.selected_button, Equals(2)) def test_slow_tap_not_reveal_hud(self): """A slow tap must not reveal the HUD.""" @@ -134,7 +134,7 @@ class HudBehaviorTests(HudTestsBase): # need a long sleep to ensure that we test after the hud controller has # seen the keypress. sleep(5) - self.assertThat(self.hud.visible, Equals(False)) + self.assertThat(self.unity.hud.visible, Equals(False)) def test_alt_f4_doesnt_show_hud(self): self.start_app('Calculator') @@ -142,7 +142,7 @@ class HudBehaviorTests(HudTestsBase): # Do a very fast Alt+F4 self.keyboard.press_and_release("Alt+F4", 0.05) sleep(1) - self.assertFalse(self.hud.visible) + self.assertFalse(self.unity.hud.visible) def test_reveal_hud_with_no_apps(self): """Hud must show even with no visible applications. @@ -151,11 +151,11 @@ class HudBehaviorTests(HudTestsBase): """ self.start_placeholder_app() - self.window_manager.enter_show_desktop() - self.addCleanup(self.window_manager.leave_show_desktop) + self.unity.window_manager.enter_show_desktop() + self.addCleanup(self.unity.window_manager.leave_show_desktop) - self.hud.ensure_visible() - self.hud.ensure_hidden() + self.unity.hud.ensure_visible() + self.unity.hud.ensure_hidden() def test_restore_focus(self): """Ensures that once the hud is dismissed, the same application @@ -166,14 +166,14 @@ class HudBehaviorTests(HudTestsBase): # first ensure that the application has started and is focused self.assertEqual(calc.is_active, True) - self.hud.ensure_visible() - self.hud.ensure_hidden() + self.unity.hud.ensure_visible() + self.unity.hud.ensure_hidden() # again ensure that the application we started is focused self.assertEqual(calc.is_active, True) - self.hud.ensure_visible() - self.hud.ensure_hidden() + self.unity.hud.ensure_visible() + self.unity.hud.ensure_hidden() # why do we do this: ??? self.keyboard.press_and_release('Return') sleep(1) @@ -193,14 +193,14 @@ class HudBehaviorTests(HudTestsBase): self.keyboard.type(" ") self.keyboard.type("1") - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type("undo") - hud_query_check = lambda: self.hud.selected_hud_button.label_no_formatting + hud_query_check = lambda: self.unity.hud.selected_hud_button.label_no_formatting self.assertThat(hud_query_check, Eventually(Equals("Edit > Undo"))) self.keyboard.press_and_release('Return') - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) self.assertProperty(gedit_win, is_focused=True) self.keyboard.press_and_release("Ctrl+s") @@ -211,18 +211,18 @@ class HudBehaviorTests(HudTestsBase): def test_hud_to_dash_has_key_focus(self): """When switching from the hud to the dash you don't lose key focus.""" - self.hud.ensure_visible() - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.hud.ensure_visible() + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) self.keyboard.type('focus1') - self.assertThat(self.dash.search_string, Eventually(Equals('focus1'))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals('focus1'))) def test_dash_to_hud_has_key_focus(self): """When switching from the dash to the hud you don't lose key focus.""" - self.dash.ensure_visible() - self.hud.ensure_visible() + self.unity.dash.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type('focus2') - self.assertThat(self.hud.search_string, Eventually(Equals('focus2'))) + self.assertThat(self.unity.hud.search_string, Eventually(Equals('focus2'))) def test_hud_closes_on_workspace_switch(self): """This test shows that when you switch to another workspace the hud closes.""" @@ -230,19 +230,19 @@ class HudBehaviorTests(HudTestsBase): self.skipTest("This test requires enabled more than one workspace.") initial_workspace = self.workspace.current_workspace self.addCleanup(self.workspace.switch_to, initial_workspace) - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.workspace.switch_to((initial_workspace + 1) % self.workspace.num_workspaces) - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_hud_closes_on_spread(self): """This test shows that when the spread is initiated, the hud closes.""" # Need at least one application open for the spread to work. self.start_app_window("Calculator") - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.addCleanup(self.keybinding, "spread/cancel") self.keybinding("spread/start") - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_hud_closes_click_outside_geo_shrunk(self): """ @@ -250,86 +250,86 @@ class HudBehaviorTests(HudTestsBase): Shurnk is when the hud has no results and is much smaller then normal. """ - self.hud.ensure_visible() - (x,y,w,h) = self.hud.view.geometry + self.unity.hud.ensure_visible() + (x,y,w,h) = self.unity.hud.view.geometry self.mouse.move(w/2, h-50) self.mouse.click() - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_hud_closes_click_outside_geo(self): """Clicking outside of the hud will make it close.""" - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type("Test") - (x,y,w,h) = self.hud.view.geometry + (x,y,w,h) = self.unity.hud.view.geometry self.mouse.move(w/2, h+50) self.mouse.click() - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_hud_closes_click_after_text_removed(self): """Clicking outside of the hud after a search text has been entered and then removed from the searchbox will make it close.""" - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type("Test") self.keyboard.press_and_release("Escape") - (x,y,w,h) = self.hud.view.geometry + (x,y,w,h) = self.unity.hud.view.geometry self.mouse.move(w/2, h+50) self.mouse.click() - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_alt_f4_close_hud(self): """Hud must close on alt+F4.""" - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.press_and_release("Alt+F4") - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_alt_f4_close_hud_with_capslock_on(self): """Hud must close on Alt+F4 even when the capslock is turned on.""" self.keyboard.press_and_release("Caps_Lock") self.addCleanup(self.keyboard.press_and_release, "Caps_Lock") - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.press_and_release("Alt+F4") - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_app_activate_on_enter(self): """Hud must close after activating a search item with Enter.""" self.start_app('Text Editor', locale='C') self.addCleanup(self.close_all_app, "Text Editor") - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type("File > Quit") - self.assertThat(self.hud.search_string, Eventually(Equals("File > Quit"))) + self.assertThat(self.unity.hud.search_string, Eventually(Equals("File > Quit"))) self.keyboard.press_and_release("Enter") self.assertFalse(self.app_is_running("Text Editor")) - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_hud_closes_on_escape(self): """Hud must close on escape after searchbox is cleared""" - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type("ThisText") self.keyboard.press_and_release("Escape") self.keyboard.press_and_release("Escape") - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_hud_closes_on_escape_shrunk(self): """Hud must close when escape key is pressed""" - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.press_and_release("Escape") - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_alt_arrow_keys_not_eaten(self): """Tests that Alt+ArrowKey events are correctly passed to the @@ -368,62 +368,62 @@ class HudBehaviorTests(HudTestsBase): change the selected button from 1 to 5. """ - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type("a") - (x,y,w,h) = self.hud.view.geometry + (x,y,w,h) = self.unity.hud.view.geometry # Specify a slower rate so that HUD can register the mouse movement properly self.mouse.move(w/2, 0, rate=5) - self.assertThat(self.hud.view.selected_button, Eventually(Equals(1))) + self.assertThat(self.unity.hud.view.selected_button, Eventually(Equals(1))) self.mouse.move(w/2, h, rate=5) - self.assertThat(self.hud.view.selected_button, Eventually(Equals(5))) + self.assertThat(self.unity.hud.view.selected_button, Eventually(Equals(5))) def test_keyboard_steals_focus_from_mouse(self): """This tests moves the mouse from the top of the screen to the bottom, then it presses the keyboard up 5 times, this must change the selected button from 5 to 1. """ - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.keyboard.type("a") - (x,y,w,h) = self.hud.view.geometry + (x,y,w,h) = self.unity.hud.view.geometry self.mouse.move(w/2, 0) self.mouse.move(w/2, h) - self.assertThat(self.hud.view.selected_button, Eventually(Equals(5))) + self.assertThat(self.unity.hud.view.selected_button, Eventually(Equals(5))) for i in range(5): self.keyboard.press_and_release('Up') - self.assertThat(self.hud.view.selected_button, Eventually(Equals(1))) + self.assertThat(self.unity.hud.view.selected_button, Eventually(Equals(1))) def test_keep_focus_on_application_opens(self): """The Hud must keep key focus as well as stay open if an app gets opened from an external source. """ - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.start_app_window("Calculator") sleep(1) self.keyboard.type("HasFocus") - self.assertThat(self.hud.search_string, Eventually(Equals("HasFocus"))) + self.assertThat(self.unity.hud.search_string, Eventually(Equals("HasFocus"))) def test_closes_mouse_down_outside(self): """Test that a mouse down outside of the hud closes the hud.""" - self.hud.ensure_visible() - current_monitor = self.hud.monitor + self.unity.hud.ensure_visible() + current_monitor = self.unity.hud.monitor - (x,y,w,h) = self.hud.geometry + (x,y,w,h) = self.unity.hud.geometry (screen_x,screen_y,screen_w,screen_h) = self.screen_geo.get_monitor_geometry(current_monitor) self.mouse.move(x + w + (screen_w-((screen_x-x)+w))/2, y + h + (screen_h-((screen_y-y)+h))/2) self.mouse.click() - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_closes_then_focuses_window_on_mouse_down(self): """If 2 windows are open with 1 maximized and the non-maxmized @@ -435,7 +435,7 @@ class HudBehaviorTests(HudTestsBase): self.keybinding("window/maximize") self.start_app("Calculator") - self.hud.ensure_visible() + self.unity.hud.ensure_visible() #Click bottom right of the screen w = self.screen_geo.get_screen_width() @@ -454,8 +454,8 @@ class HudBehaviorTests(HudTestsBase): self.keybinding("switcher/reveal_normal") self.assertProperty(char_win, is_active=True) - self.hud.ensure_visible() - self.hud.ensure_hidden() + self.unity.hud.ensure_visible() + self.unity.hud.ensure_hidden() self.assertProperty(char_win, is_active=True) @@ -481,7 +481,7 @@ class HudLauncherInteractionsTests(HudTestsBase): apps as active. """ - launcher = self.launcher.get_launcher_for_monitor(self.hud_monitor) + launcher = self.unity.launcher.get_launcher_for_monitor(self.hud_monitor) # We need an app to switch to: self.start_app('Character Map') @@ -495,11 +495,11 @@ class HudLauncherInteractionsTests(HudTestsBase): # reveal and hide hud several times over: for i in range(3): - self.hud.ensure_visible() - self.hud.ensure_hidden() + self.unity.hud.ensure_visible() + self.unity.hud.ensure_hidden() # click application icons for running apps in the launcher: - icon = self.launcher.model.get_icon(desktop_id="gucharmap.desktop") + icon = self.unity.launcher.model.get_icon(desktop_id="gucharmap.desktop") launcher.click_launcher_icon(icon) # see how many apps are marked as being active: @@ -509,10 +509,10 @@ class HudLauncherInteractionsTests(HudTestsBase): def test_hud_does_not_change_launcher_status(self): """Opening the HUD must not change the launcher visibility.""" - launcher = self.launcher.get_launcher_for_monitor(self.hud_monitor) + launcher = self.unity.launcher.get_launcher_for_monitor(self.hud_monitor) launcher_shows_pre = launcher.is_showing - self.hud.ensure_visible() + self.unity.hud.ensure_visible() launcher_shows_post = launcher.is_showing self.assertThat(launcher_shows_pre, Equals(launcher_shows_post)) @@ -533,14 +533,14 @@ class HudLockedLauncherInteractionsTests(HudTestsBase): def test_hud_launcher_icon_hides_bfb(self): """BFB icon must be hidden when the HUD launcher icon is shown.""" - hud_icon = self.hud.get_launcher_icon() - bfb_icon = self.launcher.model.get_bfb_icon() + hud_icon = self.unity.hud.get_launcher_icon() + bfb_icon = self.unity.launcher.model.get_bfb_icon() self.assertThat(bfb_icon.visible, Eventually(Equals(True))) self.assertTrue(bfb_icon.is_on_monitor(self.hud_monitor)) self.assertThat(hud_icon.visible, Eventually(Equals(False))) - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.assertThat(hud_icon.visible, Eventually(Equals(True))) self.assertTrue(hud_icon.is_on_monitor(self.hud_monitor)) @@ -550,9 +550,9 @@ class HudLockedLauncherInteractionsTests(HudTestsBase): def test_hud_desaturates_launcher_icons(self): """Launcher icons must desaturate when the HUD is opened.""" - self.hud.ensure_visible() + self.unity.hud.ensure_visible() - for icon in self.launcher.model.get_launcher_icons_for_monitor(self.hud_monitor): + for icon in self.unity.launcher.model.get_launcher_icons_for_monitor(self.hud_monitor): if isinstance(icon, HudLauncherIcon): self.assertThat(icon.desaturated, Eventually(Equals(False))) else: @@ -561,13 +561,13 @@ class HudLockedLauncherInteractionsTests(HudTestsBase): def test_hud_launcher_icon_click_hides_hud(self): """Clicking the Hud Icon should hide the HUD""" - hud_icon = self.hud.get_launcher_icon() - self.hud.ensure_visible() + hud_icon = self.unity.hud.get_launcher_icon() + self.unity.hud.ensure_visible() - launcher = self.launcher.get_launcher_for_monitor(self.hud_monitor) + launcher = self.unity.launcher.get_launcher_for_monitor(self.hud_monitor) launcher.click_launcher_icon(hud_icon) - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) self.assertThat(hud_icon.visible, Eventually(Equals(False))) @@ -591,22 +591,22 @@ class HudVisualTests(HudTestsBase): sleep(0.5) def test_initially_hidden(self): - self.assertFalse(self.hud.visible) + self.assertFalse(self.unity.hud.visible) def test_hud_is_on_right_monitor(self): """HUD must be drawn on the monitor where the mouse is.""" - self.hud.ensure_visible() - self.assertThat(self.hud.monitor, Eventually(Equals(self.hud_monitor))) - self.assertTrue(self.screen_geo.is_rect_on_monitor(self.hud.monitor, self.hud.geometry)) + self.unity.hud.ensure_visible() + self.assertThat(self.unity.hud.monitor, Eventually(Equals(self.hud_monitor))) + self.assertTrue(self.screen_geo.is_rect_on_monitor(self.unity.hud.monitor, self.unity.hud.geometry)) def test_hud_geometries(self): """Tests the HUD geometries for the given monitor and status.""" - self.hud.ensure_visible() + self.unity.hud.ensure_visible() monitor_geo = self.screen_geo.get_monitor_geometry(self.hud_monitor) monitor_x = monitor_geo[0] monitor_w = monitor_geo[2] - hud_x = self.hud.geometry[0] - hud_w = self.hud.geometry[2] + hud_x = self.unity.hud.geometry[0] + hud_w = self.unity.hud.geometry[2] if self.hud_locked: self.assertThat(hud_x, GreaterThan(monitor_x)) @@ -618,16 +618,16 @@ class HudVisualTests(HudTestsBase): def test_hud_is_locked_to_launcher(self): """Tests if the HUD is locked to launcher as we expect or not.""" - self.hud.ensure_visible() - self.assertThat(self.hud.is_locked_launcher, Eventually(Equals(self.hud_locked))) + self.unity.hud.ensure_visible() + self.assertThat(self.unity.hud.is_locked_launcher, Eventually(Equals(self.hud_locked))) def test_hud_icon_is_shown(self): """Tests that the correct HUD icon is shown.""" - self.hud.ensure_visible() - hud_launcher_icon = self.hud.get_launcher_icon() - hud_embedded_icon = self.hud.get_embedded_icon() + self.unity.hud.ensure_visible() + hud_launcher_icon = self.unity.hud.get_launcher_icon() + hud_embedded_icon = self.unity.hud.get_embedded_icon() - if self.hud.is_locked_launcher: + if self.unity.hud.is_locked_launcher: self.assertThat(hud_launcher_icon.visible, Eventually(Equals(True))) self.assertTrue(hud_launcher_icon.is_on_monitor(self.hud_monitor)) self.assertTrue(hud_launcher_icon.active) @@ -645,18 +645,18 @@ class HudVisualTests(HudTestsBase): self.close_all_app("Calculator") calc = self.start_app("Calculator") self.assertTrue(calc.is_active) - self.hud.ensure_visible() + self.unity.hud.ensure_visible() - self.assertThat(self.hud.icon.icon_name, Eventually(Equals(calc.icon))) + self.assertThat(self.unity.hud.icon.icon_name, Eventually(Equals(calc.icon))) def test_hud_icon_shows_the_ubuntu_emblem_on_empty_desktop(self): """When in 'show desktop' mode the hud icon must be the BFB icon.""" self.start_placeholder_app() - self.window_manager.enter_show_desktop() - self.addCleanup(self.window_manager.leave_show_desktop) - self.hud.ensure_visible() + self.unity.window_manager.enter_show_desktop() + self.addCleanup(self.unity.window_manager.leave_show_desktop) + self.unity.hud.ensure_visible() - self.assertThat(self.hud.icon.icon_name, Eventually(EndsWith("launcher_bfb.png"))) + self.assertThat(self.unity.hud.icon.icon_name, Eventually(EndsWith("launcher_bfb.png"))) def test_switch_dash_hud_does_not_break_the_focused_application_emblem(self): """Switching from Dash to HUD must still show the correct HUD icon.""" @@ -664,10 +664,10 @@ class HudVisualTests(HudTestsBase): calc = self.start_app("Calculator") self.assertTrue(calc.is_active) - self.dash.ensure_visible() - self.hud.ensure_visible() + self.unity.dash.ensure_visible() + self.unity.hud.ensure_visible() - self.assertThat(self.hud.icon.icon_name, Eventually(Equals(calc.icon))) + self.assertThat(self.unity.hud.icon.icon_name, Eventually(Equals(calc.icon))) def test_switch_hud_dash_does_not_break_the_focused_application_emblem(self): """Switching from HUD to Dash and back must still show the correct HUD icon.""" @@ -675,10 +675,10 @@ class HudVisualTests(HudTestsBase): calc = self.start_app("Calculator") self.assertTrue(calc.is_active) - self.hud.ensure_visible() - self.dash.ensure_visible() - self.hud.ensure_visible() - self.assertThat(self.hud.icon.icon_name, Eventually(Equals(calc.icon))) + self.unity.hud.ensure_visible() + self.unity.dash.ensure_visible() + self.unity.hud.ensure_visible() + self.assertThat(self.unity.hud.icon.icon_name, Eventually(Equals(calc.icon))) def test_dash_hud_only_uses_icon_from_current_desktop(self): """ @@ -691,16 +691,16 @@ class HudVisualTests(HudTestsBase): self.start_placeholder_app() initial_workspace = self.workspace.current_workspace self.addCleanup(self.workspace.switch_to, initial_workspace) - self.window_manager.enter_show_desktop() - self.addCleanup(self.window_manager.leave_show_desktop) + self.unity.window_manager.enter_show_desktop() + self.addCleanup(self.unity.window_manager.leave_show_desktop) calc = self.start_app("Calculator") self.assertTrue(calc.is_active) self.workspace.switch_to((initial_workspace + 1) % self.workspace.num_workspaces) - self.dash.ensure_visible() - self.hud.ensure_visible() + self.unity.dash.ensure_visible() + self.unity.hud.ensure_visible() - self.assertThat(self.hud.icon.icon_name, Eventually(EndsWith("launcher_bfb.png"))) + self.assertThat(self.unity.hud.icon.icon_name, Eventually(EndsWith("launcher_bfb.png"))) class HudAlternativeKeybindingTests(HudTestsBase): @@ -710,14 +710,14 @@ class HudAlternativeKeybindingTests(HudTestsBase): self.set_unity_option("show_hud", "<Super>h") # Don't use reveal_hud, but be explicit in the keybindings. self.keyboard.press_and_release("Super+h") - self.assertThat(self.hud.visible, Eventually(Equals(True))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(True))) def test_ctrl_alt_h(self): """Test hud reveal on <Contrl><Alt>h.""" self.set_unity_option("show_hud", "<Control><Alt>h") # Don't use reveal_hud, but be explicit in the keybindings. self.keyboard.press_and_release("Ctrl+Alt+h") - self.assertThat(self.hud.visible, Eventually(Equals(True))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(True))) class HudCrossMonitorsTests(HudTestsBase): @@ -733,27 +733,27 @@ class HudCrossMonitorsTests(HudTestsBase): the keyboard is used. The hud must not move to that monitor. """ - current_monitor = self.hud.ideal_monitor + current_monitor = self.unity.hud.ideal_monitor - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.screen_geo.move_mouse_to_monitor((current_monitor + 1) % self.screen_geo.get_num_monitors()) self.keyboard.type("abc") - self.assertThat(self.hud.ideal_monitor, Eventually(Equals(current_monitor))) + self.assertThat(self.unity.hud.ideal_monitor, Eventually(Equals(current_monitor))) def test_hud_close_on_cross_monitor_click(self): """Hud must close when clicking on a window in a different screen.""" - self.addCleanup(self.hud.ensure_hidden) + self.addCleanup(self.unity.hud.ensure_hidden) for monitor in range(self.screen_geo.get_num_monitors()-1): self.screen_geo.move_mouse_to_monitor(monitor) - self.hud.ensure_visible() + self.unity.hud.ensure_visible() self.screen_geo.move_mouse_to_monitor(monitor+1) sleep(.5) self.mouse.click() - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) diff --git a/tests/autopilot/unity/tests/test_ibus.py b/tests/autopilot/unity/tests/test_ibus.py index 400807f97..eeb57707d 100644 --- a/tests/autopilot/unity/tests/test_ibus.py +++ b/tests/autopilot/unity/tests/test_ibus.py @@ -20,8 +20,6 @@ from autopilot.emulators.ibus import ( from autopilot.matchers import Eventually from autopilot.testcase import multiply_scenarios from testtools.matchers import Equals, NotEquals -from unity.emulators.dash import Dash -from unity.emulators.hud import Hud from unity.tests import UnityTestCase @@ -94,13 +92,13 @@ class IBusWidgetScenariodTests(IBusTests): # Use lambdas here so we don't require DBus service at module import time. scenarios = [ - ('dash', {'widget': lambda: Dash()}), - ('hud', {'widget': lambda: Hud()}) + ('dash', {'widget': 'dash'}), + ('hud', {'widget': 'hud'}) ] def do_ibus_test(self): """Do the basic IBus test on self.widget using self.input and self.result.""" - widget = self.widget() + widget = getattr(self.unity, self.widget) widget.ensure_visible() self.addCleanup(widget.ensure_hidden) self.activate_ibus(widget.searchbar) @@ -195,26 +193,26 @@ class IBusTestsPinyinIgnore(IBusTests): self.activate_input_engine_or_skip(self.engine_name) def test_ignore_key_events_on_dash(self): - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) - self.activate_ibus(self.dash.searchbar) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) + self.activate_ibus(self.unity.dash.searchbar) self.keyboard.type("cipan") self.keyboard.press_and_release("Tab") self.keyboard.type(" ") - self.deactivate_ibus(self.dash.searchbar) - self.assertThat(self.dash.search_string, Eventually(NotEquals(" "))) + self.deactivate_ibus(self.unity.dash.searchbar) + self.assertThat(self.unity.dash.search_string, Eventually(NotEquals(" "))) def test_ignore_key_events_on_hud(self): - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.keyboard.type("a") - self.activate_ibus(self.hud.searchbar) + self.activate_ibus(self.unity.hud.searchbar) self.keyboard.type("riqi") - old_selected = self.hud.selected_button + old_selected = self.unity.hud.selected_button self.keyboard.press_and_release("Down") - new_selected = self.hud.selected_button - self.deactivate_ibus(self.hud.searchbar) + new_selected = self.unity.hud.selected_button + self.deactivate_ibus(self.unity.hud.searchbar) self.assertEqual(old_selected, new_selected) @@ -230,26 +228,26 @@ class IBusTestsAnthyIgnore(IBusTests): self.activate_input_engine_or_skip(self.engine_name) def test_ignore_key_events_on_dash(self): - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) - self.activate_ibus(self.dash.searchbar) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) + self.activate_ibus(self.unity.dash.searchbar) self.keyboard.type("shisutemu ") self.keyboard.press_and_release("Tab") self.keyboard.press_and_release("Ctrl+j") - self.deactivate_ibus(self.dash.searchbar) - dash_search_string = self.dash.search_string + self.deactivate_ibus(self.unity.dash.searchbar) + dash_search_string = self.unity.dash.search_string self.assertNotEqual("", dash_search_string) def test_ignore_key_events_on_hud(self): - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.keyboard.type("a") - self.activate_ibus(self.hud.searchbar) + self.activate_ibus(self.unity.hud.searchbar) self.keyboard.type("hiduke") - old_selected = self.hud.selected_button + old_selected = self.unity.hud.selected_button self.keyboard.press_and_release("Down") - new_selected = self.hud.selected_button - self.deactivate_ibus(self.hud.searchbar) + new_selected = self.unity.hud.selected_button + self.deactivate_ibus(self.unity.hud.searchbar) self.assertEqual(old_selected, new_selected) diff --git a/tests/autopilot/unity/tests/test_panel.py b/tests/autopilot/unity/tests/test_panel.py index 2c6b12f54..a8aeb1f98 100644 --- a/tests/autopilot/unity/tests/test_panel.py +++ b/tests/autopilot/unity/tests/test_panel.py @@ -43,7 +43,7 @@ class PanelTestsBase(UnityTestCase): def setUp(self): super(PanelTestsBase, self).setUp() - self.panel = self.panels.get_panel_for_monitor(self.panel_monitor) + self.panel = self.unity.panels.get_panel_for_monitor(self.panel_monitor) self.panel.move_mouse_below_the_panel() self.addCleanup(self.panel.move_mouse_below_the_panel) @@ -156,8 +156,8 @@ class PanelTitleTests(PanelTestsBase): """With no windows shown, the panel must display the default title.""" gettext.install("unity", unicode=True) self.start_placeholder_app() - self.window_manager.enter_show_desktop() - self.addCleanup(self.window_manager.leave_show_desktop) + self.unity.window_manager.enter_show_desktop() + self.addCleanup(self.unity.window_manager.leave_show_desktop) self.assertThat(self.panel.desktop_is_active, Eventually(Equals(True))) self.assertThat(self.panel.title, Equals(_("Ubuntu Desktop"))) @@ -200,8 +200,8 @@ class PanelTitleTests(PanelTestsBase): text_win = self.open_new_application_window("Text Editor", maximized=True) self.open_new_application_window("Calculator", maximized=False) - icon = self.launcher.model.get_icon(desktop_id=text_win.application.desktop_file) - launcher = self.launcher.get_launcher_for_monitor(self.panel_monitor) + icon = self.unity.launcher.model.get_icon(desktop_id=text_win.application.desktop_file) + launcher = self.unity.launcher.get_launcher_for_monitor(self.panel_monitor) launcher.click_launcher_icon(icon) self.assertProperty(text_win, is_focused=True) @@ -224,9 +224,9 @@ class PanelTitleTests(PanelTestsBase): text_win = self.open_new_application_window("Text Editor") current_title = self.panel.title - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) - self.switcher.next_icon() + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) + self.unity.switcher.next_icon() self.assertThat(self.panel.title, Eventually(Equals(current_title))) @@ -245,8 +245,8 @@ class PanelWindowButtonsTests(PanelTestsBase): def test_window_buttons_dont_show_on_empty_desktop(self): """Tests that the window buttons are not shown on clean desktop.""" self.start_placeholder_app() - self.window_manager.enter_show_desktop() - self.addCleanup(self.window_manager.leave_show_desktop) + self.unity.window_manager.enter_show_desktop() + self.addCleanup(self.unity.window_manager.leave_show_desktop) self.assertThat(self.panel.window_buttons_shown, Eventually(Equals(False))) @@ -292,8 +292,8 @@ class PanelWindowButtonsTests(PanelTestsBase): def test_window_buttons_show_with_dash(self): """Window buttons must be shown when the dash is open.""" - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) self.assertThat(self.panel.window_buttons_shown, Eventually(Equals(True))) self.assertWinButtonsInOverlayMode(True) @@ -303,29 +303,29 @@ class PanelWindowButtonsTests(PanelTestsBase): buttons must still work in the dash.""" self.set_unity_option("icon_size", 25) - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) - desired_max = not self.dash.view.dash_maximized + desired_max = not self.unity.dash.view.dash_maximized if desired_max: self.panel.window_buttons.maximize.mouse_click() else: self.panel.window_buttons.unmaximize.mouse_click() - self.assertThat(self.dash.view.dash_maximized, Eventually(Equals(desired_max))) + self.assertThat(self.unity.dash.view.dash_maximized, Eventually(Equals(desired_max))) def test_window_buttons_show_with_hud(self): """Window buttons must be shown when the HUD is open.""" - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.assertThat(self.panel.window_buttons_shown, Eventually(Equals(True))) self.assertWinButtonsInOverlayMode(True) def test_window_buttons_update_visual_state(self): """Window button must update its state in response to mouse events.""" - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) button = self.panel.window_buttons.close self.assertThat(button.visual_state, Eventually(Equals("normal"))) @@ -341,8 +341,8 @@ class PanelWindowButtonsTests(PanelTestsBase): """Window buttons must ignore clicks when the mouse released outside their area. """ - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) button = self.panel.window_buttons.close button.mouse_move_to() @@ -352,7 +352,7 @@ class PanelWindowButtonsTests(PanelTestsBase): self.mouse.release() self.assertThat(button.visual_state, Eventually(Equals("normal"))) - self.assertThat(self.hud.visible, Eventually(Equals(True))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(True))) def test_window_buttons_close_button_works_for_window(self): """Close window button must actually closes a window.""" @@ -441,43 +441,43 @@ class PanelWindowButtonsTests(PanelTestsBase): def test_window_buttons_close_button_works_for_hud(self): """Tests that the window 'Close' actually closes the HUD.""" - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.panel.window_buttons.close.mouse_click() - self.assertThat(self.hud.visible, Eventually(Equals(False))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(False))) def test_minimize_button_disabled_for_hud(self): """Minimize button must be disabled for the HUD.""" - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.assertThat(self.panel.window_buttons.minimize.enabled, Eventually(Equals(False))) def test_minimize_button_does_nothing_for_hud(self): """Minimize button must not affect the Hud.""" - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.panel.window_buttons.minimize.mouse_click() - self.assertThat(self.hud.visible, Eventually(Equals(True))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(True))) def test_maximize_button_disabled_for_hud(self): """Maximize button must be disabled for the HUD.""" - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.assertThat(self.panel.window_buttons.maximize.enabled, Eventually(Equals(False))) def test_maximize_button_does_nothing_for_hud(self): """Maximize button must not affect the Hud.""" - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.panel.window_buttons.maximize.mouse_click() - self.assertThat(self.hud.visible, Eventually(Equals(True))) + self.assertThat(self.unity.hud.visible, Eventually(Equals(True))) def test_hud_maximize_button_does_not_change_dash_form_factor(self): """Clicking on the 'Maximize' button of the HUD must not change the dash @@ -485,39 +485,39 @@ class PanelWindowButtonsTests(PanelTestsBase): See bug #939054 """ - inital_form_factor = self.dash.view.form_factor - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + inital_form_factor = self.unity.dash.view.form_factor + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.panel.window_buttons.maximize.mouse_click() # long sleep here to make sure that any change that might happen will # have already happened. sleep(5) - self.assertThat(self.dash.view.form_factor, Equals(inital_form_factor)) + self.assertThat(self.unity.dash.view.form_factor, Equals(inital_form_factor)) def test_window_buttons_close_button_works_for_dash(self): """Tests that the window 'Close' actually closes the Dash.""" - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) self.panel.window_buttons.close.mouse_click() - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) def test_minimize_button_disabled_for_dash(self): """Tests that the 'Minimize' button is disabled for the dash.""" - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) self.assertThat(self.panel.window_buttons.minimize.enabled, Eventually(Equals(False))) def test_minimize_button_does_nothing_for_dash(self): """Tests that the 'Minimize' button is disabled for the dash.""" - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) self.panel.window_buttons.minimize.mouse_click() sleep(5) - self.assertThat(self.dash.visible, Eventually(Equals(True))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(True))) def test_window_buttons_maximization_buttons_works_for_dash(self): """'Maximize' and 'Restore' buttons (when both enabled) must work as expected.""" @@ -529,14 +529,14 @@ class PanelWindowButtonsTests(PanelTestsBase): # this test out and make it suck less. # # For your sanity I have annotated it with comments. - self.dash.ensure_visible() + self.unity.dash.ensure_visible() self.addCleanup(self.panel.window_buttons.close.mouse_click) unmaximize = self.panel.window_buttons.unmaximize maximize = self.panel.window_buttons.maximize # "netbook" means "dash is maximised" - dash_maximised = (self.dash.view.form_factor == "netbook") + dash_maximised = (self.unity.dash.view.form_factor == "netbook") # this if statement will trigger only when we're on very small screens, # where it doesn't make sense to have the dash anything other than @@ -545,7 +545,7 @@ class PanelWindowButtonsTests(PanelTestsBase): unmaximize.mouse_click() # nice long sleep to make sure that any changes have time to process. sleep(5) - self.assertThat(self.dash.view.form_factor, Equals("netbook")) + self.assertThat(self.unity.dash.view.form_factor, Equals("netbook")) else: # we are able to resize the dash. # maximise and unmaximise (restore) buttons are shown in the same place @@ -571,9 +571,9 @@ class PanelWindowButtonsTests(PanelTestsBase): self.assertThat(active_button.visible, Eventually(Equals(False))) if dash_maximised: - self.assertThat(self.dash.view.form_factor, Eventually(Equals("desktop"))) + self.assertThat(self.unity.dash.view.form_factor, Eventually(Equals("desktop"))) else: - self.assertThat(self.dash.view.form_factor, Eventually(Equals("netbook"))) + self.assertThat(self.unity.dash.view.form_factor, Eventually(Equals("netbook"))) self.addCleanup(active_button.mouse_click) inactive_button.mouse_click() @@ -582,9 +582,9 @@ class PanelWindowButtonsTests(PanelTestsBase): self.assertThat(inactive_button.visible, Eventually(Equals(False))) if dash_maximised: - self.assertThat(self.dash.view.form_factor, Eventually(Equals("netbook"))) + self.assertThat(self.unity.dash.view.form_factor, Eventually(Equals("netbook"))) else: - self.assertThat(self.dash.view.form_factor, Eventually(Equals("desktop"))) + self.assertThat(self.unity.dash.view.form_factor, Eventually(Equals("desktop"))) def test_minimize_button_disabled_for_non_minimizable_windows(self): """Minimize button must be disabled for windows that don't support minimization.""" @@ -645,14 +645,14 @@ class PanelWindowButtonsTests(PanelTestsBase): you must still be able to type into the Hud. """ - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.keyboard.type("Hello") self.panel.window_buttons.minimize.mouse_click() self.keyboard.type("World") - self.assertThat(self.hud.search_string, Eventually(Equals("HelloWorld"))) + self.assertThat(self.unity.hud.search_string, Eventually(Equals("HelloWorld"))) def test_double_click_unmaximize_window(self): """Double clicking the grab area must unmaximize a maximized window.""" @@ -915,8 +915,8 @@ class PanelMenuTests(PanelTestsBase): def test_menus_dont_show_with_dash(self): """Tests that menus are not showing when opening the dash.""" self.open_new_application_window("Text Editor", maximized=True) - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) self.assertThat(self.panel.menus_shown, Eventually(Equals(False))) @@ -924,8 +924,8 @@ class PanelMenuTests(PanelTestsBase): def test_menus_dont_show_with_hud(self): """Tests that menus are not showing when opening the HUD.""" self.open_new_application_window("Text Editor", maximized=True) - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.assertThat(self.panel.menus_shown, Eventually(Equals(False))) @@ -985,13 +985,13 @@ class PanelIndicatorEntryTests(PanelTestsBase): """When the dash is open and a click is on an indicator the dash must close and the indicator must open. """ - self.dash.ensure_visible() + self.unity.dash.ensure_visible() indicator = self.panel.indicators.get_indicator_by_name_hint("indicator-session") self.mouse_open_indicator(indicator) self.assertThat(indicator.active, Eventually(Equals(True))) - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) class PanelKeyNavigationTests(PanelTestsBase): @@ -1130,15 +1130,15 @@ class PanelGrabAreaTests(PanelTestsBase): def test_panels_dont_steal_keynav_foucs_from_hud(self): """On a mouse click event on the panel you must still be able to type into the Hud.""" - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.keyboard.type("Hello") self.move_mouse_over_grab_area() self.mouse.click() self.keyboard.type("World") - self.assertThat(self.hud.search_string, Eventually(Equals("HelloWorld"))) + self.assertThat(self.unity.hud.search_string, Eventually(Equals("HelloWorld"))) class PanelCrossMonitorsTests(PanelTestsBase): @@ -1159,10 +1159,10 @@ class PanelCrossMonitorsTests(PanelTestsBase): self.screen_geo.drag_window_to_monitor(calc_win, monitor) if prev_monitor: - prev_panel = self.panels.get_panel_for_monitor(prev_monitor) + prev_panel = self.unity.panels.get_panel_for_monitor(prev_monitor) self.assertThat(prev_panel.active, Eventually(Equals(False))) - panel = self.panels.get_panel_for_monitor(monitor) + panel = self.unity.panels.get_panel_for_monitor(monitor) self.assertThat(panel.active, Eventually(Equals(True))) self.assertThat(panel.title, Eventually(Equals(calc_win.application.name))) @@ -1176,7 +1176,7 @@ class PanelCrossMonitorsTests(PanelTestsBase): self.sleep_menu_settle_period() for monitor in range(0, self.screen_geo.get_num_monitors()): - panel = self.panels.get_panel_for_monitor(monitor) + panel = self.unity.panels.get_panel_for_monitor(monitor) panel.move_mouse_over_window_buttons() self.sleep_menu_settle_period() @@ -1190,13 +1190,13 @@ class PanelCrossMonitorsTests(PanelTestsBase): """Window buttons must not show on the panels other than the one where the dash is opened. """ - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) for monitor in range(0, self.screen_geo.get_num_monitors()): - panel = self.panels.get_panel_for_monitor(monitor) + panel = self.unity.panels.get_panel_for_monitor(monitor) - if self.dash.monitor == monitor: + if self.unity.dash.monitor == monitor: self.assertThat(panel.window_buttons_shown, Eventually(Equals(True))) else: self.assertThat(panel.window_buttons_shown, Eventually(Equals(False))) @@ -1205,13 +1205,13 @@ class PanelCrossMonitorsTests(PanelTestsBase): """Window buttons must not show on the panels other than the one where the hud is opened. """ - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) for monitor in range(0, self.screen_geo.get_num_monitors()): - panel = self.panels.get_panel_for_monitor(monitor) + panel = self.unity.panels.get_panel_for_monitor(monitor) - if self.hud.monitor == monitor: + if self.unity.hud.monitor == monitor: self.assertThat(panel.window_buttons_shown, Eventually(Equals(True))) else: self.assertThat(panel.window_buttons_shown, Eventually(Equals(False))) @@ -1225,7 +1225,7 @@ class PanelCrossMonitorsTests(PanelTestsBase): text_win = self.open_new_application_window("Text Editor", maximized=True) for monitor in range(self.screen_geo.get_num_monitors()): - panel = self.panels.get_panel_for_monitor(monitor) + panel = self.unity.panels.get_panel_for_monitor(monitor) if monitor != text_win.monitor: panel.window_buttons.close.mouse_move_to() @@ -1241,7 +1241,7 @@ class PanelCrossMonitorsTests(PanelTestsBase): text_win = self.open_new_application_window("Text Editor", maximized=True) for monitor in range(self.screen_geo.get_num_monitors()): - panel = self.panels.get_panel_for_monitor(monitor) + panel = self.unity.panels.get_panel_for_monitor(monitor) if monitor != text_win.monitor: panel.window_buttons.minimize.mouse_click() @@ -1256,7 +1256,7 @@ class PanelCrossMonitorsTests(PanelTestsBase): text_win = self.open_new_application_window("Text Editor", maximized=True) for monitor in range(0, self.screen_geo.get_num_monitors()): - panel = self.panels.get_panel_for_monitor(monitor) + panel = self.unity.panels.get_panel_for_monitor(monitor) if monitor != text_win.monitor: panel.window_buttons.unmaximize.mouse_click() @@ -1265,12 +1265,12 @@ class PanelCrossMonitorsTests(PanelTestsBase): def test_hovering_indicators_on_multiple_monitors(self): """Opening an indicator entry and then hovering others entries must open them.""" text_win = self.open_new_application_window("Text Editor") - panel = self.panels.get_panel_for_monitor(text_win.monitor) + panel = self.unity.panels.get_panel_for_monitor(text_win.monitor) indicator = panel.indicators.get_indicator_by_name_hint("indicator-session") self.mouse_open_indicator(indicator) for monitor in range(0, self.screen_geo.get_num_monitors()): - panel = self.panels.get_panel_for_monitor(monitor) + panel = self.unity.panels.get_panel_for_monitor(monitor) entries = panel.get_indicator_entries(include_hidden_menus=True) self.assertThat(len(entries), GreaterThan(0)) diff --git a/tests/autopilot/unity/tests/test_quicklist.py b/tests/autopilot/unity/tests/test_quicklist.py index 2ca1271a7..bf6224a76 100644 --- a/tests/autopilot/unity/tests/test_quicklist.py +++ b/tests/autopilot/unity/tests/test_quicklist.py @@ -32,7 +32,7 @@ class QuicklistActionTests(UnityTestCase): Returns the quicklist that was opened. """ - launcher = self.launcher.get_launcher_for_monitor(0) + launcher = self.unity.launcher.get_launcher_for_monitor(0) launcher.click_launcher_icon(launcher_icon, button=3) self.addCleanup(self.keyboard.press_and_release, "Escape") self.assertThat(launcher_icon.get_quicklist, Eventually(NotEquals(None))) @@ -47,7 +47,7 @@ class QuicklistActionTests(UnityTestCase): desktop_file = os.path.join('/usr/share/applications', desktop_id) de = DesktopEntry(desktop_file) # get the launcher icon from the launcher: - launcher_icon = self.launcher.model.get_icon(desktop_id=desktop_id) + launcher_icon = self.unity.launcher.model.get_icon(desktop_id=desktop_id) self.assertThat(launcher_icon, NotEquals(None)) # open the icon quicklist, and get all the text labels: @@ -78,9 +78,9 @@ class QuicklistActionTests(UnityTestCase): self.assertVisibleWindowStack([char_win2, calc_win, char_win1]) - char_icon = self.launcher.model.get_icon( + char_icon = self.unity.launcher.model.get_icon( desktop_id=char_win1.application.desktop_file) - calc_icon = self.launcher.model.get_icon( + calc_icon = self.unity.launcher.model.get_icon( desktop_id=calc_win.application.desktop_file) calc_ql = self.open_quicklist_for_icon(calc_icon) @@ -106,15 +106,15 @@ class QuicklistActionTests(UnityTestCase): self.assertVisibleWindowStack([char_win2, char_win1]) self.assertProperty(char_win2, is_focused=True) - char_icon = self.launcher.model.get_icon(desktop_id=char_app.desktop_file) + char_icon = self.unity.launcher.model.get_icon(desktop_id=char_app.desktop_file) char_ql = self.open_quicklist_for_icon(char_icon) app_item = char_ql.get_quicklist_application_item(char_app.name) self.addCleanup(self.keybinding, "spread/cancel") app_item.mouse_click() - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) - self.assertThat(self.window_manager.scale_active_for_group, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active_for_group, Eventually(Equals(True))) def test_quicklist_item_triggered_closes_dash(self): """When any quicklist item is triggered it must close the dash.""" @@ -122,38 +122,38 @@ class QuicklistActionTests(UnityTestCase): calc_win = self.start_app_window("Calculator") self.assertProperty(calc_win, is_focused=True) - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) - calc_icon = self.launcher.model.get_icon( + calc_icon = self.unity.launcher.model.get_icon( desktop_id=calc_win.application.desktop_file) self.open_quicklist_for_icon(calc_icon) self.keyboard.press_and_release("Down") self.keyboard.press_and_release("Enter") - self.assertThat(self.dash.visible, Eventually(Equals(False))) + self.assertThat(self.unity.dash.visible, Eventually(Equals(False))) def test_quicklist_closes_when_hud_opens(self): """When a quicklist is open you must still be able to open the Hud.""" calc = self.start_app("Calculator") - calc_icon = self.launcher.model.get_icon(desktop_id=calc.desktop_file) + calc_icon = self.unity.launcher.model.get_icon(desktop_id=calc.desktop_file) self.open_quicklist_for_icon(calc_icon) - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) - self.assertThat(self.hud.visible, Eventually(Equals(True))) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) + self.assertThat(self.unity.hud.visible, Eventually(Equals(True))) def test_quicklist_closes_when_dash_opens(self): """When the quicklist is open you must still be able to open the dash.""" calc = self.start_app("Calculator") - calc_icon = self.launcher.model.get_icon(desktop_id=calc.desktop_file) + calc_icon = self.unity.launcher.model.get_icon(desktop_id=calc.desktop_file) self.open_quicklist_for_icon(calc_icon) - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) - self.assertThat(self.dash.visible, Eventually(Equals(True))) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) + self.assertThat(self.unity.dash.visible, Eventually(Equals(True))) def test_right_click_opens_quicklist_if_already_open(self): """A right click to another icon in the launcher must @@ -165,9 +165,9 @@ class QuicklistActionTests(UnityTestCase): calc_win = self.start_app_window("Calculator") mahj_win = self.start_app_window("Mahjongg") - calc_icon = self.launcher.model.get_icon( + calc_icon = self.unity.launcher.model.get_icon( desktop_id=calc_win.application.desktop_file) - mahj_icon = self.launcher.model.get_icon( + mahj_icon = self.unity.launcher.model.get_icon( desktop_id=mahj_win.application.desktop_file) calc_ql = self.open_quicklist_for_icon(calc_icon) @@ -184,7 +184,7 @@ class QuicklistActionTests(UnityTestCase): calc_win = self.start_app_window("Calculator") - calc_icon = self.launcher.model.get_icon( + calc_icon = self.unity.launcher.model.get_icon( desktop_id=calc_win.application.desktop_file) calc_ql = self.open_quicklist_for_icon(calc_icon) @@ -201,7 +201,7 @@ class QuicklistKeyNavigationTests(UnityTestCase): super(QuicklistKeyNavigationTests, self).setUp() desktop_file = self.KNOWN_APPS["Text Editor"]["desktop-file"] - icon_refresh_fn = lambda : self.launcher.model.get_icon( + icon_refresh_fn = lambda : self.unity.launcher.model.get_icon( desktop_id=desktop_file) self.assertThat(icon_refresh_fn, Eventually(Equals(None))) @@ -210,7 +210,7 @@ class QuicklistKeyNavigationTests(UnityTestCase): self.assertThat(icon_refresh_fn, Eventually(NotEquals(None))) self.ql_launcher_icon = icon_refresh_fn() - self.ql_launcher = self.launcher.get_launcher_for_monitor(0) + self.ql_launcher = self.unity.launcher.get_launcher_for_monitor(0) def open_quicklist_with_mouse(self): """Opens a quicklist with the mouse.""" diff --git a/tests/autopilot/unity/tests/test_shopping_lens.py b/tests/autopilot/unity/tests/test_shopping_lens.py index 94d42a771..b808abb2a 100644 --- a/tests/autopilot/unity/tests/test_shopping_lens.py +++ b/tests/autopilot/unity/tests/test_shopping_lens.py @@ -29,13 +29,13 @@ class ShoppingLensTests(UnityTestCase): gettext.install("unity-lens-shopping") def tearDown(self): - self.dash.ensure_hidden() + self.unity.dash.ensure_hidden() super(ShoppingLensTests, self).tearDown() def test_no_results_in_home_lens_if_empty_search(self): """Test that the home lens contains no results if the search bar is empty.""" - self.dash.ensure_visible() - lens = self.dash.get_current_lens() + self.unity.dash.ensure_visible() + lens = self.unity.dash.get_current_lens() results_category = lens.get_category_by_name(_("More suggestions")) refresh_results_fn = lambda: len(results_category.get_results()) @@ -43,8 +43,8 @@ class ShoppingLensTests(UnityTestCase): def test_home_lens_has_shopping_results(self): """Test that the home lens contains results.""" - self.dash.ensure_visible() - lens = self.dash.get_current_lens() + self.unity.dash.ensure_visible() + lens = self.unity.dash.get_current_lens() self.keyboard.type("playstation") results_category = lens.get_category_by_name(_("More suggestions")) @@ -54,8 +54,8 @@ class ShoppingLensTests(UnityTestCase): def test_application_lens_has_shopping_results(self): """Test that the application lens contains results.""" - self.dash.reveal_application_lens() - lens = self.dash.get_current_lens() + self.unity.dash.reveal_application_lens() + lens = self.unity.dash.get_current_lens() self.keyboard.type("Text Editor") results_category = lens.get_category_by_name(_("More suggestions")) @@ -65,8 +65,8 @@ class ShoppingLensTests(UnityTestCase): def test_music_lens_has_shopping_results(self): """Test that the music lens contains results.""" - self.dash.reveal_music_lens() - lens = self.dash.get_current_lens() + self.unity.dash.reveal_music_lens() + lens = self.unity.dash.get_current_lens() self.keyboard.type("megadeth") results_category = lens.get_category_by_name(_("More suggestions")) @@ -76,8 +76,8 @@ class ShoppingLensTests(UnityTestCase): def test_preview_works_with_shopping_lens(self): """This test shows the dash preview works with shopping lens results.""" - self.dash.ensure_visible() - lens = self.dash.get_current_lens() + self.unity.dash.ensure_visible() + lens = self.unity.dash.get_current_lens() self.keyboard.type("playstation") results_category = lens.get_category_by_name(_("More suggestions")) @@ -88,14 +88,14 @@ class ShoppingLensTests(UnityTestCase): results = results_category.get_results() results[0].preview() - self.assertThat(self.dash.preview_displaying, Eventually(Equals(True))) + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(True))) def test_shopping_lens_preview_navigate_right(self): """This test shows that shopping lens results can open previews, then move to the next shopping result. """ - self.dash.ensure_visible() - lens = self.dash.get_current_lens() + self.unity.dash.ensure_visible() + lens = self.unity.dash.get_current_lens() self.keyboard.type("playstation") results_category = lens.get_category_by_name(_("More suggestions")) @@ -106,8 +106,8 @@ class ShoppingLensTests(UnityTestCase): results = results_category.get_results() results[0].preview() - self.assertThat(self.dash.preview_displaying, Eventually(Equals(True))) - self.preview_container = self.dash.view.get_preview_container() + self.assertThat(self.unity.dash.preview_displaying, Eventually(Equals(True))) + self.preview_container = self.unity.dash.view.get_preview_container() start_index = self.preview_container.relative_nav_index self.preview_container.navigate_right() diff --git a/tests/autopilot/unity/tests/test_shortcut_hint.py b/tests/autopilot/unity/tests/test_shortcut_hint.py index 951de4d58..e92561858 100644 --- a/tests/autopilot/unity/tests/test_shortcut_hint.py +++ b/tests/autopilot/unity/tests/test_shortcut_hint.py @@ -25,7 +25,7 @@ class BaseShortcutHintTests(UnityTestCase): self.DEFAULT_WIDTH = 970; self.DEFAULT_HEIGHT = 680; - self.shortcut_hint = self.get_shortcut_controller() + #self.shortcut_hint = self.get_shortcut_controller() self.set_unity_option('shortcut_overlay', True) self.set_unity_log_level("unity.shell.compiz", "DEBUG") self.skip_if_monitor_too_small() @@ -36,23 +36,23 @@ class BaseShortcutHintTests(UnityTestCase): monitor_geo = self.screen_geo.get_monitor_geometry(monitor) monitor_w = monitor_geo[2] monitor_h = monitor_geo[3] - launcher_width = self.launcher.get_launcher_for_monitor(monitor).geometry[2] - panel_height = self.panels.get_panel_for_monitor(monitor).geometry[3] + launcher_width = self.unity.launcher.get_launcher_for_monitor(monitor).geometry[2] + panel_height = self.unity.panels.get_panel_for_monitor(monitor).geometry[3] if ((monitor_w - launcher_width) <= self.DEFAULT_WIDTH or (monitor_h - panel_height) <= self.DEFAULT_HEIGHT): self.skipTest("This test requires a bigger screen, to show the ShortcutHint") - def get_shortcut_controller(self): - controllers = ShortcutController.get_all_instances() - self.assertThat(len(controllers), Equals(1)) - return controllers[0] + # def get_shortcut_controller(self): + # controllers = ShortcutController.get_all_instances() + # self.assertThat(len(controllers), Equals(1)) + # return controllers[0] def get_launcher(self): # We could parameterise this so all tests run on both monitors (if MM is # set up), but I think it's fine to just always use monitor primary monitor: monitor = self.screen_geo.get_primary_monitor() - return self.launcher.get_launcher_for_monitor(monitor) + return self.unity.launcher.get_launcher_for_monitor(monitor) class ShortcutHintTests(BaseShortcutHintTests): @@ -60,39 +60,39 @@ class ShortcutHintTests(BaseShortcutHintTests): def test_shortcut_hint_reveal(self): """Test that the shortcut hint is shown.""" - self.shortcut_hint.show() - self.addCleanup(self.shortcut_hint.ensure_hidden) - self.assertThat(self.shortcut_hint.visible, Eventually(Equals(True))) + self.unity.shortcut_hint.show() + self.addCleanup(self.unity.shortcut_hint.ensure_hidden) + self.assertThat(self.unity.shortcut_hint.visible, Eventually(Equals(True))) def test_shortcut_hint_reveal_timeout(self): """Shortcut hint must be shown after a sufficient timeout.""" - timeout = self.shortcut_hint.get_show_timeout() - self.shortcut_hint.show() - self.addCleanup(self.shortcut_hint.ensure_hidden) + timeout = self.unity.shortcut_hint.get_show_timeout() + self.unity.shortcut_hint.show() + self.addCleanup(self.unity.shortcut_hint.ensure_hidden) sleep(timeout/2.0) - self.assertThat(self.shortcut_hint.visible, Equals(False)) + self.assertThat(self.unity.shortcut_hint.visible, Equals(False)) # This should happen after 3/4 of 'timeout': - self.assertThat(self.shortcut_hint.visible, Eventually(Equals(True))) + self.assertThat(self.unity.shortcut_hint.visible, Eventually(Equals(True))) def test_shortcut_hint_unreveal(self): """Shortcut hint must hide when keys are released.""" - self.shortcut_hint.ensure_visible() - self.shortcut_hint.hide() - self.assertThat(self.shortcut_hint.visible, Eventually(Equals(False))) + self.unity.shortcut_hint.ensure_visible() + self.unity.shortcut_hint.hide() + self.assertThat(self.unity.shortcut_hint.visible, Eventually(Equals(False))) def test_shortcut_hint_cancel(self): """Shortcut hint must hide when cancelled.""" - self.shortcut_hint.ensure_visible() - self.shortcut_hint.cancel() - self.assertThat(self.shortcut_hint.visible, Eventually(Equals(False))) + self.unity.shortcut_hint.ensure_visible() + self.unity.shortcut_hint.cancel() + self.assertThat(self.unity.shortcut_hint.visible, Eventually(Equals(False))) def test_shortcut_hint_no_blur(self): """""" - self.shortcut_hint.ensure_visible() - self.addCleanup(self.shortcut_hint.ensure_hidden) + self.unity.shortcut_hint.ensure_visible() + self.addCleanup(self.unity.shortcut_hint.ensure_hidden) - self.assertThat(self.shortcut_hint.get_shortcut_view().bg_texture_is_valid, Eventually(Equals(True))) + self.assertThat(self.unity.shortcut_hint.get_shortcut_view().bg_texture_is_valid, Eventually(Equals(True))) class ShortcutHintInteractionsTests(BaseShortcutHintTests): @@ -100,39 +100,39 @@ class ShortcutHintInteractionsTests(BaseShortcutHintTests): def test_shortcut_hint_hide_using_unity_shortcuts(self): """Unity shortcuts (like expo) must hide the shortcut hint.""" - self.shortcut_hint.ensure_visible() - self.addCleanup(self.shortcut_hint.ensure_hidden) + self.unity.shortcut_hint.ensure_visible() + self.addCleanup(self.unity.shortcut_hint.ensure_hidden) self.keybinding_tap("expo/start") self.addCleanup(self.keybinding, "expo/cancel") def test_shortcut_hint_hide_pressing_modifiers(self): """Pressing a modifer key must hide the shortcut hint.""" - self.shortcut_hint.ensure_visible() - self.addCleanup(self.shortcut_hint.ensure_hidden) + self.unity.shortcut_hint.ensure_visible() + self.addCleanup(self.unity.shortcut_hint.ensure_hidden) self.keyboard.press('Control') - self.assertThat(self.shortcut_hint.visible, Eventually(Equals(False))) + self.assertThat(self.unity.shortcut_hint.visible, Eventually(Equals(False))) def test_launcher_switcher_next_doesnt_show_shortcut_hint(self): """Super+Tab switcher cycling forward must not show shortcut hint.""" - switcher_timeout = self.shortcut_hint.get_show_timeout() - self.shortcut_hint.show() - self.addCleanup(self.shortcut_hint.ensure_hidden) + switcher_timeout = self.unity.shortcut_hint.get_show_timeout() + self.unity.shortcut_hint.show() + self.addCleanup(self.unity.shortcut_hint.ensure_hidden) self.keybinding("launcher/switcher/next") self.keybinding("launcher/switcher/next") self.addCleanup(self.keyboard.press_and_release, "Escape") sleep(switcher_timeout * 2) - self.assertThat(self.shortcut_hint.visible, Equals(False)) + self.assertThat(self.unity.shortcut_hint.visible, Equals(False)) def test_launcher_switcher_prev_doesnt_show_shortcut_hint(self): """Super+Tab switcher cycling backwards must not show shortcut hint.""" - switcher_timeout = self.shortcut_hint.get_show_timeout() - self.shortcut_hint.show() - self.addCleanup(self.shortcut_hint.ensure_hidden) + switcher_timeout = self.unity.shortcut_hint.get_show_timeout() + self.unity.shortcut_hint.show() + self.addCleanup(self.unity.shortcut_hint.ensure_hidden) self.keybinding("launcher/switcher/next") self.addCleanup(self.keyboard.press_and_release, "Escape") @@ -140,7 +140,7 @@ class ShortcutHintInteractionsTests(BaseShortcutHintTests): self.keybinding("launcher/switcher/prev") sleep(switcher_timeout * 2) - self.assertThat(self.shortcut_hint.visible, Equals(False)) + self.assertThat(self.unity.shortcut_hint.visible, Equals(False)) def test_launcher_icons_hints_show_with_shortcut_hint(self): """When the shortcut hint is shown also the launcer's icons hints should @@ -148,10 +148,10 @@ class ShortcutHintInteractionsTests(BaseShortcutHintTests): """ launcher = self.get_launcher() - self.shortcut_hint.ensure_visible() - self.addCleanup(self.shortcut_hint.ensure_hidden) + self.unity.shortcut_hint.ensure_visible() + self.addCleanup(self.unity.shortcut_hint.ensure_hidden) - self.assertThat(self.shortcut_hint.visible, Equals(True)) + self.assertThat(self.unity.shortcut_hint.visible, Equals(True)) self.assertThat(launcher.shortcuts_shown, Equals(True)) def test_shortcut_hint_shows_with_launcher_icons_hints(self): @@ -164,4 +164,4 @@ class ShortcutHintInteractionsTests(BaseShortcutHintTests): self.addCleanup(launcher.keyboard_unreveal_launcher) self.assertThat(launcher.shortcuts_shown, Eventually(Equals(True))) - self.assertThat(self.shortcut_hint.visible, Eventually(Equals(True))) + self.assertThat(self.unity.shortcut_hint.visible, Eventually(Equals(True))) diff --git a/tests/autopilot/unity/tests/test_showdesktop.py b/tests/autopilot/unity/tests/test_showdesktop.py index e6469fb77..64f42595a 100644 --- a/tests/autopilot/unity/tests/test_showdesktop.py +++ b/tests/autopilot/unity/tests/test_showdesktop.py @@ -11,6 +11,7 @@ from __future__ import absolute_import from testtools import skip from time import sleep +from unity.emulators.switcher import SwitcherDirection from unity.tests import UnityTestCase @@ -35,8 +36,8 @@ class ShowDesktopTests(UnityTestCase): test_windows = self.launch_test_apps() # show desktop, verify all windows are hidden: - self.window_manager.enter_show_desktop() - self.addCleanup(self.window_manager.leave_show_desktop) + self.unity.window_manager.enter_show_desktop() + self.addCleanup(self.unity.window_manager.leave_show_desktop) for win in test_windows: self.assertProperty(win, is_valid=True) @@ -47,15 +48,15 @@ class ShowDesktopTests(UnityTestCase): test_windows = self.launch_test_apps() # show desktop, verify all windows are hidden: - self.window_manager.enter_show_desktop() - self.addCleanup(self.window_manager.leave_show_desktop) + self.unity.window_manager.enter_show_desktop() + self.addCleanup(self.unity.window_manager.leave_show_desktop) for win in test_windows: self.assertProperty(win, is_valid=True) self.assertProperty(win, is_hidden=True) # un-show desktop, verify all windows are shown: - self.window_manager.leave_show_desktop() + self.unity.window_manager.leave_show_desktop() for win in test_windows: self.assertProperty(win, is_valid=True) @@ -66,17 +67,17 @@ class ShowDesktopTests(UnityTestCase): charmap, calc = self.launch_test_apps() # show desktop, verify all windows are hidden: - self.window_manager.enter_show_desktop() - self.addCleanup(self.window_manager.leave_show_desktop) + self.unity.window_manager.enter_show_desktop() + self.addCleanup(self.unity.window_manager.leave_show_desktop) for win in (charmap, calc): self.assertProperty(win, is_valid=True) self.assertProperty(win, is_hidden=True) # We'll un-minimise the character map - find it's launcherIcon in the launcher: - charmap_icon = self.launcher.model.get_icon(desktop_id="gucharmap.desktop") + charmap_icon = self.unity.launcher.model.get_icon(desktop_id="gucharmap.desktop") if charmap_icon: - self.launcher.get_launcher_for_monitor(0).click_launcher_icon(charmap_icon) + self.unity.launcher.get_launcher_for_monitor(0).click_launcher_icon(charmap_icon) else: self.fail("Could not find launcher icon in launcher.") @@ -84,7 +85,7 @@ class ShowDesktopTests(UnityTestCase): self.assertProperty(calc, is_hidden=True) # hide desktop - now all windows should be visible: - self.window_manager.leave_show_desktop() + self.unity.window_manager.leave_show_desktop() for win in (charmap, calc): self.assertProperty(win, is_hidden=False) @@ -95,9 +96,9 @@ class ShowDesktopTests(UnityTestCase): test_windows = self.launch_test_apps() # show desktop, verify all windows are hidden: - self.switcher.initiate() - self.switcher.select_icon(self.switcher.DIRECTION_BACKWARDS, tooltip_text="Show Desktop") - self.addCleanup(self.window_manager.leave_show_desktop) + self.unity.switcher.initiate() + self.unity.switcher.select_icon(SwitcherDirection.BACKWARDS, tooltip_text="Show Desktop") + self.addCleanup(self.unity.window_manager.leave_show_desktop) self.switcher.select() for win in test_windows: diff --git a/tests/autopilot/unity/tests/test_spread.py b/tests/autopilot/unity/tests/test_spread.py index 9636b6de6..99d545de3 100644 --- a/tests/autopilot/unity/tests/test_spread.py +++ b/tests/autopilot/unity/tests/test_spread.py @@ -38,21 +38,21 @@ class SpreadTests(UnityTestCase): """Initiate the Spread for all windows""" self.addCleanup(self.keybinding, "spread/cancel") self.keybinding("spread/start") - self.assertThat(self.window_manager.scale_active, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active, Eventually(Equals(True))) def initiate_spread_for_application(self, desktop_id): """Initiate the Spread for windows of the given app""" - icon = self.launcher.model.get_icon(desktop_id=desktop_id) + icon = self.unity.launcher.model.get_icon(desktop_id=desktop_id) self.assertThat(icon, NotEquals(None)) - launcher = self.launcher.get_launcher_for_monitor(self.screen_geo.get_primary_monitor()) + launcher = self.unity.launcher.get_launcher_for_monitor(self.screen_geo.get_primary_monitor()) self.addCleanup(self.keybinding, "spread/cancel") launcher.click_launcher_icon(icon) - self.assertThat(self.window_manager.scale_active_for_group, Eventually(Equals(True))) + self.assertThat(self.unity.window_manager.scale_active_for_group, Eventually(Equals(True))) def assertWindowIsNotScaled(self, xid): """Assert that a window is not scaled""" - refresh_fn = lambda: xid in [w.xid for w in self.screen.scaled_windows] + refresh_fn = lambda: xid in [w.xid for w in self.unity.screen.scaled_windows] self.assertThat(refresh_fn, Eventually(Equals(False))) def assertWindowIsClosed(self, xid): @@ -68,8 +68,8 @@ class SpreadTests(UnityTestCase): [win1, win2] = self.start_test_application_windows("Calculator") self.initiate_spread_for_application(win1.application.desktop_file) - self.assertThat(lambda: len(self.screen.scaled_windows), Eventually(Equals(2))) - self.assertThat(lambda: (win1.x_id and win2.x_id) in [w.xid for w in self.screen.scaled_windows], + self.assertThat(lambda: len(self.unity.screen.scaled_windows), Eventually(Equals(2))) + self.assertThat(lambda: (win1.x_id and win2.x_id) in [w.xid for w in self.unity.screen.scaled_windows], Eventually(Equals(True))) def test_scaled_window_is_focused_on_click(self): @@ -80,7 +80,7 @@ class SpreadTests(UnityTestCase): not_focused = [w for w in windows if not w.is_focused][0] target_xid = not_focused.x_id - [target_win] = [w for w in self.screen.scaled_windows if w.xid == target_xid] + [target_win] = [w for w in self.unity.screen.scaled_windows if w.xid == target_xid] (x, y, w, h) = target_win.geometry self.mouse.move(x + w / 2, y + h / 2) @@ -95,7 +95,7 @@ class SpreadTests(UnityTestCase): self.initiate_spread_for_application(win.application.desktop_file) target_xid = win.x_id - [target_win] = [w for w in self.screen.scaled_windows if w.xid == target_xid] + [target_win] = [w for w in self.unity.screen.scaled_windows if w.xid == target_xid] (x, y, w, h) = target_win.geometry self.mouse.move(x + w / 2, y + h / 2) @@ -111,7 +111,7 @@ class SpreadTests(UnityTestCase): self.initiate_spread_for_screen() target_xid = win.x_id - [target_win] = [w for w in self.screen.scaled_windows if w.xid == target_xid] + [target_win] = [w for w in self.unity.screen.scaled_windows if w.xid == target_xid] (x, y, w, h) = target_win.scale_close_geometry self.mouse.move(x + w / 2, y + h / 2) diff --git a/tests/autopilot/unity/tests/test_switcher.py b/tests/autopilot/unity/tests/test_switcher.py index 7347052b3..e86db7b1e 100644 --- a/tests/autopilot/unity/tests/test_switcher.py +++ b/tests/autopilot/unity/tests/test_switcher.py @@ -14,7 +14,7 @@ import logging from testtools.matchers import Equals, Contains, Not from time import sleep -from unity.emulators.switcher import Switcher, SwitcherMode +from unity.emulators.switcher import SwitcherDirection, SwitcherMode from unity.tests import UnityTestCase logger = logging.getLogger(__name__) @@ -34,7 +34,7 @@ class SwitcherTestCase(UnityTestCase): if type(state) is not bool: raise TypeError("'state' must be boolean, not %r" % type(state)) self.set_unity_option("disable_show_desktop", state) - self.assertThat(self.switcher.controller.show_desktop_disabled, Eventually(Equals(state))) + self.assertThat(self.unity.switcher.show_desktop_disabled, Eventually(Equals(state))) def set_timeout_setting(self, state): if type(state) is not bool: @@ -79,90 +79,90 @@ class SwitcherTests(SwitcherTestCase): """Switcher must start in normal (i.e.- not details) mode.""" self.start_app("Character Map") - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) - self.assertProperty(self.switcher, mode=SwitcherMode.NORMAL) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) + self.assertProperty(self.unity.switcher, mode=SwitcherMode.NORMAL) def test_label_matches_application_name(self): """The switcher label must match the selected application name in normal mode.""" windows = self.start_applications() - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) for win in windows: app_name = win.application.name - self.switcher.select_icon(Switcher.DIRECTION_FORWARDS, tooltip_text=app_name) - self.assertThat(self.switcher.label_visible, Eventually(Equals(True))) - self.assertThat(self.switcher.label, Eventually(Equals(app_name))) + self.unity.switcher.select_icon(SwitcherDirection.FORWARDS, tooltip_text=app_name) + self.assertThat(self.unity.switcher.label_visible, Eventually(Equals(True))) + self.assertThat(self.unity.switcher.label, Eventually(Equals(app_name))) def test_application_window_is_fake_decorated(self): """When the switcher is in details mode must not show the focused window title.""" window = self.start_app_window("Text Editor") - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) - self.switcher.select_icon(Switcher.DIRECTION_BACKWARDS, tooltip_text=window.application.name) + self.unity.switcher.select_icon(SwitcherDirection.BACKWARDS, tooltip_text=window.application.name) - self.switcher.show_details() - self.assertThat(self.switcher.label_visible, Eventually(Equals(False))) - self.assertThat(self.screen.window(window.x_id).fake_decorated, Eventually(Equals(True))) + self.unity.switcher.show_details() + self.assertThat(self.unity.switcher.label_visible, Eventually(Equals(False))) + self.assertThat(self.unity.screen.window(window.x_id).fake_decorated, Eventually(Equals(True))) def test_application_window_is_fake_decorated_in_detail_mode(self): """Starting switcher in details mode must not show the focused window title.""" window = self.start_app_window("Text Editor") - self.switcher.initiate(SwitcherMode.DETAIL) - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate(SwitcherMode.DETAIL) + self.addCleanup(self.unity.switcher.terminate) - self.assertThat(self.switcher.label_visible, Eventually(Equals(False))) - self.assertThat(self.screen.window(window.x_id).fake_decorated, Eventually(Equals(True))) + self.assertThat(self.unity.switcher.label_visible, Eventually(Equals(False))) + self.assertThat(self.unity.screen.window(window.x_id).fake_decorated, Eventually(Equals(True))) def test_switcher_move_next(self): """Test that pressing the next icon binding moves to the next icon""" self.start_applications() - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) - start = self.switcher.selection_index - self.switcher.next_icon() + start = self.unity.switcher.selection_index + self.unity.switcher.next_icon() # Allow for wrap-around to first icon in switcher - next_index = (start + 1) % len(self.switcher.icons) + next_index = (start + 1) % len(self.unity.switcher.icons) - self.assertThat(self.switcher.selection_index, Eventually(Equals(next_index))) + self.assertThat(self.unity.switcher.selection_index, Eventually(Equals(next_index))) def test_switcher_move_prev(self): """Test that pressing the previous icon binding moves to the previous icon""" self.start_applications() - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) - start = self.switcher.selection_index - self.switcher.previous_icon() + start = self.unity.switcher.selection_index + self.unity.switcher.previous_icon() - self.assertThat(self.switcher.selection_index, Eventually(Equals(start - 1))) + self.assertThat(self.unity.switcher.selection_index, Eventually(Equals(start - 1))) def test_switcher_scroll_next(self): """Test that scrolling the mouse wheel down moves to the next icon""" self.start_applications() - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) - start = self.switcher.selection_index - self.switcher.next_via_mouse() + start = self.unity.switcher.selection_index + self.unity.switcher.next_via_mouse() # Allow for wrap-around to first icon in switcher - next_index = (start + 1) % len(self.switcher.icons) + next_index = (start + 1) % len(self.unity.switcher.icons) - self.assertThat(self.switcher.selection_index, Eventually(Equals(next_index))) + self.assertThat(self.unity.switcher.selection_index, Eventually(Equals(next_index))) def test_switcher_scroll_prev(self): """Test that scrolling the mouse wheel up moves to the previous icon""" self.start_applications() - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) - start = self.switcher.selection_index - self.switcher.previous_via_mouse() + start = self.unity.switcher.selection_index + self.unity.switcher.previous_via_mouse() - self.assertThat(self.switcher.selection_index, Eventually(Equals(start - 1))) + self.assertThat(self.unity.switcher.selection_index, Eventually(Equals(start - 1))) def test_switcher_arrow_key_does_not_init(self): """Ensure that Alt+Right does not initiate switcher. @@ -171,7 +171,7 @@ class SwitcherTests(SwitcherTestCase): """ self.keyboard.press_and_release('Alt+Right') - self.assertThat(self.switcher.visible, Equals(False)) + self.assertThat(self.unity.switcher.visible, Equals(False)) def test_lazy_switcher_initiate(self): """Inserting a long delay between the Alt press and the Tab tab must still @@ -182,22 +182,22 @@ class SwitcherTests(SwitcherTestCase): self.keybinding_hold("switcher/reveal_normal") self.addCleanup(self.keybinding_release, "switcher/reveal_normal") - self.assertThat(self.switcher.visible, Eventually(Equals(False))) + self.assertThat(self.unity.switcher.visible, Eventually(Equals(False))) sleep(5) self.keybinding_tap("switcher/reveal_normal") self.addCleanup(self.keybinding, "switcher/cancel") - self.assertThat(self.switcher.visible, Eventually(Equals(True))) + self.assertThat(self.unity.switcher.visible, Eventually(Equals(True))) def test_switcher_cancel(self): """Pressing the switcher cancel keystroke must cancel the switcher.""" self.start_app("Character Map") - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) - self.assertThat(self.switcher.visible, Eventually(Equals(True))) - self.switcher.cancel() - self.assertThat(self.switcher.visible, Eventually(Equals(False))) + self.assertThat(self.unity.switcher.visible, Eventually(Equals(True))) + self.unity.switcher.cancel() + self.assertThat(self.unity.switcher.visible, Eventually(Equals(False))) def test_lazy_switcher_cancel(self): """Must be able to cancel the switcher after a 'lazy' initiation.""" @@ -205,12 +205,12 @@ class SwitcherTests(SwitcherTestCase): self.keybinding_hold("switcher/reveal_normal") self.addCleanup(self.keybinding_release, "switcher/reveal_normal") - self.assertThat(self.switcher.visible, Eventually(Equals(False))) + self.assertThat(self.unity.switcher.visible, Eventually(Equals(False))) sleep(5) self.keybinding_tap("switcher/reveal_normal") - self.assertThat(self.switcher.visible, Eventually(Equals(True))) - self.switcher.cancel() - self.assertThat(self.switcher.visible, Eventually(Equals(False))) + self.assertThat(self.unity.switcher.visible, Eventually(Equals(True))) + self.unity.switcher.cancel() + self.assertThat(self.unity.switcher.visible, Eventually(Equals(False))) def test_switcher_appears_on_monitor_with_mouse(self): """Tests that the switches appears on the correct monitor. @@ -229,21 +229,20 @@ class SwitcherTests(SwitcherTestCase): for monitor in range(num_monitors): self.screen_geo.move_mouse_to_monitor(monitor) - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) - self.assertThat(self.switcher.controller.monitor, Eventually(Equals(monitor))) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) + self.assertThat(self.unity.switcher.monitor, Eventually(Equals(monitor))) - def test_alt_f4_closes_switcher(self): - """Tests that alt+f4 should close the switcher when active.""" + def test_switcher_alt_f4_is_disabled(self): + """Tests that alt+f4 does not work while switcher is active.""" win = self.start_app_window("Text Editor") - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) - self.assertThat(self.switcher.visible, Eventually(Equals(True))) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) + self.assertThat(self.unity.switcher.visible, Eventually(Equals(True))) self.keyboard.press_and_release("Alt+F4") - self.assertThat(self.switcher.visible, Eventually(Equals(False))) # Need the sleep to allow the window time to close, for jenkins! sleep(10) self.assertProperty(win, is_valid=True) @@ -317,11 +316,11 @@ class SwitcherDetailsTests(SwitcherTestCase): self.workspace.switch_to((initial_workspace + 1) % self.workspace.num_workspaces) self.start_applications("Character Map", "Character Map", "Mahjongg") - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) # Wait longer than details mode. sleep(3) - self.assertProperty(self.switcher, mode=SwitcherMode.DETAIL) + self.assertProperty(self.unity.switcher, mode=SwitcherMode.DETAIL) def test_no_details_for_apps_on_different_workspace(self): """Tests that details mode does not initiates when there are multiple windows @@ -338,11 +337,11 @@ class SwitcherDetailsTests(SwitcherTestCase): self.workspace.switch_to((initial_workspace + 1) % self.workspace.num_workspaces) self.start_applications("Character Map", "Mahjongg") - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) # Wait longer than details mode. sleep(3) - self.assertProperty(self.switcher, mode=SwitcherMode.NORMAL) + self.assertProperty(self.unity.switcher, mode=SwitcherMode.NORMAL) class SwitcherDetailsModeTests(SwitcherTestCase): @@ -368,12 +367,12 @@ class SwitcherDetailsModeTests(SwitcherTestCase): """ self.start_app_window("Character Map") - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) self.keyboard.press_and_release(self.initiate_keycode) - self.assertProperty(self.switcher, mode=SwitcherMode.DETAIL) + self.assertProperty(self.unity.switcher, mode=SwitcherMode.DETAIL) def test_next_icon_from_last_detail_works(self): """Pressing next while showing last switcher item in details mode @@ -381,19 +380,19 @@ class SwitcherDetailsModeTests(SwitcherTestCase): """ self.start_app("Character Map") - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) - while self.switcher.selection_index < len(self.switcher.icons) - 1: - self.switcher.next_icon() + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) + while self.unity.switcher.selection_index < len(self.unity.switcher.icons) - 1: + self.unity.switcher.next_icon() self.keyboard.press_and_release(self.initiate_keycode) sleep(0.5) # Make sure we're at the end of the details list for this icon - possible_details = self.switcher.detail_current_count - 1 - while self.switcher.detail_selection_index < possible_details: - self.switcher.next_detail() + possible_details = self.unity.switcher.detail_current_count - 1 + while self.unity.switcher.detail_selection_index < possible_details: + self.unity.switcher.next_detail() - self.switcher.next_icon() - self.assertThat(self.switcher.selection_index, Eventually(Equals(0))) + self.unity.switcher.next_icon() + self.assertThat(self.unity.switcher.selection_index, Eventually(Equals(0))) def test_detail_mode_selects_last_active_window(self): """The active selection in detail mode must be the last focused window. @@ -402,12 +401,12 @@ class SwitcherDetailsModeTests(SwitcherTestCase): char_win1, char_win2 = self.start_applications("Character Map", "Character Map") self.assertVisibleWindowStack([char_win2, char_win1]) - self.switcher.initiate() - while self.switcher.current_icon.tooltip_text != char_win2.application.name: - self.switcher.next_icon() + self.unity.switcher.initiate() + while self.unity.switcher.current_icon.tooltip_text != char_win2.application.name: + self.unity.switcher.next_icon() self.keyboard.press_and_release(self.initiate_keycode) sleep(0.5) - self.switcher.select() + self.unity.switcher.select() self.assertProperty(char_win1, is_focused=True) @@ -418,10 +417,10 @@ class SwitcherDetailsModeTests(SwitcherTestCase): char_win1, char_win2, char_win3 = self.start_applications("Character Map", "Character Map", "Character Map") self.assertVisibleWindowStack([char_win3, char_win2, char_win1]) - self.switcher.initiate(SwitcherMode.DETAIL) - self.switcher.next_detail() + self.unity.switcher.initiate(SwitcherMode.DETAIL) + self.unity.switcher.next_detail() - self.switcher.select() + self.unity.switcher.select() self.assertVisibleWindowStack([char_win1, char_win3, char_win2]) @@ -442,10 +441,10 @@ class SwitcherWorkspaceTests(SwitcherTestCase): self.workspace.switch_to((initial_workspace + 1) % self.workspace.num_workspaces) char_map = self.start_app("Character Map") - self.switcher.initiate() - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate() + self.addCleanup(self.unity.switcher.terminate) - get_icon_names = lambda: [i.tooltip_text for i in self.switcher.icons] + get_icon_names = lambda: [i.tooltip_text for i in self.unity.switcher.icons] self.assertThat(get_icon_names, Eventually(Contains(char_map.name))) self.assertThat(get_icon_names, Eventually(Not(Contains(calc.name)))) @@ -458,10 +457,10 @@ class SwitcherWorkspaceTests(SwitcherTestCase): self.workspace.switch_to((initial_workspace + 1) % self.workspace.num_workspaces) char_map = self.start_app("Character Map") - self.switcher.initiate(SwitcherMode.ALL) - self.addCleanup(self.switcher.terminate) + self.unity.switcher.initiate(SwitcherMode.ALL) + self.addCleanup(self.unity.switcher.terminate) - get_icon_names = lambda: [i.tooltip_text for i in self.switcher.icons] + get_icon_names = lambda: [i.tooltip_text for i in self.unity.switcher.icons] self.assertThat(get_icon_names, Eventually(Contains(calc.name))) self.assertThat(get_icon_names, Eventually(Contains(char_map.name))) @@ -487,10 +486,10 @@ class SwitcherWorkspaceTests(SwitcherTestCase): self.start_app("Calculator") - self.switcher.initiate() - while self.switcher.current_icon.tooltip_text != char_win2.application.name: - self.switcher.next_icon() - self.switcher.select() + self.unity.switcher.initiate() + while self.unity.switcher.current_icon.tooltip_text != char_win2.application.name: + self.unity.switcher.next_icon() + self.unity.switcher.select() self.assertProperty(char_win2, is_hidden=False) @@ -505,6 +504,6 @@ class SwitcherWorkspaceTests(SwitcherTestCase): self.addCleanup(self.keyboard.release, "Ctrl+Alt+Right") sleep(1) self.keybinding_hold_part_then_tap("switcher/reveal_normal") - self.addCleanup(self.switcher.terminate) + self.addCleanup(self.unity.switcher.terminate) - self.assertThat(self.switcher.visible, Eventually(Equals(False))) + self.assertThat(self.unity.switcher.visible, Eventually(Equals(False))) diff --git a/tests/autopilot/unity/tests/xim/test_gcin.py b/tests/autopilot/unity/tests/xim/test_gcin.py index 3a5adacbc..936b99f38 100644 --- a/tests/autopilot/unity/tests/xim/test_gcin.py +++ b/tests/autopilot/unity/tests/xim/test_gcin.py @@ -54,19 +54,19 @@ class GcinTestHangul(GcinTestCase): def test_dash_input(self): """Entering an input string through gcin will result in a Korean string result in the dash.""" - self.dash.ensure_visible() - self.addCleanup(self.dash.ensure_hidden) + self.unity.dash.ensure_visible() + self.addCleanup(self.unity.dash.ensure_hidden) self.enter_hangul_mode() self.keyboard.type(self.input) - self.assertThat(self.dash.search_string, Eventually(Equals(self.result))) + self.assertThat(self.unity.dash.search_string, Eventually(Equals(self.result))) def test_hud_input(self): """Entering an input string through gcin will result in a Korean string result in the hud.""" - self.hud.ensure_visible() - self.addCleanup(self.hud.ensure_hidden) + self.unity.hud.ensure_visible() + self.addCleanup(self.unity.hud.ensure_hidden) self.enter_hangul_mode() self.keyboard.type(self.input) - self.assertThat(self.hud.search_string, Eventually(Equals(self.result))) + self.assertThat(self.unity.hud.search_string, Eventually(Equals(self.result))) diff --git a/tests/test_launcher.cpp b/tests/test_launcher.cpp index 2c36b0cde..0f9257654 100644 --- a/tests/test_launcher.cpp +++ b/tests/test_launcher.cpp @@ -211,12 +211,19 @@ TEST_F(TestLauncher, TestMouseWheelScroll) launcher_->SetHover(true); initial_scroll_delta = launcher_->GetDragDelta(); + unsigned long key_flags = 0; + + launcher_->RecvMouseWheel(0, 0, 20, 0, key_flags); + EXPECT_EQ((launcher_->GetDragDelta()), initial_scroll_delta); + + key_flags |= nux::NUX_STATE_ALT; + // scroll down - launcher_->RecvMouseWheel(0,0,20,0,0); + launcher_->RecvMouseWheel(0, 0, 20, 0, key_flags); EXPECT_EQ((launcher_->GetDragDelta() - initial_scroll_delta), 25); // scroll up - launcher_->RecvMouseWheel(0,0,-20,0,0); + launcher_->RecvMouseWheel(0, 0, -20, 0, key_flags); EXPECT_EQ(launcher_->GetDragDelta(), initial_scroll_delta); launcher_->SetHover(false); diff --git a/tests/test_quicklist_menu_item.cpp b/tests/test_quicklist_menu_item.cpp index dbba9d078..d3fd0cb61 100644 --- a/tests/test_quicklist_menu_item.cpp +++ b/tests/test_quicklist_menu_item.cpp @@ -121,6 +121,24 @@ TEST_F(TestQuicklistMenuItem, OverlayMenuitem) EXPECT_TRUE(qlitem->IsOverlayQuicklist()); } +TEST_F(TestQuicklistMenuItem, MaxLabelWidth) +{ + dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Label"); + dbusmenu_menuitem_property_set_bool(item, DBUSMENU_MENUITEM_PROP_ENABLED, true); + + nux::ObjectPtr<QuicklistMenuItemLabel> qlitem(new QuicklistMenuItemLabel(item)); + int max_width = 200; + + EXPECT_EQ(qlitem->GetMaxLabelWidth(), 0); + + dbusmenu_menuitem_property_set_int(item, QuicklistMenuItem::MAXIMUM_LABEL_WIDTH_PROPERTY, max_width); + EXPECT_EQ(qlitem->GetMaxLabelWidth(), max_width); + + max_width = 100; + qlitem->SetMaxLabelWidth(max_width); + EXPECT_EQ(dbusmenu_menuitem_property_get_int(item, QuicklistMenuItem::MAXIMUM_LABEL_WIDTH_PROPERTY), max_width); +} + TEST_F(TestQuicklistMenuItem, ItemActivate) { dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Label"); diff --git a/unity-shared/PluginAdapter.cpp b/unity-shared/PluginAdapter.cpp index ed408b7f8..9fbc46598 100644 --- a/unity-shared/PluginAdapter.cpp +++ b/unity-shared/PluginAdapter.cpp @@ -431,6 +431,18 @@ Window PluginAdapter::GetActiveWindow() const return m_Screen->activeWindow(); } +std::vector<Window> PluginAdapter::GetWindowsInStackingOrder() const +{ + bool stacking_order = true; + auto const& windows = m_Screen->clientList(stacking_order); + + std::vector<Window> ret; + for (auto const& window : windows) + ret.push_back(window->id()); + + return ret; +} + bool PluginAdapter::IsWindowMaximized(Window window_id) const { CompWindow* window = m_Screen->findWindow(window_id); @@ -726,6 +738,17 @@ void PluginAdapter::Lower(Window window_id) window->lower(); } +void PluginAdapter::RestackBelow(Window window_id, Window sibiling_id) +{ + CompWindow* window = m_Screen->findWindow(window_id); + if (!window) + return; + + CompWindow* sibiling = m_Screen->findWindow(sibiling_id); + if (sibiling) + window->restackBelow(sibiling); +} + void PluginAdapter::FocusWindowGroup(std::vector<Window> const& window_ids, FocusVisibility focus_visibility, int monitor, bool only_top_win) diff --git a/unity-shared/PluginAdapter.h b/unity-shared/PluginAdapter.h index 55ead3770..0827a6cf7 100644 --- a/unity-shared/PluginAdapter.h +++ b/unity-shared/PluginAdapter.h @@ -120,6 +120,7 @@ public: void NotifyNewDecorationState(Window xid); Window GetActiveWindow() const; + std::vector<Window> GetWindowsInStackingOrder() const override; void Decorate(Window xid) const; void Undecorate(Window xid) const; @@ -147,6 +148,7 @@ public: void Activate(Window window_id); void Raise(Window window_id); void Lower(Window window_id); + void RestackBelow(Window window_id, Window sibiling_id) override; void ShowDesktop(); bool InShowDesktop() const; diff --git a/unity-shared/StandaloneWindowManager.cpp b/unity-shared/StandaloneWindowManager.cpp index 4f82eb9b1..9bac8bf18 100644 --- a/unity-shared/StandaloneWindowManager.cpp +++ b/unity-shared/StandaloneWindowManager.cpp @@ -84,36 +84,59 @@ StandaloneWindowManager::StandaloneWindowManager() Window StandaloneWindowManager::GetActiveWindow() const { - for (auto const& it : standalone_windows_) - if (it.second->active) - return it.second->Xid(); + for (auto const& window : standalone_windows_) + if (window->active) + return window->Xid(); return 0; } +StandaloneWindow::Ptr StandaloneWindowManager::GetWindowByXid(Window window_id) const +{ + auto begin = standalone_windows_.begin(); + auto end = standalone_windows_.end(); + auto it = std::find_if(begin, end, [window_id] (StandaloneWindow::Ptr window) { + return window->Xid() == window_id; + }); + + if (it != end) + return *it; + else + return StandaloneWindow::Ptr(); +} + +std::vector<Window> StandaloneWindowManager::GetWindowsInStackingOrder() const +{ + std::vector<Window> ret; + for (auto const& window : standalone_windows_) + ret.push_back(window->Xid()); + + return ret; +} + bool StandaloneWindowManager::IsWindowMaximized(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->maximized; + auto window = GetWindowByXid(window_id); + if (window) + return window->maximized; return false; } bool StandaloneWindowManager::IsWindowDecorated(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end() && it->second->has_decorations) - return it->second->decorated; + auto window = GetWindowByXid(window_id); + if (window && window->has_decorations) + return window->decorated; return false; } bool StandaloneWindowManager::IsWindowOnCurrentDesktop(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return (it->second->current_desktop == current_desktop_); + auto window = GetWindowByXid(window_id); + if (window) + return (window->current_desktop == current_desktop_); return true; } @@ -125,72 +148,73 @@ bool StandaloneWindowManager::IsWindowObscured(Window window_id) const bool StandaloneWindowManager::IsWindowMapped(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->mapped; + auto window = GetWindowByXid(window_id); + if (window) + return window->mapped; return true; } bool StandaloneWindowManager::IsWindowVisible(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->visible; + auto window = GetWindowByXid(window_id); + if (window) + return window->visible; return true; } bool StandaloneWindowManager::IsWindowOnTop(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->on_top; + auto window = GetWindowByXid(window_id); + if (window) + return window->on_top; return false; } bool StandaloneWindowManager::IsWindowClosable(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->closable; + auto window = GetWindowByXid(window_id); + if (window) + return window->closable; return false; } bool StandaloneWindowManager::IsWindowMinimized(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->minimized; + auto window = GetWindowByXid(window_id); + if (window) + return window->minimized; return false; } bool StandaloneWindowManager::IsWindowMinimizable(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->minimizable; + auto window = GetWindowByXid(window_id); + + if (window) + return window->minimizable; return false; } bool StandaloneWindowManager::IsWindowMaximizable(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->maximizable; + auto window = GetWindowByXid(window_id); + if (window) + return window->maximizable; return false; } bool StandaloneWindowManager::HasWindowDecorations(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->has_decorations; + auto window = GetWindowByXid(window_id); + if (window) + return window->has_decorations; return false; } @@ -207,38 +231,34 @@ bool StandaloneWindowManager::InShowDesktop() const void StandaloneWindowManager::Decorate(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - { - it->second->decorated = it->second->has_decorations(); - } + auto window = GetWindowByXid(window_id); + if (window) + window->decorated = window->has_decorations(); } void StandaloneWindowManager::Undecorate(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - { - it->second->decorated = false; - } + auto window = GetWindowByXid(window_id); + if (window) + window->decorated = false; } void StandaloneWindowManager::Maximize(Window window_id) { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) + auto window = GetWindowByXid(window_id); + if (window) { - it->second->maximized = true; + window->maximized = true; Undecorate(window_id); } } void StandaloneWindowManager::Restore(Window window_id) { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) + auto window = GetWindowByXid(window_id); + if (window) { - it->second->maximized = false; + window->maximized = false; Decorate(window_id); } } @@ -253,52 +273,81 @@ void StandaloneWindowManager::RestoreAt(Window window_id, int x, int y) void StandaloneWindowManager::UnMinimize(Window window_id) { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) + auto window = GetWindowByXid(window_id); + if (window) { - it->second->minimized = false; + window->minimized = false; - if (it->second->maximized) - { + if (window->maximized) Undecorate(window_id); - } } } void StandaloneWindowManager::Minimize(Window window_id) { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) + auto window = GetWindowByXid(window_id); + if (window) { - it->second->minimized = true; + window->minimized = true; - if (it->second->maximized) - { + if (window->maximized) Decorate(window_id); - } } } void StandaloneWindowManager::Close(Window window_id) { - standalone_windows_.erase(window_id); + standalone_windows_.remove_if([window_id] (StandaloneWindow::Ptr window) { + return window->Xid() == window_id; + }); } void StandaloneWindowManager::Activate(Window window_id) { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - { + auto window = GetWindowByXid(window_id); + if (window) // This will automatically set the others active windows as unactive - it->second->active = true; - } + window->active = true; +} + +void StandaloneWindowManager::Lower(Window window_id) +{ + auto begin = standalone_windows_.begin(); + auto end = standalone_windows_.end(); + auto window = std::find_if(begin, end, [window_id] (StandaloneWindow::Ptr window) { + return window->Xid() == window_id; + }); + + if (window != end) + standalone_windows_.splice(begin, standalone_windows_, window); } void StandaloneWindowManager::Raise(Window window_id) -{} +{ + auto end = standalone_windows_.end(); + auto window = std::find_if(standalone_windows_.begin(), end, [window_id] (StandaloneWindow::Ptr window) { + return window->Xid() == window_id; + }); -void StandaloneWindowManager::Lower(Window window_id) -{} + if (window != end) + standalone_windows_.splice(end, standalone_windows_, window); +} + +void StandaloneWindowManager::RestackBelow(Window window_id, Window sibiling_id) +{ + auto end = standalone_windows_.end(); + auto begin = standalone_windows_.begin(); + + auto window = std::find_if(begin, end, [window_id] (StandaloneWindow::Ptr window) { + return window->Xid() == window_id; + }); + auto sibiling = std::find_if(begin, end, [sibiling_id] (StandaloneWindow::Ptr window) { + return window->Xid() == sibiling_id; + }); + + if (window != end && sibiling != end) + standalone_windows_.splice(sibiling, standalone_windows_, window); +} void StandaloneWindowManager::TerminateScale() {} @@ -367,9 +416,9 @@ bool StandaloneWindowManager::IsViewPortSwitchStarted() const void StandaloneWindowManager::MoveResizeWindow(Window window_id, nux::Geometry geometry) { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - it->second->geo = geometry; + auto window = GetWindowByXid(window_id); + if (window) + window->geo = geometry; } void StandaloneWindowManager::StartMove(Window window_id, int x, int y) @@ -380,27 +429,27 @@ void StandaloneWindowManager::StartMove(Window window_id, int x, int y) int StandaloneWindowManager::GetWindowMonitor(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->monitor; + auto window = GetWindowByXid(window_id); + if (window) + return window->monitor; return -1; } nux::Geometry StandaloneWindowManager::GetWindowGeometry(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->geo; + auto window = GetWindowByXid(window_id); + if (window) + return window->geo; return nux::Geometry(0, 0, 1, 1); } nux::Geometry StandaloneWindowManager::GetWindowSavedGeometry(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->geo; + auto window = GetWindowByXid(window_id); + if (window) + return window->geo; return nux::Geometry(); } @@ -422,9 +471,9 @@ void StandaloneWindowManager::SetWorkareaGeometry(nux::Geometry const& geo) nux::Size StandaloneWindowManager::GetWindowDecorationSize(Window window_id, WindowManager::Edge edge) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->deco_sizes[unsigned(edge)]; + auto window = GetWindowByXid(window_id); + if (window) + return window->deco_sizes[unsigned(edge)]; return nux::Size(); } @@ -486,9 +535,9 @@ bool StandaloneWindowManager::RestoreInputFocus() std::string StandaloneWindowManager::GetWindowName(Window window_id) const { - auto it = standalone_windows_.find(window_id); - if (it != standalone_windows_.end()) - return it->second->name; + auto window = GetWindowByXid(window_id); + if (window) + return window->name; return ""; } @@ -506,7 +555,8 @@ void StandaloneWindowManager::AddStandaloneWindow(StandaloneWindow::Ptr const& w return; auto xid = window->Xid(); - standalone_windows_[xid] = window; + Close(xid); + standalone_windows_.push_back(window); window->mapped.changed.connect([this, xid] (bool v) {v ? window_mapped(xid) : window_unmapped(xid);}); window->visible.changed.connect([this, xid] (bool v) {v ? window_shown(xid) : window_hidden(xid);}); @@ -522,9 +572,9 @@ void StandaloneWindowManager::AddStandaloneWindow(StandaloneWindow::Ptr const& w return; // Ensuring that this is the only active window we have on screen - for (auto const& it : standalone_windows_) - if (it.second->Xid() != xid && it.second->active) - it.second->active = false; + for (auto const& window : standalone_windows_) + if (window->Xid() != xid && window->active) + window->active = false; window_focus_changed(xid); }); @@ -532,7 +582,7 @@ void StandaloneWindowManager::AddStandaloneWindow(StandaloneWindow::Ptr const& w window->active = true; } -std::map<Window, StandaloneWindow::Ptr> StandaloneWindowManager::GetStandaloneWindows() const +std::list<StandaloneWindow::Ptr> StandaloneWindowManager::GetStandaloneWindows() const { return standalone_windows_; } diff --git a/unity-shared/StandaloneWindowManager.h b/unity-shared/StandaloneWindowManager.h index 1c06fcf4b..d34836432 100644 --- a/unity-shared/StandaloneWindowManager.h +++ b/unity-shared/StandaloneWindowManager.h @@ -22,7 +22,7 @@ #define UNITYSHARED_STANDALONE_WINDOW_MANAGER_H #include "unity-shared/WindowManager.h" -#include <map> +#include <list> #include <NuxCore/Property.h> namespace unity @@ -66,6 +66,7 @@ public: StandaloneWindowManager(); virtual Window GetActiveWindow() const; + std::vector<Window> GetWindowsInStackingOrder() const override; virtual bool IsWindowMaximized(Window window_id) const; virtual bool IsWindowDecorated(Window window_id) const; @@ -93,6 +94,7 @@ public: virtual void Activate(Window window_id); virtual void Raise(Window window_id); virtual void Lower(Window window_id); + void RestackBelow(Window window_id, Window sibiling_id) override; virtual void Decorate(Window window_id) const; virtual void Undecorate(Window window_id) const; @@ -144,7 +146,7 @@ public: // Mock functions void AddStandaloneWindow(StandaloneWindow::Ptr const& window); - std::map<Window, StandaloneWindow::Ptr> GetStandaloneWindows() const; + std::list<StandaloneWindow::Ptr> GetStandaloneWindows() const; void SetScaleActive(bool scale_active); void SetScaleActiveForGroup(bool scale_active_for_group); @@ -158,6 +160,8 @@ protected: virtual void AddProperties(GVariantBuilder* builder); private: + StandaloneWindow::Ptr GetWindowByXid(Window window_id) const; + bool expo_state_; bool in_show_desktop_; bool scale_active_; @@ -166,7 +170,7 @@ private: nux::Size viewport_size_; nux::Point current_vp_; nux::Geometry workarea_geo_; - std::map<Window, StandaloneWindow::Ptr> standalone_windows_; + std::list<StandaloneWindow::Ptr> standalone_windows_; }; } diff --git a/unity-shared/WindowManager.h b/unity-shared/WindowManager.h index 87d78e6ef..c24355d96 100644 --- a/unity-shared/WindowManager.h +++ b/unity-shared/WindowManager.h @@ -74,6 +74,7 @@ public: static WindowManager& Default(); virtual Window GetActiveWindow() const = 0; + virtual std::vector<Window> GetWindowsInStackingOrder() const = 0; virtual bool IsWindowMaximized(Window window_id) const = 0; virtual bool IsWindowDecorated(Window window_id) const = 0; @@ -101,6 +102,7 @@ public: virtual void Activate(Window window_id) = 0; virtual void Raise(Window window_id) = 0; virtual void Lower(Window window_id) = 0; + virtual void RestackBelow(Window window_id, Window sibiling_id) = 0; virtual void TerminateScale() = 0; virtual bool IsScaleActive() const = 0; |
