1 /* 2 * Copyright (c) 2025 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 16 #include <gtest/gtest.h> 17 #include "query_helper.h" 18 19 namespace OHOS::DistributedKv { 20 using namespace testing; 21 using namespace std; 22 23 class QueryHelperUnitTest : public testing::Test { 24 public: SetUpTestCase(void)25 static void SetUpTestCase(void) {} TearDownTestCase(void)26 static void TearDownTestCase(void) {} SetUp()27 void SetUp() {} TearDown()28 void TearDown() {} 29 }; 30 31 /** 32 * @tc.name: StringToDbQuery001 33 * @tc.desc: in order to test HandleEqualTo. 34 * @tc.type: FUNC 35 * @tc.require: 36 * @tc.author: caozhijun 37 */ 38 HWTEST_F(QueryHelperUnitTest, StringToDbQuery001, testing::ext::TestSize.Level0) 39 { 40 bool isSuccess = false; 41 string query = "^EQUAL INTEGER TYPE_INTEGER 0"; 42 (void)QueryHelper::StringToDbQuery(query, isSuccess); 43 EXPECT_TRUE(isSuccess); 44 45 isSuccess = false; 46 query = "^EQUAL LONG TYPE_LONG 1l"; 47 (void)QueryHelper::StringToDbQuery(query, isSuccess); 48 EXPECT_TRUE(isSuccess); 49 50 isSuccess = false; 51 query = "^EQUAL DOUBLE TYPE_DOUBLE 2.1"; 52 (void)QueryHelper::StringToDbQuery(query, isSuccess); 53 EXPECT_TRUE(isSuccess); 54 55 isSuccess = false; 56 query = "^EQUAL BOOL TYPE_BOOLEAN 3"; 57 (void)QueryHelper::StringToDbQuery(query, isSuccess); 58 EXPECT_TRUE(isSuccess); 59 60 isSuccess = false; 61 query = "^EQUAL STRING TYPE_STRING dafafg"; 62 (void)QueryHelper::StringToDbQuery(query, isSuccess); 63 EXPECT_TRUE(isSuccess); 64 65 query = "^EQUAL CHAR STRING 4"; 66 (void)QueryHelper::StringToDbQuery(query, isSuccess); 67 EXPECT_FALSE(isSuccess); 68 } 69 70 /** 71 * @tc.name: StringToDbQuery002 72 * @tc.desc: in order to test HandleNotEqualTo. 73 * @tc.type: FUNC 74 * @tc.require: 75 * @tc.author: caozhijun 76 */ 77 HWTEST_F(QueryHelperUnitTest, StringToDbQuery002, testing::ext::TestSize.Level0) 78 { 79 bool isOk = false; 80 string query = "^NOT_EQUAL INTEGER TYPE_INTEGER 0"; 81 (void)QueryHelper::StringToDbQuery(query, isOk); 82 EXPECT_TRUE(isOk); 83 84 isOk = false; 85 query = "^NOT_EQUAL LONG TYPE_LONG 1l"; 86 (void)QueryHelper::StringToDbQuery(query, isOk); 87 EXPECT_TRUE(isOk); 88 89 isOk = false; 90 query = "^NOT_EQUAL DOUBLE TYPE_DOUBLE 2.1"; 91 (void)QueryHelper::StringToDbQuery(query, isOk); 92 EXPECT_TRUE(isOk); 93 94 isOk = false; 95 query = "^NOT_EQUAL BOOL TYPE_BOOLEAN 3"; 96 (void)QueryHelper::StringToDbQuery(query, isOk); 97 EXPECT_TRUE(isOk); 98 99 isOk = false; 100 query = "^NOT_EQUAL STRING TYPE_STRING dafafg"; 101 (void)QueryHelper::StringToDbQuery(query, isOk); 102 EXPECT_TRUE(isOk); 103 104 query = "^NOT_EQUAL CHAR STRING 4"; 105 (void)QueryHelper::StringToDbQuery(query, isOk); 106 EXPECT_FALSE(isOk); 107 } 108 109 /** 110 * @tc.name: StringToDbQuery003 111 * @tc.desc: in order to test HandleGreaterThan. 112 * @tc.type: FUNC 113 * @tc.require: 114 * @tc.author: caozhijun 115 */ 116 HWTEST_F(QueryHelperUnitTest, StringToDbQuery003, testing::ext::TestSize.Level0) 117 { 118 bool isSuccess = false; 119 string query = "^GREATER INTEGER TYPE_INTEGER 2"; 120 (void)QueryHelper::StringToDbQuery(query, isSuccess); 121 EXPECT_TRUE(isSuccess); 122 123 isSuccess = false; 124 query = "^GREATER LONG TYPE_LONG 3l"; 125 (void)QueryHelper::StringToDbQuery(query, isSuccess); 126 EXPECT_TRUE(isSuccess); 127 128 isSuccess = false; 129 query = "^GREATER DOUBLE TYPE_DOUBLE 4.1"; 130 (void)QueryHelper::StringToDbQuery(query, isSuccess); 131 EXPECT_TRUE(isSuccess); 132 133 isSuccess = false; 134 query = "^GREATER STRING TYPE_STRING gohkhkhk"; 135 (void)QueryHelper::StringToDbQuery(query, isSuccess); 136 EXPECT_TRUE(isSuccess); 137 138 query = "^GREATER BOOL STRING 5"; 139 (void)QueryHelper::StringToDbQuery(query, isSuccess); 140 EXPECT_FALSE(isSuccess); 141 } 142 143 /** 144 * @tc.name: StringToDbQuery004 145 * @tc.desc: in order to test HandleGreaterThanOrEqualTo. 146 * @tc.type: FUNC 147 * @tc.require: 148 * @tc.author: caozhijun 149 */ 150 HWTEST_F(QueryHelperUnitTest, StringToDbQuery004, testing::ext::TestSize.Level0) 151 { 152 bool isSuccess = false; 153 string query = "^GREATER_EQUAL INTEGER TYPE_INTEGER 0"; 154 (void)QueryHelper::StringToDbQuery(query, isSuccess); 155 EXPECT_TRUE(isSuccess); 156 157 isSuccess = false; 158 query = "^GREATER_EQUAL LONG TYPE_LONG 2l"; 159 (void)QueryHelper::StringToDbQuery(query, isSuccess); 160 EXPECT_TRUE(isSuccess); 161 162 isSuccess = false; 163 query = "^GREATER_EQUAL DOUBLE TYPE_DOUBLE 4.1"; 164 (void)QueryHelper::StringToDbQuery(query, isSuccess); 165 EXPECT_TRUE(isSuccess); 166 167 isSuccess = false; 168 query = "^GREATER_EQUAL STRING TYPE_STRING lofhfgh"; 169 (void)QueryHelper::StringToDbQuery(query, isSuccess); 170 EXPECT_TRUE(isSuccess); 171 172 query = "^GREATER_EQUAL CHAR STRING 6"; 173 (void)QueryHelper::StringToDbQuery(query, isSuccess); 174 EXPECT_FALSE(isSuccess); 175 } 176 177 /** 178 * @tc.name: StringToDbQuery005 179 * @tc.desc: in order to test HandleLessThanOrEqualTo. 180 * @tc.type: FUNC 181 * @tc.require: 182 * @tc.author: caozhijun 183 */ 184 HWTEST_F(QueryHelperUnitTest, StringToDbQuery005, testing::ext::TestSize.Level0) 185 { 186 bool isSuccess = false; 187 string query = "^LESS_EQUAL INTEGER TYPE_INTEGER 1"; 188 (void)QueryHelper::StringToDbQuery(query, isSuccess); 189 EXPECT_TRUE(isSuccess); 190 191 isSuccess = false; 192 query = "^LESS_EQUAL LONG TYPE_LONG 3l"; 193 (void)QueryHelper::StringToDbQuery(query, isSuccess); 194 EXPECT_TRUE(isSuccess); 195 196 isSuccess = false; 197 query = "^LESS_EQUAL DOUBLE TYPE_DOUBLE 5.1"; 198 (void)QueryHelper::StringToDbQuery(query, isSuccess); 199 EXPECT_TRUE(isSuccess); 200 201 isSuccess = false; 202 query = "^LESS_EQUAL STRING TYPE_STRING lofhfgh"; 203 (void)QueryHelper::StringToDbQuery(query, isSuccess); 204 EXPECT_TRUE(isSuccess); 205 206 query = "^LESS_EQUAL CHAR STRING a"; 207 (void)QueryHelper::StringToDbQuery(query, isSuccess); 208 EXPECT_FALSE(isSuccess); 209 } 210 211 /** 212 * @tc.name: StringToDbQuery006 213 * @tc.desc: in order to test Handle's HandleIsNull. 214 * @tc.type: FUNC 215 * @tc.require: 216 * @tc.author: caozhijun 217 */ 218 HWTEST_F(QueryHelperUnitTest, StringToDbQuery006, testing::ext::TestSize.Level0) 219 { 220 bool isSuccess = true; 221 string query = "^IS_NULL"; 222 (void)QueryHelper::StringToDbQuery(query, isSuccess); 223 EXPECT_FALSE(isSuccess); 224 225 isSuccess = false; 226 query = "^IS_NULL field1"; 227 (void)QueryHelper::StringToDbQuery(query, isSuccess); 228 EXPECT_TRUE(isSuccess); 229 } 230 231 /** 232 * @tc.name: StringToDbQuery007 233 * @tc.desc: in order to test Handle's HandleIn. 234 * @tc.type: FUNC 235 * @tc.require: 236 * @tc.author: caozhijun 237 */ 238 HWTEST_F(QueryHelperUnitTest, StringToDbQuery007, testing::ext::TestSize.Level0) 239 { 240 bool isSuccess = true; 241 string query = "^IN"; 242 (void)QueryHelper::StringToDbQuery(query, isSuccess); 243 EXPECT_FALSE(isSuccess); 244 isSuccess = true; 245 query = "^IN INTEGER grade other ^START"; 246 (void)QueryHelper::StringToDbQuery(query, isSuccess); 247 EXPECT_FALSE(isSuccess); 248 249 query = "^IN INTEGER old ^START ^END"; 250 (void)QueryHelper::StringToDbQuery(query, isSuccess); 251 EXPECT_TRUE(isSuccess); 252 isSuccess = false; 253 query = "^IN INTEGER old ^START 95 ^END"; 254 (void)QueryHelper::StringToDbQuery(query, isSuccess); 255 EXPECT_TRUE(isSuccess); 256 isSuccess = false; 257 query = "^IN INTEGER grade ^START 123"; 258 (void)QueryHelper::StringToDbQuery(query, isSuccess); 259 EXPECT_TRUE(isSuccess); 260 261 isSuccess = false; 262 query = "^IN LONG salary ^START ^END"; 263 (void)QueryHelper::StringToDbQuery(query, isSuccess); 264 EXPECT_TRUE(isSuccess); 265 isSuccess = false; 266 query = "^IN LONG grade ^START 650 ^END"; 267 (void)QueryHelper::StringToDbQuery(query, isSuccess); 268 EXPECT_TRUE(isSuccess); 269 isSuccess = false; 270 query = "^IN LONG range ^START 123478"; 271 (void)QueryHelper::StringToDbQuery(query, isSuccess); 272 EXPECT_TRUE(isSuccess); 273 274 isSuccess = false; 275 query = "^IN DOUBLE 1234 ^START ^END"; 276 (void)QueryHelper::StringToDbQuery(query, isSuccess); 277 EXPECT_TRUE(isSuccess); 278 isSuccess = false; 279 query = "^IN DOUBLE salary ^START 129456 ^END"; 280 (void)QueryHelper::StringToDbQuery(query, isSuccess); 281 EXPECT_TRUE(isSuccess); 282 isSuccess = false; 283 query = "^IN DOUBLE salary ^START 16478"; 284 (void)QueryHelper::StringToDbQuery(query, isSuccess); 285 EXPECT_TRUE(isSuccess); 286 } 287 288 /** 289 * @tc.name: StringToDbQuery008 290 * @tc.desc: in order to test Handle's HandleIn. 291 * @tc.type: FUNC 292 * @tc.require: 293 * @tc.author: caozhijun 294 */ 295 HWTEST_F(QueryHelperUnitTest, StringToDbQuery008, testing::ext::TestSize.Level0) 296 { 297 bool isSuccess = false; 298 string query = "^IN STRING fieldname ^START ^END"; 299 (void)QueryHelper::StringToDbQuery(query, isSuccess); 300 EXPECT_TRUE(isSuccess); 301 isSuccess = false; 302 query = "^IN STRING fieldname ^START xadada ^END"; 303 (void)QueryHelper::StringToDbQuery(query, isSuccess); 304 EXPECT_TRUE(isSuccess); 305 isSuccess = false; 306 query = "^IN STRING fieldname ^START other"; 307 (void)QueryHelper::StringToDbQuery(query, isSuccess); 308 EXPECT_TRUE(isSuccess); 309 310 query = "^IN CHAR fieldname ^START other"; 311 (void)QueryHelper::StringToDbQuery(query, isSuccess); 312 EXPECT_FALSE(isSuccess); 313 } 314 315 /** 316 * @tc.name: StringToDbQuery009 317 * @tc.desc: in order to test Handle's HandleNotIn. 318 * @tc.type: FUNC 319 * @tc.require: 320 * @tc.author: caozhijun 321 */ 322 HWTEST_F(QueryHelperUnitTest, StringToDbQuery009, testing::ext::TestSize.Level0) 323 { 324 bool isSuccess = true; 325 string query = "^NOT_IN"; 326 (void)QueryHelper::StringToDbQuery(query, isSuccess); 327 EXPECT_FALSE(isSuccess); 328 isSuccess = true; 329 query = "^IN INTEGER 12 other ^START"; 330 (void)QueryHelper::StringToDbQuery(query, isSuccess); 331 EXPECT_FALSE(isSuccess); 332 333 isSuccess = false; 334 query = "^NOT_IN INTEGER name ^START ^END"; 335 (void)QueryHelper::StringToDbQuery(query, isSuccess); 336 EXPECT_TRUE(isSuccess); 337 isSuccess = false; 338 query = "^NOT_IN LONG salary ^START 10000 ^END"; 339 (void)QueryHelper::StringToDbQuery(query, isSuccess); 340 EXPECT_TRUE(isSuccess); 341 isSuccess = false; 342 query = "^NOT_IN DOUBLE height ^START 175"; 343 (void)QueryHelper::StringToDbQuery(query, isSuccess); 344 EXPECT_TRUE(isSuccess); 345 346 isSuccess = false; 347 query = "^NOT_IN STRING 14578 ^START fieldname"; 348 (void)QueryHelper::StringToDbQuery(query, isSuccess); 349 EXPECT_TRUE(isSuccess); 350 351 query = "^NOT_IN CHAR department ^START other"; 352 (void)QueryHelper::StringToDbQuery(query, isSuccess); 353 EXPECT_FALSE(isSuccess); 354 } 355 356 /** 357 * @tc.name: StringToDbQuery010 358 * @tc.desc: in order to test Handle's HandleLike. 359 * @tc.type: FUNC 360 * @tc.require: 361 * @tc.author: caozhijun 362 */ 363 HWTEST_F(QueryHelperUnitTest, StringToDbQuery010, testing::ext::TestSize.Level0) 364 { 365 bool isSuccess = true; 366 string query = "^LIKE"; 367 (void)QueryHelper::StringToDbQuery(query, isSuccess); 368 EXPECT_FALSE(isSuccess); 369 370 query = "^LIKE Name Mr*"; 371 (void)QueryHelper::StringToDbQuery(query, isSuccess); 372 EXPECT_TRUE(isSuccess); 373 } 374 375 /** 376 * @tc.name: StringToDbQuery011 377 * @tc.desc: in order to test Handle's HandleNotLike. 378 * @tc.type: FUNC 379 * @tc.require: 380 * @tc.author: caozhijun 381 */ 382 HWTEST_F(QueryHelperUnitTest, StringToDbQuery011, testing::ext::TestSize.Level0) 383 { 384 bool isSuccess = true; 385 string query = "^NOT_LIKE"; 386 (void)QueryHelper::StringToDbQuery(query, isSuccess); 387 EXPECT_FALSE(isSuccess); 388 389 query = "^NOT_LIKE Name Wan*"; 390 (void)QueryHelper::StringToDbQuery(query, isSuccess); 391 EXPECT_TRUE(isSuccess); 392 } 393 394 /** 395 * @tc.name: StringToDbQuery012 396 * @tc.desc: in order to test Handle's HandleAnd. 397 * @tc.type: FUNC 398 * @tc.require: 399 * @tc.author: caozhijun 400 */ 401 HWTEST_F(QueryHelperUnitTest, StringToDbQuery012, testing::ext::TestSize.Level0) 402 { 403 bool isSuccess = false; 404 string query = "^AND"; 405 (void)QueryHelper::StringToDbQuery(query, isSuccess); 406 EXPECT_TRUE(isSuccess); 407 } 408 409 /** 410 * @tc.name: StringToDbQuery013 411 * @tc.desc: in order to test Handle's HandleOr. 412 * @tc.type: FUNC 413 * @tc.require: 414 * @tc.author: caozhijun 415 */ 416 HWTEST_F(QueryHelperUnitTest, StringToDbQuery013, testing::ext::TestSize.Level0) 417 { 418 bool isSuccess = false; 419 string query = "^OR"; 420 (void)QueryHelper::StringToDbQuery(query, isSuccess); 421 EXPECT_TRUE(isSuccess); 422 } 423 424 /** 425 * @tc.name: StringToDbQuery014 426 * @tc.desc: in order to test Handle's HandleOrderByAsc. 427 * @tc.type: FUNC 428 * @tc.require: 429 * @tc.author: caozhijun 430 */ 431 HWTEST_F(QueryHelperUnitTest, StringToDbQuery014, testing::ext::TestSize.Level0) 432 { 433 bool isSuccess = true; 434 string query = "^ASC"; 435 (void)QueryHelper::StringToDbQuery(query, isSuccess); 436 EXPECT_FALSE(isSuccess); 437 438 query = "^ASC old"; 439 (void)QueryHelper::StringToDbQuery(query, isSuccess); 440 EXPECT_TRUE(isSuccess); 441 } 442 443 /** 444 * @tc.name: StringToDbQuery015 445 * @tc.desc: in order to test Handle's HandleOrderByDesc. 446 * @tc.type: FUNC 447 * @tc.require: 448 * @tc.author: caozhijun 449 */ 450 HWTEST_F(QueryHelperUnitTest, StringToDbQuery015, testing::ext::TestSize.Level0) 451 { 452 bool isSuccess = true; 453 string query = "^DESC"; 454 (void)QueryHelper::StringToDbQuery(query, isSuccess); 455 EXPECT_FALSE(isSuccess); 456 457 query = "^DESC grade"; 458 (void)QueryHelper::StringToDbQuery(query, isSuccess); 459 EXPECT_TRUE(isSuccess); 460 } 461 462 /** 463 * @tc.name: StringToDbQuery016 464 * @tc.desc: in order to test Handle's HandleOrderByWriteTime. 465 * @tc.type: FUNC 466 * @tc.require: 467 * @tc.author: caozhijun 468 */ 469 HWTEST_F(QueryHelperUnitTest, StringToDbQuery016, testing::ext::TestSize.Level0) 470 { 471 bool isSuccess = true; 472 string query = "^OrderByWriteTime"; 473 (void)QueryHelper::StringToDbQuery(query, isSuccess); 474 EXPECT_FALSE(isSuccess); 475 476 query = "^OrderByWriteTime salary"; 477 (void)QueryHelper::StringToDbQuery(query, isSuccess); 478 EXPECT_TRUE(isSuccess); 479 } 480 481 /** 482 * @tc.name: StringToDbQuery017 483 * @tc.desc: in order to test Handle's HandleLimit. 484 * @tc.type: FUNC 485 * @tc.require: 486 * @tc.author: caozhijun 487 */ 488 HWTEST_F(QueryHelperUnitTest, StringToDbQuery017, testing::ext::TestSize.Level0) 489 { 490 bool isSuccess = true; 491 string query = "^LIMIT"; 492 (void)QueryHelper::StringToDbQuery(query, isSuccess); 493 EXPECT_FALSE(isSuccess); 494 495 query = "^LIMIT 0 5"; 496 (void)QueryHelper::StringToDbQuery(query, isSuccess); 497 EXPECT_TRUE(isSuccess); 498 } 499 500 /** 501 * @tc.name: StringToDbQuery018 502 * @tc.desc: in order to test Handle's HandleExtra. 503 * @tc.type: FUNC 504 * @tc.require: 505 * @tc.author: caozhijun 506 */ 507 HWTEST_F(QueryHelperUnitTest, StringToDbQuery018, testing::ext::TestSize.Level0) 508 { 509 bool isSuccess = false; 510 string query = "^BEGIN_GROUP"; 511 (void)QueryHelper::StringToDbQuery(query, isSuccess); 512 EXPECT_TRUE(isSuccess); 513 514 isSuccess = false; 515 query = "^END_GROUP"; 516 (void)QueryHelper::StringToDbQuery(query, isSuccess); 517 EXPECT_TRUE(isSuccess); 518 519 query = "^KEY_PREFIX"; 520 (void)QueryHelper::StringToDbQuery(query, isSuccess); 521 EXPECT_FALSE(isSuccess); 522 query = "^KEY_PREFIX _XXX"; 523 (void)QueryHelper::StringToDbQuery(query, isSuccess); 524 EXPECT_TRUE(isSuccess); 525 526 query = "^IS_NOT_NULL"; 527 (void)QueryHelper::StringToDbQuery(query, isSuccess); 528 EXPECT_FALSE(isSuccess); 529 query = "^IS_NOT_NULL NAME"; 530 (void)QueryHelper::StringToDbQuery(query, isSuccess); 531 EXPECT_TRUE(isSuccess); 532 533 query = "^DEVICE_ID"; 534 (void)QueryHelper::StringToDbQuery(query, isSuccess); 535 EXPECT_FALSE(isSuccess); 536 isSuccess = true; 537 query = "^DEVICE_ID 4DAAAJFGKAGNGM ^KEY_PREFIX"; 538 (void)QueryHelper::StringToDbQuery(query, isSuccess); 539 EXPECT_FALSE(isSuccess); 540 541 query = "^DEVICE_ID FJGKGNMGJM4DAFA78"; 542 (void)QueryHelper::StringToDbQuery(query, isSuccess); 543 EXPECT_TRUE(isSuccess); 544 545 query = "^SUGGEST_INDEX"; 546 (void)QueryHelper::StringToDbQuery(query, isSuccess); 547 EXPECT_FALSE(isSuccess); 548 query = "^SUGGEST_INDEX xadada"; 549 (void)QueryHelper::StringToDbQuery(query, isSuccess); 550 EXPECT_TRUE(isSuccess); 551 552 query = "^IN_KEYS xxxx instart"; 553 (void)QueryHelper::StringToDbQuery(query, isSuccess); 554 EXPECT_FALSE(isSuccess); 555 } 556 557 /** 558 * @tc.name: StringToDbQuery019 559 * @tc.desc: in order to test HandleLessThan. 560 * @tc.type: FUNC 561 * @tc.require: 562 * @tc.author: caozhijun 563 */ 564 HWTEST_F(QueryHelperUnitTest, StringToDbQuery019, testing::ext::TestSize.Level0) 565 { 566 bool isSuccess = false; 567 string query = "^LESS INTEGER TYPE_INTEGER 1"; 568 (void)QueryHelper::StringToDbQuery(query, isSuccess); 569 EXPECT_TRUE(isSuccess); 570 571 isSuccess = false; 572 query = "^LESS LONG TYPE_LONG 2l"; 573 (void)QueryHelper::StringToDbQuery(query, isSuccess); 574 EXPECT_TRUE(isSuccess); 575 576 isSuccess = false; 577 query = "^LESS DOUBLE TYPE_DOUBLE 3.1"; 578 (void)QueryHelper::StringToDbQuery(query, isSuccess); 579 EXPECT_TRUE(isSuccess); 580 581 isSuccess = false; 582 query = "^LESS STRING TYPE_STRING bnnjjjh"; 583 (void)QueryHelper::StringToDbQuery(query, isSuccess); 584 EXPECT_TRUE(isSuccess); 585 586 query = "^LESS BOOL STRING 5"; 587 (void)QueryHelper::StringToDbQuery(query, isSuccess); 588 EXPECT_FALSE(isSuccess); 589 } 590 }