| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Tests for the Synonyms module.
 
-  */
 
- /**
 
-  * Base class for all Synonyms web test cases.
 
-  */
 
- abstract class SynonymsWebTestCase extends DrupalWebTestCase {
 
-   /**
 
-    * Fully loaded user object of an admin user that has required access rights.
 
-    *
 
-    * @var object
 
-    */
 
-   protected $admin;
 
-   /**
 
-    * SetUp method.
 
-    */
 
-   public function setUp() {
 
-     parent::setUp(array('synonyms'));
 
-     $this->admin = $this->drupalCreateUser(array(
 
-       'administer taxonomy',
 
-       'administer content types',
 
-       'bypass node access',
 
-       'search content',
 
-     ));
 
-   }
 
-   /**
 
-    * Return last inserted term into the specified vocabulary.
 
-    *
 
-    * @param object $vocabulary
 
-    *   Fully loaded taxonomy vocabulary object
 
-    *
 
-    * @return object
 
-    *   Fully loaded taxonomy term object of the last inserted term into
 
-    *   the specified vocabulary
 
-    */
 
-   protected function getLastTerm($vocabulary) {
 
-     drupal_static_reset();
 
-     $tree = taxonomy_get_tree($vocabulary->vid);
 
-     $max = 0;
 
-     $term = NULL;
 
-     foreach ($tree as $v) {
 
-       if ($v->tid > $max) {
 
-         $max = $v->tid;
 
-         $term = $v;
 
-       }
 
-     }
 
-     $term = entity_load_unchanged('taxonomy_term', $term->tid);
 
-     return $term;
 
-   }
 
- }
 
- /**
 
-  * Test Synonyms functionality of synonyms module.
 
-  */
 
- class SynonymsSynonymsWebTestCase extends SynonymsWebTestCase {
 
-   protected $vocabularies = array(
 
-     'enabled' => TRUE,
 
-     'disabled' => FALSE,
 
-   );
 
-   /**
 
-    * GetInfo method.
 
-    */
 
-   public function getInfo() {
 
-     return array(
 
-       'name' => 'Taxonomy synonyms',
 
-       'description' => 'Ensure that the feature "synonyms" works correctly with taxonomy terms.',
 
-       'group' => 'Synonyms',
 
-     );
 
-   }
 
-   /**
 
-    * SetUp method.
 
-    */
 
-   public function setUp() {
 
-     parent::setUp();
 
-     // Creating vocabularies.
 
-     $this->drupalLogin($this->admin);
 
-     foreach ($this->vocabularies as $k => $v) {
 
-       $name = $this->randomName();
 
-       $this->drupalPost('admin/structure/taxonomy/add', array(
 
-         'name' => $name,
 
-         'machine_name' => $k,
 
-         'description' => $this->randomName(),
 
-         'synonyms[synonyms][' . SYNONYMS_DEFAULT_FIELD_NAME . ']' => $v,
 
-       ), 'Save');
 
-       $this->vocabularies[$k] = taxonomy_vocabulary_machine_name_load($k);
 
-     }
 
-     // Flushing cache.
 
-     _field_info_collate_fields(TRUE);
 
-   }
 
-   /**
 
-    * Test the disabled taxonomy synonyms feature.
 
-    */
 
-   public function testSynonymsDisabled() {
 
-     $this->drupalGet('admin/structure/taxonomy/disabled/add');
 
-     $this->assertNoFieldById('edit-synonyms-synonyms-und-0-value');
 
-     $this->drupalGet('admin/structure/taxonomy/enabled/add');
 
-     $this->assertFieldById('edit-synonyms-synonyms-und-0-value');
 
-     // Making sure that after disabling "synonyms" the synonyms field
 
-     // is no longer available on taxonomy term add page.
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/edit', array(
 
-       'synonyms[synonyms][' . SYNONYMS_DEFAULT_FIELD_NAME . ']' => FALSE,
 
-     ), 'Save');
 
-     $this->drupalGet('admin/structure/taxonomy/enabled/add');
 
-     $this->assertNoFieldById('edit-synonyms-synonyms-und-0-value');
 
-   }
 
-   /**
 
-    * Test the functionality of synonyms.
 
-    */
 
-   public function testSynonyms() {
 
-     $name = $this->randomName();
 
-     $synonym = $this->randomName();
 
-     $parent_synonym = $this->randomName();
 
-     // Creating terms for testing synonyms_get_term_synonyms().
 
-     $synonym1 = $this->randomName();
 
-     $synonym2 = $this->randomName();
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $this->randomName(),
 
-       'description[value]' => $this->randomName(),
 
-     ), 'Save');
 
-     $no_synonyms_term = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][0][value]' => $synonym1,
 
-     ), 'Save');
 
-     $one_synonym_term = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][0][value]' => $synonym1,
 
-     ), 'Add another item');
 
-     $this->drupalPost(NULL, array(
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][1][value]' => $synonym2,
 
-     ), 'Save');
 
-     $two_synonyms_term = $this->getLastTerm($this->vocabularies['enabled']);
 
-     // Creating an identical parent term in order to test
 
-     // $parent parameter in our functions.
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $name,
 
-       'description[value]' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][0][value]' => $synonym,
 
-     ), 'Add another item');
 
-     $this->drupalPost(NULL, array(
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][1][value]' => $parent_synonym,
 
-     ), 'Save');
 
-     $term_parent = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $name,
 
-       'description[value]' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][0][value]' => $synonym,
 
-       'parent[]' => array($term_parent->tid),
 
-     ), 'Save');
 
-     $term = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $this->drupalGet('taxonomy/term/' . $term->tid);
 
-     // Asserting the presence of synonym string.
 
-     $this->assertText($synonym, 'The synonym string is present on taxonomy term view page');
 
-     // Testing the 'synonyms' property of 'taxonomy_term' entity.
 
-     $synonyms = synonyms_get_sanitized($no_synonyms_term);
 
-     $this->assertTrue(empty($synonyms), 'Successfully retrieved synonyms_get_sanitized() for a term without synonyms.');
 
-     $synonyms = synonyms_get_sanitized($one_synonym_term);
 
-     $this->assertTrue(count($synonyms) == 1 && $synonyms[0] == $synonym1, 'Successfully retrieved synonyms_get_sanitized() for a term with a single synonym.');
 
-     $synonyms = synonyms_get_sanitized($two_synonyms_term);
 
-     $this->assertTrue(count($synonyms) == 2 && $synonyms[0] == $synonym1 && $synonyms[1] == $synonym2, 'Successfully retrieved synonyms_get_sanitized() for a term with 2 synonyms.');
 
-     // Testing the function synonyms_get_term_by_synonym().
 
-     $tid = synonyms_get_term_by_synonym(drupal_strtoupper($synonym), $this->vocabularies['enabled'], $term_parent->tid);
 
-     $this->assertEqual($tid, $term->tid, 'Successfully looked up term by its synonym.');
 
-     $tid = synonyms_get_term_by_synonym(drupal_strtoupper($name), $this->vocabularies['enabled'], $term_parent->tid);
 
-     $this->assertEqual($tid, $term->tid, 'Successfully looked up term by its name.');
 
-     // Now submitting a non-existing name.
 
-     $tid = synonyms_get_term_by_synonym($parent_synonym, $this->vocabularies['enabled'], $term_parent->tid);
 
-     $this->assertEqual($tid, 0, 'synonyms_get_term_by_synonym() returns 0 if the term is not found (considering $parent parameter).');
 
-     // Testing the function synonyms_add_term_by_synonym().
 
-     $tid = synonyms_add_term_by_synonym(drupal_strtolower($name), $this->vocabularies['enabled'], $term_parent->tid);
 
-     $this->assertEqual($tid, $term->tid, 'Successfully called synonyms_add_term_by_synonym() on an existing title and no new term was created.');
 
-     $tid = synonyms_add_term_by_synonym(drupal_strtolower($synonym), $this->vocabularies['enabled'], $term_parent->tid);
 
