diff --git a/README.adoc b/README.adoc index 0dda345..6d9aea9 100644 --- a/README.adoc +++ b/README.adoc @@ -4,7 +4,7 @@ http://asciidoctor.org[Asciidoctor] extension to format gherkin feature files in You can use this extension to include your gherkin feature files in asciidoc in the form of sections, paragraphs, lists and tables. -The conversion is based on simple, customizable erb template. +The conversion is based on a simple, customizable erb template. == Usage @@ -100,3 +100,20 @@ would render like | Scenario title1 | Scenario title2 |==== + +== Character Encoding + +You can use attributes to define the encoding for reading the template file and the feature file. + +You can define these attributes either in the block macro or at the document level. + +template-encoding:: + Used to read the custom template file if specified. +encoding:: + Used to read the feature file. + + +.Defining feature encoding +---- +gherkin::./simple.feature[encoding=UTF-8] +---- diff --git a/src/main/resources/com/github/domgold/doctools/asciidoctor/gherkin/gherkinblockmacro.rb b/src/main/resources/com/github/domgold/doctools/asciidoctor/gherkin/gherkinblockmacro.rb index 43267b8..37c0543 100644 --- a/src/main/resources/com/github/domgold/doctools/asciidoctor/gherkin/gherkinblockmacro.rb +++ b/src/main/resources/com/github/domgold/doctools/asciidoctor/gherkin/gherkinblockmacro.rb @@ -14,8 +14,6 @@ def process parent, target, attributes doc = parent.document reader = parent.document.reader - print doc.attributes - if attributes.key?("template-encoding") template_encoding = attributes["template-encoding"] elsif doc.attributes.key?("template-encoding") diff --git a/src/test/java/com/github/domgold/doctools/asciidoctor/gherkin/GherkinRubyBlockMacroTest.java b/src/test/java/com/github/domgold/doctools/asciidoctor/gherkin/GherkinRubyBlockMacroTest.java index 7e0d0d6..ce359d4 100644 --- a/src/test/java/com/github/domgold/doctools/asciidoctor/gherkin/GherkinRubyBlockMacroTest.java +++ b/src/test/java/com/github/domgold/doctools/asciidoctor/gherkin/GherkinRubyBlockMacroTest.java @@ -1,6 +1,7 @@ package com.github.domgold.doctools.asciidoctor.gherkin; import static org.asciidoctor.OptionsBuilder.options; +import static org.asciidoctor.AttributesBuilder.attributes; import java.io.File; import java.io.IOException; @@ -8,26 +9,55 @@ import org.asciidoctor.Asciidoctor; import org.asciidoctor.Options; import org.asciidoctor.SafeMode; +import org.junit.Before; import org.junit.Test; public class GherkinRubyBlockMacroTest { - @Test - public void test() throws IOException { - Asciidoctor asciidoctor = Asciidoctor.Factory.create(); + private Asciidoctor asciidoctor; + private Options options; + private File destinationDir; + + @Before + public void initAsciidoctor() throws IOException { + asciidoctor = Asciidoctor.Factory.create(); GherkinExtensionRegistry reg = new GherkinExtensionRegistry(); reg.register(asciidoctor); - - File destinationDir = new File("target/test-output"); + destinationDir = new File("target/test-output"); if (!destinationDir.exists() && !destinationDir.mkdirs()) { throw new IOException("could not create test-output dir"); } - Options options = options().toDir(destinationDir).safe(SafeMode.UNSAFE) + options = options().toDir(destinationDir).safe(SafeMode.UNSAFE) .get(); - asciidoctor.convertFile(new File( - "src/test/resources/simple_specs_example.adoc"), options); + } + + @Test + public void simpleTest() { + asciidoctor.convertFile(new File("src/test/resources/simple_specs_example.adoc"), options); + } + + @Test + public void complexTest() { asciidoctor.convertFile(new File( "src/test/resources/complex_specs_example.adoc"), options); } + + @Test + public void testWithUTF8FeatureBlockMacroAttributeANSI() { + options.setAttributes(attributes().attribute("encoding", "iso-8859-1").get()); + asciidoctor.convertFile(new File("src/test/resources/block_macro_encoding_attribute_ANSI.adoc"), options); + } + @Test + public void testWithUTF8FeatureBlockMacroAttributeUTF8() { + //UTF-8 is default + //options.setAttributes(attributes().attribute("encoding", "UTF-8").get()); + asciidoctor.convertFile(new File("src/test/resources/block_macro_encoding_attribute_UTF8.adoc"), options); + } + + @Test(expected=gherkin.lexer.LexingError.class) + public void testBlockMacroWithWrongEncodingAttributeFails() { + options.setAttributes(attributes().attribute("encoding", "UTF-8").get()); + asciidoctor.convertFile(new File("src/test/resources/block_macro_encoding_attribute_ANSI.adoc"), options); + } } diff --git a/src/test/resources/block_macro_encoding_attribute_ANSI.adoc b/src/test/resources/block_macro_encoding_attribute_ANSI.adoc new file mode 100644 index 0000000..00611ee --- /dev/null +++ b/src/test/resources/block_macro_encoding_attribute_ANSI.adoc @@ -0,0 +1,9 @@ += Example simple + +== Mes fonctionnalitĂ©s + +gherkin::./french_ANSI.feature[] + +gherkin::./french_UTF8.feature[encoding=UTF-8] + +gherkin::./french_ANSI.feature[encoding=iso-8859-1] diff --git a/src/test/resources/block_macro_encoding_attribute_UTF8.adoc b/src/test/resources/block_macro_encoding_attribute_UTF8.adoc new file mode 100644 index 0000000..89c827f --- /dev/null +++ b/src/test/resources/block_macro_encoding_attribute_UTF8.adoc @@ -0,0 +1,9 @@ += Simple specs example + +== My features + +gherkin::./french_UTF8.feature[] + +gherkin::./french_UTF8.feature[encoding=UTF-8] + +gherkin::./french_ANSI.feature[encoding=iso-8859-1] diff --git a/src/test/resources/french_ANSI.feature b/src/test/resources/french_ANSI.feature new file mode 100644 index 0000000..a2618b0 --- /dev/null +++ b/src/test/resources/french_ANSI.feature @@ -0,0 +1,10 @@ +# language: fr +Fonctionnalité: Une fonctionnalité simple + Voici la description de la fonctionnalité. + + Contexte: Le contexte + Etant donné une étape simple + + Scénario: Le titre du scénario + Quand j'inclus le fichier gherkin dans le document asciidoc + Alors les étapes du scénario apparaissent sous forme de liste. diff --git a/src/test/resources/french_UTF8.feature b/src/test/resources/french_UTF8.feature new file mode 100644 index 0000000..d4c16f9 --- /dev/null +++ b/src/test/resources/french_UTF8.feature @@ -0,0 +1,10 @@ +# language: fr +FonctionnalitĂ©: Une fonctionnalitĂ© simple + Voici la description de la fonctionnalitĂ©. + + Contexte: Le contexte + Etant donnĂ© une Ă©tape simple + + ScĂ©nario: Le titre du scĂ©nario + Quand j'inclus le fichier gherkin dans le document asciidoc + Alors les Ă©tapes du scĂ©nario apparaissent sous forme de liste. diff --git a/src/test/resources/selfcare.feature b/src/test/resources/selfcare.feature deleted file mode 100644 index 9e60197..0000000 --- a/src/test/resources/selfcare.feature +++ /dev/null @@ -1,130 +0,0 @@ -# language: fr -FonctionnalitĂ©: Changer son mot de passe ou rĂ©cupĂ©rer son cuid. - - Selfcare pour utilisateurs ayant oublier son mot de passe ou cuid. - L utilisateur peut soit rĂ©cupĂ©rer son cuid via mail, soit rĂ©initialiser son mot de passe, s il est purement Guardian. - Pour les utilisateurs Gassi ou MPA ils sont redirigĂ© vers la page selfcare Gassi ou MPA. - - Plan du scĂ©nario: RĂ©initialiser son mot de passe - Etant donnĂ© un utilisateur avec le cuid '' et l adresse mail '' - Quand l utilisateur accède Ă  la page '/selfcare.jsp' - Et l utilisateur clique sur le lien avec le titre 'oubli/modification* de mot de passe' - Et l utilisateur entre la chaine '' dans le champ de texte portant le nom 'critere' - Et l utilisateur entre la chaine '123456' dans le champ de texte portant le nom 'captcha' - Et l utilisateur clique sur le lien avec le titre 'valider' - Alors la page suivante contient le texte '' - Et l utilisateur a recu un mail contenant le hash - Quand l utilisateur clique sur le lien reçu par mail - Et l utilisateur entre la chaine '' dans le champ de texte portant le nom 'newpassword' - Et l utilisateur entre la chaine '' dans le champ de texte portant le nom 'confirmpassword' - Et l utilisateur clique sur le bouton portant le titre 'Valider' - Alors la page suivante contient le texte 'Votre nouveau mot de passe a Ă©tĂ© enregistrĂ©.' - Et le mot de passe de l utilisateur '' est '' - - Exemples: - | cuid | adresse_mail_utilisateur | nouveau_mdp | - | self0003 | self0003@orange.com | Azerty1& | - - Plan du scĂ©nario: RĂ©cupĂ©rer son cuid par mail. - Etant donnĂ© un utilisateur avec le cuid '' et l adresse mail '' - Quand l utilisateur accède Ă  la page '/selfcare.jsp' - Et l utilisateur clique sur le lien avec le titre 'oubli d'Identifiant (CUID)' - Et l utilisateur entre la chaine '' dans le champ de texte portant le nom 'critere' - Et l utilisateur entre la chaine '123456' dans le champ de texte portant le nom 'captcha' - Et l utilisateur clique sur le lien avec le titre 'valider' - Alors la page suivante contient le texte '' - Et l utilisateur a recu un mail contenant son cuid '' - - Exemples: - | cuid | adresse_mail_utilisateur | type utilisateur | - | self0001 | self0001@orange.com | Gassi / Guardian | - | self0002 | self0002@orange.com | Guardian / MPA | - | self0003 | self0003@orange.com | Guardian | - - Plan du scĂ©nario: Utilisateur Gassi/Guardian : tenter de rĂ©initialiser son mot de passe - Etant donnĂ© un utilisateur avec le cuid '' et l adresse mail '' - Quand l utilisateur accède Ă  la page '/selfcare.jsp' - Et l utilisateur clique sur le lien avec le titre 'oubli/modification* de mot de passe' - Et l utilisateur entre la chaine '' dans le champ de texte portant le nom 'critere' - Et l utilisateur entre la chaine '123456' dans le champ de texte portant le nom 'captcha' - Et l utilisateur clique sur le lien avec le titre 'valider' - Alors la page suivante contient le texte '' - - Exemples: - | cuid | adresse_mail_utilisateur | type utilisateur | texte attendu | texte mail | - | self0001 | self0001@orange.com | Gassi / Guardian | Votre compte Ă©tant un compte GASSI, vous devez utiliser le selfcare GASSI | | - - - Plan du scĂ©nario: Utilisateur MPA/Guardian : tenter de rĂ©initialiser son mot de passe - Etant donnĂ© un utilisateur avec le cuid '' et l adresse mail '' - Quand l utilisateur accède Ă  la page '/selfcare.jsp' - Et l utilisateur clique sur le lien avec le titre 'oubli/modification* de mot de passe' - Et l utilisateur entre la chaine '' dans le champ de texte portant le nom 'critere' - Et l utilisateur entre la chaine '123456' dans le champ de texte portant le nom 'captcha' - Et l utilisateur clique sur le lien avec le titre 'valider' - Alors la page suivante contient le texte 'il contient le lien "Mot de Passe Attitude" pour gĂ©rer votre mot de passe, accessible Ă©galement Ă  cette adresse' - Et la page suivante contient le texte '' - Et l utilisateur a recu un mail contenant le texte '' - - Exemples: - | cuid | adresse_mail_utilisateur | type utilisateur | texte mail | - | self0002 | self0002@orange.com | Guardian / MPA | self0002 est utilisateur de la "Mot de Passe Attitude". | - - Plan du scĂ©nario: Tenter de rĂ©initialiser le mot de passe sans hash - Etant donnĂ© un utilisateur anonyme - Quand l utilisateur charge le fichier html suivant - """ - - - - -
- - - - - - -
- - - """ - Et l utilisateur clique sur le bouton portant le titre 'submit' - Alors la page suivante contient le texte 'NO PARAMETER [hash] found in request !' - - Exemples: - | cuid | nouveau_mdp | - | gass0001 | Azerty1& | - - Plan du scénario: Tenter de réinitialiser le mot de passe avec un hash aléatoire - Etant donné un utilisateur anonyme - Quand l utilisateur charge le fichier html suivant - """ - - - - -
- - - - - - - -
- - - """ - Et l utilisateur clique sur le bouton portant le titre 'submit' - Alors la page suivante contient le texte 'Couple cuid/hash non valide' - - Exemples: - | cuid | nouveau_mdp | hash | - | gass0001 | Azerty1& | hashaleatoire | diff --git a/src/test/resources/simple_specs_example.adoc b/src/test/resources/simple_specs_example.adoc index 8aaea62..fa71f63 100644 --- a/src/test/resources/simple_specs_example.adoc +++ b/src/test/resources/simple_specs_example.adoc @@ -5,5 +5,3 @@ gherkin::./simple.feature[] gherkin::./simple2.feature[] - -gherkin::./selfcare.feature[]