From f121e8c814e4bff12d41bf133994777f712cafc4 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gulyam Date: Sat, 4 Mar 2017 00:36:55 +0300 Subject: [PATCH 1/9] wip --- phpunit.xml | 2 ++ src/Naneau/Obfuscator/Obfuscator.php | 20 ++++++++++++++------ tests/Base.php | 7 +++++++ tests/Mock/Obfuscator.php | 19 +++++++++++++++++++ tests/ObfuscateTest.php | 27 +++++++++++++++++++++++++++ tests/phpunit.php | 9 +++++++++ 6 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 phpunit.xml create mode 100644 tests/Base.php create mode 100644 tests/Mock/Obfuscator.php create mode 100644 tests/ObfuscateTest.php create mode 100644 tests/phpunit.php diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..48e0074 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/Naneau/Obfuscator/Obfuscator.php b/src/Naneau/Obfuscator/Obfuscator.php index fc81a5c..e7d33a2 100644 --- a/src/Naneau/Obfuscator/Obfuscator.php +++ b/src/Naneau/Obfuscator/Obfuscator.php @@ -243,12 +243,7 @@ private function obfuscateFileContents($file, $ignoreError) // Input code $source = php_strip_whitespace($file); - // Get AST - $ast = $this->getTraverser()->traverse( - $this->getParser()->parse($source) - ); - - return "getPrettyPrinter()->prettyPrint($ast); + return $this->_obfuscateSource($source); } catch (Exception $e) { if($ignoreError) { sprintf('Could not parse file "%s"', $file); @@ -265,4 +260,17 @@ private function obfuscateFileContents($file, $ignoreError) } } } + + /** + * @param string $sourceCode + * @return string + */ + protected function _obfuscateSource($sourceCode) { + // Get AST + $ast = $this->getTraverser()->traverse( + $this->getParser()->parse($sourceCode) + ); + + return "getPrettyPrinter()->prettyPrint($ast); + } } diff --git a/tests/Base.php b/tests/Base.php new file mode 100644 index 0000000..677c459 --- /dev/null +++ b/tests/Base.php @@ -0,0 +1,7 @@ + + */ + +namespace Tests\Mock; + +use Naneau; + +class Obfuscator extends Naneau\Obfuscator\Obfuscator { + + /** + * @param string $sourceCode + * @return string + */ + public function obfuscateSource($sourceCode) { + return $this->_obfuscateSource($sourceCode); + } +} \ No newline at end of file diff --git a/tests/ObfuscateTest.php b/tests/ObfuscateTest.php new file mode 100644 index 0000000..0267e46 --- /dev/null +++ b/tests/ObfuscateTest.php @@ -0,0 +1,27 @@ +setParser(new Parser(new Lexer())); + $obfuscator->setTraverser(new NodeTraverser()); + $obfuscator->setPrettyPrinter(new PrettyPrinter()); + echo $obfuscator->obfuscateSource($source); + } + +} \ No newline at end of file diff --git a/tests/phpunit.php b/tests/phpunit.php new file mode 100644 index 0000000..6515b5c --- /dev/null +++ b/tests/phpunit.php @@ -0,0 +1,9 @@ + Date: Mon, 6 Mar 2017 23:42:43 +0300 Subject: [PATCH 2/9] test --- src/Naneau/Obfuscator/Resources/services.yml | 26 ++++----- tests/Base.php | 2 +- tests/ObfuscateTest.php | 57 +++++++++++++++----- 3 files changed, 58 insertions(+), 27 deletions(-) diff --git a/src/Naneau/Obfuscator/Resources/services.yml b/src/Naneau/Obfuscator/Resources/services.yml index bb036e9..32f2f14 100644 --- a/src/Naneau/Obfuscator/Resources/services.yml +++ b/src/Naneau/Obfuscator/Resources/services.yml @@ -7,7 +7,7 @@ parameters: obfuscator.scramble_use.ignore: [] # Files to parse - obfuscator.files: "/\.php$/" + obfuscator.files: '/\.php$/' services: @@ -15,10 +15,10 @@ services: obfuscator: class: Naneau\Obfuscator\Obfuscator calls: - - [setParser, [@obfuscator.parser]] - - [setTraverser, [@obfuscator.node_traverser]] - - [setPrettyPrinter, [@obfuscator.pretty_printer]] - - [setEventDispatcher, [@obfuscator.event_dispatcher]] + - [setParser, ['@obfuscator.parser']] + - [setTraverser, ['@obfuscator.node_traverser']] + - [setPrettyPrinter, ['@obfuscator.pretty_printer']] + - [setEventDispatcher, ['@obfuscator.event_dispatcher']] - [setFileRegex, [%obfuscator.files%]] # String scrambler @@ -29,14 +29,14 @@ services: obfuscator.node_traverser: class: PhpParser\NodeTraverser calls: - - [addVisitor, [@obfuscator.node_visitor.scramble_variable]] - - [addVisitor, [@obfuscator.node_visitor.scramble_private_method]] + - [addVisitor, ['@obfuscator.node_visitor.scramble_variable']] + - [addVisitor, ['@obfuscator.node_visitor.scramble_private_method']] # Variable scrambler obfuscator.node_visitor.scramble_variable: class: Naneau\Obfuscator\Node\Visitor\ScrambleVariable arguments: - - @obfuscator.scrambler + - '@obfuscator.scrambler' calls: - [addIgnore, [%obfuscator.scramble_variable.ignore%]] @@ -44,7 +44,7 @@ services: obfuscator.node_visitor.scramble_private_method: class: Naneau\Obfuscator\Node\Visitor\ScramblePrivateMethod arguments: - - @obfuscator.scrambler + - '@obfuscator.scrambler' calls: - [addIgnore, [%obfuscator.scramble_private_method.ignore%]] @@ -52,7 +52,7 @@ services: obfuscator.node_visitor.scramble_private_property: class: Naneau\Obfuscator\Node\Visitor\ScramblePrivateProperty arguments: - - @obfuscator.scrambler + - '@obfuscator.scrambler' calls: - [addIgnore, [%obfuscator.scramble_private_property.ignore%]] @@ -60,7 +60,7 @@ services: obfuscator.node_visitor.scramble_use: class: Naneau\Obfuscator\Node\Visitor\ScrambleUse arguments: - - @obfuscator.scrambler + - '@obfuscator.scrambler' calls: - [addIgnore, [%obfuscator.scramble_use.ignore%]] @@ -72,7 +72,7 @@ services: obfuscator.parser: class: PhpParser\Parser arguments: - - @obfuscator.lexer + - '@obfuscator.lexer' # Lexer obfuscator.lexer: @@ -86,4 +86,4 @@ services: obfuscator.event_dispatcher: class: Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher arguments: - - @service_container + - '@service_container' diff --git a/tests/Base.php b/tests/Base.php index 677c459..e8103da 100644 --- a/tests/Base.php +++ b/tests/Base.php @@ -3,5 +3,5 @@ namespace Tests; class Base extends \PHPUnit_Framework_TestCase { - + } \ No newline at end of file diff --git a/tests/ObfuscateTest.php b/tests/ObfuscateTest.php index 0267e46..9451074 100644 --- a/tests/ObfuscateTest.php +++ b/tests/ObfuscateTest.php @@ -6,22 +6,53 @@ use PhpParser\Lexer; use PhpParser\NodeTraverser; use PhpParser\PrettyPrinter\Standard as PrettyPrinter; +use Symfony; +use Naneau; +use Symfony\Component\Console\Tests; class ObfuscateTest extends Base { - public function testObfuscate() { - $source = 'setParser(new Parser(new Lexer())); - $obfuscator->setTraverser(new NodeTraverser()); - $obfuscator->setPrettyPrinter(new PrettyPrinter()); - echo $obfuscator->obfuscateSource($source); + protected function setUp() { + mkdir("./tests/before"); } + protected function tearDown() { + unlink("./tests/before/source.php"); + unlink("./tests/after/source.php"); + rmdir("./tests/before"); + rmdir("./tests/after"); + } + + /** + * @param string $before + * @param string $after + * @dataProvider obfuscateProvider + */ + public function testObfuscate($before, $after) { + file_put_contents("./tests/before/source.php", $before); + shell_exec("./bin/obfuscate obfuscate ./tests/before ./tests/after"); + $obfuscated = file_get_contents("./tests/after/source.php"); + $this->assertEquals($after, $obfuscated); + } + + /** + * @return array + */ + public function obfuscateProvider() { + return [ + [ +' Date: Mon, 6 Mar 2017 23:43:10 +0300 Subject: [PATCH 3/9] deleted mock --- tests/Mock/Obfuscator.php | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 tests/Mock/Obfuscator.php diff --git a/tests/Mock/Obfuscator.php b/tests/Mock/Obfuscator.php deleted file mode 100644 index 949d322..0000000 --- a/tests/Mock/Obfuscator.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - -namespace Tests\Mock; - -use Naneau; - -class Obfuscator extends Naneau\Obfuscator\Obfuscator { - - /** - * @param string $sourceCode - * @return string - */ - public function obfuscateSource($sourceCode) { - return $this->_obfuscateSource($sourceCode); - } -} \ No newline at end of file From 76298e31e4839864aa3d4c6333bb97438569acd5 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gulyam Date: Mon, 6 Mar 2017 23:45:10 +0300 Subject: [PATCH 4/9] reverted obfuscator --- src/Naneau/Obfuscator/Obfuscator.php | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/Naneau/Obfuscator/Obfuscator.php b/src/Naneau/Obfuscator/Obfuscator.php index e7d33a2..fc81a5c 100644 --- a/src/Naneau/Obfuscator/Obfuscator.php +++ b/src/Naneau/Obfuscator/Obfuscator.php @@ -243,7 +243,12 @@ private function obfuscateFileContents($file, $ignoreError) // Input code $source = php_strip_whitespace($file); - return $this->_obfuscateSource($source); + // Get AST + $ast = $this->getTraverser()->traverse( + $this->getParser()->parse($source) + ); + + return "getPrettyPrinter()->prettyPrint($ast); } catch (Exception $e) { if($ignoreError) { sprintf('Could not parse file "%s"', $file); @@ -260,17 +265,4 @@ private function obfuscateFileContents($file, $ignoreError) } } } - - /** - * @param string $sourceCode - * @return string - */ - protected function _obfuscateSource($sourceCode) { - // Get AST - $ast = $this->getTraverser()->traverse( - $this->getParser()->parse($sourceCode) - ); - - return "getPrettyPrinter()->prettyPrint($ast); - } } From 41be1dd0978e69dff3264374b2b9a7b2fc09f7e5 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gulyam Date: Mon, 6 Mar 2017 23:57:30 +0300 Subject: [PATCH 5/9] reverted services yml --- src/Naneau/Obfuscator/Resources/services.yml | 26 ++++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Naneau/Obfuscator/Resources/services.yml b/src/Naneau/Obfuscator/Resources/services.yml index 32f2f14..bb036e9 100644 --- a/src/Naneau/Obfuscator/Resources/services.yml +++ b/src/Naneau/Obfuscator/Resources/services.yml @@ -7,7 +7,7 @@ parameters: obfuscator.scramble_use.ignore: [] # Files to parse - obfuscator.files: '/\.php$/' + obfuscator.files: "/\.php$/" services: @@ -15,10 +15,10 @@ services: obfuscator: class: Naneau\Obfuscator\Obfuscator calls: - - [setParser, ['@obfuscator.parser']] - - [setTraverser, ['@obfuscator.node_traverser']] - - [setPrettyPrinter, ['@obfuscator.pretty_printer']] - - [setEventDispatcher, ['@obfuscator.event_dispatcher']] + - [setParser, [@obfuscator.parser]] + - [setTraverser, [@obfuscator.node_traverser]] + - [setPrettyPrinter, [@obfuscator.pretty_printer]] + - [setEventDispatcher, [@obfuscator.event_dispatcher]] - [setFileRegex, [%obfuscator.files%]] # String scrambler @@ -29,14 +29,14 @@ services: obfuscator.node_traverser: class: PhpParser\NodeTraverser calls: - - [addVisitor, ['@obfuscator.node_visitor.scramble_variable']] - - [addVisitor, ['@obfuscator.node_visitor.scramble_private_method']] + - [addVisitor, [@obfuscator.node_visitor.scramble_variable]] + - [addVisitor, [@obfuscator.node_visitor.scramble_private_method]] # Variable scrambler obfuscator.node_visitor.scramble_variable: class: Naneau\Obfuscator\Node\Visitor\ScrambleVariable arguments: - - '@obfuscator.scrambler' + - @obfuscator.scrambler calls: - [addIgnore, [%obfuscator.scramble_variable.ignore%]] @@ -44,7 +44,7 @@ services: obfuscator.node_visitor.scramble_private_method: class: Naneau\Obfuscator\Node\Visitor\ScramblePrivateMethod arguments: - - '@obfuscator.scrambler' + - @obfuscator.scrambler calls: - [addIgnore, [%obfuscator.scramble_private_method.ignore%]] @@ -52,7 +52,7 @@ services: obfuscator.node_visitor.scramble_private_property: class: Naneau\Obfuscator\Node\Visitor\ScramblePrivateProperty arguments: - - '@obfuscator.scrambler' + - @obfuscator.scrambler calls: - [addIgnore, [%obfuscator.scramble_private_property.ignore%]] @@ -60,7 +60,7 @@ services: obfuscator.node_visitor.scramble_use: class: Naneau\Obfuscator\Node\Visitor\ScrambleUse arguments: - - '@obfuscator.scrambler' + - @obfuscator.scrambler calls: - [addIgnore, [%obfuscator.scramble_use.ignore%]] @@ -72,7 +72,7 @@ services: obfuscator.parser: class: PhpParser\Parser arguments: - - '@obfuscator.lexer' + - @obfuscator.lexer # Lexer obfuscator.lexer: @@ -86,4 +86,4 @@ services: obfuscator.event_dispatcher: class: Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher arguments: - - '@service_container' + - @service_container From 7d8022e9d4381066c9a2b3b527d854bc7a559aef Mon Sep 17 00:00:00 2001 From: Vyacheslav Gulyam Date: Tue, 7 Mar 2017 21:42:47 +0300 Subject: [PATCH 6/9] tests --- tests/ObfuscateTest.php | 65 ++++++++++------------------------ tests/before/SimpleClass.php | 34 ++++++++++++++++++ tests/config.yml | 7 ++++ tests/expected/SimpleClass.php | 2 ++ 4 files changed, 62 insertions(+), 46 deletions(-) create mode 100644 tests/before/SimpleClass.php create mode 100644 tests/config.yml create mode 100644 tests/expected/SimpleClass.php diff --git a/tests/ObfuscateTest.php b/tests/ObfuscateTest.php index 9451074..47f3027 100644 --- a/tests/ObfuscateTest.php +++ b/tests/ObfuscateTest.php @@ -2,57 +2,30 @@ namespace Tests; -use PhpParser\Parser; -use PhpParser\Lexer; -use PhpParser\NodeTraverser; -use PhpParser\PrettyPrinter\Standard as PrettyPrinter; -use Symfony; -use Naneau; -use Symfony\Component\Console\Tests; - class ObfuscateTest extends Base { - protected function setUp() { - mkdir("./tests/before"); - } + const AFTER_PATH = "/after"; + const BEFORE_PATH = "/before"; + const EXPECTED_PATH = "/expected"; protected function tearDown() { - unlink("./tests/before/source.php"); - unlink("./tests/after/source.php"); - rmdir("./tests/before"); - rmdir("./tests/after"); - } - - /** - * @param string $before - * @param string $after - * @dataProvider obfuscateProvider - */ - public function testObfuscate($before, $after) { - file_put_contents("./tests/before/source.php", $before); - shell_exec("./bin/obfuscate obfuscate ./tests/before ./tests/after"); - $obfuscated = file_get_contents("./tests/after/source.php"); - $this->assertEquals($after, $obfuscated); + $files = glob(__DIR__ . self::AFTER_PATH . "/*"); + foreach ($files as $file) { + unlink($file); + } + rmdir(__DIR__ . "/after"); } - /** - * @return array - */ - public function obfuscateProvider() { - return [ - [ -'fail("{$expectedFileName} not found"); + } + } + $this->assertEquals(file_get_contents(__DIR__ . self::EXPECTED_PATH . "/" . $expectedFileName), file_get_contents(__DIR__ . self::AFTER_PATH . "/" . $expectedFileName)); + } } } \ No newline at end of file diff --git a/tests/before/SimpleClass.php b/tests/before/SimpleClass.php new file mode 100644 index 0000000..bd88108 --- /dev/null +++ b/tests/before/SimpleClass.php @@ -0,0 +1,34 @@ +_privateProperty = $localVar; + $this->_protectedProperty = $localVar; + $this->publicProperty = $localVar; + } + + protected function _protectedMethod() { + $localVar = "test"; + $this->_privateProperty = $localVar; + $this->_protectedProperty = $localVar; + $this->publicProperty = $localVar; + } + + public function publicMethod() { + $localVar = "test"; + $this->_privateProperty = $localVar; + $this->_protectedProperty = $localVar; + $this->publicProperty = $localVar; + $this->_protectedMethod(); + $this->_privateMethod(); + } +} + +$simpleObject = new SimpleClass(); +$simpleObject->publicMethod(); \ No newline at end of file diff --git a/tests/config.yml b/tests/config.yml new file mode 100644 index 0000000..1fe8f32 --- /dev/null +++ b/tests/config.yml @@ -0,0 +1,7 @@ +services: + + # String scrambler + obfuscator.scrambler: + class: Naneau\Obfuscator\StringScrambler + arguments: + - 'salt' \ No newline at end of file diff --git a/tests/expected/SimpleClass.php b/tests/expected/SimpleClass.php new file mode 100644 index 0000000..8ca200b --- /dev/null +++ b/tests/expected/SimpleClass.php @@ -0,0 +1,2 @@ +_privateProperty = $spd8dce8; $this->_protectedProperty = $spd8dce8; $this->publicProperty = $spd8dce8; } protected function _protectedMethod() { $spd8dce8 = 'test'; $this->_privateProperty = $spd8dce8; $this->_protectedProperty = $spd8dce8; $this->publicProperty = $spd8dce8; } public function publicMethod() { $spd8dce8 = 'test'; $this->_privateProperty = $spd8dce8; $this->_protectedProperty = $spd8dce8; $this->publicProperty = $spd8dce8; $this->_protectedMethod(); $this->sp51fa3f(); } } $sp5de0e2 = new SimpleClass(); $sp5de0e2->publicMethod(); \ No newline at end of file From 87be227cf31d8ffacfcfbf54cff0b4a33a97b934 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gulyam Date: Tue, 7 Mar 2017 22:03:07 +0300 Subject: [PATCH 7/9] fix --- tests/ObfuscateTest.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/ObfuscateTest.php b/tests/ObfuscateTest.php index 47f3027..ff47f8b 100644 --- a/tests/ObfuscateTest.php +++ b/tests/ObfuscateTest.php @@ -13,7 +13,7 @@ protected function tearDown() { foreach ($files as $file) { unlink($file); } - rmdir(__DIR__ . "/after"); + rmdir(__DIR__ . self::AFTER_PATH); } public function testObfuscate() { @@ -21,9 +21,10 @@ public function testObfuscate() { $expectedFileNames = scandir(__DIR__ . self::EXPECTED_PATH); foreach ($expectedFileNames as $expectedFileName) { if ($expectedFileName === '.' || $expectedFileName === '..') { - if (!file_exists(__DIR__ . self::EXPECTED_PATH . "/" . $expectedFileName)) { - $this->fail("{$expectedFileName} not found"); - } + continue; + } + if (!file_exists(__DIR__ . self::EXPECTED_PATH . "/" . $expectedFileName)) { + $this->fail("{$expectedFileName} not found"); } $this->assertEquals(file_get_contents(__DIR__ . self::EXPECTED_PATH . "/" . $expectedFileName), file_get_contents(__DIR__ . self::AFTER_PATH . "/" . $expectedFileName)); } From be366c4ef6bc60c7882c4f8a33bceae8538ac9d1 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gulyam Date: Tue, 7 Mar 2017 22:05:50 +0300 Subject: [PATCH 8/9] fix --- tests/ObfuscateTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ObfuscateTest.php b/tests/ObfuscateTest.php index ff47f8b..a960337 100644 --- a/tests/ObfuscateTest.php +++ b/tests/ObfuscateTest.php @@ -23,7 +23,7 @@ public function testObfuscate() { if ($expectedFileName === '.' || $expectedFileName === '..') { continue; } - if (!file_exists(__DIR__ . self::EXPECTED_PATH . "/" . $expectedFileName)) { + if (!file_exists(__DIR__ . self::AFTER_PATH . "/" . $expectedFileName)) { $this->fail("{$expectedFileName} not found"); } $this->assertEquals(file_get_contents(__DIR__ . self::EXPECTED_PATH . "/" . $expectedFileName), file_get_contents(__DIR__ . self::AFTER_PATH . "/" . $expectedFileName)); From 6c9fdae57be0cfc5645235345b5b1b28006b3b04 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gulyam Date: Thu, 9 Mar 2017 23:37:59 +0300 Subject: [PATCH 9/9] functional tests added --- tests/before/Functions.php | 16 ++++++++ tests/before/MultipleClasses.php | 38 +++++++++++++++++ tests/before/Namespaces.php | 19 +++++++++ tests/before/SimpleClass.php | 66 +++++++++++++++--------------- tests/expected/Functions.php | 2 + tests/expected/MultipleClasses.php | 2 + tests/expected/Namespaces.php | 2 + 7 files changed, 112 insertions(+), 33 deletions(-) create mode 100644 tests/before/Functions.php create mode 100644 tests/before/MultipleClasses.php create mode 100644 tests/before/Namespaces.php create mode 100644 tests/expected/Functions.php create mode 100644 tests/expected/MultipleClasses.php create mode 100644 tests/expected/Namespaces.php diff --git a/tests/before/Functions.php b/tests/before/Functions.php new file mode 100644 index 0000000..9d71efe --- /dev/null +++ b/tests/before/Functions.php @@ -0,0 +1,16 @@ +_privateProperty = parent::$_protectedProperty; + } + + public function publicMethod() { + parent::publicMethod(); + echo "This is public method of second class"; + $this->_privateProperty = parent::$publicProperty; + } +} + +class ThirdClass { + public function __construct(SecondClass $secondObject) { + $secondObject->publicMethod(); + } +} \ No newline at end of file diff --git a/tests/before/Namespaces.php b/tests/before/Namespaces.php new file mode 100644 index 0000000..a0fa731 --- /dev/null +++ b/tests/before/Namespaces.php @@ -0,0 +1,19 @@ +_objectA = new namespaceA\classA(); + } +} \ No newline at end of file diff --git a/tests/before/SimpleClass.php b/tests/before/SimpleClass.php index bd88108..e18cb00 100644 --- a/tests/before/SimpleClass.php +++ b/tests/before/SimpleClass.php @@ -1,34 +1,34 @@ -_privateProperty = $localVar; - $this->_protectedProperty = $localVar; - $this->publicProperty = $localVar; - } - - protected function _protectedMethod() { - $localVar = "test"; - $this->_privateProperty = $localVar; - $this->_protectedProperty = $localVar; - $this->publicProperty = $localVar; - } - - public function publicMethod() { - $localVar = "test"; - $this->_privateProperty = $localVar; - $this->_protectedProperty = $localVar; - $this->publicProperty = $localVar; - $this->_protectedMethod(); - $this->_privateMethod(); - } -} - -$simpleObject = new SimpleClass(); +_privateProperty = $localVar; + $this->_protectedProperty = $localVar; + $this->publicProperty = $localVar; + } + + protected function _protectedMethod() { + $localVar = "test"; + $this->_privateProperty = $localVar; + $this->_protectedProperty = $localVar; + $this->publicProperty = $localVar; + } + + public function publicMethod() { + $localVar = "test"; + $this->_privateProperty = $localVar; + $this->_protectedProperty = $localVar; + $this->publicProperty = $localVar; + $this->_protectedMethod(); + $this->_privateMethod(); + } +} + +$simpleObject = new SimpleClass(); $simpleObject->publicMethod(); \ No newline at end of file diff --git a/tests/expected/Functions.php b/tests/expected/Functions.php new file mode 100644 index 0000000..638da32 --- /dev/null +++ b/tests/expected/Functions.php @@ -0,0 +1,2 @@ +_privateProperty = parent::$_protectedProperty; } public function publicMethod() { parent::publicMethod(); echo 'This is public method of second class'; $this->_privateProperty = parent::$publicProperty; } } class ThirdClass { public function __construct(SecondClass $spb91639) { $spb91639->publicMethod(); } } \ No newline at end of file diff --git a/tests/expected/Namespaces.php b/tests/expected/Namespaces.php new file mode 100644 index 0000000..3711777 --- /dev/null +++ b/tests/expected/Namespaces.php @@ -0,0 +1,2 @@ +_objectA = new namespaceA\classA(); } } \ No newline at end of file