-     $this->assertEqual($tid, $term->tid, 'Successfully called synonyms_add_term_by_synonym() on an existing synonym and no new term was created.');
 
-     drupal_static_reset();
 
-     $tid = synonyms_add_term_by_synonym($parent_synonym, $this->vocabularies['enabled'], $term_parent->tid);
 
-     $new_term = taxonomy_term_load($tid);
 
-     $new_term_parents = array_keys(taxonomy_get_parents($new_term->tid));
 
-     $this->assertEqual($parent_synonym, $new_term->name, 'Successfully called synonyms_add_term_by_synonym() on a new title and a new term was created.');
 
-     $this->assertNotEqual($new_term->tid, $term_parent->tid, 'Successfully called synonyms_add_term_by_synonym() on a synonym of $parent. New term was created instead of returning $parent\'s tid.');
 
-     $this->assertTrue(in_array($term_parent->tid, $new_term_parents), 'Successfully called synonyms_add_term_by_synonym(). New term is assigned as a child to supplied $parent parameter.');
 
-     // Disabling functionality of synonyms for "enabled" vocabulary
 
-     // and making sure it has cleaned up all its functionality.
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/edit', array(
 
-       'synonyms[synonyms][' . SYNONYMS_DEFAULT_FIELD_NAME . ']' => FALSE,
 
-     ), 'Save');
 
-     $this->drupalGet('taxonomy/term/' . $term->tid);
 
-     // Asserting the absence of synonym string.
 
-     $this->assertNoText($synonym, 'The synonym string is no longer present on taxonomy term view page after disabling "synonyms" feature for a vocabulary');
 
-     $term = array_pop(entity_load('taxonomy_term', array($term->tid), array(), TRUE));
 
-     $this->assertFalse(isset($term->{SYNONYMS_DEFAULT_FIELD_NAME}), 'The term no longer has synonyms field after disabling "synonyms" feature for a vocabulary');
 
-     // Testing the 'synonyms' property of 'taxonomy_term' entity.
 
-     $synonyms = synonyms_get_sanitized($no_synonyms_term);
 
-     $this->assertTrue(empty($synonyms), 'Successfully retrieved synonyms_get_sanitized() on a term without synonyms after disabling "synonyms" feature');
 
-     $synonyms = synonyms_get_sanitized($one_synonym_term);
 
-     $this->assertTrue(empty($synonyms), 'Successfully retrieved synonyms_get_sanitized() on a term with a single synonym after disabling "synonyms" feature');
 
-     $synonyms = synonyms_get_sanitized($two_synonyms_term);
 
-     $this->assertTrue(empty($synonyms), 'Successfully retrieved synonyms_get_sanitized() on a term with 2 synonyms after disabling "synonyms" feature');
 
-     $tid = synonyms_get_term_by_synonym(drupal_strtoupper($synonym), $this->vocabularies['enabled']);
 
-     $this->assertEqual($tid, 0, 'synonyms_get_term_by_synonym() returns 0 after disabling "synonyms" feature for a vocabulary');
 
-     $tid = synonyms_get_term_by_synonym(drupal_strtoupper($name), $this->vocabularies['enabled'], $term_parent->tid);
 
-     $this->assertEqual($tid, $term->tid, 'synonyms_get_term_by_synonym() returns $term->tid even after disabling "synonyms" feature if looking up by term title');
 
-     // Testing synonyms_add_term_by_synonym() function.
 
-     $tid = synonyms_add_term_by_synonym(drupal_strtolower($name), $this->vocabularies['enabled'], $term_parent->tid);
 
-     $this->assertEqual($tid, $term->tid, 'Successfully called synonyms_add_term_by_synonym() on an existing title and no new term was created after disabling "synonyms" feature.');
 
-     $tid = synonyms_add_term_by_synonym(drupal_strtolower($synonym), $this->vocabularies['enabled'], $term_parent->tid);
 
-     $new_term = taxonomy_term_load($tid);
 
-     $new_term_parents = array_keys(taxonomy_get_parents($new_term->tid));
 
-     $this->assertFalse(in_array($new_term->tid, array($term->tid, $term_parent->tid)), 'Successfully called synonyms_add_term_by_synonym() using previous synonym and a new term was created (because the vocabulary has disabled "synonyms" feature)');
 
-     $this->assertTrue(in_array($term_parent->tid, $new_term_parents), 'Successfully called synonyms_add_term_by_synonym(). New term is assigned as a child to supplied $parent parameter with disabled "synonyms" feature.');
 
-     $tid = synonyms_add_term_by_synonym($parent_synonym, $this->vocabularies['enabled']);
 
-     $new_term = array_pop(entity_load('taxonomy_term', array($tid), array(), TRUE));
 
-     $this->assertEqual($parent_synonym, $new_term->name, 'Successfully called synonyms_add_term_by_synonym() on an new title and a new term was created.');
 
-     $this->assertFalse(in_array($new_term->tid, array($term->tid, $term_parent->tid)), 'Successfully called synonyms_add_term_by_synonym() on the synonyn of parent term. New term was created (because the vocabulary has disabled "synonyms" feature)');
 
-   }
 
- }
 
- /**
 
-  * Test "Synonyms friendly autocomplete" widget of Synonyms module.
 
-  */
 
- class AutocompleteSynonymsWebTestCase extends SynonymsWebTestCase {
 
-   /**
 
-    * Array of fully loaded vocabulary entities to be used in this test.
 
-    *
 
-    * Array is keyed by the corresponding vocabulary's machine name.
 
-    *
 
-    * @var array
 
-    */
 
-   protected $vocabularies = array(
 
-     'enabled' => TRUE,
 
-     'disabled' => FALSE,
 
-   );
 
-   /**
 
-    * Array of fully loaded taxonomy term entities to be used in this test.
 
-    *
 
-    * Term entities are grouped by machine name of the vocabulary to which they
 
-    * belong.
 
-    *
 
-    * @var array
 
-    */
 
-   protected $terms = array(
 
-     'enabled' => array(),
 
-     'disabled' => array(),
 
-   );
 
-   /**
 
-    * Entity type to which a term reference field with tested widget is attached.
 
-    *
 
-    * @var string
 
-    */
 
-   protected $entity_type = 'node';
 
-   /**
 
-    * Bundle to which a term reference field with tested widget is attached.
 
-    *
 
-    * @var string
 
-    */
 
-   protected $bundle = 'synonyms_test_content';
 
-   /**
 
-    * GetInfo method.
 
-    */
 
-   public function getInfo() {
 
-     return array(
 
-       'name' => 'Taxonomy synonyms autocomplete',
 
-       'description' => 'Ensure that the "synonym friendly autocomplete" widget works correctly with taxonomy terms.',
 
-       'group' => 'Synonyms',
 
-     );
 
-   }
 
-   /**
 
-    * SetUp method.
 
-    */
 
-   public function setUp() {
 
-     parent::setUp();
 
-     // Creating vocabularies.
 
-     $this->drupalLogin($this->admin);
 
-     foreach ($this->vocabularies as $k => $v) {
 
-       $name = $this->randomName();
 
-       $this->drupalPost('admin/structure/taxonomy/add', array(
 
-         'name' => $name,
 
-         'machine_name' => $k,
 
-         'description' => $this->randomName(),
 
-         'synonyms[synonyms][' . SYNONYMS_DEFAULT_FIELD_NAME . ']' => $v,
 
-       ), 'Save');
 
-       $this->vocabularies[$k] = taxonomy_vocabulary_machine_name_load($k);
 
-     }
 
-     // Creating a test content type.
 
-     $this->drupalPost('admin/structure/types/add', array(
 
-       'name' => 'Synonyms Test Content',
 
-       'type' => $this->bundle,
 
-     ), 'Save content type');
 
-     // Attaching each vocabulary term reference field to the new content type.
 
-     foreach ($this->vocabularies as $k => $v) {
 
-       $this->drupalPost('admin/structure/types/manage/synonyms_test_content/fields', array(
 
-         'fields[_add_new_field][label]' => 'Synonym Terms ' . $k,
 
-         'fields[_add_new_field][field_name]' => 'synonyms_term_' . $k,
 
-         'fields[_add_new_field][type]' => 'taxonomy_term_reference',
 
-         'fields[_add_new_field][widget_type]' => 'synonyms_autocomplete',
 
-       ), 'Save');
 
-       $this->drupalPost(NULL, array(
 
-         'field[settings][allowed_values][0][vocabulary]' => $v->machine_name,
 
-       ), 'Save field settings');
 
-       $this->drupalPost(NULL, array(
 
-         'field[cardinality]' => FIELD_CARDINALITY_UNLIMITED,
 
-       ), 'Save settings');
 
-     }
 
-     // Flushing static cache.
 
-     _field_info_collate_fields(TRUE);
 
-     // Now creating taxonomy tree for each vocabulary.
 
-     // For synonym-disabled vocabulary just a few terms is good enough.
 
-     $name = $this->randomName();
 
-     $this->drupalPost('admin/structure/taxonomy/disabled/add', array(
 
-       'name' => $name,
 
-     ), 'Save');
 
-     $this->terms['disabled']['term1'] = $this->getLastTerm($this->vocabularies['disabled']);
 
-     $name .= $this->randomName();
 
-     $this->drupalPost('admin/structure/taxonomy/disabled/add', array(
 
-       'name' => $name,
 
-     ), 'Save');
 
-     $this->terms['disabled']['term1_longer_name'] = $this->getLastTerm($this->vocabularies['disabled']);
 
-     $this->drupalPost('admin/structure/taxonomy/disabled/add', array(
 
-       'name' => $this->randomName(),
 
-     ), 'Save');
 
-     $this->terms['disabled']['term2'] = $this->getLastTerm($this->vocabularies['disabled']);
 
-     // For synonym-enabled vocabulary we have to create such a set of input,
 
-     // that would cover all possible branches of the autocomplete callback.
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $this->randomName(),
 
-     ), 'Save');
 
