<?php 
 
namespace WsdlToPhp\PackageGenerator\Tests\File; 
 
use WsdlToPhp\PackageGenerator\File\AbstractFile as File; 
use WsdlToPhp\PackageGenerator\Generator\Generator; 
use WsdlToPhp\PackageGenerator\Parser\SoapClient\Structs as StructsParser; 
use WsdlToPhp\PackageGenerator\Parser\SoapClient\Functions as FunctionsParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagAttribute as TagAttributeParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagComplexType as TagComplexTypeParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagDocumentation as TagDocumentationParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagElement as TagElementParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagEnumeration as TagEnumerationParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagExtension as TagExtensionParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagHeader as TagHeaderParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagImport as TagImportParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagInclude as TagIncludeParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagInput as TagInputParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagList as TagListParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagOutput as TagOutputParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagRestriction as TagRestrictionParser; 
use WsdlToPhp\PackageGenerator\Parser\Wsdl\TagUnion as TagUnionParser; 
use WsdlToPhp\PackageGenerator\Tests\TestCase; 
use WsdlToPhp\PackageGenerator\Model\AbstractModel; 
use WsdlToPhp\PackageGenerator\ConfigurationReader\GeneratorOptions; 
 
abstract class AbstractFile extends TestCase 
{ 
    /** 
     * @return Generator 
     */ 
    public static function bingGeneratorInstance($reset = true, $gatherMethods = GeneratorOptions::VALUE_START) 
    { 
        return self::getInstance(self::wsdlBingPath(), $reset, $gatherMethods); 
    } 
    /** 
     * @return Generator 
     */ 
    public static function actonGeneratorInstance($reset = true, $gatherMethods = GeneratorOptions::VALUE_START) 
    { 
        return self::getInstance(self::wsdlActonPath(), $reset, $gatherMethods); 
    } 
    /** 
     * @return Generator 
     */ 
    public static function portalGeneratorInstance($reset = true) 
    { 
        return self::getInstance(self::wsdlPortalPath(), $reset); 
    } 
    /** 
     * @return Generator 
     */ 
    public static function reformaGeneratorInstance($reset = true) 
    { 
        return self::getInstance(self::wsdlReformaPath(), $reset); 
    } 
    /** 
     * @return Generator 
     */ 
    public static function queueGeneratorInstance($reset = true) 
    { 
        return self::getInstance(self::wsdlQueuePath(), $reset); 
    } 
    /** 
     * @return Generator 
     */ 
    public static function omnitureGeneratorInstance($reset = true, $gatherMethods = GeneratorOptions::VALUE_START) 
    { 
        return self::getInstance(self::wsdlOmniturePath(), $reset, $gatherMethods); 
    } 
    /** 
     * @return Generator 
     */ 
    public static function odigeoGeneratorInstance($reset = true) 
    { 
        return self::getInstance(self::wsdlOdigeoPath(), $reset); 
    } 
    /** 
     * @return Generator 
     */ 
    public static function payPalGeneratorInstance($reset = true, $gatherMethods = GeneratorOptions::VALUE_START) 
    { 
        return self::getInstance(self::wsdlPayPalPath(), $reset, $gatherMethods); 
    } 
    /** 
     * @return Generator 
     */ 
    public static function wcfGeneratorInstance($reset = false, $gatherMethods = GeneratorOptions::VALUE_START) 
    { 
        return self::getInstance(self::wsdlWcfPath(), $reset, $gatherMethods); 
    } 
    /** 
     * @return Generator 
     */ 
    public static function yandexDirectApiAdGroupsGeneratorInstance($reset = false, $gatherMethods = GeneratorOptions::VALUE_START) 
    { 
        return self::getInstance(self::wsdlYandexDirectApiAdGroupsPath(), $reset, $gatherMethods); 
    } 
    /** 
     * @param string $wsdl 
     * @return Generator 
     */ 
    public static function getInstance($wsdl, $reset = true, $gatherMethods = GeneratorOptions::VALUE_START) 
    { 
        AbstractModel::purgeUniqueNames(); 
        AbstractModel::purgeReservedKeywords(); 
        $g = parent::getInstance($wsdl, $reset); 
        $g 
            ->setOptionPrefix('Api') 
            ->setOptionAddComments(array( 
                'release' => '1.1.0', 
            )) 
            ->setOptionCategory(GeneratorOptions::VALUE_CAT) 
            ->setOptionGatherMethods($gatherMethods); 
        self::applyParsers($g, $wsdl); 
        return $g; 
    } 
    /** 
     * @param Generator $generator 
     * @param string $wsdlPath 
     */ 
    private static function applyParsers(Generator $generator, $wsdlPath) 
    { 
        $parsers = array( 
            new FunctionsParser($generator), 
            new StructsParser($generator), 
            new TagIncludeParser($generator), 
            new TagImportParser($generator), 
            new TagAttributeParser($generator), 
            new TagComplexTypeParser($generator), 
            new TagDocumentationParser($generator), 
            new TagElementParser($generator), 
            new TagEnumerationParser($generator), 
            new TagExtensionParser($generator), 
            new TagHeaderParser($generator), 
            new TagInputParser($generator), 
            new TagOutputParser($generator), 
            new TagRestrictionParser($generator), 
            new TagUnionParser($generator), 
            new TagListParser($generator), 
        ); 
        foreach ($parsers as $parser) { 
            $parser->parse(); 
        } 
    } 
    /** 
     * @param string $valid 
     * @param File $file 
     */ 
    protected function assertSameFileContent($valid, File $file, $fileExtension = 'php') 
    { 
        if (!is_file($file->getFileName())) { 
            return $this->assertFalse(true, sprintf('Generated file "%s" could not be found', $file->getFileName())); 
        } 
        $validContent = file_get_contents(sprintf('%s%s.%s', self::getTestDirectory(), $valid, $fileExtension)); 
        $validContent = str_replace('__WSDL_URL__', $file->getGenerator()->getWsdl()->getName(), $validContent); 
        $toBeValidatedContent = file_get_contents($file->getFileName()); 
        $this->assertSame($validContent, $toBeValidatedContent); 
        unlink($file->getFileName()); 
    } 
} 
 
 |