public function testFileAdd()
 {
     $tokenizer = new UnifiedDiffTokenizer(new GitDiffNormalizer());
     $data = file(__DIR__ . '/data/diff_add', FILE_IGNORE_NEW_LINES);
     $tokenList = $tokenizer->tokenize($data);
     $this->assertEquals(6, count($tokenList));
     $this->assertEquals(new Token(Token::ORIGINAL_FILENAME, ''), $tokenList[0]);
     $this->assertEquals(new Token(Token::NEW_FILENAME, 'README.md'), $tokenList[1]);
     $this->assertEquals(new Token(Token::HUNK_ORIGINAL_START, 0), $tokenList[2]);
     $this->assertEquals(new Token(Token::HUNK_ORIGINAL_COUNT, 0), $tokenList[3]);
     $this->assertEquals(new Token(Token::FILE_CREATION_LINE_COUNT, 1), $tokenList[4]);
     $this->assertEquals(new Token(Token::SOURCE_LINE_ADDED, '## Test'), $tokenList[5]);
 }
 /**
  * Parse an array of tokens out into an object graph.
  *
  * @param array $diffLineList
  *
  * @return Changeset
  */
 public function parse(array $diffLineList)
 {
     $tokenList = $this->tokenizer->tokenize($diffLineList);
     $fileList = array();
     $startIndex = 0;
     $tokenCount = count($tokenList);
     for ($i = 0; $i < $tokenCount; $i++) {
         // File begin
         if (Token::ORIGINAL_FILENAME === $tokenList[$i]->getType()) {
             $startIndex = $i;
         }
         // File end, hydrate object
         if ($this->fileEnd($tokenList, $i + 1, Token::ORIGINAL_FILENAME)) {
             $fileList[] = $this->parseFile(array_slice($tokenList, $startIndex, $i - $startIndex + 1));
         }
     }
     return new Changeset($fileList);
 }
 public function testFifthFileSecondChunk()
 {
     $tokenizer = new UnifiedDiffTokenizer(new SvnDiffNormalizer());
     $data = file(__DIR__ . '/data/diff', FILE_IGNORE_NEW_LINES);
     $tokenList = $tokenizer->tokenize($data);
     $this->assertEquals(new Token(Token::HUNK_ORIGINAL_START, 68), $tokenList[83]);
     $this->assertEquals(new Token(Token::HUNK_ORIGINAL_COUNT, 7), $tokenList[84]);
     $this->assertEquals(new Token(Token::HUNK_NEW_START, 69), $tokenList[85]);
     $this->assertEquals(new Token(Token::HUNK_NEW_COUNT, 5), $tokenList[86]);
     $this->assertEquals(new Token(Token::SOURCE_LINE_UNCHANGED, '        $vcs = new GitVcs($commandExecutor);'), $tokenList[87]);
     $this->assertEquals(new Token(Token::SOURCE_LINE_UNCHANGED, ''), $tokenList[88]);
     $this->assertEquals(new Token(Token::SOURCE_LINE_UNCHANGED, '        $vcs->changeBranch(\'feat-new-badness\');'), $tokenList[89]);
     $this->assertEquals(new Token(Token::SOURCE_LINE_REMOVED, ''), $tokenList[90]);
     $this->assertEquals(new Token(Token::SOURCE_LINE_REMOVED, ''), $tokenList[91]);
     $this->assertEquals(new Token(Token::SOURCE_LINE_UNCHANGED, '    }'), $tokenList[92]);
     $this->assertEquals(new Token(Token::SOURCE_LINE_UNCHANGED, '}'), $tokenList[93]);
 }