-     $this->terms['enabled']['no_synonyms'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(),
 
-     ), 'Save');
 
-     $this->terms['enabled']['one_synonym'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(),
 
-     ), 'Add another item');
 
-     $this->drupalPost(NULL, array(
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][1][value]' => $this->randomName(),
 
-     ), 'Save');
 
-     $this->terms['enabled']['two_synonyms'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $name = $this->randomName();
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $name,
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][0][value]' => $name . $this->randomName(),
 
-     ), 'Save');
 
-     $this->terms['enabled']['name_similar_synonym'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $name = 'similar_synonyms_';
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][0][value]' => $name . $this->randomName(),
 
-     ), 'Add another item');
 
-     $this->drupalPost(NULL, array(
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][1][value]' => $name . $this->randomName(),
 
-     ), 'Save');
 
-     $this->terms['enabled']['similar_synonyms'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $name = 'one_term_name_another_synonym_';
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $name . $this->randomName(),
 
-     ), 'Save');
 
-     $this->terms['enabled']['name_another_synonym'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/add', array(
 
-       'name' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME . '[' . LANGUAGE_NONE . '][0][value]' => $name . $this->randomName(),
 
-     ), 'Save');
 
-     $this->terms['enabled']['synonym_another_name'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-   }
 
-   /**
 
-    * Test auto-creation functionality.
 
-    *
 
-    * Test the auto-creation functionality of the synonym friendly autocomplete
 
-    * widget type. Along the way it tests whether synonyms, submitted into the
 
-    * widget's textfield are converted into the terms, synonyms of which they
 
-    * are.
 
-    */
 
-   public function testAutoCreation() {
 
-     // Trying enabled auto creation.
 
-     $this->drupalPost('admin/structure/types/manage/synonyms-test-content/fields/field_synonyms_term_enabled', array(
 
-       'instance[widget][settings][auto_creation]' => TRUE,
 
-     ), 'Save settings');
 
-     $new_term_name = $this->randomName();
 
-     $this->drupalPost('node/add/synonyms-test-content', array(
 
-       'title' => $this->randomName(),
 
-       'field_synonyms_term_enabled[' . LANGUAGE_NONE . ']' => $this->terms['enabled']['no_synonyms']->name . ', ' . $new_term_name . ', ' . $this->terms['enabled']['one_synonym']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value'],
 
-     ), 'Save');
 
-     $this->assertText($this->terms['enabled']['no_synonyms']->name, 'Existing term was assigned to the new node');
 
-     $this->assertText($new_term_name, 'Auto created term was assigned to the new node when Auto creation is on.');
 
-     $this->assertText($this->terms['enabled']['one_synonym']->name, 'Submitting a synonym into autocomplete widget results in the term, to which the synonym belongs, being assigned to the just created entity (when Auto creation is on).');
 
-     $term = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $this->assertEqual($term->name, $new_term_name, 'The auto created term has been created when Auto creation is on.');
 
-     // Trying disabled auto creation.
 
-     $this->drupalPost('admin/structure/types/manage/synonyms-test-content/fields/field_synonyms_term_enabled', array(
 
-       'instance[widget][settings][auto_creation]' => FALSE,
 
-     ), 'Save settings');
 
-     $new_term_name = $this->randomName();
 
-     $this->drupalPost('node/add/synonyms-test-content', array(
 
-       'title' => $this->randomName(),
 
-       'field_synonyms_term_enabled[' . LANGUAGE_NONE . ']' => $this->terms['enabled']['no_synonyms']->name . ', ' . $new_term_name . ', ' . $this->terms['enabled']['one_synonym']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value'],
 
-     ), 'Save');
 
-     $this->assertText($this->terms['enabled']['no_synonyms']->name, 'Existing term was assigned to the new node');
 
-     $this->assertNoText($new_term_name, 'Auto created term was not assigned to the new node when Auto creation is off.');
 
-     $this->assertText($this->terms['enabled']['one_synonym']->name, 'Submitting a synonym into autocomplete widget results in the term, to which the synonym belongs, being assigned to the just created entity (when Auto creation is off).');
 
-     $term = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $this->assertNotEqual($term->name, $new_term_name, 'The auto created term has not been created when Auto creation is off.');
 
-   }
 
-   /**
 
-    * Test autocomplete menu path.
 
-    *
 
-    * Feed all known "buggy" input to synonym friendly autocomplete menu path,
 
-    * in order to test its performance.
 
-    */
 
