--- /dev/null
+<?php
+/*
+ * Plugin Porte Plume pour SPIP 2
+ * Licence GPL
+ * Auteur Matthieu Marcillaud
+ */
+require_once('lanceur_spip.php');
+
+class Test_barre_outil_markitup extends SpipTest{
+
+ var $baseParamsBarre = array();
+ var $baseParamsBarreEtendue = array();
+
+ function Test_barre_outil_markitup() {
+
+ $this->SpipTest("Test de la classe Barre_outils");
+
+ // instancier une barre d'outil
+ include_spip('inc/barre_outils');
+ $this->baseParamsBarre = array(
+ 'nameSpace' => 'spip',
+ 'markupSet' => array(
+ // H1 - {{{
+ array(
+ "id" => 'header1',
+ "name" => _T('barre_outils:barre_intertitre'),
+ "key" => "H",
+ "className" => "outil_header1",
+ "openWith" => "{{{",
+ "closeWith" => "}}}",
+ "display" => true,
+ )));
+ $p = $this->baseParamsBarre;
+ $p['markupSet'][1] = array(
+ "id" => 'couleurs',
+ "name" => _T('barre_outils:barre_couleur'),
+ "key" => "C",
+ "className" => "outil_couleur",
+ "openWith" => '[color=[![Color]!]]',
+ "closeWith" => '[/color]',
+ "display" => true,
+ "dropMenu" => array(
+ array(
+ "id" => "couleur_jaune",
+ "name" => 'Yellow',
+ "openWith" => '[color=yellow]',
+ "closeWith" => '[/color]',
+ "className" => "outil_couleur",
+ "display" => true,
+ ),
+ array(
+ "id" => "couleur_orange",
+ "name" => 'Orange',
+ "openWith" => '[color=orange]',
+ "closeWith" => '[/color]',
+ "className" => "outil_couleur",
+ "display" => true,
+ ),
+ array(
+ "id" => "couleur_rouge",
+ "name" => 'Red',
+ "openWith" => '[color=red]',
+ "closeWith" => '[/color]',
+ "className" => "outil_couleur",
+ "display" => true,
+ ),
+ ),
+ );
+ $this->baseParamsBarreEtendue = $p;
+ }
+
+ // avant chaque appel de fonction test
+ function setUp() {
+
+ }
+ // apres chaque appel de fonction test
+ function tearDown() {
+
+ }
+
+
+ function testInitialisationBarre(){
+ // parametres inseres a leur bonne place
+ $b = new Barre_outils($this->baseParamsBarre);
+ $this->assertEqual('spip', $b->nameSpace);
+ $this->assertEqual('header1', $b->markupSet[0]['id']);
+ $this->assertEqual(7, count($b->markupSet[0]));
+ }
+
+ function testInitialisationBarreEtendue(){
+ // parametres inseres a leur bonne place,
+ // meme quand il y a des sous-menu d'icones
+ $b = new Barre_outils($this->baseParamsBarreEtendue);
+ $this->assertEqual('spip', $b->nameSpace);
+ $this->assertEqual('header1', $b->markupSet[0]['id']);
+ $this->assertEqual(7, count($b->markupSet[0]));
+ $this->assertEqual('couleurs', $b->markupSet[1]['id']);
+ $this->assertEqual(3, count($b->markupSet[1]['dropMenu']));
+ }
+
+ function testOptionsIncorrectesNonIncluses(){
+ $p = $this->baseParamsBarre;
+ $p['fausseVariable'] = "je ne dois pas m'installer";
+ $p['markupSet'][0]['fauxParam'] = "je ne dois pas m'installer";
+ $b = new Barre_outils($p);
+ $this->assertEqual('spip',$b->nameSpace);
+ $this->assertNull($b->fausseVariable);
+ $this->assertNull($b->markupSet[0]['fauxParam']);
+ $this->assertEqual(7, count($b->markupSet[0]));
+ }
+
+ function testRecuperationDeParametreAvecGet(){
+ // trouver des id de premier niveau
+ $p = $this->baseParamsBarre;
+ $b = new Barre_outils($p);
+ $this->assertEqual($b->get('header1'), $p['markupSet'][0]);
+
+ // trouver des id de second niveau
+ $p = $this->baseParamsBarreEtendue;
+ $b = new Barre_outils($p);
+ $this->assertEqual($b->get('header1'), $p['markupSet'][0]);
+ $this->assertEqual($b->get('couleurs'), $p['markupSet'][1]);
+ $this->assertEqual($b->get('couleur_jaune'), $p['markupSet'][1]['dropMenu'][0]);
+ $this->assertEqual($b->get('couleur_orange'), $p['markupSet'][1]['dropMenu'][1]);
+ $this->assertEqual($b->get('couleur_rouge'), $p['markupSet'][1]['dropMenu'][2]);
+
+ // ne pas trouver d'id inconnu
+ $this->assertFalse($b->get('je_nexiste_pas'));
+ }
+
+ function testModificationDeParametresAvecSet(){
+ $p = $this->baseParamsBarre;
+ $b = new Barre_outils($p);
+ $p['markupSet'][0]['name'] = 'New';
+ $r = $p['markupSet'][0];
+ $x = $b->set('header1', array("name"=>"New"));
+
+ $this->assertEqual($r, $x); // set retourne la chaine modifiee complete
+ $this->assertEqual($r, $b->get('header1'));
+
+ // on ne peut ajouter de mauvais parametres
+ $x = $b->set('header1', array("Je Suis Pas Bon"=>"No no no"));
+ $this->assertEqual($r, $x); // set retourne la chaine modifiee complete
+ $this->assertEqual($r, $b->get('header1'));
+ }
+
+ function testAjoutDeParametresApres(){
+ $b = new Barre_outils($this->baseParamsBarre);
+ $p = $this->baseParamsBarreEtendue;
+
+ // ajoutons la couleur apres
+ $b->ajouterApres('header1',$p['markupSet'][1]);
+ $this->assertEqual(2, count($b->markupSet)); // 2 boutons de premier niveau maintenant
+ $this->assertEqual($b->get('couleurs'), $p['markupSet'][1]); // get renvoie bien le bon ajout
+ $this->assertEqual($b->markupSet[1], $p['markupSet'][1]); // et l'ajout est au bon endroit
+
+ // ajoutons une couleur dans l'ajout
+ $coul = $p['markupSet'][1]['dropMenu'][0];
+ $coul['id'] = 'couleur_violette';
+ $b->ajouterApres('couleur_orange',$coul);
+ $this->assertEqual(4, count($b->markupSet[1]['dropMenu'])); // sous boutons
+ $this->assertEqual($b->get('couleur_violette'), $coul);
+ $this->assertEqual($b->markupSet[1]['dropMenu'][2], $coul); // insertion au bon endroit
+
+ // ajoutons un header2 encore apres
+ $p['markupSet'][0]['id'] = 'header2';
+ $b->ajouterApres('couleurs',$p['markupSet'][0]);
+ $this->assertEqual(3, count($b->markupSet));
+ $this->assertEqual($b->get('header2'), $p['markupSet'][0]);
+ $this->assertEqual($b->markupSet[2], $p['markupSet'][0]);
+ }
+
+ function testAjoutDeParametresAvant(){
+ $b = new Barre_outils($this->baseParamsBarre);
+ $p = $this->baseParamsBarreEtendue;
+
+ // ajoutons la couleur apres
+ $b->ajouterAvant('header1',$p['markupSet'][1]);
+ $this->assertEqual(2, count($b->markupSet)); // 2 boutons de premier niveau maintenant
+ $this->assertEqual($b->get('couleurs'), $p['markupSet'][1]); // get renvoie bien le bon ajout
+ $this->assertEqual($b->markupSet[0], $p['markupSet'][1]); // et l'ajout est au bon endroit
+
+ // ajoutons une couleur dans l'ajout
+ $coul = $p['markupSet'][1]['dropMenu'][0];
+ $coul['id'] = 'couleur_violette';
+ $b->ajouterAvant('couleur_orange',$coul);
+ $this->assertEqual(4, count($b->markupSet[0]['dropMenu'])); // sous boutons
+ $this->assertEqual($b->get('couleur_violette'), $coul);
+ $this->assertEqual($b->markupSet[0]['dropMenu'][1], $coul); // insertion au bon endroit
+
+ // ajoutons un header2 avant le 1
+ $p['markupSet'][0]['id'] = 'header2';
+ $b->ajouterAvant('header1',$p['markupSet'][0]);
+ $this->assertEqual(3, count($b->markupSet));
+ $this->assertEqual($b->get('header2'), $p['markupSet'][0]);
+ $this->assertEqual($b->markupSet[1], $p['markupSet'][0]);
+ }
+
+ function testAfficherEtCacher(){
+ $b = new Barre_outils($this->baseParamsBarre);
+ $b->cacher('header1');
+ $this->assertFalse($b->markupSet[0]['display']);
+ $b->afficher('header1');
+ $this->assertTrue($b->markupSet[0]['display']);
+ }
+
+ function testAfficherEtCacherTout(){
+ $b = new Barre_outils($this->baseParamsBarreEtendue);
+ $b->cacherTout();
+ $this->assertFalse($b->markupSet[0]['display']);
+ $this->assertFalse($b->markupSet[1]['dropMenu'][0]['display']);
+
+ $b->afficherTout();
+ $this->assertTrue($b->markupSet[0]['display']);
+ $this->assertTrue($b->markupSet[1]['dropMenu'][0]['display']);
+ }
+
+ function testAfficherEtCacherPlusieursBoutons(){
+ $b = new Barre_outils($this->baseParamsBarreEtendue);
+ $b->cacher(array('header1','couleur_jaune'));
+ $this->assertFalse($b->markupSet[0]['display']);
+ $this->assertFalse($b->markupSet[1]['dropMenu'][0]['display']);
+ $this->assertTrue($b->markupSet[1]['dropMenu'][1]['display']);
+
+ $b->cacherTout();
+ $b->afficher(array('header1','couleur_jaune'));
+ $this->assertTrue($b->markupSet[0]['display']);
+ $this->assertTrue($b->markupSet[1]['dropMenu'][0]['display']);
+ $this->assertFalse($b->markupSet[1]['dropMenu'][1]['display']);
+ }
+
+ function testSetAvecIdVideNeDoitRienModifier(){
+ $b = new Barre_outils($this->baseParamsBarreEtendue);
+ $b->set(array(),array('display'=>false));
+ $this->assertTrue($b->markupSet[0]['display']);
+ $this->assertTrue($b->markupSet[1]['dropMenu'][0]['display']);
+ }
+
+ function testSetAvecIdArrayDoitModifTousLesIds(){
+ $b = new Barre_outils($this->baseParamsBarreEtendue);
+ $b->set(array('header1','couleur_jaune'),array('display'=>false));
+ $this->assertFalse($b->markupSet[0]['display']);
+ $this->assertFalse($b->markupSet[1]['dropMenu'][0]['display']);
+ $this->assertTrue($b->markupSet[1]['dropMenu'][1]['display']);
+ }
+
+ function testCreerJson(){
+ $b = new Barre_outils($this->baseParamsBarre);
+ $b->ajouterApres('header1', array(
+ "id" => 'Caracteres decodes',
+ "name" => "étrange",
+ "className" => "outil_fr",
+ "openWith" => "[fr]",
+ "display" => true,
+ ));
+ $json = $b->creer_json();
+ $this->assertPattern(',barre_outils_spip = {,',$json);
+ $this->assertPattern(',\[{"name":",',$json);
+ $this->assertNoPattern(',eacute;,',$json);
+ }
+
+ function testBoutonsDUneLangue(){
+ $b = new Barre_outils($this->baseParamsBarre);
+ $ico2 = $ico1 = array(
+ "id" => 'ico_fr1',
+ "name" => "test apparaissant si langue est le francais",
+ "className" => "outil_fr",
+ "openWith" => "[fr]",
+ "lang" => array("fr"),
+ "display" => true,
+ );
+ $ico2['id'] = 'ico_fr2';
+ $ico2['lang'] = array("fr","en","es");
+
+ $b->ajouterApres('header1', $ico1);
+ $b->ajouterApres('ico_fr1', $ico2);
+ $this->assertEqual($ico1, $b->get('ico_fr1'));
+ $this->assertEqual($ico2, $b->get('ico_fr2'));
+
+ // verifier que ces nouveaux array()
+ // ne posent pas de problemes dans les recursions
+ $b->cacherTout();
+ $this->assertFalse($b->markupSet[1]['display']);
+ $b->afficher('ico_fr1');
+ $this->assertTrue($b->markupSet[1]['display']);
+ $b->cacherTout();
+ $b->afficher(array('ico_fr1','ico_fr2'));
+ $this->assertTrue($b->markupSet[1]['display']);
+
+ // la langue est bien transmise au json
+ $json = $b->creer_json();
+ $this->assertPattern(',"lang":\[,', $json);
+ }
+
+
+ function testFonctionsJavacriptDansParametreNeDoitPasEtreEntreguillemetsDansJson(){
+ $b = new Barre_outils($this->baseParamsBarre);
+ $clean = array(
+ "id" => 'clean',
+ "name" => _T('barre_outils:barre_clean'),
+ "className" => "outil_clean",
+ // function doit etre echappe
+ "replaceWith" => 'function(markitup) { return markitup.selection.replace(/<(.*?)>/g, "") }',
+ "display" => true,
+ );
+ $b->ajouterApres('header1', $clean);
+ $json = $b->creer_json();
+ // pas de :"function(... ..."
+ $this->assertPattern('/:function\(/',$json);
+ }
+
+ function testParametreFunctionsDansJson(){
+ $b = new Barre_outils($this->baseParamsBarre);
+ $b->functions = "function dido(){}";
+ $json = $b->creer_json();
+ // function n'est plus dans la barre
+ $this->assertFalse($b->functions);
+ // mais uniquement en fin du fichier json
+ $this->assertPattern('/function dido\(/', $json);
+ }
+
+ function testAjouterFonctions(){
+ $b = new Barre_outils($this->baseParamsBarre);
+ $b->ajouterFonction("function dido(){}");
+ $this->assertPattern('/function dido\(/', $b->functions);
+ }
+
+ /*
+ function squeletteTest(){
+ $sq = new SqueletteTest("SimpleTest");
+ $sq->addInsertHead();
+ $sq->addToBody("
+ <div class='formulaire_spip'>
+ <form>
+ <textarea name='texte' class='texte'></textarea>
+ </form>
+ </div>
+ ");
+ return $sq;
+ }
+
+ function testPresenceBarreOutilPublique(){
+ include_spip('simpletest/browser');
+ include_spip('simpletest/web_tester');
+
+ $sq = $this->squeletteTest();
+
+ $browser = &new SimpleBrowser();
+ $browser->get($f=$this->urlTestCode($sq->code()));
+ $browser->setField('texte', 'me');
+ $this->dump($browser->getField('texte'));
+ $this->dump($browser->getContent());
+ #$this->dump($c);
+ #$this->assertPattern('/jquery\.markitup_pour_spip\.js/', $c);
+ }*/
+}
+
+
+?>