Browscap\Generator\Helper\BuildHelper::run PHP Method

run() public static method

Entry point for generating builds for a specified version
public static run ( string $version, string $resourceFolder, Psr\Log\LoggerInterface $logger, WriterCollection $writerCollection, CollectionCreator $collectionCreator )
$version string
$resourceFolder string
$logger Psr\Log\LoggerInterface
$writerCollection Browscap\Writer\WriterCollection
$collectionCreator Browscap\Helper\CollectionCreator
    public static function run($version, $resourceFolder, LoggerInterface $logger, WriterCollection $writerCollection, CollectionCreator $collectionCreator)
    {
        $logger->info('started creating a data collection');
        $dataCollection = new DataCollection($version);
        $dataCollection->setLogger($logger);
        $collectionCreator->setLogger($logger)->setDataCollection($dataCollection);
        $collection = $collectionCreator->createDataCollection($resourceFolder);
        $logger->info('finished creating a data collection');
        $logger->info('started initialisation of writers');
        $expander = new Expander();
        $expander->setDataCollection($collection)->setLogger($logger);
        $logger->info('finished initialisation of writers');
        $logger->info('started output of header and version');
        $comments = ['Provided courtesy of http://browscap.org/', 'Created on ' . $collection->getGenerationDate()->format('l, F j, Y \\a\\t h:i A T'), 'Keep up with the latest goings-on with the project:', 'Follow us on Twitter <https://twitter.com/browscap>, or...', 'Like us on Facebook <https://facebook.com/browscap>, or...', 'Collaborate on GitHub <https://github.com/browscap>, or...', 'Discuss on Google Groups <https://groups.google.com/forum/#!forum/browscap>.'];
        $writerCollection->setExpander($expander)->fileStart()->renderHeader($comments)->renderVersion($version, $collection);
        $logger->info('finished output of header and version');
        $output = [];
        $logger->info('started output of divisions');
        $division = $collection->getDefaultProperties();
        $logger->info('handle division ' . $division->getName());
        $writerCollection->renderAllDivisionsHeader($collection)->renderDivisionHeader($division->getName());
        $ua = $division->getUserAgents();
        $sections = [$ua[0]['userAgent'] => $ua[0]['properties']];
        foreach (array_keys($sections) as $sectionName) {
            $section = $sections[$sectionName];
            $writerCollection->setSilent($division)->renderSectionHeader($sectionName)->renderSectionBody($section, $collection, $sections, $sectionName)->renderSectionFooter($sectionName);
        }
        $writerCollection->renderDivisionFooter();
        foreach ($collection->getDivisions() as $division) {
            /** @var \Browscap\Data\Division $division */
            // run checks on division before expanding versions because the checked properties do not change between
            // versions
            $sections = $expander->expand($division, $division->getName());
            $logger->info('checking division ' . $division->getName());
            foreach (array_keys($sections) as $sectionName) {
                $section = $sections[$sectionName];
                $collection->checkProperty($sectionName, $section);
            }
            $writerCollection->setSilent($division);
            $versions = $division->getVersions();
            foreach ($versions as $version) {
                list($majorVer, $minorVer) = $expander->getVersionParts($version);
                $divisionName = $expander->parseProperty($division->getName(), $majorVer, $minorVer);
                $logger->info('handle division ' . $divisionName);
                $encodedSections = json_encode($sections);
                $encodedSections = $expander->parseProperty($encodedSections, $majorVer, $minorVer);
                $sectionsWithVersion = json_decode($encodedSections, true);
                $firstElement = current($sectionsWithVersion);
                $writerCollection->renderDivisionHeader($divisionName, $firstElement['Parent']);
                foreach (array_keys($sectionsWithVersion) as $sectionName) {
                    if (array_key_exists($sectionName, $output)) {
                        $logger->error('tried to add section "' . $sectionName . '" more than once -> skipped');
                        continue;
                    }
                    $section = $sectionsWithVersion[$sectionName];
                    $writerCollection->setSilentSection($section);
                    $writerCollection->renderSectionHeader($sectionName)->renderSectionBody($section, $collection, $sectionsWithVersion, $sectionName)->renderSectionFooter($sectionName);
                    $output[$sectionName] = $sectionName;
                }
                $writerCollection->renderDivisionFooter();
                unset($divisionName, $majorVer, $minorVer);
            }
        }
        $division = $collection->getDefaultBrowser();
        $logger->info('handle division ' . $division->getName());
        $writerCollection->renderDivisionHeader($division->getName());
        $ua = $division->getUserAgents();
        $sections = [$ua[0]['userAgent'] => array_merge(['Parent' => 'DefaultProperties'], $ua[0]['properties'])];
        foreach (array_keys($sections) as $sectionName) {
            $section = $sections[$sectionName];
            $writerCollection->setSilent($division)->renderSectionHeader($sectionName)->renderSectionBody($section, $collection, $sections, $sectionName)->renderSectionFooter($sectionName);
        }
        $writerCollection->renderDivisionFooter()->renderAllDivisionsFooter();
        $logger->info('finished output of divisions');
        $logger->info('started closing writers');
        $writerCollection->fileEnd()->close();
        $logger->info('finished closing writers');
    }

