diff --git a/tests/pipdeptree_tests.py b/tests/pipdeptree_tests.py new file mode 100644 index 0000000..4e4f5db --- /dev/null +++ b/tests/pipdeptree_tests.py @@ -0,0 +1,57 @@ +import pickle + +from pipdeptree import req_version, non_top_pkg_name, render_tree + + +with open('tests/pkgs.p') as f: + pkgs = pickle.load(f) + + +pkg_index = {p.key: p for p in pkgs} + + +def find_req(req, parent): + """Helper to get the requirement object from it's parent package + + :param req : string + :param parent : pkg_resources.Distribution instance + :rtype : instance of requirement frozen set + + """ + return [r for r in pkg_index[parent].requires() if r.key == req][0] + + +def test_req_version(): + sqlalchemy = find_req('sqlalchemy', 'alembic') + assert req_version(sqlalchemy) == '>=0.7.3' + mako = find_req('mako', 'alembic') + assert req_version(mako) is None + + +def test_non_top_pkg_name(): + flask_p = pkg_index['flask'] + flask_r = find_req('flask', 'flask-script') + assert non_top_pkg_name(flask_r, flask_p) == 'flask [installed: 0.10.1]' + + markupsafe_p = pkg_index['markupsafe'] + markupsafe_jinja2_r = find_req('markupsafe', 'jinja2') + assert non_top_pkg_name(markupsafe_jinja2_r, markupsafe_p) == 'markupsafe [installed: 0.18]' + + markupsafe_mako_r = find_req('markupsafe', 'mako') + assert non_top_pkg_name(markupsafe_mako_r, markupsafe_p) == 'markupsafe [required: >=0.9.2, installed: 0.18]' + + +def test_render_tree_only_top(): + tree_str = render_tree(pkgs, False) + lines = set(tree_str.split('\n')) + assert 'flask-script==0.6.6' in lines + assert ' - sqlalchemy [required: >=0.7.3, installed: 0.9.1]' in lines + assert 'itsdangerous==0.23' not in lines + + +def test_render_tree_list_all(): + tree_str = render_tree(pkgs, True) + lines = set(tree_str.split('\n')) + assert 'flask-script==0.6.6' in lines + assert ' - sqlalchemy [required: >=0.7.3, installed: 0.9.1]' in lines + assert 'itsdangerous==0.23' in lines diff --git a/tests/pkgs.p b/tests/pkgs.p new file mode 100644 index 0000000..084dbd5 --- /dev/null +++ b/tests/pkgs.p @@ -0,0 +1,415 @@ +(lp0 +ccopy_reg +_reconstructor +p1 +(cpkg_resources +Distribution +p2 +c__builtin__ +object +p3 +Ntp4 +Rp5 +(dp6 +S'project_name' +p7 +S'psycopg2' +p8 +sS'precedence' +p9 +I-1 +sS'_key' +p10 +S'psycopg2' +p11 +sS'_version' +p12 +S'2.5.2' +p13 +sS'platform' +p14 +NsS'location' +p15 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages' +p16 +sS'py_version' +p17 +S'2.7' +p18 +sS'_provider' +p19 +(ipkg_resources +PathMetadata +p20 +(dp21 +S'module_path' +p22 +g16 +sS'egg_info' +p23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/psycopg2-2.5.2-py2.7.egg-info' +p24 +sbsbag1 +(g2 +g3 +Ntp25 +Rp26 +(dp27 +g7 +S'Werkzeug' +p28 +sg9 +I-1 +sg10 +S'werkzeug' +p29 +sg12 +S'0.9.4' +p30 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p31 +sg19 +(ipkg_resources +PathMetadata +p32 +(dp33 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/Werkzeug-0.9.4-py2.7.egg-info' +p34 +sbsbag1 +(g2 +g3 +Ntp35 +Rp36 +(dp37 +g7 +S'Flask' +p38 +sg9 +I-1 +sg10 +S'flask' +p39 +sg12 +S'0.10.1' +p40 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p41 +sg19 +(ipkg_resources +PathMetadata +p42 +(dp43 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg-info' +p44 +sbsbag1 +(g2 +g3 +Ntp45 +Rp46 +(dp47 +g7 +S'Mako' +p48 +sg9 +I-1 +sg10 +S'mako' +p49 +sg12 +S'0.9.1' +p50 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p51 +sg19 +(ipkg_resources +PathMetadata +p52 +(dp53 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/Mako-0.9.1-py2.7.egg-info' +p54 +sbsbag1 +(g2 +g3 +Ntp55 +Rp56 +(dp57 +g7 +S'MarkupSafe' +p58 +sg9 +I-1 +sg10 +S'markupsafe' +p59 +sg12 +S'0.18' +p60 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p61 +sg19 +(ipkg_resources +PathMetadata +p62 +(dp63 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/MarkupSafe-0.18-py2.7.egg-info' +p64 +sbsbag1 +(g2 +g3 +Ntp65 +Rp66 +(dp67 +g7 +S'Flask-Script' +p68 +sg9 +I-1 +sg10 +S'flask-script' +p69 +sg12 +S'0.6.6' +p70 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p71 +sg19 +(ipkg_resources +PathMetadata +p72 +(dp73 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/Flask_Script-0.6.6-py2.7.egg-info' +p74 +sbsbag1 +(g2 +g3 +Ntp75 +Rp76 +(dp77 +g7 +S'alembic' +p78 +sg9 +I-1 +sg10 +S'alembic' +p79 +sg12 +S'0.6.2' +p80 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p81 +sg19 +(ipkg_resources +PathMetadata +p82 +(dp83 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/alembic-0.6.2-py2.7.egg-info' +p84 +sbsbag1 +(g2 +g3 +Ntp85 +Rp86 +(dp87 +g7 +S'itsdangerous' +p88 +sg9 +I-1 +sg10 +S'itsdangerous' +p89 +sg12 +S'0.23' +p90 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p91 +sg19 +(ipkg_resources +PathMetadata +p92 +(dp93 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/itsdangerous-0.23-py2.7.egg-info' +p94 +sbsbag1 +(g2 +g3 +Ntp95 +Rp96 +(dp97 +g7 +S'SQLAlchemy' +p98 +sg9 +I-1 +sg10 +S'sqlalchemy' +p99 +sg12 +S'0.9.1' +p100 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p101 +sg19 +(ipkg_resources +PathMetadata +p102 +(dp103 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/SQLAlchemy-0.9.1-py2.7.egg-info' +p104 +sbsbag1 +(g2 +g3 +Ntp105 +Rp106 +(dp107 +g7 +S'slugify' +p108 +sg9 +I-1 +sg10 +S'slugify' +p109 +sg12 +S'0.0.1' +p110 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p111 +sg19 +(ipkg_resources +PathMetadata +p112 +(dp113 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/slugify-0.0.1-py2.7.egg-info' +p114 +sbsbag1 +(g2 +g3 +Ntp115 +Rp116 +(dp117 +g7 +S'Jinja2' +p118 +sg9 +I-1 +sg10 +S'jinja2' +p119 +sg12 +S'2.7.2' +p120 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p121 +sg19 +(ipkg_resources +PathMetadata +p122 +(dp123 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/Jinja2-2.7.2-py2.7.egg-info' +p124 +sbsbag1 +(g2 +g3 +Ntp125 +Rp126 +(dp127 +g7 +S'redis' +p128 +sg9 +I-1 +sg10 +S'redis' +p129 +sg12 +S'2.9.1' +p130 +sg14 +Nsg15 +g16 +sg17 +S'2.7' +p131 +sg19 +(ipkg_resources +PathMetadata +p132 +(dp133 +g22 +g16 +sg23 +S'/home/vineet/.virtualenvs/equimapper/lib/python2.7/site-packages/redis-2.9.1-py2.7.egg-info' +p134 +sbsba. \ No newline at end of file