From 2c3388b36cb3a32448260a95408b69a03c09681d Mon Sep 17 00:00:00 2001 From: Xavier Claessens <xavier.claessens@collabora.com> Date: Wed, 23 Sep 2015 14:36:02 -0400 Subject: [PATCH] tracker: factor out a mixin to browse a grilo source Reviewers: smcv, pwith Differential Revision: https://phabricator.apertis.org/D544 --- apertis_tests_lib/grilo.py | 54 ++++++++++++++++++++++ tracker/automated/test-tracker.py | 74 +++++++++++++------------------ 2 files changed, 84 insertions(+), 44 deletions(-) create mode 100644 apertis_tests_lib/grilo.py diff --git a/apertis_tests_lib/grilo.py b/apertis_tests_lib/grilo.py new file mode 100644 index 0000000..02606c8 --- /dev/null +++ b/apertis_tests_lib/grilo.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +# Copyright © 2015 Collabora Ltd. +# +# SPDX-License-Identifier: MPL-2.0 +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +from gi.repository import Grl +from gi.repository import GrlPls + + +class GriloBrowserMixin: + def browse(self, source, prefix, pls=None): + self.source = source + self.prefix = 'file://%s/' % prefix + self.medias = {} + + ops = self.source.supported_operations() + self.assertTrue((ops & Grl.SupportedOps.BROWSE) != 0) + + self.__browse_recurse(None, pls) + + return self.medias + + def __browse_recurse(self, media, pls=None): + caps = self.source.get_caps(Grl.SupportedOps.BROWSE) + options = Grl.OperationOptions.new(caps) + options.set_resolution_flags(Grl.ResolutionFlags.IDLE_RELAY) + + keys = [Grl.METADATA_KEY_TITLE, + Grl.METADATA_KEY_ALBUM, + Grl.METADATA_KEY_ARTIST, + Grl.METADATA_KEY_THUMBNAIL, + Grl.METADATA_KEY_URL, + Grl.METADATA_KEY_CHILDCOUNT] + + if pls is not None: + medias = GrlPls.browse_sync(self.source, pls, keys, options, None) + else: + medias = self.source.browse_sync(media, keys, options) + + for media in medias: + if isinstance(media, Grl.MediaBox): + self.__browse_recurse(media) + continue + + url = media.get_url() + if url.startswith(self.prefix): + suffix = url[len(self.prefix):] + + print("GriloBrowserMixin: add media", suffix) + self.medias[suffix] = media diff --git a/tracker/automated/test-tracker.py b/tracker/automated/test-tracker.py index 785bee9..371f543 100755 --- a/tracker/automated/test-tracker.py +++ b/tracker/automated/test-tracker.py @@ -21,14 +21,16 @@ from gi.repository import Grl sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)) from apertis_tests_lib.tracker import TrackerIndexerMixin +from apertis_tests_lib.grilo import GriloBrowserMixin from apertis_tests_lib import ApertisTest from apertis_tests_lib import LONG_JPEG_NAME -class TrackerTest(ApertisTest, TrackerIndexerMixin): +class TrackerTest(ApertisTest, TrackerIndexerMixin, GriloBrowserMixin): def __init__(self, *args, **kwargs): ApertisTest.__init__(self, *args, **kwargs) TrackerIndexerMixin.__init__(self) + GriloBrowserMixin.__init__(self) def setUp(self): self.loop = GLib.MainLoop.new(None, False) @@ -162,51 +164,35 @@ class TrackerTest(ApertisTest, TrackerIndexerMixin): self.assert_has_thumbnail('Pictures/collabora-logo-big.png') self.assert_has_thumbnail('Videos/big_buck_bunny_smaller.ogv') - def grl_browse_source(self, source, media): - ops = source.supported_operations() - self.assertTrue((ops & Grl.SupportedOps.BROWSE) != 0) - - caps = source.get_caps(Grl.SupportedOps.BROWSE) - options = Grl.OperationOptions.new(caps) - options.set_count(10) - options.set_resolution_flags(Grl.ResolutionFlags.IDLE_RELAY) - - keys = [Grl.METADATA_KEY_TITLE, - Grl.METADATA_KEY_ALBUM, - Grl.METADATA_KEY_ARTIST, - Grl.METADATA_KEY_THUMBNAIL, - Grl.METADATA_KEY_URL, - Grl.METADATA_KEY_CHILDCOUNT] - - medias = source.browse_sync(media, keys, options) - - for media in medias: - if isinstance(media, Grl.MediaBox): - self.grl_browse_source(source, media) - continue - - url = media.get_url() - prefix = 'file://' + self.homedir + '/' - if not url.startswith(prefix): - continue - - filename = url[len(prefix):] - if filename in ['Music/generic.oga', - 'Music/generic.mp3', - 'Music/generic.flac', - 'Music/generic-no-artwork.mp3']: - self.assertEqual(media.get_title(), 'GNOME Generic Sound') - self.assertEqual(media.get_artist(), 'Conrad Parker') - self.assertEqual(media.get_album(), 'GNOME Audio') - elif filename in ['Music/generic.wav', - 'Pictures/' + LONG_JPEG_NAME, - 'Pictures/collabora-logo-big.png', - 'Videos/big_buck_bunny_smaller.ogv']: - title = filename.split('/')[1] - self.assertEqual(media.get_title(), title) + def grl_assert_common(self, medias, filename): + self.assertTrue(filename in medias) + media = medias[filename] + + # 'file:///foo/generic.mp3' -> 'generic.mp3' + url = media.get_url() + title = url[url.rfind('/') + 1:] + self.assertEqual(media.get_title(), title) + + def grl_assert_music(self, medias, filename): + self.assertTrue(filename in medias) + media = medias[filename] + + self.assertTrue(isinstance(media, Grl.MediaAudio)) + self.assertEqual(media.get_title(), 'GNOME Generic Sound') + self.assertEqual(media.get_artist(), 'Conrad Parker') + self.assertEqual(media.get_album(), 'GNOME Audio') def grl_source_added_cb(self, registry, source): - self.grl_browse_source(source, None) + medias = self.browse(source, self.homedir) + self.grl_assert_music(medias, 'Music/generic.mp3') + self.grl_assert_music(medias, 'Music/generic.flac') + self.grl_assert_music(medias, 'Music/generic-no-artwork.mp3') + self.grl_assert_music(medias, 'Music/generic.oga') + self.grl_assert_common(medias, 'Music/generic.wav') + self.grl_assert_common(medias, 'Pictures/' + LONG_JPEG_NAME) + self.grl_assert_common(medias, 'Pictures/collabora-logo-big.png') + self.grl_assert_common(medias, 'Videos/big_buck_bunny_smaller.ogv') + self.loop.quit() def tracker_grilo_tests(self): -- GitLab