Usage Example

Example #1
0
 /**
  * tests running a build
  *
  * @group generator
  * @group sourcetest
  */
 public function testRun()
 {
     $logger = $this->createMock(\Monolog\Logger::class);
     $writerCollection = $this->getMockBuilder(\Browscap\Writer\WriterCollection::class)->disableOriginalConstructor()->setMethods(['fileStart', 'renderHeader', 'renderAllDivisionsHeader', 'renderDivisionFooter', 'renderSectionHeader', 'renderSectionBody', 'fileEnd'])->getMock();
     $writerCollection->expects(self::once())->method('fileStart')->will(self::returnSelf());
     $writerCollection->expects(self::once())->method('fileEnd')->will(self::returnSelf());
     $writerCollection->expects(self::once())->method('renderHeader')->will(self::returnSelf());
     $writerCollection->expects(self::once())->method('renderAllDivisionsHeader')->will(self::returnSelf());
     $writerCollection->expects(self::any())->method('renderDivisionFooter')->will(self::returnSelf());
     $writerCollection->expects(self::any())->method('renderSectionHeader')->will(self::returnSelf());
     $writerCollection->expects(self::any())->method('renderSectionBody')->will(self::returnSelf());
     $division = $this->getMockBuilder(\Browscap\Data\Division::class)->disableOriginalConstructor()->setMethods(['getUserAgents', 'getVersions'])->getMock();
     $division->expects(self::exactly(4))->method('getUserAgents')->will(self::returnValue([0 => ['properties' => ['Parent' => 'DefaultProperties', 'Browser' => 'xyz', 'Version' => '1.0', 'MajorBer' => '1'], 'userAgent' => 'abc']]));
     $division->expects(self::once())->method('getVersions')->will(self::returnValue([2]));
     $collection = $this->getMockBuilder(\Browscap\Data\DataCollection::class)->disableOriginalConstructor()->setMethods(['getGenerationDate', 'getDefaultProperties', 'getDefaultBrowser', 'getDivisions', 'checkProperty'])->getMock();
     $collection->expects(self::once())->method('getGenerationDate')->will(self::returnValue(new \DateTime()));
     $collection->expects(self::exactly(2))->method('getDefaultProperties')->will(self::returnValue($division));
     $collection->expects(self::once())->method('getDefaultBrowser')->will(self::returnValue($division));
     $collection->expects(self::once())->method('getDivisions')->will(self::returnValue([$division]));
     $collection->expects(self::once())->method('checkProperty')->will(self::returnValue(true));
     $collectionCreator = $this->getMockBuilder(\Browscap\Helper\CollectionCreator::class)->disableOriginalConstructor()->setMethods(['setLogger', 'getLogger', 'createDataCollection'])->getMock();
     $collectionCreator->expects(self::once())->method('setLogger')->will(self::returnSelf());
     $collectionCreator->expects(self::never())->method('getLogger')->will(self::returnValue($logger));
     $collectionCreator->expects(self::once())->method('createDataCollection')->will(self::returnValue($collection));
     BuildHelper::run('test', '.', $logger, $writerCollection, $collectionCreator);
 }
All Usage Examples Of Browscap\Generator\Helper\BuildHelper::run
BuildHelper