Пример #1
0
 /** @test */
 public function should_allow_numeric_indices_in_groups()
 {
     $printer = $this->givenPrinter();
     $segmentY = new Segment('YYY');
     $segmentY->ajdi = '000';
     $segment = new Segment('XXX');
     $segment->ajdi = 111;
     $segment->fild = 222;
     $segment->araj = [0 => 333, 1 => 444];
     $grp = new SegmentGroup();
     $grp->addSegment($segmentY);
     $grp->addSegment($segment);
     $this->assertEquals("YYY+000'XXX+111+222+333:444'", $printer->prepareString($grp));
 }
 public function acceptSegment(Segment $segment)
 {
     //  current segment mapping is accepting more segments
     if ($this->currentSegment) {
         if ($this->currentSegment->acceptSegment($segment)) {
             return true;
         } else {
             $this->currentGroup[] = $this->currentSegment;
         }
     }
     //  continue open group
     for ($i = $this->lastProcessed + 1; $i < count($this->segmentMappings); $i++) {
         $this->currentSegment = clone $this->segmentMappings[$i];
         if ($this->currentSegment->acceptSegment($segment)) {
             $this->lastProcessed = $i;
             return true;
         }
         $this->currentGroup[] = $this->currentSegment;
     }
     //  close current segment, try opening next copy
     $currentGroupSegments = $this->getCurrentGroupSegments();
     if (!empty($currentGroupSegments)) {
         $this->checkCurrentGroup();
         $group = new SegmentGroup($this->getCode());
         $group->setSegments($currentGroupSegments);
         $this->segments[] = $group;
     }
     $this->currentGroup = array();
     $this->currentSegment = null;
     $this->lastProcessed = -1;
     for ($i = 0; $i < count($this->segmentMappings); $i++) {
         $this->currentSegment = clone $this->segmentMappings[$i];
         if ($this->currentSegment->acceptSegment($segment)) {
             $this->lastProcessed = $i;
             return true;
         }
         $this->currentGroup[] = $this->currentSegment;
     }
     return false;
 }