Best Atoum code snippet using generator.getReflectionTypeName
generator.php
Source:generator.php
...309 $mockedMethods .= "\t\t" . '{' . PHP_EOL;310 $mockedMethods .= "\t\t\t" . '$this->getMockController()->' . $methodName . ' = function() {' . PHP_EOL;311 if ($this->hasReturnType($method) === true && $this->isVoid($method) === false) {312 $returnType = $this->getReflectionType($method);313 $returnTypeName = $this->getReflectionTypeName($returnType);314 switch (true) {315 case $returnTypeName === 'self':316 case $returnTypeName === 'parent':317 case $returnTypeName === $class->getName():318 case interface_exists($returnTypeName) && $class->implementsInterface($returnTypeName):319 $mockedMethods .= "\t\t\t\t" . 'return $this;' . PHP_EOL;320 break;321 default:322 $mockedMethods .= "\t\t\t\t" . 'return null;' . PHP_EOL;323 }324 }325 $mockedMethods .= "\t\t\t" . '};' . PHP_EOL;326 $mockedMethods .= "\t\t" . '}' . PHP_EOL;327 $mockedMethods .= "\t\t" . '$return = $this->getMockController()->invoke(\'' . $methodName . '\', $arguments);' . PHP_EOL;328 if ($this->isVoid($method) === false) {329 $mockedMethods .= "\t\t" . 'return $return;' . PHP_EOL;330 }331 } else {332 $mockedMethods .= "\t\t" . 'if (isset($this->getMockController()->' . $methodName . ') === true)' . PHP_EOL;333 $mockedMethods .= "\t\t" . '{' . PHP_EOL;334 $mockedMethods .= "\t\t\t" . '$return = $this->getMockController()->invoke(\'' . $methodName . '\', $arguments);' . PHP_EOL;335 if ($this->isVoid($method) === false) {336 $mockedMethods .= "\t\t\t" . 'return $return;' . PHP_EOL;337 }338 $mockedMethods .= "\t\t" . '}' . PHP_EOL;339 $mockedMethods .= "\t\t" . 'else' . PHP_EOL;340 $mockedMethods .= "\t\t" . '{' . PHP_EOL;341 if ($methodName === '__call') {342 $mockedMethods .= "\t\t\t" . '$this->getMockController()->addCall(current(array_slice($arguments, 0, 1)), current(array_slice($arguments, 1)));' . PHP_EOL;343 }344 $mockedMethods .= "\t\t\t" . '$this->getMockController()->addCall(\'' . $methodName . '\', $arguments);' . PHP_EOL;345 if ($this->canCallParent()) {346 $mockedMethods .= "\t\t\t" . '$return = call_user_func_array(\'parent::' . $methodName . '\', $arguments);' . PHP_EOL;347 if ($this->isVoid($method) === false) {348 $mockedMethods .= "\t\t\t" . 'return $return;' . PHP_EOL;349 }350 } else {351 if ($this->hasReturnType($method) === true && $this->isVoid($method) === false) {352 $returnType = $this->getReflectionType($method);353 $returnTypeName = $this->getReflectionTypeName($returnType);354 switch (true) {355 case $returnTypeName === 'self':356 case $returnTypeName === 'parent':357 case $returnTypeName === $class->getName():358 case interface_exists($returnTypeName) && $class->implementsInterface($returnTypeName):359 $mockedMethods .= "\t\t\t" . 'return $this;' . PHP_EOL;360 break;361 default:362 $mockedMethods .= "\t\t\t" . 'return null;' . PHP_EOL;363 }364 }365 }366 $mockedMethods .= "\t\t" . '}' . PHP_EOL;367 }368 $mockedMethods .= "\t" . '}' . PHP_EOL;369 }370 }371 if ($class->isAbstract() && $this->allowUndefinedMethodsUsage === true && in_array('__call', $mockedMethodNames) === false) {372 $mockedMethods .= self::generate__call();373 $mockedMethodNames[] = '__call';374 }375 return $mockedMethods . self::generateGetMockedMethod($mockedMethodNames);376 }377 protected function generateMethodSignature(\reflectionMethod $method)378 {379 return ($method->isPublic() === true ? 'public' : 'protected') . ' function' . ($method->returnsReference() === false ? '' : ' &') . ' ' . $method->getName() . '(' . $this->getParametersSignature($method) . ')' . $this->getReturnType($method);380 }381 protected function generateClassCode(\reflectionClass $class, $mockNamespace, $mockClass)382 {383 return ($this->useStrictTypes ? 'declare(strict_types=1);' . PHP_EOL : '') .384 'namespace ' . ltrim($mockNamespace, '\\') . ' {' . PHP_EOL .385 'final class ' . $mockClass . ' extends \\' . $class->getName() . ' implements \\' . __NAMESPACE__ . '\\aggregator' . PHP_EOL .386 '{' . PHP_EOL .387 self::generateMockControllerMethods() .388 $this->generateClassMethodCode($class) .389 '}' . PHP_EOL .390 '}'391 ;392 }393 protected function generateInterfaceMethodCode(\reflectionClass $class, $addIteratorAggregate)394 {395 $mockedMethods = '';396 $mockedMethodNames = [];397 $hasConstructor = false;398 $methods = $class->getMethods(\reflectionMethod::IS_PUBLIC);399 if ($addIteratorAggregate === true) {400 $iteratorInterface = call_user_func($this->reflectionClassFactory, 'iteratorAggregate');401 $methods = array_merge($methods, $iteratorInterface->getMethods(\reflectionMethod::IS_PUBLIC));402 }403 foreach ($methods as $method) {404 $methodName = $method->getName();405 $mockedMethodNames[] = strtolower($methodName);406 $parameters = $this->getParameters($method);407 switch (true) {408 case $method->isFinal() === false && $method->isStatic() === false:409 $isConstructor = $methodName === '__construct';410 if ($isConstructor === true) {411 $hasConstructor = true;412 }413 $methodCode = "\t" . 'public function' . ($method->returnsReference() === false ? '' : ' &') . ' ' . $methodName . '(' . $this->getParametersSignature($method, $isConstructor) . ')' . $this->getReturnType($method) . PHP_EOL;414 $methodCode .= "\t" . '{' . PHP_EOL;415 if (self::hasVariadic($method) === true) {416 $methodCode .= "\t\t" . '$arguments = func_get_args();' . PHP_EOL;417 } else {418 $methodCode .= "\t\t" . '$arguments = array_merge(array(' . implode(', ', $parameters) . '), array_slice(func_get_args(), ' . count($parameters) . ($isConstructor === false ? '' : ', -1') . '));' . PHP_EOL;419 }420 if ($isConstructor === true) {421 if (self::hasVariadic($method) === true) {422 $methodCode .= "\t\t" . '$mockController = \atoum\atoum\mock\controller::get();' . PHP_EOL;423 } else {424 $methodCode .= "\t\t" . 'if ($mockController === null)' . PHP_EOL;425 $methodCode .= "\t\t" . '{' . PHP_EOL;426 $methodCode .= "\t\t\t" . '$mockController = \atoum\atoum\mock\controller::get();' . PHP_EOL;427 $methodCode .= "\t\t" . '}' . PHP_EOL;428 }429 $methodCode .= "\t\t" . 'if ($mockController !== null)' . PHP_EOL;430 $methodCode .= "\t\t" . '{' . PHP_EOL;431 $methodCode .= "\t\t\t" . '$this->setMockController($mockController);' . PHP_EOL;432 $methodCode .= "\t\t" . '}' . PHP_EOL;433 }434 $methodCode .= "\t\t" . 'if (isset($this->getMockController()->' . $methodName . ') === false)' . PHP_EOL;435 $methodCode .= "\t\t" . '{' . PHP_EOL;436 $methodCode .= "\t\t\t" . '$this->getMockController()->' . $methodName . ' = function() {' . PHP_EOL;437 if ($this->hasReturnType($method) === true && $this->isVoid($method) === false) {438 $returnType = $this->getReflectionType($method);439 $returnTypeName = $this->getReflectionTypeName($returnType);440 switch (true) {441 case $returnTypeName === 'self':442 case $returnTypeName === 'parent':443 case $returnTypeName === $class->getName():444 case interface_exists($returnTypeName) && $class->implementsInterface($returnTypeName):445 $methodCode .= "\t\t\t\t" . 'return $this;' . PHP_EOL;446 break;447 default:448 $methodCode .= "\t\t\t\t" . 'return null;' . PHP_EOL;449 }450 }451 $methodCode .= "\t\t\t" . '};' . PHP_EOL;452 $methodCode .= "\t\t" . '}' . PHP_EOL;453 if ($isConstructor === true) {454 $methodCode .= "\t\t" . '$this->getMockController()->invoke(\'' . $methodName . '\', $arguments);' . PHP_EOL;455 } else {456 $methodCode .= "\t\t" . '$return = $this->getMockController()->invoke(\'' . $methodName . '\', $arguments);' . PHP_EOL;457 if ($this->isVoid($method) === false) {458 $methodCode .= "\t\t" . 'return $return;' . PHP_EOL;459 }460 }461 $methodCode .= "\t" . '}' . PHP_EOL;462 break;463 case $method->isStatic() === true:464 $methodCode = "\t" . 'public static function' . ($method->returnsReference() === false ? '' : ' &') . ' ' . $methodName . '(' . $this->getParametersSignature($method) . ')' . PHP_EOL;465 $methodCode .= "\t" . '{' . PHP_EOL;466 $methodCode .= "\t\t" . '$arguments = array_merge(array(' . implode(', ', $parameters) . '), array_slice(func_get_args(), ' . count($parameters) . ', -1));' . PHP_EOL;467 if ($this->isVoid($method) === false) {468 $methodCode .= "\t\t" . 'return call_user_func_array(array(\'parent\', \'' . $methodName . '\'), $arguments);' . PHP_EOL;469 }470 $methodCode .= "\t" . '}' . PHP_EOL;471 break;472 default:473 $methodCode = '';474 }475 $mockedMethods .= $methodCode;476 }477 if ($hasConstructor === false) {478 $mockedMethods .= self::generateDefaultConstructor(false, $this->eachInstanceIsUnique);479 $mockedMethodNames[] = '__construct';480 }481 if ($this->allowUndefinedMethodsUsage === true) {482 $mockedMethods .= self::generate__call();483 $mockedMethodNames[] = '__call';484 }485 $mockedMethods .= self::generateGetMockedMethod($mockedMethodNames);486 return $mockedMethods;487 }488 protected function generateInterfaceCode(\reflectionClass $class, $mockNamespace, $mockClass)489 {490 $addIteratorAggregate = (491 $class->isInstantiable() === false492 && (493 $class->implementsInterface('traversable') === true494 && $class->implementsInterface('iterator') === false495 && $class->implementsInterface('iteratorAggregate') === false496 )497 );498 return 'namespace ' . ltrim($mockNamespace, '\\') . ' {' . PHP_EOL .499 'final class ' . $mockClass . ' implements \\' . ($addIteratorAggregate === false ? '' : 'iteratorAggregate, \\') . $class->getName() . ', \\' . __NAMESPACE__ . '\\aggregator' . PHP_EOL .500 '{' . PHP_EOL .501 self::generateMockControllerMethods() .502 $this->generateInterfaceMethodCode($class, $addIteratorAggregate) .503 '}' . PHP_EOL .504 '}'505 ;506 }507 protected function getNamespace($class)508 {509 $class = ltrim($class, '\\');510 $lastAntiSlash = strrpos($class, '\\');511 return '\\' . $this->getDefaultNamespace() . ($lastAntiSlash === false ? '' : '\\' . substr($class, 0, $lastAntiSlash));512 }513 protected function getReturnType(\reflectionMethod $method)514 {515 $returnTypeCode = '';516 if ($method->getName() === '__construct' || $this->hasReturnType($method) === false) {517 return $returnTypeCode;518 }519 $returnType = $this->getReflectionType($method);520 $returnTypeName = $this->getReflectionTypeName($returnType);521 $isNullable = $returnTypeName !== 'mixed' && $this->isNullable($returnType);522 switch (true) {523 case $returnTypeName === 'self':524 $returnTypeCode = ': ' . ($isNullable ? '?' : '') . '\\' . $method->getDeclaringClass()->getName();525 break;526 case $returnTypeName === 'parent':527 $returnTypeCode = ': ' . ($isNullable ? '?' : '') . '\\' . $method->getDeclaringClass()->getParentClass()->getName();528 break;529 case $returnType instanceof \reflectionUnionType:530 $types = array_map(531 function (\reflectionNamedType $type) {532 return (!$type->isBuiltin() ? '\\' : '') . $type->getName();533 },534 $returnType->getTypes()535 );536 $returnTypeCode = ': ' . implode('|', $types);537 break;538 case $returnType->isBuiltin():539 $returnTypeCode = ': ' . ($isNullable ? '?' : '') . $returnTypeName;540 break;541 default:542 $returnTypeCode = ': ' . ($isNullable ? '?' : '') . '\\' . $returnTypeName;543 }544 return $returnTypeCode;545 }546 protected function isNullable(\reflectionType $type)547 {548 return $type->allowsNull() === true;549 }550 protected function hasReturnType(\reflectionMethod $method)551 {552 $hasReturnType = $method->hasReturnType() === true;553 if (!$hasReturnType && version_compare(phpversion(), '8.1', '>=')) {554 $hasReturnType = $method->hasTentativeReturnType();555 }556 return $hasReturnType;557 }558 protected function getReflectionType(\reflectionMethod $method)559 {560 if (!$this->hasReturnType($method)) {561 return null;562 }563 $returnType = $method->getReturnType();564 if ($returnType === null && version_compare(phpversion(), '8.1', '>=') && $method->hasTentativeReturnType()) {565 $returnType = $method->getTentativeReturnType();566 }567 return $returnType;568 }569 protected function getReflectionTypeName(\reflectionType $type)570 {571 return $type instanceof \reflectionNamedType ? $type->getName() : (string) $type;572 }573 protected function isVoid(\reflectionMethod $method)574 {575 return $this->hasReturnType($method) ? $this->getReflectionTypeName($this->getReflectionType($method)) === 'void' : false;576 }577 protected static function isDefaultParameterNull(\ReflectionParameter $parameter)578 {579 return $parameter->allowsNull() &&580 $parameter->isDefaultValueAvailable() &&581 null === $parameter->getDefaultValue();582 }583 protected function getParameters(\reflectionMethod $method)584 {585 $parameters = [];586 $overload = $this->getOverload($method->getName());587 if ($overload === null) {588 foreach ($method->getParameters() as $parameter) {589 $parameters[] = ($parameter->isPassedByReference() === false ? '' : '& ') . '$' . $parameter->getName();...
getReflectionTypeName
Using AI Code Generation
1$gen = new ReflectionGenerator('1.php', 'test');2echo $gen->getReflectionTypeName();3$gen = new ReflectionGenerator('2.php', 'test');4echo $gen->getReflectionTypeName();5$gen = new ReflectionGenerator('3.php', 'test');6echo $gen->getReflectionTypeName();7$gen = new ReflectionGenerator('4.php', 'test');8echo $gen->getReflectionTypeName();9$gen = new ReflectionGenerator('5.php', 'test');10echo $gen->getReflectionTypeName();11$gen = new ReflectionGenerator('6.php', 'test');12echo $gen->getReflectionTypeName();13$gen = new ReflectionGenerator('7.php', 'test');14echo $gen->getReflectionTypeName();15$gen = new ReflectionGenerator('8.php', 'test');16echo $gen->getReflectionTypeName();17$gen = new ReflectionGenerator('9.php', 'test');18echo $gen->getReflectionTypeName();19$gen = new ReflectionGenerator('10.php', 'test');20echo $gen->getReflectionTypeName();21$gen = new ReflectionGenerator('11.php', 'test');22echo $gen->getReflectionTypeName();23$gen = new ReflectionGenerator('12.php', 'test');24echo $gen->getReflectionTypeName();25$gen = new ReflectionGenerator('13.php', 'test');
getReflectionTypeName
Using AI Code Generation
1$generator = new ReflectionGenerator('foo', '1.php');2$generator->getReflectionTypeName();3$generator = new ReflectionGenerator('foo', '2.php');4$generator->getReflectionTypeName();5$generator = new ReflectionGenerator('foo', '3.php');6$generator->getReflectionTypeName();7$generator = new ReflectionGenerator('foo', '4.php');8$generator->getReflectionTypeName();9$generator = new ReflectionGenerator('foo', '5.php');10$generator->getReflectionTypeName();11$generator = new ReflectionGenerator('foo', '6.php');12$generator->getReflectionTypeName();13$generator = new ReflectionGenerator('foo', '7.php');14$generator->getReflectionTypeName();15$generator = new ReflectionGenerator('foo', '8.php');16$generator->getReflectionTypeName();17$generator = new ReflectionGenerator('foo', '9.php');18$generator->getReflectionTypeName();19$generator = new ReflectionGenerator('foo', '10.php');20$generator->getReflectionTypeName();21$generator = new ReflectionGenerator('foo', '11.php');22$generator->getReflectionTypeName();23$generator = new ReflectionGenerator('foo', '12.php');24$generator->getReflectionTypeName();25$generator = new ReflectionGenerator('foo', '13.php');26$generator->getReflectionTypeName();
getReflectionTypeName
Using AI Code Generation
1$generator = new Generator();2$generator->getReflectionTypeName('ReflectionTypeName');3$generator = new Generator();4$generator->getReflectionTypeName('ReflectionTypeName');5PHP ReflectionType::getName() Method6mixed ReflectionType::getName()7$generator = new Generator();8$generator->getReflectionTypeName('ReflectionTypeName');9$generator = new Generator();10$generator->getReflectionTypeName('ReflectionTypeName');
getReflectionTypeName
Using AI Code Generation
1$gen = new ReflectionGenerator('1.php', '1.php');2echo $gen->getFileName();3echo $gen->getFunction()->getReflectionTypeName();4$gen = new ReflectionGenerator('2.php', '2.php');5echo $gen->getFileName();6echo $gen->getFunction()->getReflectionTypeName();
getReflectionTypeName
Using AI Code Generation
1require_once 'Zend/CodeGenerator/Php/Class.php';2$generator = new Zend_CodeGenerator_Php_Class();3$generator->setName('MyClass');4echo $generator->getReflectionTypeName();5require_once 'Zend/CodeGenerator/Php/Interface.php';6$generator = new Zend_CodeGenerator_Php_Interface();7$generator->setName('MyInterface');8echo $generator->getReflectionTypeName();9require_once 'Zend/CodeGenerator/Php/Docblock.php';10$generator = new Zend_CodeGenerator_Php_Docblock();11$generator->setShortDescription('My short description');12echo $generator->getReflectionTypeName();13require_once 'Zend/CodeGenerator/Php/Docblock/Tag.php';14$generator = new Zend_CodeGenerator_Php_Docblock_Tag();15$generator->setName('MyTag');16echo $generator->getReflectionTypeName();17require_once 'Zend/CodeGenerator/Php/Method.php';18$generator = new Zend_CodeGenerator_Php_Method();19$generator->setName('myMethod');20echo $generator->getReflectionTypeName();21require_once 'Zend/CodeGenerator/Php/Parameter.php';22$generator = new Zend_CodeGenerator_Php_Parameter();23$generator->setName('myParameter');24echo $generator->getReflectionTypeName();25require_once 'Zend/CodeGenerator/Php/Property.php';26$generator = new Zend_CodeGenerator_Php_Property();27$generator->setName('myProperty');28echo $generator->getReflectionTypeName();
getReflectionTypeName
Using AI Code Generation
1$gen = new ReflectionGenerator('1.php', '1.php');2$gen->getReflectionTypeName();3$gen = new ReflectionGenerator('1.php', '1.php');4$gen->getReflectionTypeName();5$gen = new ReflectionGenerator('1.php', '1.php');6$gen->getReflectionTypeName();7$gen = new ReflectionGenerator('1.php', '1.php');8$gen->getReflectionTypeName();9$gen = new ReflectionGenerator('1.php', '1.php');10$gen->getReflectionTypeName();11$gen = new ReflectionGenerator('1.php', '1.php');12$gen->getReflectionTypeName();13$gen = new ReflectionGenerator('1.php', '1.php');14$gen->getReflectionTypeName();15$gen = new ReflectionGenerator('1.php', '1.php');16$gen->getReflectionTypeName();17$gen = new ReflectionGenerator('1.php', '1.php');18$gen->getReflectionTypeName();19$gen = new ReflectionGenerator('1.php', '1.php');20$gen->getReflectionTypeName();21$gen = new ReflectionGenerator('1.php', '1.php');22$gen->getReflectionTypeName();23$gen = new ReflectionGenerator('1.php', '1.php');24$gen->getReflectionTypeName();25$gen = new ReflectionGenerator('1.php', '1.php');
getReflectionTypeName
Using AI Code Generation
1$gen = new Generator();2$gen->open('1.php');3$gen->getReflectionTypeName(1);4$gen = new Generator();5$gen->open('2.php');6$gen->getReflectionTypeName(1);7$gen = new Generator();8$gen->open('3.php');9$gen->getReflectionTypeName(1);10$gen = new Generator();11$gen->open('4.php');12$gen->getReflectionTypeName(1);13$gen = new Generator();14$gen->open('5.php');15$gen->getReflectionTypeName(1);16$gen = new Generator();17$gen->open('6.php');18$gen->getReflectionTypeName(1);19$gen = new Generator();20$gen->open('7.php');21$gen->getReflectionTypeName(1);22$gen = new Generator();23$gen->open('8.php');24$gen->getReflectionTypeName(1);25$gen = new Generator();26$gen->open('9.php');27$gen->getReflectionTypeName(1);28$gen = new Generator();29$gen->open('10.php');30$gen->getReflectionTypeName(1);31$gen = new Generator();32$gen->open('11.php');33$gen->getReflectionTypeName(1);34$gen = new Generator();35$gen->open('12.php');36$gen->getReflectionTypeName(1);
getReflectionTypeName
Using AI Code Generation
1$generator = new Generator();2$generator->getReflectionTypeName('string');3Related Posts: PHP | ReflectionClass::getMethods() Function4PHP | ReflectionClass::getProperties() Function5PHP | ReflectionClass::getConstructor() Function6PHP | ReflectionClass::getConstant() Function7PHP | ReflectionClass::getConstants() Function8PHP | ReflectionClass::getDocComment() Function9PHP | ReflectionClass::getFileName() Function10PHP | ReflectionClass::getInterfaceNames() Function11PHP | ReflectionClass::getInterfaces() Function12PHP | ReflectionClass::getMethods() Function13PHP | ReflectionClass::getModifiers() Function14PHP | ReflectionClass::getNamespaceName() Function15PHP | ReflectionClass::getParentClass() Function16PHP | ReflectionClass::getProperties() Function17PHP | ReflectionClass::getProperty() Function18PHP | ReflectionClass::getShortName() Function19PHP | ReflectionClass::getStaticProperties() Function20PHP | ReflectionClass::getStaticPropertyValue() Function21PHP | ReflectionClass::getTraitAliases() Function22PHP | ReflectionClass::getTraitNames() Function23PHP | ReflectionClass::getTraits() Function24PHP | ReflectionClass::hasConstant() Function25PHP | ReflectionClass::hasMethod() Function26PHP | ReflectionClass::hasProperty() Function27PHP | ReflectionClass::implementsInterface() Function28PHP | ReflectionClass::inNamespace() Function29PHP | ReflectionClass::isAbstract() Function30PHP | ReflectionClass::isCloneable() Function31PHP | ReflectionClass::isFinal() Function32PHP | ReflectionClass::isInstance() Function33PHP | ReflectionClass::isInstantiable() Function34PHP | ReflectionClass::isInterface() Function35PHP | ReflectionClass::isInternal() Function36PHP | ReflectionClass::isIterateable() Function37PHP | ReflectionClass::isSubclassOf() Function38PHP | ReflectionClass::isTrait() Function39PHP | ReflectionClass::isUserDefined() Function40PHP | ReflectionClass::newInstance() Function41PHP | ReflectionClass::newInstanceArgs() Function42PHP | ReflectionClass::newInstanceWithoutConstructor() Function43PHP | ReflectionClass::setStaticPropertyValue() Function44PHP | ReflectionClass::__clone() Function45PHP | ReflectionClass::__construct() Function46PHP | ReflectionClass::__toString() Function47PHP | ReflectionClass::__wakeup() Function48PHP | ReflectionFunction::getClosure() Function
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Execute automation tests with getReflectionTypeName on a cloud-based Grid of 3000+ real browsers and operating systems for both web and mobile applications.
Test now for FreeGet 100 minutes of automation test minutes FREE!!