-   public function testAutocompleteMenuPath() {
 
-     $assertions = array();
 
-     // Testing empty and non-existing name arguments.
 
-     foreach ($this->vocabularies as $v) {
 
-       $assertions[] = array(
 
-         'vocabulary' => $v->machine_name,
 
-         'input' => '',
 
-         'response' => array(),
 
-         'message' => 'Submitting empty string into a ' . $v->machine_name . ' synonyms vocabulary',
 
-       );
 
-       $assertions[] = array(
 
-         'vocabulary' => $v->machine_name,
 
-         'input' => $this->randomName(),
 
-         'response' => array(),
 
-         'message' => 'Submitting non existing name into a ' . $v->machine_name . ' synonyms vocabulary',
 
-       );
 
-     }
 
-     // Testing the synonym-disabled vocabulary.
 
-     $terms = $this->terms['disabled'];
 
-     $assertions[] = array(
 
-       'vocabulary' => 'disabled',
 
-       'input' => drupal_strtoupper(drupal_substr($terms['term1']->name, 1, -1)),
 
-       'response' => array($terms['term1']->name => $terms['term1']->name, $terms['term1_longer_name']->name => $terms['term1_longer_name']->name),
 
-       'message' => 'Submitting a name similar to 2 existing term names into a disabled synonyms vocabulary',
 
-     );
 
-     $assertions[] = array(
 
-       'vocabulary' => 'disabled',
 
-       'input' => $terms['term1']->name . ',' . drupal_strtoupper(drupal_substr($terms['term1']->name, 1, -1)),
 
-       'response' => array($terms['term1']->name . ', ' . $terms['term1_longer_name']->name => $terms['term1_longer_name']->name),
 
-       'message' => 'Submitting one term already chosen along with a name similar to 2 existing term names into a disabled synonyms vocabulary',
 
-     );
 
-     $assertions[] = array(
 
-       'vocabulary' => 'disabled',
 
-       'input' => drupal_strtoupper(drupal_substr($terms['term2']->name, 1, -1)),
 
-       'response' => array($terms['term2']->name => $terms['term2']->name),
 
-       'message' => 'Submitting a name similar to one existing term name into a disabled synonyms vocabulary',
 
-     );
 
-     $assertions[] = array(
 
-       'vocabulary' => 'disabled',
 
-       'input' => drupal_strtolower($terms['term2']->name) . ',' . drupal_strtoupper(drupal_substr($terms['term2']->name, 1, -1)),
 
-       'response' => array(),
 
-       'message' => 'Submitting the same term over again into a disabled synonyms vocabulary',
 
-     );
 
-     // Testing the synonym-enabled vocabulary.
 
-     $terms = $this->terms['enabled'];
 
-     $assertions[] = array(
 
-       'vocabulary' => 'enabled',
 
-       'input' => drupal_strtoupper($terms['no_synonyms']->name) . ',' . drupal_strtolower(drupal_substr($terms['no_synonyms']->name, 1, -1)),
 
-       'response' => array(),
 
-       'message' => 'Submitting the same term over again into an enabled synonyms vocabulary',
 
-     );
 
-     $assertions[] = array(
 
-       'vocabulary' => 'enabled',
 
-       'input' => $terms['one_synonym']->name . ',' . $terms['one_synonym']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['safe_value'],
 
-       'response' => array(),
 
-       'message' => 'Submitting a synonym of a term over again into an enabled synonyms vocabulary',
 
-     );
 
-     foreach (array('no_synonyms', 'one_synonym', 'two_synonyms') as $k) {
 
-       $assertions[] = array(
 
-         'vocabulary' => 'enabled',
 
-         'input' => drupal_strtolower(drupal_substr($terms[$k]->name, 1, -1)),
 
-         'response' => array($terms[$k]->name => $terms[$k]->name),
 
-         'message' => 'Submitting a name similar to ' . $k . ' term into an enabled synonyms vocabulary',
 
-       );
 
-       $synonyms = field_get_items('taxonomy_term', $terms[$k], SYNONYMS_DEFAULT_FIELD_NAME);
 
-       if (is_array($synonyms)) {
 
-         foreach ($synonyms as $delta => $item) {
 
-           $assertions[] = array(
 
-             'vocabulary' => 'enabled',
 
-             'input' => drupal_strtolower(drupal_substr($item['safe_value'], 1, -1)),
 
-             'response' => array($terms[$k]->name => $this->synonymAutocompleteResult($terms[$k], $item['safe_value'])),
 
-             'message' => 'Submitting a name similar to synonym#' . $delta . ' of the term ' . $k . ' into an enabled synonyms vocabulary',
 
-           );
 
-         }
 
-       }
 
-     }
 
-     $assertions[] = array(
 
-       'vocabulary' => 'enabled',
 
-       'input' => 'one_term_name_another_synonym_',
 
-       'response' => array(
 
-         $terms['name_another_synonym']->name => $terms['name_another_synonym']->name,
 
-         $terms['synonym_another_name']->name => $this->synonymAutocompleteResult($terms['synonym_another_name'], $terms['synonym_another_name']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['safe_value']),
 
-       ),
 
-       'message' => 'Submitting a keyword similar to name of one term and synonym of another into an enabled synonyms vocabulary yields both included in the results',
 
-     );
 
-     foreach ($assertions as $v) {
 
-       $this->assertAutocompleteMenuPath($v);
 
-     }
 
-   }
 
-   /**
 
-    * Test 'Suggestions Size' setting of synonyms-friendly autocomplete widget.
 
-    */
 
