<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de GreenIvory &#187; GWT</title>
	<atom:link href="http://blog.greenivory.fr/tag/gwt/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.greenivory.fr</link>
	<description>Développement agile sur technologies web 2.0</description>
	<lastBuildDate>Wed, 18 Aug 2010 15:43:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mise à jour de Safari (5) et GWT</title>
		<link>http://blog.greenivory.fr/2010/06/10/mise-a-jour-de-safari-5-et-gwt/</link>
		<comments>http://blog.greenivory.fr/2010/06/10/mise-a-jour-de-safari-5-et-gwt/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 07:15:21 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[mise à jour]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=1048</guid>
		<description><![CDATA[
J&#8217;ai mis à jour Safari 5 (car quelques nouveautés intéressantes) et je n&#8217;ai remarqué aucun souci avec le plugin GWT, ça passe !
J&#8217;suis pas non plus complètement fou, je m&#8217;étais renseigné, et ce qu&#8217;il ressortait c&#8217;est que ça passe quand on est sous Mac OS X 10.6 et que Safari tourne en 64 bits. Si [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>J&#8217;ai mis à jour <strong>Safari 5</strong> (car q<a href="http://www.apple.com/safari/whats-new.html#reader">uelques nouveautés intéressantes</a>) et je n&#8217;ai remarqué <strong>aucun souci avec le plugin <a href="http://code.google.com/webtoolkit/" xml:lang="en" hreflang="en"><abbr title="Google Web Toolkit" xml:lang="en">GWT</abbr></a></strong>, ça passe !</p>
<p>J&#8217;suis pas non plus complètement fou, je m&#8217;étais renseigné, et ce qu&#8217;il ressortait c&#8217;est que ça passe quand on est sous Mac OS X 10.6 et que Safari tourne en 64 bits. Si vous n&#8217;êtes pas dans cette configuration-là, je ne vous conseille pas la mise à jour de Safari.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2010/06/10/mise-a-jour-de-safari-5-et-gwt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tester son application GWT/GXT avec Selenium</title>
		<link>http://blog.greenivory.fr/2009/09/28/tester-son-application-gwtgxt-avec-selenium/</link>
		<comments>http://blog.greenivory.fr/2009/09/28/tester-son-application-gwtgxt-avec-selenium/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 10:45:11 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[GXT]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=545</guid>
		<description><![CDATA[GXT (grâce à GWT) permet de créer des applications web riches, dont l&#8217;ergonomie est assez proche d&#8217;une application lourde. Nous avons déjà eu l&#8217;occasion de publier des articles à ce sujet sur ce blog. Il est assez simple de faire des tests unitaires sur des services dans les couches basses d&#8217;une application. Et encore, dès [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://extjs.com/products/gxt/" xml:lang="en" hreflang="en"><abbr title="Ext pour GWT" xml:lang="en">GXT</abbr></a> (grâce à <a href="http://code.google.com/webtoolkit/" xml:lang="en" hreflang="en"><abbr title="Google Web Toolkit" xml:lang="en">GWT</abbr></a>) permet de créer des <strong>applications web riches</strong>, dont l&#8217;ergonomie est assez proche d&#8217;une application lourde. Nous avons déjà eu l&#8217;occasion de publier des articles à ce sujet sur ce blog. Il est assez simple de faire des <strong>tests unitaires</strong> sur des services dans les couches basses d&#8217;une application. Et encore, dès qu&#8217;il y a une base de données en jeu, ça se complique (et c&#8217;est d&#8217;ailleurs très souvent le cas). Mais qu&#8217;en est-il des interfaces graphiques ? Evidemment, certains éléments graphiques peuvent être testés via des tests unitaires, mais comment s&#8217;assurer que l&#8217;interface, dans son ensemble, répond aux besoins ?</p>
<p>C&#8217;est là qu&#8217;intervient <a href="http://seleniumhq.org/">Selenium</a>. Selenium est un jeu d&#8217;outils qui permettent d&#8217;<strong>automatiser les tests d&#8217;interface graphique</strong>, en pilotant un navigateur via du code (ce code, c&#8217;est le <strong>testcase</strong>). Par exemple, on va pouvoir demander le chargement d&#8217;une page, effectuer un clic sur un lien bien précis, vérifier que la page contient un texte, &#8230; Une session complète sera dédiée à Selenium au <a href="http://developerforum.eu/">DeveloperForum 5</a>, le <strong>8 octobre 2009 à Strasbourg</strong>.</p>
<p>Mais avant de pouvoir tester nos interfaces, il faut mettre en place Selenium. Voici comment faire fonctionner Selenium dans un projet <a href="http://code.google.com/webtoolkit/" xml:lang="en" hreflang="en"><abbr title="Google Web Toolkit" xml:lang="en">GWT</abbr></a> dans Eclipse sur Mac OS X Snow Leopard (10.6).</p>
<h2>Comment ça marche ?</h2>
<p>Il faut deux éléments pour faire fonctionner le tout :</p>
<ul>
<li><strong>Selenium IDE</strong> est une extension Firefox qui permet d&#8217;enregistrer les actions réalisées dans la fenêtre de Firefox et d&#8217;ainsi produire le code du testcase (dans le langage de votre choix &#8211; dans notre cas, ce sera Java).</li>
<li><strong>Selenium RC</strong> (Remote Control) est un serveur capable de piloter un navigateur et pouvant recevoir des commandes via le réseau, déclenchées par le testcase.</li>
</ul>
<h2>Mise en place</h2>
<p>Utilisez Firefox pour télécharger et installer Selenium IDE (extension Firefox) : <a href="http://seleniumhq.org/download/">http://seleniumhq.org/download/</a><br />
Téléchargez ensuite Selenium RC et décompresser l&#8217;archive dans le répertoire de votre choix. Depuis ce répertoire, lancez Selenium RC via la ligne de commande :</p>
<pre>java -jar selenium-server-1.0.1/selenium-server.jar</pre>
<p>Le serveur se lance et devrait vous afficher les gentillesses suivantes :</p>
<pre>10:53:44.369 INFO - Java: Apple Inc. 14.1-b02-90
10:53:44.370 INFO - OS: Mac OS X 10.6.1 i386
10:53:44.379 INFO - v1.0.1 [2696], with Core v@VERSION@ [@REVISION@]
10:53:44.461 INFO - Version Jetty/5.1.x
10:53:44.462 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
10:53:44.463 INFO - Started HttpContext[/selenium-server,/selenium-server]
10:53:44.463 INFO - Started HttpContext[/,/]
10:53:44.475 INFO - Started SocketListener on 0.0.0.0:4444
10:53:44.475 INFO - Started org.mortbay.jetty.Server@1ff7a1e</pre>
<h2>Premier test</h2>
<p><strong>Dans Firefox</strong>, allez sur une page web de votre choix puis, dans le menu <em>Outils</em>, choisissez <em>Selenium IDE</em>. Commencez à surfer sur la page web et regardez Selenium &laquo;&nbsp;Big Brother&nbsp;&raquo; IDE enregistrer toutes vos actions dans le navigateur&#8230; Exactement comme lorsqu&#8217;on enregistre un macro dans certains logiciels. Après avoir navigué dans quelques pages, sélectionnez du texte dans la page et faites un clic droit puis sélectionnez l&#8217;option <em>verifyTextPresent &lt;le texte que vous avez sélectionné&gt;</em>.</p>
<p>Dans le menu de la <strong>fenêtre de Selenium</strong>, choisissez <em>Exporter le test sous&#8230;</em> puis choisissez <em>Java (JUnit)</em>. Enregistrez le fichier avec le nom de votre choix, sans oublier l&#8217;extension <em>.java</em>.</p>
<p><strong>Dans Eclipse</strong>, dans votre projet <a href="http://code.google.com/webtoolkit/" xml:lang="en" hreflang="en"><abbr title="Google Web Toolkit" xml:lang="en">GWT</abbr></a>/<a href="http://extjs.com/products/gxt/" xml:lang="en" hreflang="en"><abbr title="Ext pour GWT" xml:lang="en">GXT</abbr></a>, créez un nouveau dossier de sources nommé <em>test</em> (si ce n&#8217;est pas déjà fait). Ajoutez-y le fichier généré par Selenium IDE puis corrigez le nom du package ainsi que le nom de la classe. Corrigez le build path de votre projet en ajoutant le JAR <em>selenium-java-client-driver.jar</em> (que vous trouverez dans l&#8217;archive de Selenium que vous avez téléchargée). Clic droit sur la classe dans Eclipse puis <em>Run As &gt; JUnit Test</em>.</p>
<p>Et là, c&#8217;est le drame : une <strong>erreur se produit lors du lancement de Firefox</strong>. Après le passage à Snow Leopard, une incompatibilité de librairie est arrivée. Pour la contourner, il existe une <a href="http://stackoverflow.com/questions/1364523/firefox-bin-quit-unexpectedly-while-running-selenium-test">solution</a> qui vaut ce qu&#8217;elle vaut (j&#8217;adore cette expression qui ne veut rien dire dans l&#8217;absolu et qui pourtant veut bien dire&#8230; ce qu&#8217;elle veut dire !) :</p>
<ul>
<li>Quittez Firefox</li>
<li>Lancer le Terminal puis rendez-vous dans <em>/Applications/Firefox.app/Contents/MacOS</em>.</li>
<li>Renommez <em>libsqlite3.dylib</em> : <code>mv libsqlite3.dylib _libsqlite3.dylib</code></li>
</ul>
<p>Relancez votre testcase et tout devrait rentrer dans l&#8217;ordre !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/09/28/tester-son-application-gwtgxt-avec-selenium/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GWT et les NullPointerException</title>
		<link>http://blog.greenivory.fr/2009/04/01/gwt-et-les-nullpointerexception/</link>
		<comments>http://blog.greenivory.fr/2009/04/01/gwt-et-les-nullpointerexception/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 16:11:23 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[null]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=221</guid>
		<description><![CDATA[Quelle histoire, ce sabotage de Google ! Un peu de sérieux, en attendant des nouvelles de ce cher Serge-Jean (plus facile à écrire qu&#8217;à dire !).
Je me suis fait avoir par quelque chose d&#8217;assez subtil avec GWT. En parsant du XML avec le XMLParser fourni par GWT, j&#8217;ai eu besoin de récupérer la valeur d&#8217;attributs optionnels. [...]]]></description>
			<content:encoded><![CDATA[<p>Quelle histoire, ce <a href="http://blog.greenivory.fr/2009/04/01/google-menace/">sabotage de Google</a> ! Un peu de sérieux, en attendant des nouvelles de ce cher Serge-Jean (plus facile à écrire qu&#8217;à dire !).</p>
<p>Je me suis fait avoir par quelque chose d&#8217;assez subtil avec <a href="http://code.google.com/webtoolkit/" xml:lang="en" hreflang="en"><abbr title="Google Web Toolkit" xml:lang="en">GWT</abbr></a>. En parsant du XML avec le <code>XMLParser</code> fourni par <a href="http://code.google.com/webtoolkit/" xml:lang="en" hreflang="en"><abbr title="Google Web Toolkit" xml:lang="en">GWT</abbr></a>, j&#8217;ai eu besoin de récupérer la valeur d&#8217;attributs optionnels. J&#8217;avais donc écrit des blocs de code qui ressemblent à peu près à ceci :</p>
<pre lang="java">
NamedNodeMap paramAttrs = paramNode.getAttributes();
String view = null;
try {
   view = paramAttrs.getNamedItem("view").getNodeValue();
} catch (NullPointerException e) { }
</pre>
<p>En me disant que si un élément est <code>null</code> dans la chaîne d&#8217;exécution, alors <code>view</code> vaudrait tout simplement <code>null</code>. Ceci est valable en Java, mais une fois traduit en JavaScript par <a href="http://code.google.com/webtoolkit/" xml:lang="en" hreflang="en"><abbr title="Google Web Toolkit" xml:lang="en">GWT</abbr></a>, ça ne marche pas du tout. La solution est donc de tester &laquo;&nbsp;à la main&nbsp;&raquo; les valeurs nulles :</p>
<pre lang="java">
NamedNodeMap paramAttrs = paramNode.getAttributes();
Node item = paramAttrs.getNamedItem("view");
String view = item != null ? item.getNodeValue() : null;
</pre>
<p>Dans cet exemple, je vous l&#8217;accorde, ce n&#8217;est pas plus long et c&#8217;est même plus propre, mais j&#8217;avais un peu plus d&#8217;éléments dans ma ligne, et donc plusieurs valeurs (potentiellement nulles) à tester.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/04/01/gwt-et-les-nullpointerexception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrollbar et RowLayout</title>
		<link>http://blog.greenivory.fr/2009/03/05/scrollbar-et-rowlayout/</link>
		<comments>http://blog.greenivory.fr/2009/03/05/scrollbar-et-rowlayout/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 12:02:21 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[GXT]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[scroll]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=82</guid>
		<description><![CDATA[L&#8217;utilisation d&#8217;un RowLayout dans un conteneur supprime la possibilité d&#8217;avoir une barre de défilement pour ce conteneur. En fait, la raison est assez simple : RowLayout calcule la position et la taille précises de chaque enfant, et c&#8217;est à chacun de ses enfants de gérer sa barre de défilement, au besoin.
Donc, si vous avez besoin [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;utilisation d&#8217;un <code>RowLayout</code> dans un conteneur supprime la possibilité d&#8217;avoir une barre de défilement pour ce conteneur. En fait, la raison est assez simple : <code>RowLayout</code> calcule la position et la taille précises de chaque enfant, et c&#8217;est à chacun de ses enfants de gérer sa barre de défilement, au besoin.</p>
<p>Donc, <strong>si vous avez besoin d&#8217;une barre de défilement dans un panneau, n&#8217;utilisez pas </strong><code><strong>RowLayout</strong></code> : dans la plupart des cas, un <code>FlowLayout</code> peut être préférable. Utiliser un <code>FlowLayout</code> revient à utiliser un <code>RowLayout(Orientation.VERTICAL)</code> avec des contraintes <code>RowData(1, -1)</code> pour chaque enfant (c&#8217;est-à-dire : utiliser toute la largeur disponible et laisser chacun des enfants calculer sa propre hauteur).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/03/05/scrollbar-et-rowlayout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Savoir si l&#8217;on est en mode &#171;&#160;hosted&#160;&#187; ou en mode &#171;&#160;web&#160;&#187;</title>
		<link>http://blog.greenivory.fr/2009/02/27/savoir-si-lon-est-en-mode-hosted-ou-en-mode-web/</link>
		<comments>http://blog.greenivory.fr/2009/02/27/savoir-si-lon-est-en-mode-hosted-ou-en-mode-web/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 14:14:18 +0000</pubDate>
		<dc:creator>Frédéric</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[hosted mode]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[web mode]]></category>

		<guid isPermaLink="false">http://blog.greenivory.fr/?p=10</guid>
		<description><![CDATA[Il peut parfois être utile de savoir si l&#8217;on est en mode hosted ou en mode web dans une application GWT. En fait, cela m&#8217;est surtout utile pour faire des tests : en mode hosted (en cours de développement), j&#8217;attaque ma servlet de test et en mode web (déployé, donc), j&#8217;attaque la servlet réelle de [...]]]></description>
			<content:encoded><![CDATA[<p>Il peut parfois être utile de savoir si l&#8217;on est en mode <em>hosted</em> ou en mode <em>web</em> dans une application <a href="http://code.google.com/webtoolkit/" xml:lang="en" hreflang="en"><abbr title="Google Web Toolkit" xml:lang="en">GWT</abbr></a>. En fait, cela m&#8217;est surtout utile pour faire des tests : en mode hosted (en cours de développement), j&#8217;attaque ma servlet de test et en mode web (déployé, donc), j&#8217;attaque la servlet réelle de l&#8217;application.</p>
<p>Pour cela, il faut utiliser la méthode statique <code>isScript()</code> de la classe <code>GWT</code> :</p>
<pre lang="java">if ( GWT.isScript() ) {
   // Fonctionnement en mode web (déployé)
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.greenivory.fr/2009/02/27/savoir-si-lon-est-en-mode-hosted-ou-en-mode-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
