summaryrefslogblamecommitdiff
path: root/lib/spack/spack/test/cmd/list.py
blob: 848a6d20e428e9601b1f8e45d3148712893dedcc (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                         
                                                                         
 

                                              
          

                           
                 
                                   
 
                           
 
 

                   

                                   
 
 

                                                 






                                                              


                  







                         

 
                                    





                                    
 





                                    
 
 
                                                

                                                                 
 
 
                                              


                                          
 
 
                                                 
                                             

                                          
               
 


                      
                                         
                                     
                                                      
                               
 
                                                      
                               

 
                                            
                                       

                                      
                                      




                                        

                                    
                           
                                      

                                 
                                    

                             


                                      

                                 
                                    













                                  









                                                                          
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

import sys
from textwrap import dedent

import spack.repo
from spack.main import SpackCommand

list = SpackCommand("list")


def test_list():
    output = list()
    assert "cloverleaf3d" in output
    assert "hdf5" in output


def test_list_cli_output_format(mock_tty_stdout):
    out = list("mpileaks")
    # Currently logging on Windows detaches stdout
    # from the terminal so we miss some output during tests
    # TODO: (johnwparent): Once logging is amended on Windows,
    # restore this test
    if not sys.platform == "win32":
        out_str = dedent(
            """\
    mpileaks
    ==> 1 packages
    """
        )
    else:
        out_str = dedent(
            """\
        mpileaks
        """
        )
    assert out == out_str


def test_list_filter(mock_packages):
    output = list("py-*")
    assert "py-extension1" in output
    assert "py-extension2" in output
    assert "py-extension3" in output
    assert "python" not in output
    assert "mpich" not in output

    output = list("py")
    assert "py-extension1" in output
    assert "py-extension2" in output
    assert "py-extension3" in output
    assert "python" in output
    assert "mpich" not in output


def test_list_search_description(mock_packages):
    output = list("--search-description", "one build dependency")
    assert "depb" in output


def test_list_format_name_only(mock_packages):
    output = list("--format", "name_only")
    assert "zmpi" in output
    assert "hdf5" in output


def test_list_format_version_json(mock_packages):
    output = list("--format", "version_json")
    assert '{"name": "zmpi",' in output
    assert '{"name": "dyninst",' in output
    import json

    json.loads(output)


def test_list_format_html(mock_packages):
    output = list("--format", "html")
    assert '<div class="section" id="zmpi">' in output
    assert "<h1>zmpi" in output

    assert '<div class="section" id="hdf5">' in output
    assert "<h1>hdf5" in output


def test_list_update(tmpdir, mock_packages):
    update_file = tmpdir.join("output")

    # not yet created when list is run
    list("--update", str(update_file))
    assert update_file.exists()
    with update_file.open() as f:
        assert f.read()

    # created but older than any package
    with update_file.open("w") as f:
        f.write("empty\n")
    update_file.setmtime(0)
    list("--update", str(update_file))
    assert update_file.exists()
    with update_file.open() as f:
        assert f.read() != "empty\n"

    # newer than any packages
    with update_file.open("w") as f:
        f.write("empty\n")
    list("--update", str(update_file))
    assert update_file.exists()
    with update_file.open() as f:
        assert f.read() == "empty\n"


def test_list_tags(mock_packages):
    output = list("--tag", "tag1")
    assert "mpich" in output
    assert "mpich2" in output

    output = list("--tag", "tag2")
    assert "mpich\n" in output
    assert "mpich2" not in output

    output = list("--tag", "tag3")
    assert "mpich\n" not in output
    assert "mpich2" in output


def test_list_count(mock_packages):
    output = list("--count")
    assert int(output.strip()) == len(spack.repo.all_package_names())

    output = list("--count", "py-")
    assert int(output.strip()) == len(
        [name for name in spack.repo.all_package_names() if "py-" in name]
    )