1
# -*- coding: utf-8 -*-
6
# Copyright (c) 2011, Alex Băluț <alexandru.balut@gmail.com>
7
# Copyright (c) 2011, Jean-François Fortin Tam <nekohayo@gmail.com>
9
# This program is free software; you can redistribute it and/or
10
# modify it under the terms of the GNU Lesser General Public
11
# License as published by the Free Software Foundation; either
12
# version 2.1 of the License, or (at your option) any later version.
14
# This program is distributed in the hope that it will be useful,
15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
# Lesser General Public License for more details.
19
# You should have received a copy of the GNU Lesser General Public
20
# License along with this program; if not, write to the
21
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
22
# Boston, MA 02110-1301, USA.
24
# TODO: add a specific testcase for audio, video, render presets
29
from unittest import TestCase
31
from pitivi.configure import get_audiopresets_dir
32
from pitivi.preset import DuplicatePresetNameException, \
37
class FakePresetManager(PresetManager):
39
def _saveSection(self, fout, section):
43
def setPresetManagerPaths(preset_manager, default_path):
44
preset_manager.default_path = default_path
45
preset_manager.user_path = tempfile.mkdtemp()
48
def clearPresetManagerPaths(preset_manager):
49
shutil.rmtree(preset_manager.user_path)
52
def countJsonFilesIn(dir_path):
54
for filename in os.listdir(dir_path)
55
if filename.endswith(".json")])
58
def countDefaultPresets(preset_manager):
59
return countJsonFilesIn(preset_manager.default_path)
62
def countUserPresets(preset_manager):
63
return countJsonFilesIn(preset_manager.user_path)
66
class TestPresetBasics(TestCase):
69
self.manager = FakePresetManager()
70
setPresetManagerPaths(self.manager, None)
73
clearPresetManagerPaths(self.manager)
75
def testConvertPresetNameToSectionName(self):
76
self.presetToSection = self.manager._convertPresetNameToSectionName
77
self.assertEqual("my preset", self.presetToSection('my preset'))
78
self.assertEqual("my preset_", self.presetToSection('my preset_'))
79
self.assertEqual("default_x_", self.presetToSection('default_x_'))
81
# Test that default_* preset names get a _ character at the end.
82
self.assertEqual("Default_", self.presetToSection('Default'))
83
self.assertEqual("defaulT__", self.presetToSection('defaulT_'))
85
def testConvertSectionNameToPresetName(self):
86
self.sectionToPreset = self.manager._convertSectionNameToPresetName
87
self.assertEqual("my preset", self.sectionToPreset('my preset'))
88
self.assertEqual("my preset_", self.sectionToPreset('my preset_'))
89
self.assertEqual("default_x_", self.sectionToPreset('default_x_'))
91
# Test that default_+ section names lose the last character.
92
self.assertEqual("Default", self.sectionToPreset('Default_'))
93
self.assertEqual("defaulT_", self.sectionToPreset('defaulT__'))
95
def testAddPreset(self):
96
self.manager.addPreset('preseT onE', {'name1': '1A'})
97
self.assertRaises(DuplicatePresetNameException,
98
self.manager.addPreset, 'Preset One', {'name1': '2A'})
100
def testAddDuplicatePreset(self):
101
self.manager.addPreset('x', {})
102
self.assertRaises(DuplicatePresetNameException, self.manager.addPreset, 'x', {})
104
def testAddPresetWithNonAsciiName(self):
105
unicode_name = u"ソリッド・スネーク"
106
self.manager.addPreset(unicode_name, {})
107
self.assertTrue(unicode_name.encode("utf-8") in self.manager.getPresetNames())
109
def testRenamePreset(self):
110
self.manager.addPreset('preseT onE', {'name1': '1A'})
111
self.manager.addPreset('Preset Two', {'name1': '2A'})
113
# Renaming 'preseT onE' to 'Preset One'.
114
self.manager.renamePreset('0', 'Preset One')
116
# Renaming 'Preset One' to 'Preset TWO'.
117
self.assertRaises(DuplicatePresetNameException,
118
self.manager.renamePreset, '0', 'Preset TWO')
119
# Renaming 'Preset One' to 'Preset two'.
120
self.assertRaises(DuplicatePresetNameException,
121
self.manager.renamePreset, '0', 'Preset two')
124
class TestAudioPresetsIO(TestCase):
127
self.manager = AudioPresetManager()
128
setPresetManagerPaths(self.manager, get_audiopresets_dir())
131
clearPresetManagerPaths(self.manager)
133
def createOtherManager(self):
134
other_manager = AudioPresetManager()
135
other_manager.default_path = self.manager.default_path
136
other_manager.user_path = self.manager.user_path
139
def testSaveAndLoad(self):
140
self.manager.addPreset("Vegeta",
142
"sample-rate": 44100})
143
self.manager.saveAll()
144
self.assertEqual(1, countUserPresets(self.manager))
146
self.manager.addPreset("Nappa",
148
"sample-rate": 44100})
149
self.manager.saveAll()
150
self.assertEqual(2, countUserPresets(self.manager))
152
other_manager = self.createOtherManager()
153
other_manager.loadAll()
154
total_presets = countDefaultPresets(self.manager) + countUserPresets(self.manager)
155
self.assertEqual(total_presets, len(other_manager.presets))
157
def testNonAsciiFilenamesSaveAndLoad(self):
158
non_ascii_preset_name = "Solid Snake (ソリッド・スネーク) \\#!\"'$%?&*"
159
self.manager.addPreset(non_ascii_preset_name,
161
"sample-rate": 44100})
162
snake = self.manager.presets[non_ascii_preset_name]
163
self.assertEqual(2, len(snake))
164
self.manager.saveAll()
166
other_manager = self.createOtherManager()
167
other_manager.loadAll()
168
self.assertEquals(1 + countDefaultPresets(other_manager), len(other_manager.presets))
169
snaaaake = other_manager.presets[non_ascii_preset_name]
170
self.assertEqual(snake, snaaaake)
172
def testInvalidFilenamesSaveAndLoad(self):
173
# This would be an invalid file name as is.
174
preset_name = " / % "
175
self.manager.addPreset(preset_name,
177
"sample-rate": 44100})
178
values = self.manager.presets[preset_name]
179
self.assertEqual(2, len(values))
180
self.manager.saveAll()
182
other_manager = self.createOtherManager()
183
other_manager.loadAll()
184
self.assertEquals(1 + countDefaultPresets(other_manager), len(other_manager.presets))
185
other_values = other_manager.presets[preset_name]
186
self.assertEqual(values, other_values)