2
* Copyright 2016 Canonical Ltd.
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License as published by
6
* the Free Software Foundation; version 3.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by Jonas G. Drange <jonas.drange@canonical.com>
21
import Ubuntu.Test 0.1
22
import Ubuntu.Settings.Fingerprint 0.1
32
id: fingerprintsComponent
44
name: "FingerprintPanel"
47
property var fingerprintsInstance: null
50
Biometryd.setAvailable(true);
51
fingerprintsInstance = fingerprintsComponent.createObject(testRoot);
58
fingerprintsInstance.destroy();
59
GSettingsController.setFingerprintNames({});
62
function getClearanceObserver() {
63
return findInvisibleChild(fingerprintsInstance, "clearanceObserver");
66
function getListObserver() {
67
return findInvisibleChild(fingerprintsInstance, "listObserver");
70
function getEnrollmentObserver() {
71
return findInvisibleChild(fingerprintsInstance, "enrollmentObserver");
74
function getRemovalObserver() {
75
return findInvisibleChild(fingerprintsInstance, "removalObserver");
78
function getBrokenDialog() {
79
return findChild(testRoot, "fingerprintReaderBrokenDialog");
82
function getBrokenDialogOk() {
83
return findChild(testRoot, "fingerprintReaderBrokenDialogOK");
86
function getAddFingerprintItem() {
87
return findChild(fingerprintsInstance, "fingerprintAddListItemLayout");
90
function getRemoveAllButton() {
91
return findChild(fingerprintsInstance, "fingerprintRemoveAllButton");
94
function getFingerprintsList() {
95
return findChild(fingerprintsInstance, "fingerprintsList");
98
function getSetupEntry() {
99
return findChild(fingerprintsInstance, "fingerprintSetupEntry");
102
function test_failures_data() {
104
{ tag: "clearance", observer: getClearanceObserver, mock: "mockClearance", mockArgs: ["failed"] },
105
{ tag: "list", observer: getListObserver, mock: "mockList", mockArgs: [[], "failed"] }
109
function test_failures(data) {
110
var obs = data.observer();
111
spy.signalName = "failed";
113
obs[data.mock].apply(null, data.mockArgs);
115
var errorDiag = getBrokenDialog();
116
var ok = getBrokenDialogOk();
117
mouseClick(ok, ok.width / 2, ok.height / 2);
119
// Halt testing until dialog has been destroyed.
120
tryCompareFunction(function() {
121
return getBrokenDialog();
125
function test_noPasscode() {
126
fingerprintsInstance.passcodeSet = false;
127
compare(fingerprintsInstance.state, "noPasscode");
129
var setButton = findChild(fingerprintsInstance, "fingerprintSetPasscodeButton");
130
compare(setButton.visible, true);
132
var setupEntry = getSetupEntry();
133
compare(setupEntry.enabled, false);
135
var fingerprintsList = getFingerprintsList();
136
compare(fingerprintsList.enabled, false);
139
function test_noScanner() {
140
fingerprintsInstance.passcodeSet = true;
141
Biometryd.setAvailable(false);
142
compare(fingerprintsInstance.state, "noScanner");
144
var addItem = getAddFingerprintItem();
145
compare(addItem.enabled, false);
147
var removeButton = getRemoveAllButton();
148
compare(removeButton.enabled, false);
150
var fingerprintsList = getFingerprintsList();
151
compare(fingerprintsList.visible, false);
154
function test_passcode() {
155
fingerprintsInstance.passcodeSet = true;
156
compare(fingerprintsInstance.state, "");
157
var setButton = findChild(fingerprintsInstance, "fingerprintSetPasscodeButton");
158
compare(setButton.visible, false);
159
var setupEntry = getSetupEntry();
160
compare(setupEntry.enabled, true);
163
function test_changePasscode() {
164
fingerprintsInstance.passcodeSet = false;
165
var setButton = findChild(fingerprintsInstance, "fingerprintSetPasscodeButton");
167
spy.signalName = "requestPasscode"
168
spy.target = fingerprintsInstance;
169
mouseClick(setButton, setButton.width / 2, setButton.height / 2);
172
compare(spy.count, 1);
175
function test_setup() {
176
fingerprintsInstance.passcodeSet = false;
177
var add = getAddFingerprintItem();
178
var remove = getRemoveAllButton();
179
compare(add.enabled, false);
180
compare(remove.enabled, false);
183
function test_noRemove() {
184
fingerprintsInstance.passcodeSet = true;
185
GSettingsController.setFingerprintNames({});
186
var remove = getRemoveAllButton();
187
compare(remove.enabled, false);
190
function test_remove() {
191
fingerprintsInstance.passcodeSet = true;
192
GSettingsController.setFingerprintNames({"tmplId": "A Finger"});
194
var remove = getRemoveAllButton();
195
mouseClick(remove, remove.width / 2, remove.height / 2);
196
var diag = findChild(testRoot, "fingerprintRemoveAllDialog");
197
var confirm = findChild(diag, "fingerprintRemoveAllConfirmationButton");
198
compare(confirm.visible, true);
199
mouseClick(confirm, confirm.width / 2, confirm.height / 2);
201
var obs = getClearanceObserver();
202
spy.signalName = "succeeded";
204
obs.mockClearance("");
206
compare(spy.count, 1);
208
// Wait for dialog destruction (which is required for other tests)
210
tryCompareFunction(function() {
211
return findChild(testRoot, "fingerprintRemoveAllDialog");
215
function test_enrollmentSucceeded() {
216
var obs = getEnrollmentObserver();
217
var targetFingerprintName = i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1);
218
spy.signalName = "succeeded";
220
obs.mockEnroll("tmplId", "");
222
compare(spy.count, 1);
223
compare(spy.signalArguments[0][0], "tmplId");
225
tryCompareFunction(function() {
226
return GSettingsController.fingerprintNames()["tmplId"];
227
}, targetFingerprintName);