2016-06-05 48 views
7

Sto creando una formula Homebrew per una libreria C che include la propria suite di test. Come parte del blocco test per la formula, mi piacerebbe eseguire i test che sono inclusi con i file scaricati. I test vengono eseguiti come target make (make test). Tuttavia, i blocchi Homebrew test vengono eseguiti nella propria directory temporanea e i file scaricati non si trovano nel percorso. Cioè, il seguente non funziona perché non riesce a trovare i file:Accesso ai file scaricati nel blocco di test di una formula

test do 
    system "make", "test" 
end 

Come posso accedere al luogo in cui i file sono stati originariamente scaricati e scompattato? Non sono stato in grado di trovare alcuna informazione a riguardo nei documenti. O c'è una soluzione migliore per i test di Homebrew in questo caso?

+1

dovrei essere in grado di accedere al tarball vero e proprio con 'self.cached_download', ma ho la sensazione che il tarball sia decompresso nella directory temp in cui si verifica la compilazione, il che significa che dovrei scompattarlo di nuovo in' test'. Immagino che non sia * così * cattivo, ma è comunque una specie di schifo. –

+0

Ugh, ma se lo faccio in questo modo, avrò bisogno di analizzare tutte le cose scritte in STDOUT per vedere se qualcuno dei controlli è fallito, così posso restituire un booleano. (A meno che non abbia del tutto frainteso come funziona il blocco 'test'.) –

risposta

1

Il blocco test do è pensato per verificare se una formula è stata installata correttamente, non per eseguire i semi di prova. Se i test non prendono troppo tempo si possono eseguire come parte dell'installazione:

def install 
    # ... 
    system "make", "test" 
    # ... 
end 

Per rispondere alla tua domanda non c'è modo affidabile per ottenere la directory decompressa originale perché è distrutto dopo l'installazione e l'utente può avere cancellato il tarball nella cache (con ad esempio brew cleanup) in modo da poterlo scaricare nuovamente.

Una soluzione è quella di copiare i file di test necessari da qualche parte durante la fase di install poi usarli direttamente o copiarli nella directory corrente durante la prova, ad esempio:

def install 
    # ... 
    libexec.install "tests" 
end 

test do 
    cp_r (libexec/"tests"), "." 
    cd "tests" do 
    # I’m assuming the Makefile's paths can be given 
    # as variables here. 
    system "make", "test", "LIB=#{lib}", "INCLUDE=#{include}" 
    end 
end