-   function testWidgetSettingsSuggestionSize() {
 
-     $suggestion_size = 1;
 
-     $this->drupalPost('admin/structure/types/manage/synonyms-test-content/fields/field_synonyms_term_disabled', array(
 
-       'instance[widget][settings][suggestion_size]' => $suggestion_size,
 
-     ), 'Save settings');
 
-     $this->drupalPost('admin/structure/types/manage/synonyms-test-content/fields/field_synonyms_term_enabled', array(
 
-       'instance[widget][settings][suggestion_size]' => $suggestion_size,
 
-     ), 'Save settings');
 
-     $assertions = array();
 
-     // If size was bigger than 1, we'd get suggested 2 terms: 'term1' and
 
-     // 'term1_longer_name'.
 
-     $assertions[] = array(
 
-       'vocabulary' => 'disabled',
 
-       'input' => $this->terms['disabled']['term1']->name,
 
-       'response' => array($this->terms['disabled']['term1']->name => $this->terms['disabled']['term1']->name),
 
-       'message' => 'Suggestions Size option is respected in autocomplete widget for term suggestion entries.',
 
-     );
 
-     $assertions[] = array(
 
-       'vocabulary' => 'enabled',
 
-       'input' => $this->terms['enabled']['name_similar_synonym']->name,
 
-       'response' => array($this->terms['enabled']['name_similar_synonym']->name => $this->terms['enabled']['name_similar_synonym']->name),
 
-       'message' => 'Suggestions Size option is respected in autocomplete widget for term and synonym suggestion entries.'
 
-     );
 
-     $assertions[] = array(
 
-       'vocabulary' => 'enabled',
 
-       'input' => drupal_substr($this->terms['enabled']['similar_synonyms']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value'], 0, 8),
 
-       'response' => array($this->terms['enabled']['similar_synonyms']->name => $this->synonymAutocompleteResult($this->terms['enabled']['similar_synonyms'], $this->terms['enabled']['similar_synonyms']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value'])),
 
-       'message' => 'Suggestions Size option is respected in autocomplete widget for synonyms suggestion entries.'
 
-     );
 
-     foreach ($assertions as $assertion) {
 
-       $this->assertAutocompleteMenuPath($assertion);
 
-     }
 
-   }
 
-   /**
 
-    * Test 'Suggest only one entry per term' setting of autocomplete widget.
 
-    */
 
-   function testWidgetSettingsSuggestOnlyUnique() {
 
-     $assertions = array();
 
-     // Testing disabled "Suggest only one entry per term" setting.
 
-     $assertions[] = array(
 
-       'vocabulary' => 'enabled',
 
-       'input' => $this->terms['enabled']['name_similar_synonym']->name,
 
-       'response' => array(
 
-         $this->terms['enabled']['name_similar_synonym']->name => $this->terms['enabled']['name_similar_synonym']->name,
 
-         $this->terms['enabled']['name_similar_synonym']->name . ' ' => $this->synonymAutocompleteResult($this->terms['enabled']['name_similar_synonym'], $this->terms['enabled']['name_similar_synonym']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value']),
 
-       ),
 
-       'message' => 'Both term and its synonym are shown when "Suggest only one entry per term" is off.'
 
-     );
 
-     $assertions[] = array(
 
-       'vocabulary' => 'enabled',
 
-       'input' => drupal_substr($this->terms['enabled']['similar_synonyms']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value'], 0, 8),
 
-       'response' => array(
 
-         $this->terms['enabled']['similar_synonyms']->name => $this->synonymAutocompleteResult($this->terms['enabled']['similar_synonyms'], $this->terms['enabled']['similar_synonyms']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value']),
 
-         $this->terms['enabled']['similar_synonyms']->name . ' ' => $this->synonymAutocompleteResult($this->terms['enabled']['similar_synonyms'], $this->terms['enabled']['similar_synonyms']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][1]['value']),
 
-       ),
 
-       'message' => 'Multiple synonyms are shown when "Suggest only one entry per term" is off.'
 
-     );
 
-     foreach ($assertions as $assertion) {
 
-       $this->assertAutocompleteMenuPath($assertion);
 
-     }
 
-     // Testing enabled "Suggest only one entry per term" setting.
 
-     $this->drupalPost('admin/structure/types/manage/synonyms-test-content/fields/field_synonyms_term_disabled', array(
 
-       'instance[widget][settings][suggest_only_unique]' => TRUE,
 
-     ), 'Save settings');
 
-     $this->drupalPost('admin/structure/types/manage/synonyms-test-content/fields/field_synonyms_term_enabled', array(
 
-       'instance[widget][settings][suggest_only_unique]' => TRUE,
 
-     ), 'Save settings');
 
-     $assertions = array();
 
-     $assertions[] = array(
 
-       'vocabulary' => 'enabled',
 
-       'input' => $this->terms['enabled']['name_similar_synonym']->name,
 
-       'response' => array(
 
-         $this->terms['enabled']['name_similar_synonym']->name => $this->terms['enabled']['name_similar_synonym']->name,
 
-       ),
 
-       'message' => 'Only term is shown and synonym is not shown when "Suggest only one entry per term" is on.'
 
-     );
 
-     $assertions[] = array(
 
-       'vocabulary' => 'enabled',
 
-       'input' => drupal_substr($this->terms['enabled']['similar_synonyms']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value'], 0, 8),
 
-       'response' => array(
 
-         $this->terms['enabled']['similar_synonyms']->name => $this->synonymAutocompleteResult($this->terms['enabled']['similar_synonyms'], $this->terms['enabled']['similar_synonyms']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value']),
 
-       ),
 
-       'message' => 'Only single synonym is shown when "Suggest only one entry per term" is on.'
 
-     );
 
-     foreach ($assertions as $assertion) {
 
-       $this->assertAutocompleteMenuPath($assertion);
 
-     }
 
-   }
 
-   /**
 
-    * Assert output of synonym friendly autocomplete path.
 
-    *
 
-    * @param array $assertion
 
-    *   Specially encoded array of assertion. Should include the following keys:
 
-    *     vocabulary - machine name of vocabulary whose field is asserted
 
-    *     input - input string to be fed to autocomplete menu path
 
-    *     response - JSON decoded expected response of autocomplete menu path
 
-    *     message - Drupal assertion message to be displayed on test results
 
-    *                 page
 
-    */
 
-   protected function assertAutocompleteMenuPath($assertion) {
 
-     $response = $this->drupalGet('synonyms/autocomplete/field_synonyms_term_' . $assertion['vocabulary'] . '/' . $this->entity_type . '/' . $this->bundle . '/' . $assertion['input']);
 
-     if (!$response) {
 
-       $this->fail($assertion['message'], 'Autocomplete Menu Path');
 
-       return;
 
-     }
 
-     $response = (array) json_decode($response);
 
-     $is_the_same = count($response) == count($assertion['response']);
 
-     $is_the_same = $is_the_same && count(array_intersect_assoc($response, $assertion['response'])) == count($assertion['response']);
 
-     $this->assertTrue($is_the_same, $assertion['message'], 'Autocomplete Menu Path');
 
-   }
 
-   /**
 
-    * Return expected autocomplete menu path result.
 
-    *
 
-    * The result is prepared as if the term was found by the supplied synonym.
 
-    *
 
-    * @param object $term
 
-    *   Fully loaded taxonomy term object for which the result is generated.
 
-    * @param string $synonym
 
-    *   Synonym by which the term was hit in the search
 
-    *
 
-    * @return string
 
-    *   Formatted autocomplete result
 
-    */
 
-   protected function synonymAutocompleteResult($term, $synonym) {
 
-     return t('@synonym, synonym of %term', array('@synonym' => $synonym, '%term' => $term->name));
 
-   }
 
- }
 
- /**
 
-  * Test Synonyms module integration with Drupal search functionality.
 
-  */
 
- class SearchIndexSynonymsWebTestCase extends SynonymsWebTestCase {
 
-   protected $vocabularies = array(
 
-     'enabled' => TRUE,
 
-   );
 
-   /**
 
-    * GetInfo method.
 
-    */
 
-   public function getInfo() {
 
-     return array(
 
-       'name' => 'Synonyms search integration',
 
-       'description' => 'Ensure that Synonyms module correctly integrates with the Drupal search functionality.',
 
-       'group' => 'Synonyms',
 
-     );
 
-   }
 
-   /**
 
-    * SetUp method.
 
-    */
 
-   public function setUp() {
 
-     parent::setUp();
 
-     // Creating vocabularies.
 
-     $this->drupalLogin($this->admin);
 
-     foreach ($this->vocabularies as $k => $v) {
 
-       $name = $this->randomName();
 
-       $this->drupalPost('admin/structure/taxonomy/add', array(
 
-         'name' => $name,
 
-         'machine_name' => $k,
 
-         'description' => $this->randomName(),
 
-         'synonyms[synonyms][' . SYNONYMS_DEFAULT_FIELD_NAME . ']' => $v,
 
-       ), 'Save');
 
-       $this->vocabularies[$k] = taxonomy_vocabulary_machine_name_load($k);
 
-     }
 
-     // Creating a test content type.
 
-     $this->drupalPost('admin/structure/types/add', array(
 
-       'name' => 'Synonyms Test Content',
 
-       'type' => 'synonyms_test_content',
 
-     ), 'Save content type');
 
-     // Attaching each vocabulary term reference field to the new content type.
 
-     foreach ($this->vocabularies as $k => $v) {
 
-       $this->drupalPost('admin/structure/types/manage/synonyms_test_content/fields', array(
 
-         'fields[_add_new_field][label]' => 'Synonym Terms ' . $k,
 
-         'fields[_add_new_field][field_name]' => 'synonyms_term_' . $k,
 
-         'fields[_add_new_field][type]' => 'taxonomy_term_reference',
 
-         'fields[_add_new_field][widget_type]' => 'synonyms_autocomplete',
 
-       ), 'Save');
 
-       $this->drupalPost(NULL, array(
 
-         'field[settings][allowed_values][0][vocabulary]' => $v->machine_name,
 
-       ), 'Save field settings');
 
-       $this->drupalPost(NULL, array(
 
-         'field[cardinality]' => FIELD_CARDINALITY_UNLIMITED,
 
-       ), 'Save settings');
 
-     }
 
-     // Flushing static cache.
 
-     _field_info_collate_fields(TRUE);
 
-   }
 
-   /**
 
-    * Test searching by a term synonym.
 
-    *
 
-    * Since logically term and its synonyms represent the same entity, the idea
 
-    * is that searching by a term synonym should trigger all content referencing
 
-    * that term to be included in search results. Additionally we test that when
 
-    * a synonym is deleted/edited in a term, corresponding content is no longer
 
-    * encountered when searched by ex-synonym.
 
-    */
 
-   public function testSearchTermSynonym() {
 
-     // Create a few terms and synonyms.
 
-     $terms = array();
 
-     $term = (object) array(
 
-       'vid' => $this->vocabularies['enabled']->vid,
 
-       'name' => $this->randomName(),
 
-     );
 
-     taxonomy_term_save($term);
 
-     $terms['no_synonyms'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $term = (object) array(
 
-       'vid' => $this->vocabularies['enabled']->vid,
 
-       'name' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME => array(
 
-         LANGUAGE_NONE => array(
 
-           array('value' => $this->randomName()),
 
-         ),
 
-       )
 
-     );
 
-     taxonomy_term_save($term);
 
-     $terms['one_synonym'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-     $term = (object) array(
 
-       'vid' => $this->vocabularies['enabled']->vid,
 
-       'name' => $this->randomName(),
 
-       SYNONYMS_DEFAULT_FIELD_NAME => array(
 
-         LANGUAGE_NONE => array(
 
-           array('value' => $this->randomName()),
 
-           array('value' => $this->randomName()),
 
-         ),
 
-       )
 
-     );
 
-     taxonomy_term_save($term);
 
-     $terms['two_synonyms'] = $this->getLastTerm($this->vocabularies['enabled']);
 
-     // Creating a node, which references to all the terms we have.
 
-     $title = $this->randomName();
 
-     $this->drupalPost('node/add/synonyms-test-content', array(
 
-       'title' => $title,
 
-       'field_synonyms_term_enabled[' . LANGUAGE_NONE . ']' => $terms['no_synonyms']->name . ', ' . $terms['one_synonym']->name . ', ' . $terms['two_synonyms']->name,
 
-     ), 'Save');
 
-     $node = $this->drupalGetNodeByTitle($title);
 
-     // Rebuilding Search index.
 
-     $this->cronRun();
 
-     foreach ($terms as $k => $term) {
 
-       $this->assertSearchResults($term->name, array($node), 'Searching by name of the term ' . $k);
 
-       foreach (synonyms_get_sanitized($term) as $delta => $synonym) {
 
-         $this->assertSearchResults($synonym, array($node), 'Searching by synonym #' . $delta . ' of the term ' . $k);
 
-       }
 
-     }
 
-     // Removing a synonym from the term. Then asserting node got re-indexed
 
-     // with new values of synonyms.
 
-     $deleted_synonym = array_pop($terms['one_synonym']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE]);
 
-     taxonomy_term_save($terms['one_synonym']);
 
-     $this->cronRun();
 
-     $this->assertSearchResults($deleted_synonym['value'], array(), 'Searching by recently deleted synonym of a taxonomy term yields no results.');
 
-     // Editing a synonym in a term. Then asserting node got re-indexed with new
 
-     // values of synonyms.
 
-     $ex_synonym = $terms['two_synonyms']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value'];
 
-     $terms['two_synonyms']->{SYNONYMS_DEFAULT_FIELD_NAME}[LANGUAGE_NONE][0]['value'] = $this->randomName();
 
-     taxonomy_term_save($terms['two_synonyms']);
 
-     $this->cronRun();
 
-     $this->assertSearchResults($ex_synonym, array(), 'Searching by recently changed synonym of a taxonomy term yields no results.');
 
-     // We disable entire field from being source of synonyms and make sure for
 
-     // all synonyms search results are empty.
 
-     $this->drupalPost('admin/structure/taxonomy/enabled/edit', array(
 
-       'synonyms[synonyms][' . SYNONYMS_DEFAULT_FIELD_NAME . ']' => FALSE,
 
-     ), 'Save');
 
-     $this->cronRun();
 
-     foreach ($terms as $k => $term) {
 
-       $items = field_get_items('taxonomy_term', $term, SYNONYMS_DEFAULT_FIELD_NAME);
 
-       if (is_array($items)) {
 
-         foreach ($items as $synonym) {
 
-           $this->assertSearchResults($synonym['value'], array(), 'Searching by ' . $k . ' term synonym, which field was recently disabled as source of synonyms in vocabulary yields no results.');
 
-         }
 
-       }
 
-     }
 
-   }
 
-   /**
 
-    * Assert search results.
 
-    *
 
-    * @param $keyword string
 
-    *   Keyword to supply to the search mechanism
 
-    * @param $results array
 
-    *   Array of fully loaded nodes that are expected to be on search results
 
-    * @param $message string
 
-    *   Drupal assertion message to display on test results page
 
-    */
 
-   protected function assertSearchResults($keyword, $results, $message) {
 
-     $response = $this->drupalGet('search/node/' . $keyword);
 
-     $matches = array();
 
-     preg_match_all('#\<li[^>]+class="search-result"[^>]*\>(.*?)\</li\>#si', $response, $matches);
 
-     $matches = $matches[1];
 
-     if (count($matches) != count($results)) {
 
-       $this->fail($message);
 
-       return;
 
-     }
 
-     $matches = implode('', $matches);
 
-     foreach ($results as $node) {
 
-       if (strpos($matches, 'node/' . $node->nid) === FALSE) {
 
-         $this->fail($message);
 
-         return;
 
-       }
 
-     }
 
-     $this->pass($message);
 
-   }
 
- }
 
- /**
 
-  * Base class for all test cases that test Synonyms Extractor classes.
 
-  */
 
- abstract class AbstractSynonymsExtractorWebTestCase extends DrupalWebTestCase {
 
-   /**
 
-    * Taxonomy vocabulary object on whose term all synonyms extracting tests will
 
-    * occur.
 
-    *
 
-    * @var object
 
-    */
 
-   protected $vocabulary;
 
-   /**
 
-    * Class name of a synonyms extractor that is being tested.
 
-    *
 
-    * @var string
 
-    */
 
-   protected $extractor;
 
-   /**
 
-    * Field API field definition array of the field that is tested right now.
 
-    *
 
-    * @var array
 
-    */
 
-   protected $field;
 
-   /**
 
-    * Field API instance definition array of the instance that is tested now.
 
-    *
 
-    * @var array
 
-    */
 
-   protected $instance;
 
-   /**
 
-    * SetUp method.
 
-    *
 
-    * @param string $class
 
-    *   Name of class that is being tested
 
-    * @param array $modules
 
-    *   Array of extra modules to install for testing a particular synonyms
 
-    *   extractor
 
-    */
 
-   public function setUp($class, $modules = array()) {
 
-     array_unshift($modules, 'synonyms');
 
-     parent::setUp($modules);
 
-     $this->vocabulary = (object) array(
 
-       'name' => 'Test Synonyms Extractor',
 
-       'machine_name' => 'synonyms_extractor',
 
-     );
 
-     taxonomy_vocabulary_save($this->vocabulary);
 
-     $this->extractor = $class;
 
-   }
 
-   /**
 
-    * Completely set field in the tested vocabulary.
 
-    *
 
-    * Create a field in Field API (if does not exist yet), then create an
 
-    * instance and relate it to our tested vocabulary. Lastly enable this field
 
-    * as a source of synonyms for our tested vocabulary.
 
-    *
 
-    * @param array $field
 
-    *   Field definition array as expected by Field API
 
-    * @param array $instance
 
-    *   Instance definition array as expected by Field API
 
-    */
 
-   protected function addFieldInstance($field, $instance) {
 
-     $field = field_create_field($field);
 
-     $instance['entity_type'] = 'taxonomy_term';
 
-     $instance['bundle'] = field_extract_bundle('taxonomy_term', $this->vocabulary);
 
-     field_create_instance($instance);
 
-     $settings = synonyms_vocabulary_settings($this->vocabulary);
 
-     $settings['synonyms'][] = $field['field_name'];
 
-     synonyms_vocabulary_settings_save($this->vocabulary, $settings);
 
-     $this->field = $field;
 
-     $this->instance = $instance;
 
-   }
 
-   /**
 
-    * Test synonymsExtract() method of class.
 
-    *
 
-    * @param array $items
 
-    *   Array of field items to be saved in tested term
 
-    * @param array $etalon
 
-    *   Expected return of synonymsExtract() method of class
 
-    * @param string $message
 
-    *   Any custom message to be added to the standard one and passed to
 
-    *   SimpleTest assertion method
 
-    */
 
-   protected function assertSynonymsExtract($items, $etalon, $message = '') {
 
-     $term = (object) array(
 
-       'name' => $this->randomName(),
 
-       'vid' => $this->vocabulary->vid,
 
-     );
 
-     $term->{$this->field['field_name']} = $items;
 
-     taxonomy_term_save($term);
 
-     $items = field_get_items('taxonomy_term', $term, $this->field['field_name']);
 
-     $synonyms = is_array($items) ? call_user_func(array($this->extractor, 'synonymsExtract'), $items, $this->field, $this->instance, $term, 'taxonomy_term') : array();
 
-     $this->assertTrue(count(array_intersect($etalon, $synonyms)) == count($etalon), 'Synonyms Extractor ' . $this->extractor . ' passed synonymsExtract() method: ' . $message);
 
-     // Cleaning up.
 
-     taxonomy_term_delete($term->tid);
 
-   }
 
-   /**
 
-    * Test processEntityFieldQuery method of class.
 
-    *
 
-    * @param array $meta_data
 
-    *   Array of meta data. Each subarray represents a single term and whether it
 
-    *   is expected to be included in the results of EntityFieldQuery. Should
 
-    *   have the following structure:
 
-    *     items - array of field items. Terms will be automatically created with
 
-    *       those items
 
-    *     expected - bool, whether the created term should be expected in the
 
-    *       results of EntityFieldQuery
 
-    * @param string $tag
 
-    *   Corresponding parameter to be passed to processEntityFieldQuery() method
 
-    * @param string $message
 
-    *   Any custom message to be added to the standard one and passed to
 
-    *   SimpleTest assertion method
 
-    */
 
-   protected function assertProcessEntityFieldQuery($meta_data, $tag, $message = '') {
 
-     // Creating taxonomy terms according to the meta data.
 
-     $terms = array();
 
-     foreach ($meta_data as $v) {
 
-       $term = (object) array(
 
-         'name' => $this->randomName(),
 
-         'vid' => $this->vocabulary->vid,
 
-       );
 
-       taxonomy_term_save($term);
 
-       $term->{$this->field['field_name']} = $v['items'];
 
-       taxonomy_term_save($term);
 
-       $term->expected = $v['expected'];
 
-       $terms[] = $term;
 
-     }
 
-     // Preparing and running EntityFieldQuery.
 
-     $efq = new EntityFieldQuery();
 
-     $efq->entityCondition('entity_type', 'taxonomy_term')
 
-         ->entityCondition('bundle', $this->vocabulary->machine_name);
 
-     call_user_func(array($this->extractor, 'processEntityFieldQuery'), $tag, $efq, $this->field, $this->instance);
 
-     $result = $efq->execute();
 
-     $result = isset($result['taxonomy_term']) ? array_keys($result['taxonomy_term']) : array();
 
-     // Asserting results of EntityFieldQuery.
 
-     $pass = TRUE;
 
-     foreach ($terms as $term) {
 
-       $tmp = $term->expected ? in_array($term->tid, $result) : !in_array($term->tid, $result);
 
-       $pass = $pass && $tmp;
 
-     }
 
-     $this->assertTrue($pass, 'Synonyms Extractor ' . $this->extractor . ' passed processEntityFieldQuery() method: ' . $message);
 
-     // Cleaning up.
 
-     foreach ($terms as $term) {
 
-       taxonomy_term_delete($term->tid);
 
-     }
 
-   }
 
-   /**
 
-    * Test mergeEntityAsSynonym method of class.
 
-    *
 
-    * @param array $items
 
-    *   Parameter will be passed directly to the extractor class method
 
-    * @param object $synonym_entity
 
-    *   Parameter will be passed directly to the extractor class method
 
-    * @param string $synonym_entity_type
 
-    *   Parameter will be passed directly to the extractor class method
 
-    * @param array $etalon
 
-    *   Array that is expected to be returned by the tested method
 
-    * @param string $message
 
-    *   Any custom message to be added to the standard one and passed to
 
-    *   SimpleTest assertion method
 
-    */
 
-   protected function assertMergeEntityAsSynonym($items, $synonym_entity, $synonym_entity_type, $etalon, $message = '') {
 
-     $extra_items = call_user_func(array($this->extractor, 'mergeEntityAsSynonym'), $items, $this->field, $this->instance, $synonym_entity, $synonym_entity_type);
 
-     foreach ($etalon as $k => $v) {
 
-       if (count(array_intersect($etalon[$k], $extra_items[$k])) != count($etalon[$k])) {
 
-         $this->fail('Synonyms Extractor ' . $this->extractor . ' passed mergeEntityAsSynonym() method: ' . $message);
 
-         return;
 
-       }
 
-     }
 
-     $this->pass('Synonyms Extractor ' . $this->extractor . ' passed mergeEntityAsSynonym() method: ' . $message);
 
-   }
 
- }
 
- /**
 
-  * Test SynonymsSynonymsExtractor class.
 
-  */
 
- class SynonymsSynonymsExtractorWebTestCase extends AbstractSynonymsExtractorWebTestCase {
 
-   /**
 
-    * GetInfo method.
 
-    */
 
-   public function getInfo() {
 
-     return array(
 
-       'name' => 'SynonymsSynonymsExtractor',
 
-       'description' => 'Ensure that the synonyms module extracts synonyms from text and number fields correctly.',
 
-       'group' => 'Synonyms',
 
-     );
 
-   }
 
-   /**
 
-    * SetUp method.
 
-    */
 
-   public function setUp() {
 
-     parent::setUp('SynonymsSynonymsExtractor');
 
-   }
 
-   /**
 
-    * Test synonyms extraction for 'text' field type.
 
-    */
 
-   public function testText() {
 
-     $this->addFieldInstance(array(
 
-       'field_name' => 'text',
 
-       'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 
-       'type' => 'text',
 
-     ), array(
 
-       'field_name' => 'text',
 
-       'entity_type' => 'taxonomy_term',
 
-       'bundle' => $this->vocabulary->machine_name,
 
-       'label' => $this->randomName(),
 
-     ));
 
-     // Testing synonymsExtract().
 
-     $this->assertSynonymsExtract(array(), array(), 'on empty field.');
 
-     $synonym = $this->randomName();
 
-     $this->assertSynonymsExtract(array(
 
-       LANGUAGE_NONE => array(
 
-         0 => array('value' => $synonym),
 
-       ),
 
-     ), array($synonym), 'on a field that holds one value.');
 
-     // Testing processEntityFieldQuery().
 
-     $this->assertProcessEntityFieldQuery(array(), $this->randomName(), 'on empty field.');
 
-     $tag = $this->randomName();
 
-     $meta_data = array();
 
-     $meta_data[] = array(
 
-       'items' => array(
 
-         LANGUAGE_NONE => array(
 
-           0 => array('value' => $tag . $this->randomName()),
 
-           1 => array('value' => $this->randomName()),
 
-         ),
 
-       ),
 
-       'expected' => TRUE,
 
-     );
 
-     $meta_data[] = array(
 
-       'items' => array(
 
-         LANGUAGE_NONE => array(
 
-           0 => array('value' => $this->randomName()),
 
-         ),
 
-       ),
 
-       'expected' => FALSE,
 
-     );
 
-     $meta_data[] = array(
 
-       'items' => array(),
 
-       'expected' => FALSE,
 
-     );
 
-     $this->assertProcessEntityFieldQuery($meta_data, $tag, 'on a field with values.');
 
-     // Testing mergeEntityAsSynonym() method.
 
-     $node = (object) array(
 
-       'title' => $this->randomName(),
 
-       'type' => 'page',
 
-     );
 
-     node_save($node);
 
-     $this->assertMergeEntityAsSynonym(array(), $node, 'node', array(array('value' => $node->title)), 'on a node entity.');
 
-   }
 
- }
 
- /**
 
-  * Test TaxonomySynonymsExtractor class.
 
-  */
 
- class TaxonomySynonymsExtractorWebTestCase extends AbstractSynonymsExtractorWebTestCase {
 
-   /**
 
-    * Taxonomy vocabulary object terms.
 
-    *
 
-    * Terms of this vocabulary are synonyms of the main vocabulary terms.
 
-    *
 
-    * @var object
 
-    */
 
-   protected $vocabularySource;
 
-   /**
 
-    * GetInfo method.
 
-    */
 
-   public function getInfo() {
 
-     return array(
 
-       'name' => 'TaxonomySynonymsExtractor',
 
-       'description' => 'Ensure that the synonyms module extracts synonyms from taxonomy term reference fields correctly.',
 
-       'group' => 'Synonyms',
 
-     );
 
-   }
 
-   /**
 
-    * SetUp method.
 
-    */
 
-   public function setUp() {
 
-     parent::setUp('TaxonomySynonymsExtractor');
 
-     $this->vocabularySource = (object) array(
 
-       'name' => $this->randomName(),
 
-       'machine_name' => 'source_vocabulary',
 
-     );
 
-     taxonomy_vocabulary_save($this->vocabularySource);
 
-   }
 
-   /**
 
-    * Test synonyms extraction for 'taxonomy_term_reference' field type.
 
-    */
 
-   public function testTaxonomyTermReference() {
 
-     $this->addFieldInstance(array(
 
-       'field_name' => 'term',
 
-       'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 
-       'type' => 'taxonomy_term_reference',
 
-       'settings' => array(
 
-         'allowed_values' => array(
 
-           array(
 
-             'vocabulary' => $this->vocabularySource->machine_name,
 
-             'parent' => 0,
 
-           ),
 
-         ),
 
-       ),
 
-     ), array(
 
-       'field_name' => 'term',
 
-       'entity_type' => 'taxonomy_term',
 
-       'bundle' => $this->vocabulary->machine_name,
 
-       'label' => $this->randomName(),
 
-     ));
 
-     // Testing synonymsExtract().
 
-     $this->assertSynonymsExtract(array(), array(), 'on empty field.');
 
-     $synonym_term = $this->createSynonymTerm();
 
-     $this->assertSynonymsExtract(array(
 
-       LANGUAGE_NONE => array(
 
-         0 => array(
 
-           'tid' => $synonym_term->tid,
 
-         ),
 
-       ),
 
-     ), array($synonym_term->name), 'on a field that holds one value.');
 
-     // Testing processEntityFieldQuery().
 
-     $this->assertProcessEntityFieldQuery(array(), $this->randomName(), 'on empty field.');
 
-     $tag = $this->randomName();
 
-     $meta_data = array();
 
-     $meta_data[] = array(
 
-       'items' => array(
 
-         LANGUAGE_NONE => array(
 
-           array('tid' => $this->createSynonymTerm($tag . $this->randomName())->tid),
 
-           array('tid' => $this->createSynonymTerm()->tid),
 
-         ),
 
-       ),
 
-       'expected' => TRUE,
 
-     );
 
-     $meta_data[] = array(
 
-       'items' => array(
 
-         LANGUAGE_NONE => array(
 
-           array('tid' => $this->createSynonymTerm()->tid),
 
-         ),
 
-       ),
 
-       'expected' => FALSE,
 
-     );
 
-     $meta_data[] = array(
 
-       'items' => array(),
 
-       'expected' => FALSE,
 
-     );
 
-     $this->assertProcessEntityFieldQuery($meta_data, $tag, 'on a field with values.');
 
-     // Testing mergeEntityAsSynonym() method.
 
-     $synonym_term = $this->createSynonymTerm();
 
-     $this->assertMergeEntityAsSynonym(array(), $synonym_term, 'taxonomy_term', array(array('tid' => $synonym_term->tid)), 'on a term from referenced vocabulary.');
 
-   }
 
-   /**
 
-    * Supportive function.
 
-    *
 
-    * Create a taxonomy term in the synonyms source vocabulary with the specified
 
-    * name.
 
-    *
 
-    * @param string $name
 
-    *   Name of the term to be created. If nothing is supplied a random string
 
-    *   is used
 
-    *
 
-    * @return object
 
-    *   Fully loaded taxonomy term object of the just created term
 
-    */
 
-   protected function createSynonymTerm($name = NULL) {
 
-     if (is_null($name)) {
 
-       $name = $this->randomName();
 
-     }
 
-     $synonym_term = (object) array(
 
-       'name' => $name,
 
-       'vid' => $this->vocabularySource->vid,
 
-     );
 
-     taxonomy_term_save($synonym_term);
 
-     return $synonym_term;
 
-   }
 
- }
 
- /**
 
-  * Test EntityReferenceSynonymsExtractor class.
 
-  */
 
- class EntityReferenceSynonymsExtractorWebTestCase extends AbstractSynonymsExtractorWebTestCase {
 
-   /**
 
-    * GetInfo method.
 
-    */
 
-   public function getInfo() {
 
-     return array(
 
-       'name' => 'EntityReferenceSynonymsExtractor',
 
-       'description' => 'Ensure that the synonyms module extracts synonyms from entity reference fields correctly.',
 
-       'group' => 'Synonyms',
 
-     );
 
-   }
 
-   /**
 
-    * SetUp method.
 
-    */
 
-   public function setUp() {
 
-     parent::setUp('EntityReferenceSynonymsExtractor', array('entityreference'));
 
-   }
 
-   /**
 
-    * Test synonyms extraction for 'entityreference' field type.
 
-    */
 
-   public function testEntityReference() {
 
-     $this->addFieldInstance(array(
 
-       'field_name' => 'reference',
 
-       'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 
-       'type' => 'entityreference',
 
-       // For the sake of experiment we use entityreference field that references
 
-       // nodes of a Drupal standard type to make things easier.
 
-       'settings' => array(
 
-         'target_type' => 'node',
 
-         'handler' => 'base',
 
-         'handler_settings' => array(
 
-           'target_bundles' => array('page' => 'page'),
 
-           'sort' => array('type' => 'none'),
 
-         ),
 
-       ),
 
-     ), array(
 
-       'field_name' => 'reference',
 
-       'entity_type' => 'taxonomy_term',
 
-       'bundle' => $this->vocabulary->machine_name,
 
-       'label' => $this->randomName(),
 
-     ));
 
-     // Testing synonymsExtract().
 
-     $this->assertSynonymsExtract(array(), array(), 'on empty field.');
 
-     $synonym_entity = $this->createNode();
 
-     $this->assertSynonymsExtract(array(
 
-       LANGUAGE_NONE => array(
 
-         0 => array(
 
-           'target_id' => entity_id('node', $synonym_entity),
 
-         ),
 
-       ),
 
-     ), array(entity_label('node', $synonym_entity)), 'on a field that holds one value.');
 
-     // Testing processEntityFieldQuery().
 
-     $this->assertProcessEntityFieldQuery(array(), $this->randomName(), 'on empty field.');
 
-     $tag = $this->randomName();
 
-     $meta_data = array();
 
-     $meta_data[] = array(
 
-       'items' => array(
 
-         LANGUAGE_NONE => array(
 
-           array(
 
-             'target_id' => entity_id('node', $this->createNode($tag . $this->randomName())),
 
-           ),
 
-           array(
 
-             'target_id' => entity_id('node', $this->createNode()),
 
-           ),
 
-         ),
 
-       ),
 
-       'expected' => TRUE,
 
-     );
 
-     $meta_data[] = array(
 
-       'items' => array(
 
-         LANGUAGE_NONE => array(
 
-           array('target_id' => entity_id('node', $this->createNode())),
 
-         ),
 
-       ),
 
-       'expected' => FALSE,
 
-     );
 
-     $meta_data[] = array(
 
-       'items' => array(),
 
-       'expected' => FALSE,
 
-     );
 
-     $this->assertProcessEntityFieldQuery($meta_data, $tag, 'on a field with values.');
 
-     // Testing mergeEntityAsSynonym() method.
 
-     $node = $this->createNode();
 
-     $this->assertMergeEntityAsSynonym(array(), $node, 'node', array(array('target_id' => $node->nid)), 'on a node.');
 
-   }
 
-   /**
 
-    * Supportive function.
 
-    *
 
-    * Create an entity of necessary entity type (in our test it's node).
 
-    *
 
-    * @param string $label
 
-    *   Label to use for the entity that is about to be created
 
-    * @param string $bundle
 
-    *   Bundle to use for the entity that is about to be created
 
-    *
 
-    * @return object
 
-    *   Fully loaded entity object of the just created entity
 
-    */
 
-   protected function createNode($label = NULL, $bundle = 'page') {
 
-     if (is_null($label)) {
 
-       $label = $this->randomName();
 
-     }
 
-     $entity = (object) array(
 
-       'type' => $bundle,
 
-       'title' => $label,
 
-     );
 
-     node_save($entity);
 
-     return $entity;
 
-   }
 
- }
 
 
  |