diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml
index c98a55d035..bf403e5a98 100644
--- a/pmd-fortran/pom.xml
+++ b/pmd-fortran/pom.xml
@@ -39,10 +39,20 @@
junit
test
+
+ org.junit.vintage
+ junit-vintage-engine
+ test
+
net.sourceforge.pmd
pmd-test
test
+
+ net.sourceforge.pmd
+ pmd-lang-test
+ test
+
diff --git a/pmd-fortran/src/test/java/net/sourceforge/pmd/cpd/FortranTokenizerTest.java b/pmd-fortran/src/test/java/net/sourceforge/pmd/cpd/FortranTokenizerTest.java
index 6058ffe1b0..f143b6339a 100644
--- a/pmd-fortran/src/test/java/net/sourceforge/pmd/cpd/FortranTokenizerTest.java
+++ b/pmd-fortran/src/test/java/net/sourceforge/pmd/cpd/FortranTokenizerTest.java
@@ -4,36 +4,34 @@
package net.sourceforge.pmd.cpd;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
+import java.util.Properties;
-import org.apache.commons.io.IOUtils;
-import org.junit.Before;
import org.junit.Test;
-import net.sourceforge.pmd.testframework.AbstractTokenizerTest;
+import net.sourceforge.pmd.cpd.test.CpdTextComparisonTest;
/**
* @author rpelisse
*
*/
-public class FortranTokenizerTest extends AbstractTokenizerTest {
+public class FortranTokenizerTest extends CpdTextComparisonTest {
- @Before
- @Override
- public void buildTokenizer() throws IOException {
- this.tokenizer = new FortranTokenizer();
- this.sourceCode = new SourceCode(new SourceCode.StringCodeLoader(this.getSampleCode(), "sample.for"));
+ public FortranTokenizerTest() {
+ super(".for");
}
@Override
- public String getSampleCode() throws IOException {
- return IOUtils.toString(FortranTokenizerTest.class.getResourceAsStream("sample.for"), StandardCharsets.UTF_8);
+ protected String getResourcePrefix() {
+ return "../lang/fortran/cpd/testdata";
+ }
+
+ @Override
+ public Tokenizer newTokenizer(Properties properties) {
+ return new FortranTokenizer();
}
@Test
- public void tokenizeTest() throws IOException {
- this.expectedTokenCount = 434;
- super.tokenizeTest();
+ public void testSample() {
+ doTest("sample");
}
}
diff --git a/pmd-fortran/src/test/resources/net/sourceforge/pmd/cpd/sample.for b/pmd-fortran/src/test/resources/net/sourceforge/pmd/lang/fortran/cpd/testdata/sample.for
similarity index 100%
rename from pmd-fortran/src/test/resources/net/sourceforge/pmd/cpd/sample.for
rename to pmd-fortran/src/test/resources/net/sourceforge/pmd/lang/fortran/cpd/testdata/sample.for
diff --git a/pmd-fortran/src/test/resources/net/sourceforge/pmd/lang/fortran/cpd/testdata/sample.txt b/pmd-fortran/src/test/resources/net/sourceforge/pmd/lang/fortran/cpd/testdata/sample.txt
new file mode 100644
index 0000000000..062f773267
--- /dev/null
+++ b/pmd-fortran/src/test/resources/net/sourceforge/pmd/lang/fortran/cpd/testdata/sample.txt
@@ -0,0 +1,566 @@
+ [Image] or [Truncated image[ Bcol Ecol
+L1
+ [options/extend_source] 8 28
+L2
+ [program] 8 14
+ [tp3] 16 18
+L3
+ [implicit] 8 15
+ [none] 17 20
+L5
+ [! ce programme va demander la sais[ 1 87
+L6
+ [!parties de la chaine en plusieurs[ 1 92
+L7
+ [!sous programme correspondant.] 1 30
+L9
+ [character*60] 8 19
+ [commande] 21 28
+L10
+ [integer*4] 8 16
+ [ios] 18 20
+L11
+ [1] 8 8
+ [compteur] 18 25
+L12
+ [1] 8 8
+ [sortie] 18 23
+L13
+ [1] 8 8
+ [errone] 18 23
+L14
+ [1] 8 8
+ [conf] 18 21
+L15
+ [1] 8 8
+ [position_espace] 18 32
+L16
+ [1] 8 8
+ [debut_mot] 18 26
+L17
+ [1] 8 8
+ [fin_mot] 18 24
+L18
+ [1] 8 8
+ [nb_mots] 18 24
+L19
+ [1] 8 8
+ [nb_mots_max] 18 28
+L20
+ [1] 8 8
+ [fin_chaine] 18 27
+L21
+ [1] 8 8
+ [trouver_fin] 18 28
+L22
+ [1] 8 8
+ [num_caractere] 18 30
+L23
+ [1] 8 8
+ [action] 18 23
+L24
+ [1] 8 8
+ [premiere_lettre] 18 32
+L25
+ [1] 8 8
+ [derniere_lettre] 18 32
+L26
+ [1] 8 8
+ [intervalle_maj_min] 18 35
+L27
+ [1] 8 8
+ [apres_maj] 18 26
+L28
+ [1] 8 8
+ [taille_colonne] 18 31
+L29
+ [1] 8 8
+ [taille_ligne] 18 29
+L30
+ [1] 8 8
+ [lignes_desc] 18 28
+L32
+ [parameter] 8 16
+ [nb_mots_max] 18 28
+ [=] 30 30
+ [9] 32 32
+ [ !une saisie correcte ne contient [ 35 89
+L33
+ [!elle en contient 9, alors la sais[ 1 59
+L34
+ [parameter] 8 16
+ [errone] 18 23
+ [=] 25 25
+ [1] 27 27
+L35
+ [parameter] 8 16
+ [sortie] 18 23
+ [=] 25 25
+ [-] 27 27
+ [1] 29 29
+L36
+ [parameter] 8 16
+ [action] 18 23
+ [=] 25 25
+ [1] 27 27
+ [ !il s'agit du 1er mot de la chain[ 31 78
+L37
+ [parameter] 8 16
+ [premiere_lettre] 18 32
+ [=] 34 34
+ [1] 36 36
+ [ !correspond a la 1ere lettre d'un[ 40 76
+L38
+ [parameter] 8 16
+ [derniere_lettre] 18 32
+ [=] 34 34
+ [18] 36 37
+ [ !correspond a la derniere lettre [ 41 81
+L39
+ [parameter] 8 16
+ [intervalle_maj_min] 18 35
+ [=] 37 37
+ [32] 39 40
+ [ !nombre separant un meme caracter[ 44 77
+L40
+ [!minuscule de son majuscule] 1 27
+L41
+ [parameter] 8 16
+ [apres_maj] 18 26
+ [=] 28 28
+ [96] 30 31
+ [ !correspond au dernier caractere [ 35 80
+L42
+ [parameter] 8 16
+ [taille_colonne] 18 31
+ [=] 33 33
+ [7] 35 35
+L43
+ [parameter] 8 16
+ [taille_ligne] 18 29
+ [=] 31 31
+ [12] 33 34
+L44
+ [parameter] 8 16
+ [lignes_desc] 18 28
+ [=] 30 30
+ [11] 32 33
+L46
+ [character*19] 9 20
+ [n] 22 22
+ [taille_colonne] 24 37
+ [taille_ligne] 39 50
+L47
+ [character*19] 8 19
+ [mots_commande] 21 33
+ [nb_mots_max] 35 45
+L48
+ [character*60] 8 19
+ [desc] 21 24
+ [lignes_desc] 26 36
+L50
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' '] 19 21
+L51
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' ---------------------------[ 19 79
+L52
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' | bonjour, et bienvenue dan[ 19 79
+L53
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' ---------------------------[ 19 79
+L54
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' '] 19 21
+L55
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' '] 19 21
+L56
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' voici un rappel des fonctions di[ 19 83
+L57
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' '] 19 21
+L58
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' _ task pour creer une tache (e[ 19 83
+L59
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' '] 19 21
+L60
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' _ show pour voir la descriptio[ 19 74
+L61
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' '] 19 21
+L62
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' _ remove pour enlever une tach[ 19 76
+L63
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' '] 19 21
+L64
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' _ clear pour effacer le dashbo[ 19 69
+L65
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' '] 19 21
+L66
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' _ cancel, done, todo pour modi[ 19 99
+L67
+ [write] 8 12
+ [*] 14 14
+ [*] 16 16
+ [' '] 19 21
+L69
+ [! la boucle de sortie pour quitter[ 1 57
+L70
+ [ios] 18 20
+ [.ne.] 22 25
+ [sortie] 27 32
+L72
+ [! initialisons les variables, afin[ 1 95
+L73
+ [position_espace] 16 30
+ [=] 32 32
+ [0] 34 34
+L74
+ [debut_mot] 16 24
+ [=] 26 26
+ [0] 28 28
+L75
+ [fin_mot] 16 22
+ [=] 24 24
+ [0] 26 26
+L76
+ [nb_mots] 16 22
+ [=] 24 24
+ [0] 26 26
+L77
+ [fin_chaine] 16 25
+ [=] 27 27
+ [0] 29 29
+L79
+ [! initialisons aussi le tableau de[ 1 49
+L80
+ [compteur] 19 26
+ [=] 28 28
+ [action] 30 35
+ [nb_mots_max] 38 48
+L81
+ [mots_commande] 24 36
+ [compteur] 39 46
+ [=] 49 49
+ [' '] 51 53
+L84
+ [! appelons le sous prgramme qui ge[ 1 85
+L85
+ [!l'utilisateur le demande] 1 25
+L86
+ [call] 16 19
+ [saisie] 21 26
+ [commande] 28 35
+ [ios] 38 40
+L88
+ [ios] 20 22
+ [.eq.] 24 27
+ [0] 29 29
+ [then] 32 35
+L90
+ [! trouvons la fin de la chaine] 1 30
+L91
+ [fin_chaine] 24 33
+ [=] 35 35
+ [trouver_fin] 37 47
+ [commande] 50 57
+L92
+ [compteur] 24 31
+ [=] 33 33
+ [1] 35 35
+L93
+ [position_espace] 34 48
+ [.lt.] 50 53
+ [fin_chaine] 55 64
+ [.and.] 66 70
+ [nb_mots] 72 78
+ [.lt.] 80 83
+ [nb_mots_max] 85 95
+L94
+ [debut_mot] 32 40
+ [=] 42 42
+ [position_espace] 44 58
+ [+] 60 60
+ [1] 62 62
+L96
+ [! decoupons les mots] 1 20
+L97
+ [position_espace] 32 46
+ [=] 48 48
+ [position_espace] 50 64
+ [+] 66 66
+ [index] 68 72
+ [commande] 75 82
+ [debut_mot:] 85 94
+ [' '] 98 100
+L98
+ [fin_mot] 32 38
+ [=] 40 40
+ [position_espace] 42 56
+ [-] 58 58
+ [1] 60 60
+L100
+ [! ensuite on les enregistre dans m[ 1 46
+L101
+ [mots_commande] 32 44
+ [compteur] 47 54
+ [=] 57 57
+ [commande] 59 66
+ [debut_mot] 69 77
+ [:] 79 79
+ [fin_mot] 81 87
+L103
+ [! comptons les mots] 1 19
+L104
+ [mots_commande] 36 48
+ [compteur] 51 58
+ [.ne.] 61 64
+ [' '] 66 68
+ [then] 71 74
+L105
+ [nb_mots] 40 46
+ [=] 48 48
+ [nb_mots] 50 56
+ [+] 58 58
+ [1] 60 60
+L106
+ [compteur] 40 47
+ [=] 49 49
+ [compteur] 51 58
+ [+] 60 60
+ [1] 62 62
+L110
+ [! le programme ne doit pas tenir c[ 1 81
+L111
+ [!dont est ecrit le mot, il sera mi[ 1 48
+L112
+ [compteur] 27 34
+ [=] 36 36
+ [1] 38 38
+ [nb_mots] 41 47
+L113
+ [num_caractere] 35 47
+ [=] 49 49
+ [premiere_lettre] 51 65
+ [derniere_lettre] 68 82
+L114
+ [ichar] 44 48
+ [mots_commande] 50 62
+ [compteur] 65 72
+ [num_caractere:num_caractere] 75 101
+L115
+ [1] 8 8
+ [.gt.] 10 13
+ [apres_maj] 15 23
+ [then] 26 29
+L116
+ [mots_commande] 48 60
+ [compteur] 63 70
+ [num_caractere:num_caractere] 73 99
+ [=] 102 102
+L117
+ [1] 8 8
+ [char] 10 13
+ [ichar] 15 19
+ [mots_commande] 21 33
+ [compteur] 36 43
+ [num_caractere:num_caractere] 46 72
+ [-] 76 76
+ [intervalle_maj_min] 78 95
+L122
+ [!! affichons les mots (provisoire)] 1 34
+L123
+ [!! do compteur[ 1 47
+L124
+ [!! wri[ 1 82
+L125
+ [!! end do] 1 29
+L126
+ [!!] 1 2
+L127
+ [!! testons si le mot est bien en m[ 1 61
+L128
+ [!! write(*,*) [ 1 79
+L131
+ [! si la commande contient plus de [ 1 67
+L133
+ [nb_mots] 28 34
+ [.eq.] 36 39
+ [nb_mots_max] 41 51
+ [then] 54 57
+L134
+ [write] 32 36
+ [*] 38 38
+ [*] 40 40
+ [' '] 43 45
+L135
+ [write] 32 36
+ [*] 38 38
+ [*] 40 40
+ ['err> trop de mot, veuillez ressai[ 43 80
+L136
+ [else] 24 27
+L138
+ [! maintenant, en fonction du premi[ 1 93
+L139
+ [mots_commande] 36 48
+ [action] 51 56
+ [.eq.] 59 62
+ ['task'] 64 69
+ [then] 72 75
+L140
+ [call] 40 43
+ [tache] 45 49
+ [mots_commande] 51 63
+ [desc] 66 69
+ [n] 72 72
+L141
+ [else] 32 35
+ [mots_commande] 41 53
+ [action] 56 61
+ [.eq.] 64 67
+ ['show'] 69 74
+ [then] 77 80
+L142
+ [! [ 1 81
+L143
+ [call] 40 43
+ [show] 45 48
+ [mots_commande] 50 62
+ [n] 65 65
+L144
+ [else] 32 35
+ [mots_commande] 41 53
+ [action] 56 61
+ [.eq.] 64 67
+ ['remove'] 69 76
+ [then] 79 82
+L145
+ [! [ 1 83
+L146
+ [call] 40 43
+ [remove] 45 50
+ [mots_commande] 52 64
+ [desc] 67 70
+ [n] 73 73
+L147
+ [else] 32 35
+ [mots_commande] 41 53
+ [action] 56 61
+ [.eq.] 64 67
+ ['clear'] 69 75
+ [then] 78 81
+L148
+ [! [ 1 82
+L149
+ [call] 40 43
+ [clear] 45 49
+ [mots_commande] 51 63
+ [n] 66 66
+L150
+ [else] 32 35
+ [mots_commande] 41 53
+ [action] 56 61
+ [.eq.] 64 67
+ ['cancel'] 69 76
+ [then] 79 82
+L151
+ [! [ 1 83
+L152
+ [call] 40 43
+ [cancel] 45 50
+ [mots_commande] 52 64
+ [n] 67 67
+L153
+ [else] 32 35
+ [mots_commande] 41 53
+ [action] 56 61
+ [.eq.] 64 67
+ ['done'] 69 74
+ [then] 77 80
+L154
+ [! [ 1 81
+L155
+ [call] 40 43
+ [done] 45 48
+ [mots_commande] 50 62
+ [n] 65 65
+L156
+ [else] 32 35
+ [mots_commande] 41 53
+ [action] 56 61
+ [.eq.] 64 67
+ ['todo'] 69 74
+ [then] 77 80
+L157
+ [! [ 1 81
+L158
+ [call] 40 43
+ [todo] 45 48
+ [mots_commande] 50 62
+ [n] 65 65
+L159
+ [else] 32 35
+L160
+ [write] 40 44
+ [*] 46 46
+ [*] 48 48
+ [' '] 51 53
+L161
+ [write] 40 44
+ [*] 46 46
+ [*] 48 48
+ ['l'] 51 53
+ ['action suivante n'] 54 72
+ ['a pas ete'] 73 83
+L162
+ [1] 8 8
+ [' comprise: '] 10 22
+ [mots_commande] 25 37
+ [action] 40 45
+EOF