diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index ba191b19a2..f00a229587 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -899,6 +899,7 @@ phutil_register_library_map(array( 'PhabricatorDeveloperConfigOptions' => 'applications/config/option/PhabricatorDeveloperConfigOptions.php', 'PhabricatorDifferenceEngine' => 'infrastructure/diff/PhabricatorDifferenceEngine.php', 'PhabricatorDifferentialConfigOptions' => 'applications/differential/config/PhabricatorDifferentialConfigOptions.php', + 'PhabricatorDifferentialRevisionTestDataGenerator' => 'applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php', 'PhabricatorDiffusionConfigOptions' => 'applications/diffusion/config/PhabricatorDiffusionConfigOptions.php', 'PhabricatorDirectoryController' => 'applications/directory/controller/PhabricatorDirectoryController.php', 'PhabricatorDirectoryMainController' => 'applications/directory/controller/PhabricatorDirectoryMainController.php', @@ -1314,7 +1315,6 @@ phutil_register_library_map(array( 'PhabricatorRepositorySymbol' => 'applications/repository/storage/PhabricatorRepositorySymbol.php', 'PhabricatorRepositoryTestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryTestCase.php', 'PhabricatorRepositoryType' => 'applications/repository/constants/PhabricatorRepositoryType.php', - 'PhabricatorRevisionTestDataGenerator' => 'applications/differential/lipsum/PhabricatorRevisionTestDataGenerator.php', 'PhabricatorS3FileStorageEngine' => 'applications/files/engine/PhabricatorS3FileStorageEngine.php', 'PhabricatorSQLPatchList' => 'infrastructure/storage/patch/PhabricatorSQLPatchList.php', 'PhabricatorSSHWorkflow' => 'infrastructure/ssh/PhabricatorSSHWorkflow.php', @@ -2638,6 +2638,7 @@ phutil_register_library_map(array( 'PhabricatorDefaultSearchEngineSelector' => 'PhabricatorSearchEngineSelector', 'PhabricatorDeveloperConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorDifferentialConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorDifferentialRevisionTestDataGenerator' => 'PhabricatorTestDataGenerator', 'PhabricatorDiffusionConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorDirectoryController' => 'PhabricatorController', 'PhabricatorDirectoryMainController' => 'PhabricatorDirectoryController', @@ -3034,7 +3035,6 @@ phutil_register_library_map(array( 'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker', 'PhabricatorRepositorySymbol' => 'PhabricatorRepositoryDAO', 'PhabricatorRepositoryTestCase' => 'PhabricatorTestCase', - 'PhabricatorRevisionTestDataGenerator' => 'PhabricatorTestDataGenerator', 'PhabricatorS3FileStorageEngine' => 'PhabricatorFileStorageEngine', 'PhabricatorSSHWorkflow' => 'PhutilArgumentWorkflow', 'PhabricatorSavedQuery' => 'PhabricatorSearchDAO', diff --git a/src/applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php b/src/applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php new file mode 100644 index 0000000000..627e9251dd --- /dev/null +++ b/src/applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php @@ -0,0 +1,119 @@ +loadPhabrictorUser(); + $authorPHID = $author->getPHID(); + $revision = new DifferentialRevision(); + $revision->setTitle($this->generateTitle()); + $revision->setSummary($this->generateDescription()); + $revision->setTestPlan($this->generateDescription()); + $revision->loadRelationships(); + $aux_fields = $this->loadAuxiliaryFields($author, $revision); + $diff = $this->generateDiff($author); + // Add Diff + $editor = new DifferentialRevisionEditor($revision); + $editor->setActor($author); + $editor->addDiff($diff, $this->generateDescription()); + $editor->setAuxiliaryFields($aux_fields); + $editor->save(); + // Add Reviewers + $editor2 = new DifferentialCommentEditor($revision, + DifferentialAction::ACTION_ADDREVIEWERS); + $editor2->setActor($author); + $editor2->setAddedReviewers($this->getCCPHIDs()); + $editor2->save(); + // Add CCs + $editor3 = new DifferentialCommentEditor($revision, + DifferentialAction::ACTION_ADDCCS); + $editor3->setActor($author); + $editor3->setAddedCCs($this->getCCPHIDs()); + $editor3->save(); + return $revision->save(); + } + + public function getCCPHIDs() { + $ccs = array(); + for ($i = 0; $i < rand(1, 4);$i++) { + $ccs[] = $this->loadPhabrictorUserPHID(); + } + return $ccs; + } + + public function generateDiff($author) { + $paste_generator = new PhabricatorPasteTestDataGenerator(); + $languages = $paste_generator->supportedLanguages; + $lang = array_rand($languages); + $code = $paste_generator->generateContent($lang); + $altcode = $paste_generator->generateContent($lang); + $newcode = $this->randomlyModify($code, $altcode); + $diff = id(new PhabricatorDifferenceEngine()) + ->generateRawDiffFromFileContent($code, $newcode); + $call = new ConduitCall( + 'differential.createrawdiff', + array( + 'diff' => $diff, + )); + $call->setUser($author); + $result = $call->execute(); + $thediff = id(new DifferentialDiff())->load( + $result['id']); + $thediff->setDescription($this->generateTitle())->save(); + return $thediff; + } + + public function generateDescription() { + return id(new PhutilLipsumContextFreeGrammar()) + ->generate(10, 20); + } + + public function generateTitle() { + return id(new PhutilLipsumContextFreeGrammar()) + ->generate(); + } + + public function randomlyModify($code, $altcode) { + $codearr = explode("\n", $code); + $altcodearr = explode("\n", $altcode); + $no_lines_to_delete = rand(1, + min(count($codearr) - 2, 5)); + $randomlines = array_rand($codearr, + count($codearr) - $no_lines_to_delete); + $newcode = array(); + foreach ($randomlines as $lineno) { + $newcode[] = $codearr[$lineno]; + } + $newlines_count = rand(2, + min(count($codearr) - 2, count($altcodearr) - 2, 5)); + $randomlines_orig = array_rand($codearr, $newlines_count); + $randomlines_new = array_rand($altcodearr, $newlines_count); + $newcode2 = array(); + $c = 0; + for ($i = 0; $i < count($newcode);$i++) { + $newcode2[] = $newcode[$i]; + if (in_array($i, $randomlines_orig)) { + $newcode2[] = $altcodearr[$randomlines_new[$c++]]; + } + } + return implode($newcode2, "\n"); + } + + private function loadAuxiliaryFields($user, DifferentialRevision $revision) { + $aux_fields = DifferentialFieldSelector::newSelector() + ->getFieldSpecifications(); + foreach ($aux_fields as $key => $aux_field) { + $aux_field->setRevision($revision); + if (!$aux_field->shouldAppearOnEdit()) { + unset($aux_fields[$key]); + } else { + $aux_field->setUser($user); + } + } + return DifferentialAuxiliaryField::loadFromStorage( + $revision, + $aux_fields); + } + +} diff --git a/src/applications/differential/lipsum/PhabricatorRevisionTestDataGenerator.php b/src/applications/differential/lipsum/PhabricatorRevisionTestDataGenerator.php deleted file mode 100644 index ff4b638894..0000000000 --- a/src/applications/differential/lipsum/PhabricatorRevisionTestDataGenerator.php +++ /dev/null @@ -1,14 +0,0 @@ -generate(); - return $revision; - } catch (AphrontQueryDuplicateKeyException $ex) { - } - } -} diff --git a/src/applications/differential/storage/DifferentialRevision.php b/src/applications/differential/storage/DifferentialRevision.php index d134149252..3551062c21 100644 --- a/src/applications/differential/storage/DifferentialRevision.php +++ b/src/applications/differential/storage/DifferentialRevision.php @@ -238,7 +238,6 @@ final class DifferentialRevision extends DifferentialDAO 'SELECT * FROM %T WHERE revisionID = %d ORDER BY sequence', self::RELATIONSHIP_TABLE, $this->getID()); - return $this->attachRelationships($data); } diff --git a/src/applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php b/src/applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php index dd99bb4811..1caf410ad9 100644 --- a/src/applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php +++ b/src/applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php @@ -4,7 +4,7 @@ final class PhabricatorPasteTestDataGenerator extends PhabricatorTestDataGenerator { // Better Support for this in the future - private $supportedLanguages = array( + public $supportedLanguages = array( "Java" => "java", "PHP" => "php"); diff --git a/src/applications/pholio/lipsum/PhabricatorPholioMockTestDataGenerator.php b/src/applications/pholio/lipsum/PhabricatorPholioMockTestDataGenerator.php index 3e71ea0046..bf2fc78775 100644 --- a/src/applications/pholio/lipsum/PhabricatorPholioMockTestDataGenerator.php +++ b/src/applications/pholio/lipsum/PhabricatorPholioMockTestDataGenerator.php @@ -87,7 +87,7 @@ final class PhabricatorPholioMockTestDataGenerator $images = newv("PhabricatorFile", array()) ->loadAllWhere("mimeType = %s", "image/jpeg"); $rand_images = array(); - $quantity = rand(1, 10); + $quantity = rand(2, 10); foreach (array_rand($images, $quantity) as $random) { $rand_images[] = $images[$random]->getPHID(); }