TP8 Q4

Programmation Avancée

Modérateur : Douin

Répondre
pellier
Messages : 37
Inscription : 30 oct. 2016 21:13

TP8 Q4

Message par pellier » 02 janv. 2017 16:04

Bonjour,

Je ne comprends pas l'intitulé des erreurs JNews

Code : Tout sélectionner

testUpperCase_push_back(question4): erreur inattendue !!!tried to access method java.io.FilterInputStream.<init>(Ljava/io/InputStream;)V from class question4.Z_InputTest 2) testUpperCase_read(question4): erreur inattendue !!!tried to access method java.io.FilterInputStream.<init>(Ljava/io/InputStream;)V from class question4.Z_InputTest 3) testUpperCase_read_byte_array(question4): erreur inattendue !!!tried to access method java.io.FilterInputStream.<init>(Ljava/io/InputStream;)V from class question4.Z_InputTest
Est-ce que quelqu'un a une idée de ce que c'est sensé signifier ?
Merci d'avance

gautierd
Messages : 49
Inscription : 12 oct. 2016 14:55

Re: TP8 Q4

Message par gautierd » 02 janv. 2017 19:33

Je regarde comme toi, on dirait qu'il manque une méthode dans le code. Celle qu'il faut rajouter peut être ?

als
Messages : 10
Inscription : 29 déc. 2016 19:02

Re: TP8 Q4

Message par als » 02 janv. 2017 22:33

Bonjour,

As-tu bien implémenté les deux méthodes:
- public int read()
et - public int read(byte[] b, int start, int length)
dans UpperCaseInputStream ?

pellier
Messages : 37
Inscription : 30 oct. 2016 21:13

Re: TP8 Q4

Message par pellier » 03 janv. 2017 10:54

Bonjour,

J'ai bien implémenté les trois méthodes read dans UpperCaseInputStream

Code : Tout sélectionner

public int read() throws IOException
public int read(byte[] bytes) throws IOException
public int read(byte[] bytes, int start, int length) throws IOException
On dirait que dans les tests il essaie d'accéder à une méthode de java.io.FilterInputStream mais que cette méthode est absente.
Par contre la méthode en question n'est pas nommée.
Est-ce que vous avez redéfini toutes les méthodes de java.io.FilterInputStream (available, close, mark, marksuported…) ?

pellier
Messages : 37
Inscription : 30 oct. 2016 21:13

Re: TP8 Q4

Message par pellier » 03 janv. 2017 11:27

je comprends pas j'ai mis en place un test pour vérifier que toutes les méthodes sont accessibles et elles le sont toutes.

Code : Tout sélectionner

try{
            InputStream is = new UpperCaseInputStream(new BufferedInputStream( new FileInputStream(new File("README2.TXT"))));
            is.read();
            is.markSupported();
            is.mark(10);
            is.read();
            is.reset();
            is.read();
            is.available();
            is.skip(2);
            is.close();
}catch(Exception e){
            fail("methode interdite");
}
idem pour read(byte[] bytes) et read(byte[] bytes, int start, int length)

pellier
Messages : 37
Inscription : 30 oct. 2016 21:13

Re: TP8 Q4

Message par pellier » 03 janv. 2017 12:05

J'ai accès aux sources des tests JNews et quand je les lance en local je n'ai pas d'erreur…
Donc là je sais pas vraiment quoi faire…

est-ce que les tests JNews n'auraient pas des difficultés à atteindre le fichier README en local ?
(je n'ai pas modifié le fichier)
Dans les 3 tests (pour la version en ligne) le problème est récupéré au niveau de

Code : Tout sélectionner

}catch(Error error){
            fail(" erreur inattendue !!!" + error.getMessage());
        }

Code : Tout sélectionner

public void testUpperCase_push_back(){
        PushbackInputStream is = null;
        try{
            is = new PushbackInputStream(new UpperCaseInputStream( new BufferedInputStream( getClass().getResource("/question3/README.TXT").openStream())),20);
            byte[] tab = new byte[10];
            is.read(tab,0,10);
            assertTrue(" impossible de lire correctement", tab.length==10);
            is.unread(tab);
            byte[] tab2 = new byte[10];
            is.read(tab2,0,tab2.length);
            assertTrue(" unread(byte[] b) de PushbackInputStream ne semble pas fonctionner ???", tab[0] == tab2[0]);
        }catch(Exception e){
            fail(" exception inattendue !!!" + e.getMessage());
        }catch(Error error){
            fail(" erreur inattendue !!!" + error.getMessage());
        }
    }

Code : Tout sélectionner

public void testUpperCase_read(){
        InputStream is = null;
        try{
            is = new UpperCaseInputStream( new BufferedInputStream( getClass().getResource("/question3/README.TXT").openStream()));
            int c = is.read();
            while( c != -1){
                //System.out.print((char)c);  //
                assertFalse(" encore un caractère en minuscule ???",Character.isLowerCase((char)c));  
                c = is.read();
            }
        }catch(Exception e){
            fail(" exception inattendue !!!" + e.getMessage());
        }catch(Error error){
            fail(" erreur inattendue !!!" + error.getMessage());
        }
    }

Code : Tout sélectionner

public void testUpperCase_read_byte_array(){
        InputStream is = null;
        try{
            is = new UpperCaseInputStream( new BufferedInputStream( getClass().getResource("/question3/README.TXT").openStream()));
            byte[] tab = new byte[20];

            is.read(tab,0,tab.length);
            for(byte c : tab){
                //System.out.print((char)c);  //
                assertFalse(" encore un caractère en minuscule ???",Character.isLowerCase((char)c));  
            }
        }catch(Exception e){
            fail(" exception inattendue !!!" + e.getMessage());
        }catch(Error error){
            fail(" erreur inattendue !!!" + error.getMessage());
        }
    }

Douin
Messages : 216
Inscription : 18 mars 2009 15:46

Re: TP8 Q4

Message par Douin » 03 janv. 2017 15:11

Bonjour,

Vérifiez bien que vous faites une décoration (cf. un héritage de FilterInputStream)

à suivre...

pellier
Messages : 37
Inscription : 30 oct. 2016 21:13

Re: TP8 Q4

Message par pellier » 03 janv. 2017 19:10

C'est bien ce que je fais !

Code : Tout sélectionner

public class UpperCaseInputStream extends FilterInputStream {
    UpperCaseInputStream(FilterInputStream f){
        super(f);
    }
…

David Bertrand
Messages : 34
Inscription : 20 oct. 2016 13:10

Re: TP8 Q4

Message par David Bertrand » 03 janv. 2017 20:05

Bonjour,

essaye en relâchant un peu la signature de ton constructeur :

Code : Tout sélectionner

UpperCaseInputStream(InputStream f){
Car rien ne te permet de garantir (et pour cause) que le flux passé sera du type FilterInputStream ...

David.

pellier
Messages : 37
Inscription : 30 oct. 2016 21:13

Re: TP8 Q4

Message par pellier » 03 janv. 2017 21:02

Merci c'est bien ça qui crée les erreurs JNews.
(sur le fil…)

Maintenant il s'agit de comprendre pourquoi…

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité