name)); self::assertSame('ABS', $functionDefinition->name); self::assertSame(Category::CATEGORY_MATH_AND_TRIG, $functionDefinition->category); self::assertIsCallable($functionDefinition->functionCall); self::assertSame('1', $functionDefinition->argumentCount); } public function testReadOnlyObjectAccess(): void { self::expectException(Exception::class); self::expectExceptionMessage('Action not permitted'); $functionDefinition = new XlAbs(); $functionDefinition->name = 'NO LONGER ABS'; } public function testUnsetBlockedAsObject(): void { self::expectException(Exception::class); self::expectExceptionMessage('Action not permitted'); $functionDefinition = new XlAbs(); unset($functionDefinition->name); } }