1/* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import { paramMock } from "../utils" 17import { RemoteObjectClass } from "./ohos_rpc" 18 19export function mockAppAccount() { 20 const AppAccountInfoMock = { 21 owner: "[PC Preview] unknown owner", 22 name: "[PC Preview] unknown name" 23 }; 24 const OAuthTokenInfoMock = { 25 authType: "[PC preview] unknown authType", 26 token: "[PC preview] unknown token", 27 account: AppAccountInfoMock, 28 }; 29 const AuthenticatorInfoMock = { 30 owner: "[PC preview] unknown owner", 31 iconId: "[PC preview] unknown iconId", 32 labelId: "[PC preview] unknown labelId", 33 }; 34 const appAccountInfoArrayMock = new Array(); 35 appAccountInfoArrayMock.push(AppAccountInfoMock); 36 const SelectAccountsOptions = { 37 allowedAccounts: appAccountInfoArrayMock, 38 allowedOwners: [paramMock.paramString], 39 requiredLabels: [paramMock.paramString], 40 } 41 const VerifyCredentialOptions = { 42 credentialType: paramMock.paramStringMock, 43 credential: paramMock.paramStringMock, 44 parameters:{"unknown key":paramMock.paramObjectMock}, 45 } 46 const SetPropertiesOptions = { 47 properties: {"unknown key":paramMock.paramObjectMock}, 48 parameters: {"unknown key":paramMock.paramObjectMock}, 49 } 50 const appAccountManagerMock = { 51 addAccount: function (...args) { 52 console.warn("AppAccountManager.addAccount interface mocked in the Previewer. " + 53 "How this interface works on the Previewer may be different from that on a real device.") 54 const len = args.length 55 if (len > 0 && typeof args[len - 1] === 'function') { 56 args[len - 1].call(this, paramMock.businessErrorMock); 57 } else { 58 return new Promise((resolve, reject) => { 59 resolve(); 60 }) 61 } 62 }, 63 addAccountImplicitly: function (...args) { 64 console.warn("AppAccountManager.addAccountImplicitly interface mocked in the Previewer. " + 65 "How this interface works on the Previewer may be different from that on a real device.") 66 const len = args.length 67 if (len > 0 && typeof args[len - 1] === 'function') { 68 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 69 } 70 }, 71 deleteAccount: function (...args) { 72 console.warn("AppAccountManager.deleteAccount interface mocked in the Previewer. " + 73 "How this interface works on the Previewer may be different from that on a real device.") 74 const len = args.length 75 if (len > 0 && typeof args[len - 1] === 'function') { 76 args[len - 1].call(this, paramMock.businessErrorMock); 77 } else { 78 return new Promise((resolve, reject) => { 79 resolve(); 80 }) 81 } 82 }, 83 disableAppAccess: function (...args) { 84 console.warn("AppAccountManager.disableAppAccess interface mocked in the Previewer. " + 85 "How this interface works on the Previewer may be different from that on a real device.") 86 const len = args.length 87 if (len > 0 && typeof args[len - 1] === 'function') { 88 args[len - 1].call(this, paramMock.businessErrorMock); 89 } else { 90 return new Promise((resolve, reject) => { 91 resolve(); 92 }) 93 } 94 }, 95 enableAppAccess: function (...args) { 96 console.warn("AppAccountManager.enableAppAccess interface mocked in the Previewer. " + 97 "How this interface works on the Previewer may be different from that on a real device.") 98 const len = args.length 99 if (len > 0 && typeof args[len - 1] === 'function') { 100 args[len - 1].call(this, paramMock.businessErrorMock); 101 } else { 102 return new Promise((resolve, reject) => { 103 resolve(); 104 }) 105 } 106 }, 107 checkAppAccess: function (...args) { 108 console.warn("AppAccountManager.checkAppAccess interface mocked in the Previewer. " + 109 "How this interface works on the Previewer may be different from that on a real device.") 110 const len = args.length 111 if (len > 0 && typeof args[len - 1] === 'function') { 112 args[len - 1].call(this, paramMock.businessErrorMock, paramMock.paramBooleanMock); 113 } else { 114 return new Promise((resolve, reject) => { 115 resolve(paramMock.paramBooleanMock); 116 }) 117 } 118 }, 119 checkAppAccountSyncEnable: function (...args) { 120 console.warn("AppAccountManager.checkAppAccountSyncEnable interface mocked in the Previewer. " + 121 "How this interface works on the Previewer may be different from that on a real device.") 122 const len = args.length 123 if (len > 0 && typeof args[len - 1] === 'function') { 124 args[len - 1].call(this, paramMock.businessErrorMock, paramMock.paramBooleanMock); 125 } else { 126 return new Promise((resolve, reject) => { 127 resolve(paramMock.paramBooleanMock); 128 }) 129 } 130 }, 131 setAccountCredential: function (...args) { 132 console.warn("AppAccountManager.setAccountCredential interface mocked in the Previewer. " + 133 "How this interface works on the Previewer may be different from that on a real device.") 134 const len = args.length 135 if (len > 0 && typeof args[len - 1] === 'function') { 136 args[len - 1].call(this, paramMock.businessErrorMock); 137 } else { 138 return new Promise((resolve, reject) => { 139 resolve(); 140 }) 141 } 142 }, 143 setAccountExtraInfo: function (...args) { 144 console.warn("AppAccountManager.setAccountExtraInfo interface mocked in the Previewer. " + 145 "How this interface works on the Previewer may be different from that on a real device.") 146 const len = args.length 147 if (len > 0 && typeof args[len - 1] === 'function') { 148 args[len - 1].call(this, paramMock.businessErrorMock); 149 } else { 150 return new Promise((resolve, reject) => { 151 resolve(); 152 }) 153 } 154 }, 155 setAppAccountSyncEnable: function (...args) { 156 console.warn("AppAccountManager.setAppAccountSyncEnable interface mocked in the Previewer. " + 157 "How this interface works on the Previewer may be different from that on a real device.") 158 const len = args.length 159 if (len > 0 && typeof args[len - 1] === 'function') { 160 args[len - 1].call(this, paramMock.businessErrorMock); 161 } else { 162 return new Promise((resolve, reject) => { 163 resolve(); 164 }) 165 } 166 }, 167 setAssociatedData: function (...args) { 168 console.warn("AppAccountManager.setAssociatedData interface mocked in the Previewer. " + 169 "How this interface works on the Previewer may be different from that on a real device.") 170 const len = args.length 171 if (len > 0 && typeof args[len - 1] === 'function') { 172 args[len - 1].call(this, paramMock.businessErrorMock); 173 } else { 174 return new Promise((resolve, reject) => { 175 resolve(); 176 }) 177 } 178 }, 179 getAllAccessibleAccounts: function (...args) { 180 console.warn("AppAccountManager.getAllAccessibleAccounts interface mocked in the Previewer. " + 181 "How this interface works on the Previewer may be different from that on a real device.") 182 var appAccountInfoArrayMock = new Array(); 183 appAccountInfoArrayMock.push(AppAccountInfoMock); 184 const len = args.length 185 if (len > 0 && typeof args[len - 1] === 'function') { 186 args[len - 1].call(this, paramMock.businessErrorMock, appAccountInfoArrayMock); 187 } else { 188 return new Promise((resolve, reject) => { 189 resolve(appAccountInfoArrayMock); 190 }) 191 } 192 }, 193 getAllAccounts: function (...args) { 194 console.warn("AppAccountManager.getAllAccounts interface mocked in the Previewer. " + 195 "How this interface works on the Previewer may be different from that on a real device.") 196 var appAccountInfoArrayMock = new Array(); 197 appAccountInfoArrayMock.push(AppAccountInfoMock); 198 const len = args.length 199 if (len > 0 && typeof args[len - 1] === 'function') { 200 args[len - 1].call(this, paramMock.businessErrorMock, appAccountInfoArrayMock); 201 } else { 202 return new Promise((resolve, reject) => { 203 resolve(appAccountInfoArrayMock); 204 }) 205 } 206 }, 207 getAccountCredential: function (...args) { 208 console.warn("AppAccountManager.getAccountCredential interface mocked in the Previewer. " + 209 "How this interface works on the Previewer may be different from that on a real device.") 210 const len = args.length 211 if (len > 0 && typeof args[len - 1] === 'function') { 212 args[len - 1].call(this, paramMock.businessErrorMock, paramMock.paramStringMock); 213 } else { 214 return new Promise((resolve, reject) => { 215 resolve(paramMock.paramStringMock); 216 }) 217 } 218 }, 219 getAccountExtraInfo: function (...args) { 220 console.warn("AppAccountManager.getAccountExtraInfo interface mocked in the Previewer. " + 221 "How this interface works on the Previewer may be different from that on a real device.") 222 const len = args.length 223 if (len > 0 && typeof args[len - 1] === 'function') { 224 args[len - 1].call(this, paramMock.businessErrorMock, paramMock.paramStringMock); 225 } else { 226 return new Promise((resolve, reject) => { 227 resolve(paramMock.paramStringMock); 228 }) 229 } 230 }, 231 getAssociatedData: function (...args) { 232 console.warn("AppAccountManager.getAssociatedData interface mocked in the Previewer. " + 233 "How this interface works on the Previewer may be different from that on a real device.") 234 const len = args.length 235 if (len > 0 && typeof args[len - 1] === 'function') { 236 args[len - 1].call(this, paramMock.businessErrorMock, paramMock.paramStringMock); 237 } else { 238 return new Promise((resolve, reject) => { 239 resolve(paramMock.paramStringMock); 240 }) 241 } 242 }, 243 getAssociatedDataSync: function (...args) { 244 console.warn("AppAccountManager.getAssociatedDataSync interface mocked in the Previewer. " + 245 "How this interface works on the Previewer may be different from that on a real device.") 246 return paramMock.paramStringMock; 247 }, 248 on: function (...args) { 249 console.warn("AppAccountManager.on interface mocked in the Previewer. " + 250 "How this interface works on the Previewer may be different from that on a real device.") 251 var appAccountInfoArrayMock = new Array(); 252 appAccountInfoArrayMock.push(AppAccountInfoMock); 253 const len = args.length 254 if (len > 0 && typeof args[len - 1] === 'function') { 255 args[len - 1].call(this, appAccountInfoArrayMock); 256 } else { 257 return new Promise((resolve, reject) => { 258 resolve(appAccountInfoArrayMock); 259 }) 260 } 261 }, 262 off: function (...args) { 263 console.warn("AppAccountManager.off interface mocked in the Previewer. " + 264 "How this interface works on the Previewer may be different from that on a real device.") 265 var appAccountInfoArrayMock = new Array(); 266 appAccountInfoArrayMock.push(AppAccountInfoMock); 267 const len = args.length 268 if (len > 0 && typeof args[len - 1] === 'function') { 269 args[len - 1].call(this, appAccountInfoArrayMock); 270 } else { 271 return new Promise((resolve, reject) => { 272 resolve(appAccountInfoArrayMock); 273 }) 274 } 275 }, 276 authenticate: function (...args) { 277 console.warn("AppAccountManager.authenticate interface mocked in the Previewer. " + 278 "How this interface works on the Previewer may be different from that on a real device.") 279 const len = args.length 280 if (len > 0 && typeof args[len - 1] === 'function') { 281 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 282 } 283 }, 284 getOAuthToken: function (...args) { 285 console.warn("AppAccountManager.getOAuthToken interface mocked in the Previewer. " + 286 "How this interface works on the Previewer may be different from that on a real device.") 287 const len = args.length 288 if (len > 0 && typeof args[len - 1] === 'function') { 289 args[len - 1].call(this, paramMock.businessErrorMock, paramMock.paramStringMock); 290 } else { 291 return new Promise((resolve, reject) => { 292 resolve(paramMock.paramStringMock) 293 }) 294 } 295 }, 296 setOAuthToken: function (...args) { 297 console.warn("AppAccountManager.setOAuthToken interface mocked in the Previewer. " + 298 "How this interface works on the Previewer may be different from that on a real device.") 299 const len = args.length 300 if (len > 0 && typeof args[len - 1] === 'function') { 301 args[len - 1].call(this, paramMock.businessErrorMock); 302 } else { 303 return new Promise((resolve, reject) => { 304 resolve() 305 }) 306 } 307 }, 308 deleteOAuthToken: function (...args) { 309 console.warn("AppAccountManager.deleteOAuthToken interface mocked in the Previewer. " + 310 "How this interface works on the Previewer may be different from that on a real device.") 311 const len = args.length 312 if (len > 0 && typeof args[len - 1] === 'function') { 313 args[len - 1].call(this, paramMock.businessErrorMock); 314 } else { 315 return new Promise((resolve, reject) => { 316 resolve() 317 }) 318 } 319 }, 320 setOAuthTokenVisibility: function (...args) { 321 console.warn("AppAccountManager.setOAuthTokenVisibility interface mocked in the Previewer. " + 322 "How this interface works on the Previewer may be different from that on a real device.") 323 const len = args.length 324 if (len > 0 && typeof args[len - 1] === 'function') { 325 args[len - 1].call(this, paramMock.businessErrorMock); 326 } else { 327 return new Promise((resolve, reject) => { 328 resolve() 329 }) 330 } 331 }, 332 checkOAuthTokenVisibility: function (...args) { 333 console.warn("AppAccountManager.checkOAuthTokenVisibility interface mocked in the Previewer. " + 334 "How this interface works on the Previewer may be different from that on a real device.") 335 const len = args.length 336 if (len > 0 && typeof args[len - 1] === 'function') { 337 args[len - 1].call(this, paramMock.businessErrorMock); 338 } else { 339 return new Promise((resolve, reject) => { 340 resolve() 341 }) 342 } 343 }, 344 getAllOAuthTokens: function (...args) { 345 console.warn("AppAccountManager.getAllOAuthTokens interface mocked in the Previewer. " + 346 "How this interface works on the Previewer may be different from that on a real device.") 347 const len = args.length 348 if (len > 0 && typeof args[len - 1] === 'function') { 349 args[len - 1].call(this, paramMock.businessErrorMock, new Array(OAuthTokenInfoMock)); 350 } else { 351 return new Promise((resolve, reject) => { 352 resolve(new Array(OAuthTokenInfoMock)) 353 }) 354 } 355 }, 356 getOAuthList: function (...args) { 357 console.warn("AppAccountManager.getOAuthList interface mocked in the Previewer. " + 358 "How this interface works on the Previewer may be different from that on a real device.") 359 const len = args.length 360 if (len > 0 && typeof args[len - 1] === 'function') { 361 args[len - 1].call(this, paramMock.businessErrorMock, new Array(paramMock.paramStringMock)); 362 } else { 363 return new Promise((resolve, reject) => { 364 resolve(new Array(paramMock.paramStringMock)) 365 }) 366 } 367 }, 368 getAuthenticatorCallback: function (...args) { 369 console.warn("AppAccountManager.getAuthenticatorCallback interface mocked in the Previewer. " + 370 "How this interface works on the Previewer may be different from that on a real device.") 371 const len = args.length 372 if (len > 0 && typeof args[len - 1] === 'function') { 373 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 374 } else { 375 return new Promise((resolve, reject) => { 376 resolve(AuthenticatorCallbackMock) 377 }) 378 } 379 }, 380 getAuthenticatorInfo: function (...args) { 381 console.warn("AppAccountManager.getAuthenticatorInfo interface mocked in the Previewer. " + 382 "How this interface works on the Previewer may be different from that on a real device.") 383 const len = args.length 384 if (len > 0 && typeof args[len - 1] === 'function') { 385 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorInfoMock); 386 } else { 387 return new Promise((resolve, reject) => { 388 resolve(AuthenticatorInfoMock) 389 }) 390 } 391 }, 392 checkAccountLabels: function (...args) { 393 console.warn("AppAccountManager.checkAccountLabels interface mocked in the Previewer. " + 394 "How this interface works on the Previewer may be different from that on a real device.") 395 const len = args.length 396 if (len > 0 && typeof args[len - 1] === 'function') { 397 args[len - 1].call(this, paramMock.businessErrorMock, paramMock.paramBooleanMock); 398 } else { 399 return new Promise((resolve, reject) => { 400 resolve(paramMock.paramBooleanMock); 401 }) 402 } 403 }, 404 deleteAccountCredential: function (...args) { 405 console.warn("AppAccountManager.deleteAccountCredential interface mocked in the Previewer. " + 406 "How this interface works on the Previewer may be different from that on a real device.") 407 const len = args.length 408 if (len > 0 && typeof args[len - 1] === 'function') { 409 args[len - 1].call(this, paramMock.businessErrorMock); 410 } else { 411 return new Promise((resolve, reject) => { 412 resolve() 413 }) 414 } 415 }, 416 selectAccountsByOptions: function (...args) { 417 console.warn("AppAccountManager.selectAccountsByOptions interface mocked in the Previewer. " + 418 "How this interface works on the Previewer may be different from that on a real device.") 419 var appAccountInfoArrayMock = new Array(); 420 appAccountInfoArrayMock.push(AppAccountInfoMock); 421 const len = args.length 422 if (len > 0 && typeof args[len - 1] === 'function') { 423 args[len - 1].call(this, paramMock.businessErrorMock, appAccountInfoArrayMock); 424 } else { 425 return new Promise((resolve, reject) => { 426 resolve(appAccountInfoArrayMock); 427 }) 428 } 429 }, 430 verifyCredential: function (...args) { 431 console.warn("AppAccountManager.verifyCredential interface mocked in the Previewer. " + 432 "How this interface works on the Previewer may be different from that on a real device.") 433 const len = args.length 434 if (len > 0 && typeof args[len - 1] === 'function') { 435 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 436 } 437 }, 438 setAuthenticatorProperties: function (...args) { 439 console.warn("AppAccountManager.setAuthenticatorProperties interface mocked in the Previewer. " + 440 "How this interface works on the Previewer may be different from that on a real device.") 441 const len = args.length 442 if (len > 0 && typeof args[len - 1] === 'function') { 443 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 444 } 445 } 446 }; 447 const AuthenticatorCallbackMock = { 448 onResult: function (...args) { 449 console.warn("AuthenticatorCallback.onResult interface mocked in the Previewer. " + 450 "How this interface works on the Previewer may be different from that on a real device.") 451 }, 452 onRequestRedirected: function (...args) { 453 console.warn("AuthenticatorCallback.onRequestRedirected interface mocked in the Previewer. " + 454 "How this interface works on the Previewer may be different from that on a real device.") 455 }, 456 onRequestContinued: function (...args) { 457 console.warn("AuthenticatorCallback.onRequestContinued interface mocked in the Previewer. " + 458 "How this interface works on the Previewer may be different from that on a real device.") 459 }, 460 }; 461 const AuthenticatorClass = class Authenticator { 462 constructor() { 463 console.warn("appAccount.Authenticator constructor interface mocked in the Previewer. " + 464 "How this interface works on the Previewer may be different from that on a real device.") 465 this.addAccountImplicitly = function (...args) { 466 console.warn("Authenticator.addAccountImplicitly interface mocked in the Previewer. " + 467 "How this interface works on the Previewer may be different from that on a real device.") 468 const len = args.length 469 if (len > 0 && typeof args[len - 1] === 'function') { 470 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 471 } 472 }; 473 this.authenticate = function (...args) { 474 console.warn("Authenticator.authenticate interface mocked in the Previewer. " + 475 "How this interface works on the Previewer may be different from that on a real device.") 476 const len = args.length 477 if (len > 0 && typeof args[len - 1] === 'function') { 478 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 479 } 480 }; 481 this.verifyCredential = function (...args) { 482 console.warn("Authenticator.verifyCredential interface mocked in the Previewer. " + 483 "How this interface works on the Previewer may be different from that on a real device.") 484 const len = args.length 485 if (len > 0 && typeof args[len - 1] === 'function') { 486 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 487 } 488 }; 489 this.setProperties = function (...args) { 490 console.warn("Authenticator.setProperties interface mocked in the Previewer. " + 491 "How this interface works on the Previewer may be different from that on a real device.") 492 const len = args.length 493 if (len > 0 && typeof args[len - 1] === 'function') { 494 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 495 } 496 }; 497 this.checkAccountLabels = function (...args) { 498 console.warn("Authenticator.checkAccountLabels interface mocked in the Previewer. " + 499 "How this interface works on the Previewer may be different from that on a real device.") 500 const len = args.length 501 if (len > 0 && typeof args[len - 1] === 'function') { 502 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 503 } 504 }; 505 this.isAccountRemovable = function (...args) { 506 console.warn("Authenticator.isAccountRemovable interface mocked in the Previewer. " + 507 "How this interface works on the Previewer may be different from that on a real device.") 508 const len = args.length 509 if (len > 0 && typeof args[len - 1] === 'function') { 510 args[len - 1].call(this, paramMock.businessErrorMock, AuthenticatorCallbackMock); 511 } 512 }; 513 this.getRemoteObject = function (...args) { 514 console.warn("Authenticator.getRemoteObject interface mocked in the Previewer. " + 515 "How this interface works on the Previewer may be different from that on a real device.") 516 return new RemoteObjectClass; 517 }; 518 } 519 }; 520 const ConstantsMock = { 521 ACTION_ADD_ACCOUNT_IMPLICITLY: "addAccountImplicitly", 522 ACTION_AUTHENTICATE: "authenticate", 523 KEY_NAME: "name", 524 KEY_OWNER: "owner", 525 KEY_TOKEN: "token", 526 KEY_ACTION: "action", 527 KEY_AUTH_TYPE: "authType", 528 KEY_SESSION_ID: "sessionId", 529 KEY_CALLER_PID: "callerPid", 530 KEY_CALLER_UID: "callerUid", 531 KEY_CALLER_BUNDLE_NAME: "callerBundleName", 532 KEY_REQUIRED_LABELS: "requiredLabels", 533 KEY_BOOLEAN_RESULT: "booleanResult" 534 }; 535 const ResultCodeMock = { 536 SUCCESS: 0, 537 ERROR_ACCOUNT_NOT_EXIST: 10001, 538 ERROR_APP_ACCOUNT_SERVICE_EXCEPTION: 10002, 539 ERROR_INVALID_PASSWORD: 10003, 540 ERROR_INVALID_REQUEST: 10004, 541 ERROR_INVALID_RESPONSE: 10005, 542 ERROR_NETWORK_EXCEPTION: 10006, 543 ERROR_OAUTH_AUTHENTICATOR_NOT_EXIST: 10007, 544 ERROR_OAUTH_CANCELED: 10008, 545 ERROR_OAUTH_LIST_TOO_LARGE: 10009, 546 ERROR_OAUTH_SERVICE_BUSY: 10010, 547 ERROR_OAUTH_SERVICE_EXCEPTION: 10011, 548 ERROR_OAUTH_SESSION_NOT_EXIST: 10012, 549 ERROR_OAUTH_TIMEOUT: 10013, 550 ERROR_OAUTH_TOKEN_NOT_EXIST: 10014, 551 ERROR_OAUTH_TOKEN_TOO_MANY: 10015, 552 ERROR_OAUTH_UNSUPPORT_ACTION: 10016, 553 ERROR_OAUTH_UNSUPPORT_AUTH_TYPE: 10017, 554 ERROR_PERMISSION_DENIED: 10018 555 }; 556 const appAccount = { 557 createAppAccountManager: function (...args) { 558 console.warn("appAccount.createAppAccountManager interface mocked in the Previewer. " + 559 "How this interface works on the Previewer may be different from that on a real device.") 560 return appAccountManagerMock; 561 }, 562 AuthenticatorCallback: AuthenticatorCallbackMock, 563 Authenticator: AuthenticatorClass, 564 Constants: ConstantsMock, 565 ResultCode: ResultCodeMock, 566 } 567 return appAccount 568}