From 1b4dde80270959e6045b67cfee2b82b371a2f9a8 Mon Sep 17 00:00:00 2001 From: deedydas Date: Mon, 29 Apr 2013 12:10:53 -0700 Subject: [PATCH] Completed Paste Generation Summary: Ref T2903 Test Plan: Pastes being generated with all types of parents, view policies, code, etc. Reviewers: epriestley, AnhNhan Reviewed By: epriestley CC: AnhNhan, aran, Korvin Maniphest Tasks: T2903 Differential Revision: https://secure.phabricator.com/D5707 --- src/__phutil_library_map__.php | 4 + .../PhabricatorRevisionTestDataGenerator.php | 14 +++ .../PhabricatorLipsumGenerateWorkflow.php | 29 +++-- .../PhabricatorPasteTestDataGenerator.php | 100 ++++++++++++++++++ 4 files changed, 130 insertions(+), 17 deletions(-) create mode 100644 src/applications/differential/lipsum/PhabricatorRevisionTestDataGenerator.php create mode 100644 src/applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 926f5d58cd..14b7c79664 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1207,6 +1207,7 @@ phutil_register_library_map(array( 'PhabricatorPasteQuery' => 'applications/paste/query/PhabricatorPasteQuery.php', 'PhabricatorPasteRemarkupRule' => 'applications/paste/remarkup/PhabricatorPasteRemarkupRule.php', 'PhabricatorPasteSearchEngine' => 'applications/paste/query/PhabricatorPasteSearchEngine.php', + 'PhabricatorPasteTestDataGenerator' => 'applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php', 'PhabricatorPasteViewController' => 'applications/paste/controller/PhabricatorPasteViewController.php', 'PhabricatorPeopleController' => 'applications/people/controller/PhabricatorPeopleController.php', 'PhabricatorPeopleEditController' => 'applications/people/controller/PhabricatorPeopleEditController.php', @@ -1310,6 +1311,7 @@ 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', @@ -2915,6 +2917,7 @@ phutil_register_library_map(array( 'PhabricatorPasteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorPasteRemarkupRule' => 'PhabricatorRemarkupRuleObject', 'PhabricatorPasteSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorPasteTestDataGenerator' => 'PhabricatorTestDataGenerator', 'PhabricatorPasteViewController' => 'PhabricatorPasteController', 'PhabricatorPeopleController' => 'PhabricatorController', 'PhabricatorPeopleEditController' => 'PhabricatorPeopleController', @@ -3022,6 +3025,7 @@ 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/PhabricatorRevisionTestDataGenerator.php b/src/applications/differential/lipsum/PhabricatorRevisionTestDataGenerator.php new file mode 100644 index 0000000000..ff4b638894 --- /dev/null +++ b/src/applications/differential/lipsum/PhabricatorRevisionTestDataGenerator.php @@ -0,0 +1,14 @@ +generate(); + return $revision; + } catch (AphrontQueryDuplicateKeyException $ex) { + } + } +} diff --git a/src/applications/lipsum/management/PhabricatorLipsumGenerateWorkflow.php b/src/applications/lipsum/management/PhabricatorLipsumGenerateWorkflow.php index a7f50ec647..cccb1d40db 100644 --- a/src/applications/lipsum/management/PhabricatorLipsumGenerateWorkflow.php +++ b/src/applications/lipsum/management/PhabricatorLipsumGenerateWorkflow.php @@ -18,26 +18,21 @@ final class PhabricatorLipsumGenerateWorkflow } public function execute(PhutilArgumentParser $args) { + $type = "Paste"; + $classname = "Phabricator".$type."TestDataGenerator"; $admin = PhabricatorUser::getOmnipotentUser(); - // $peoplegen = new PhabricatorPeopleTestDataGenerator(); - // $object = $peoplegen->generate(); - // $handle = PhabricatorObjectHandleData::loadOneHandle($object->getPHID(), - // $admin); - // echo "Generated ".$handle->getFullName()."\n"; + try { + $taskgen = newv($classname, array()); + $object = $taskgen->generate(); + + $handle = PhabricatorObjectHandleData::loadOneHandle($object->getPHID(), + $admin); + echo "Generated ".$handle->getFullName()."\n"; + echo "\nRequested data has been generated."; + } catch (PhutilMissingSymbolException $ex) { + } - $taskgen = new PhabricatorManiphestTaskTestDataGenerator(); - $object = $taskgen->generate(); - $handle = PhabricatorObjectHandleData::loadOneHandle($object->getPHID(), - $admin); - echo "Generated ".$handle->getFullName()."\n"; - echo "\nRequested data has been generated."; - // $taskgen = new PhabricatorRevisionTestDataGenerator(); - // $object = $taskgen->generate(); - // $handle = PhabricatorObjectHandleData::loadOneHandle($object->getPHID(), - // $admin); - // echo "Generated ".$handle->getFullName()."\n"; - // echo "\nRequested data has been generated."; } } diff --git a/src/applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php b/src/applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php new file mode 100644 index 0000000000..fe31a45834 --- /dev/null +++ b/src/applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php @@ -0,0 +1,100 @@ + "java", + "PHP" => "php"); + + public function generate() { + $authorphid = $this->loadAuthorPHID(); + $language = $this->generateLanguage(); + $content = $this->generateContent($language); + $title = $this->generateTitle($language); + $paste_file = PhabricatorFile::newFromFileData( + $content, + array( + 'name' => $title, + 'mime-type' => 'text/plain; charset=utf-8', + 'authorPHID' => $authorphid, + )); + $policy = $this->generatePolicy(); + $filephid = $paste_file->getPHID(); + $parentphid = $this->loadPhabrictorPastePHID(); + $paste = id(new PhabricatorPaste()) + ->setParentPHID($parentphid) + ->setAuthorPHID($authorphid) + ->setTitle($title) + ->setLanguage($language) + ->setViewPolicy($policy) + ->setFilePHID($filephid) + ->save(); + return $paste; + } + + private function loadPhabrictorPastePHID() { + $random = rand(0, 1); + if ($random == 1) { + $paste = id($this->loadOneRandom("PhabricatorPaste")); + if ($paste) { + return $paste->getPHID(); + } + } + return null; + } + + private function loadPhabrictorUserPHID() { + return id($this->loadOneRandom("PhabricatorUser"))->getPHID(); + } + + public function loadAuthorPHID() { + return $this->loadPhabrictorUserPHID(); + } + + public function generateTitle($language = null) { + $taskgen = new PhutilLipsumContextFreeGrammar(); + // Remove Punctuation + $title = preg_replace('/[^a-zA-Z 0-9]+/', '', $taskgen->generate()); + // Capitalize First Letters + $title = ucwords($title); + // Remove Spaces + $title = preg_replace('/\s+/', '', $title); + if ($language == null || + !in_array($language, array_keys($this->supportedLanguages))) { + return $title.".txt"; + } else { + return $title.".".$this->supportedLanguages[$language]; + } + } + + public function generateLanguage() { + $supplemented_lang = $this->supportedLanguages; + $supplemented_lang["lipsum"] = "txt"; + return array_rand($supplemented_lang); + } + + public function generateContent($language = null) { + if ($language == null || + !in_array($language, array_keys($this->supportedLanguages))) { + return id(new PhutilLipsumContextFreeGrammar()) + ->generateSeveral(rand(30, 40)); + } else { + $cfg_class = "Phutil".$language."CodeSnippetContextFreeGrammar"; + return newv($cfg_class, array())->generate(); + } + } + + public function generatePolicy() { + // Make sure 4/5th of all generated Pastes are viewable to all + switch (rand(0, 4)) { + case 0: + return PhabricatorPolicies::POLICY_PUBLIC; + case 1: + return PhabricatorPolicies::POLICY_NOONE; + default: + return PhabricatorPolicies::POLICY_USER; + } + } +}