示例#1
0
    def test_GemfileLockParser_can_parse_simple_files(self):
        gemfilelock = self.get_test_loc(
            'gemfile_lock/complete/Gemfile.lock_simple')
        gfl = gemfile_lock.GemfileLockParser(gemfilelock)
        result = '\n\n'.join(g.pformat() for g in gfl.all_gems.values())
        exf = self.get_test_loc(
            'gemfile_lock/complete/expected_Gemfile.lock_simple')
        expected = open(exf).read()
        self.assertEqual(expected, result)

        result_deps = '\n'.join(repr(i) for i in gfl.dependencies.items())
        expected_deps = (
            '''(u'activerecord', Gem(name=u'activerecord', version=u'4.0.0', type=u'GEM'))
(u'appraisal', Gem(name=u'appraisal', version=u'0.5.2', type=u'GEM'))
(u'aruba', Gem(name=u'aruba', version=u'0.5.3', type=u'GEM'))
(u'bourne', Gem(name=u'bourne', version=u'1.5.0', type=u'GEM'))
(u'cucumber', Gem(name=u'cucumber', version=u'1.2.5', type=u'GEM'))
(u'factory_girl', Gem(name=u'factory_girl', version=u'4.3.0', type=u'PATH'))
(u'mocha', Gem(name=u'mocha', version=u'0.14.0', type=u'GEM'))
(u'rspec', Gem(name=u'rspec', version=u'2.12.0', type=u'GEM'))
(u'simplecov', Gem(name=u'simplecov', version=u'0.7.1', type=u'GEM'))
(u'sqlite3', Gem(name=u'sqlite3', version=u'1.3.8', type=u'GEM'))
(u'timecop', Gem(name=u'timecop', version=u'0.6.2.2', type=u'GEM'))
(u'yard', Gem(name=u'yard', version=u'0.8.7', type=u'GEM'))''')
        self.assertEqual(expected_deps, result_deps)
        self.assertEqual(True, gfl.dependencies['factory_girl'].pinned)
示例#2
0
 def test_parse_source_mixed_step1(self):
     gemfilelock = self.get_test_loc(
         'gemfile_lock/parse_source/Gemfile.lock_mixed1')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     self.assertEqual({
         u'tag': u'that',
         u'remote': u'.'
     }, gfl.current_options)
示例#3
0
 def test_parse_spec_single_level(self):
     gemfilelock = self.get_test_loc(
         'gemfile_lock/parse_spec/Gemfile.lock1')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     expected_names = ['user-lib']
     self.assertEqual(expected_names, gfl.all_gems.keys())
     expected_tree = {(u'user-lib', u'2.1.0'): {}}
     result = gfl.all_gems['user-lib'].as_nv_tree()
     self.assertEqual(expected_tree, result)
示例#4
0
 def test_parse_platform(self):
     gemfilelock = self.get_test_loc(
         'gemfile_lock/parse_platform/Gemfile.lock')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     expected = [
         u'ruby',
         u'java',
     ]
     self.assertEqual(expected, gfl.platforms)
示例#5
0
 def test_parse_spec_two_levels(self):
     gemfilelock = self.get_test_loc(
         'gemfile_lock/parse_spec/Gemfile.lock2')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     expected_names = ['user-lib', 'multi_json']
     self.assertEqual(expected_names, gfl.all_gems.keys())
     expected_tree = {(u'user-lib', u'2.1.0'): {('multi_json', None): {}}}
     result = gfl.all_gems['user-lib'].as_nv_tree()
     self.assertEqual(expected_tree, result)
     result = gfl.all_gems['multi_json'].as_nv_tree()
     self.assertEqual({('multi_json', None): {}}, result)
示例#6
0
 def test_parse_source_mixed_step3(self):
     gemfilelock = self.get_test_loc(
         'gemfile_lock/parse_source/Gemfile.lock_mixed3')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     self.assertEqual(
         {
             u'branch': u'tree',
             u'ref': u'this',
             u'remote': u'https://github.com/mypath/registrar.git',
             u'revision': u'49850ee876652a59dbd2233dad726b3b808bb8f9',
             u'tag': u'that'
         }, gfl.current_options)
示例#7
0
 def test_parse_source_mixed_step4(self):
     gemfilelock = self.get_test_loc(
         'gemfile_lock/parse_source/Gemfile.lock_mixed4')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     expected = {
         u'branch': u'treebranch',
         u'ref': u'81e5e4d6',
         u'remote': u'https://github.com/mylib/lib.git',
         u'revision': u'81e5e4d622338b3332ab24840e6b40d47b161849',
         u'tag': u'thistag'
     }
     self.assertEqual(expected, gfl.current_options)
示例#8
0
 def test_GemfileLockParser_can_parse_complex_files(self):
     gemfilelock = self.get_test_loc(
         'gemfile_lock/complete/Gemfile.lock_complex')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     result = '\n\n'.join(g.pformat() for g in gfl.all_gems.values())
     exf = self.get_test_loc(
         'gemfile_lock/complete/expected_Gemfile.lock_complex')
     regen = False
     if regen:
         with open(exf, 'wb') as outf:
             outf.write(result)
     expected = open(exf).read()
     self.assertEqual(expected.splitlines(), result.splitlines())
示例#9
0
 def test_GemfileLockParser_can_yield_a_flat_list_of_deps(self):
     gemfilelock = self.get_test_loc('gemfile_lock/as_deps/Gemfile.lock')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     result = sorted(repr(fd) for fd in gfl.flatten())
     expected = sorted([
         "(Gem(name=u'activemodel', version=u'4.0.0', type=u'GEM'), Gem(name=u'activesupport', version=u'4.0.0', type=u'GEM'))",
         "(Gem(name=u'activemodel', version=u'4.0.0', type=u'GEM'), Gem(name=u'builder', version=u'3.1.4', type=u'GEM'))",
         "(Gem(name=u'activerecord', version=u'4.0.0', type=u'GEM'), Gem(name=u'activemodel', version=u'4.0.0', type=u'GEM'))",
         "(Gem(name=u'activerecord', version=u'4.0.0', type=u'GEM'), Gem(name=u'activerecord-deprecated_finders', version=u'1.0.3', type=u'GEM'))",
         "(Gem(name=u'activerecord', version=u'4.0.0', type=u'GEM'), Gem(name=u'activesupport', version=u'4.0.0', type=u'GEM'))",
         "(Gem(name=u'activerecord', version=u'4.0.0', type=u'GEM'), Gem(name=u'arel', version=u'4.0.0', type=u'GEM'))",
         "(Gem(name=u'activesupport', version=u'4.0.0', type=u'GEM'), Gem(name=u'i18n', version=u'0.6.4', type=u'GEM'))",
         "(Gem(name=u'activesupport', version=u'4.0.0', type=u'GEM'), Gem(name=u'minitest', version=u'4.7.5', type=u'GEM'))",
         "(Gem(name=u'activesupport', version=u'4.0.0', type=u'GEM'), Gem(name=u'multi_json', version=u'1.7.7', type=u'GEM'))",
         "(Gem(name=u'activesupport', version=u'4.0.0', type=u'GEM'), Gem(name=u'thread_safe', version=u'0.1.2', type=u'GEM'))",
         "(Gem(name=u'activesupport', version=u'4.0.0', type=u'GEM'), Gem(name=u'tzinfo', version=u'0.3.37', type=u'GEM'))",
         "(Gem(name=u'appraisal', version=u'0.5.2', type=u'GEM'), Gem(name=u'rake', version=u'10.1.0', type=u'GEM'))",
         "(Gem(name=u'aruba', version=u'0.5.3', type=u'GEM'), Gem(name=u'childprocess', version=u'0.3.9', type=u'GEM'))",
         "(Gem(name=u'aruba', version=u'0.5.3', type=u'GEM'), Gem(name=u'cucumber', version=u'1.2.5', type=u'GEM'))",
         "(Gem(name=u'aruba', version=u'0.5.3', type=u'GEM'), Gem(name=u'rspec-expectations', version=u'2.12.1', type=u'GEM'))",
         "(Gem(name=u'bourne', version=u'1.5.0', type=u'GEM'), Gem(name=u'mocha', version=u'0.14.0', type=u'GEM'))",
         "(Gem(name=u'childprocess', version=u'0.3.9', type=u'GEM'), Gem(name=u'ffi', version=u'1.9.0', type=u'GEM'))",
         "(Gem(name=u'cucumber', version=u'1.2.5', type=u'GEM'), Gem(name=u'builder', version=u'3.1.4', type=u'GEM'))",
         "(Gem(name=u'cucumber', version=u'1.2.5', type=u'GEM'), Gem(name=u'diff-lcs', version=u'1.1.3', type=u'GEM'))",
         "(Gem(name=u'cucumber', version=u'1.2.5', type=u'GEM'), Gem(name=u'gherkin', version=u'2.11.8', type=u'GEM'))",
         "(Gem(name=u'cucumber', version=u'1.2.5', type=u'GEM'), Gem(name=u'multi_json', version=u'1.7.7', type=u'GEM'))",
         "(Gem(name=u'factory_girl', version=u'4.3.0', type=u'PATH'), Gem(name=u'activesupport', version=u'4.0.0', type=u'GEM'))",
         "(Gem(name=u'gherkin', version=u'2.11.8', type=u'GEM'), Gem(name=u'multi_json', version=u'1.7.7', type=u'GEM'))",
         "(Gem(name=u'mocha', version=u'0.14.0', type=u'GEM'), Gem(name=u'metaclass', version=u'0.0.1', type=u'GEM'))",
         "(Gem(name=u'rspec', version=u'2.12.0', type=u'GEM'), Gem(name=u'rspec-core', version=u'2.12.2', type=u'GEM'))",
         "(Gem(name=u'rspec', version=u'2.12.0', type=u'GEM'), Gem(name=u'rspec-expectations', version=u'2.12.1', type=u'GEM'))",
         "(Gem(name=u'rspec', version=u'2.12.0', type=u'GEM'), Gem(name=u'rspec-mocks', version=u'2.12.2', type=u'GEM'))",
         "(Gem(name=u'rspec-expectations', version=u'2.12.1', type=u'GEM'), Gem(name=u'diff-lcs', version=u'1.1.3', type=u'GEM'))",
         "(Gem(name=u'simplecov', version=u'0.7.1', type=u'GEM'), Gem(name=u'multi_json', version=u'1.7.7', type=u'GEM'))",
         "(Gem(name=u'simplecov', version=u'0.7.1', type=u'GEM'), Gem(name=u'simplecov-html', version=u'0.7.1', type=u'GEM'))",
         "(Gem(name=u'thread_safe', version=u'0.1.2', type=u'GEM'), Gem(name=u'atomic', version=u'1.1.10', type=u'GEM'))",
         "(None, Gem(name=u'activerecord', version=u'4.0.0', type=u'GEM'))",
         "(None, Gem(name=u'appraisal', version=u'0.5.2', type=u'GEM'))",
         "(None, Gem(name=u'aruba', version=u'0.5.3', type=u'GEM'))",
         "(None, Gem(name=u'bourne', version=u'1.5.0', type=u'GEM'))",
         "(None, Gem(name=u'cucumber', version=u'1.2.5', type=u'GEM'))",
         "(None, Gem(name=u'factory_girl', version=u'4.3.0', type=u'PATH'))",
         "(None, Gem(name=u'mocha', version=u'0.14.0', type=u'GEM'))",
         "(None, Gem(name=u'rspec', version=u'2.12.0', type=u'GEM'))",
         "(None, Gem(name=u'simplecov', version=u'0.7.1', type=u'GEM'))",
         "(None, Gem(name=u'sqlite3', version=u'1.3.8', type=u'GEM'))",
         "(None, Gem(name=u'timecop', version=u'0.6.2.2', type=u'GEM'))",
         "(None, Gem(name=u'yard', version=u'0.8.7', type=u'GEM'))",
     ])
     self.assertEqual(expected, result)
示例#10
0
    def test_parse_spec_multi_levels(self):
        gemfilelock = self.get_test_loc(
            'gemfile_lock/parse_spec/Gemfile.lock3')
        gfl = gemfile_lock.GemfileLockParser(gemfilelock)
        expected_tree = {
            u'activesupport': {
                (u'activesupport', u'3.2.17'): {
                    (u'i18n', '0.6.9'): {},
                    (u'multi_json', '1.9.2'): {}
                }
            },
            u'addressable': {
                (u'addressable', u'2.3.6'): {}
            },
            u'allowy': {
                (u'allowy', u'0.4.0'): {
                    (u'activesupport', u'3.2.17'): {
                        (u'i18n', '0.6.9'): {},
                        (u'multi_json', '1.9.2'): {}
                    },
                    (u'i18n', '0.6.9'): {}
                }
            },
            u'i18n': {
                (u'i18n', '0.6.9'): {}
            },
            u'multi_json': {
                (u'multi_json', '1.9.2'): {}
            }
        }

        result = dict((
            n,
            g.as_nv_tree(),
        ) for n, g in gfl.all_gems.items())
        self.assertEqual(expected_tree, result)
示例#11
0
    def test_parse_source_git_no_deps(self):
        gemfilelock = self.get_test_loc(
            'gemfile_lock/parse_git/Gemfile.lock_single')
        gfl = gemfile_lock.GemfileLockParser(gemfilelock)
        result_deps = '\n'.join(repr(i) for i in gfl.all_gems.items())
        expected_deps = "(u'concurrency', Gem(name=u'concurrency', version=u'2a5b0179842cb3d3e7f912a6453ec5731979d115', type=u'GIT'))"
        self.assertEqual(expected_deps, result_deps)

        expected = [
            dict(
                name=u'concurrency',
                version=u'2a5b0179842cb3d3e7f912a6453ec5731979d115',
                pinned=False,
                remote=u'https://github.com/pombredanne/concurrency.git',
                type=u'GIT',
                revision=u'2a5b0179842cb3d3e7f912a6453ec5731979d115',
                ref='2a5b01798',
                branch=None,
            ),
        ]
        for ex in expected:
            res = gfl.all_gems[ex['name']]
            for k, v in ex.items():
                self.assertEqual(v, getattr(res, k))
示例#12
0
    def test_parse_dependency(self):
        gemfilelock = self.get_test_loc(
            'gemfile_lock/parse_dependency/Gemfile.lock')
        gfl = gemfile_lock.GemfileLockParser(gemfilelock, print_errors=False)
        expected_names = [
            u'activesupport',
            u'addressable',
            u'debugger',
            u'eventmachine',
            u'machinist',
            u'mysql2',
            u'nokogiri',
            u'rspec-instafail',
            u'sequel',
            u'yajl-ruby',
        ]
        self.assertEqual(expected_names, gfl.all_gems.keys())
        self.assertEqual(expected_names, gfl.dependencies.keys())
        self.assertEqual(gfl.all_gems, gfl.dependencies)

        expected_gems = [
            (
                u'activesupport',
                None,
                ['~> 3.0'],
                False,
            ),
            (
                u'addressable',
                None,
                [],
                False,
            ),
            (
                u'debugger',
                None,
                [],
                True,
            ),
            (
                u'eventmachine',
                None,
                ['~> 1.0.0'],
                True,
            ),
            (
                u'machinist',
                None,
                ['~> 1.0.6'],
                False,
            ),
            (
                u'mysql2',
                None,
                [],
                False,
            ),
            (
                u'nokogiri',
                None,
                ['~> 1.6.2'],
                False,
            ),
            (
                u'rspec-instafail',
                None,
                [],
                False,
            ),
            (
                u'sequel',
                None,
                ['~> 3.48'],
                False,
            ),
            (
                u'yajl-ruby',
                None,
                [],
                True,
            ),
        ]

        for name, version, vercon, pinned in expected_gems:
            g = gfl.dependencies[name]
            self.assertEqual(version, g.version)
            self.assertEqual(vercon, g.version_constraints)
            self.assertEqual(pinned, g.pinned)
示例#13
0
    def test_parse_source_with_multi_paths_in_git(self):
        gemfilelock = self.get_test_loc('gemfile_lock/parse_git/Gemfile.lock')
        gfl = gemfile_lock.GemfileLockParser(gemfilelock)
        result_deps = '\n'.join(repr(i) for i in gfl.all_gems.items())
        expected_deps = (
            '''(u'barden-client', Gem(name=u'barden-client', version=u'517d065bfbbbad82e7165639d32adf298b48471a', type=u'GIT'))
(u'eventmachine', Gem(name=u'eventmachine', version=None, type=u'GEM'))
(u'barden-server', Gem(name=u'barden-server', version=u'517d065bfbbbad82e7165639d32adf298b48471a', type=u'GIT'))
(u'barden-network', Gem(name=u'barden-network', version=u'517d065bfbbbad82e7165639d32adf298b48471a', type=u'GIT'))
(u'beefcake', Gem(name=u'beefcake', version=None, type=u'GEM'))''')
        self.assertEqual(expected_deps, result_deps)

        expected = [
            dict(
                name=u'barden-client',
                version=u'517d065bfbbbad82e7165639d32adf298b48471a',
                platform='ruby',
                pinned=False,
                remote=u'https://github.com/bitops/barden.git',
                type=u'GIT',
                path=None,
                location=None,
                revision=u'517d065bfbbbad82e7165639d32adf298b48471a',
                ref=None,
                branch=None,
                submodules=None,
                tag=None,
            ),
            dict(
                name=u'eventmachine',
                version=None,
                platform=None,
                pinned=False,
                remote=None,
                type=u'GEM',
                path=None,
                location=None,
                revision=None,
                ref=None,
                branch=None,
                submodules=None,
                tag=None,
            ),
            dict(
                name=u'barden-server',
                version=u'517d065bfbbbad82e7165639d32adf298b48471a',
                platform='ruby',
                pinned=False,
                remote=u'https://github.com/bitops/barden.git',
                type=u'GIT',
                path=None,
                location=None,
                revision=u'517d065bfbbbad82e7165639d32adf298b48471a',
                ref=None,
                branch=None,
                submodules=None,
                tag=None,
            ),
            dict(
                name=u'barden-network',
                version=u'517d065bfbbbad82e7165639d32adf298b48471a',
                platform='ruby',
                pinned=False,
                remote=u'https://github.com/bitops/barden.git',
                type=u'GIT',
                path=None,
                location=None,
                revision=u'517d065bfbbbad82e7165639d32adf298b48471a',
                ref=None,
                branch=None,
                submodules=None,
                tag=None,
            ),
            dict(name=u'beefcake',
                 remote=None,
                 type=u'GEM',
                 path=None,
                 location=None,
                 revision=None,
                 ref=None,
                 branch=None,
                 submodules=None,
                 tag=None)
        ]
        for ex in expected:
            res = gfl.all_gems[ex['name']]
            for k, v in ex.items():
                self.assertEqual(v, getattr(res, k))
示例#14
0
    def test_parse_spec_multi_levels_complex(self):
        gemfilelock = self.get_test_loc(
            'gemfile_lock/parse_spec/Gemfile.lock4')
        gfl = gemfile_lock.GemfileLockParser(gemfilelock)
        expected_tree = {
            u'activesupport': {
                (u'activesupport', u'3.2.17'): {
                    (u'i18n', u'0.6.9'): {
                        (u'clockwork', u'0.4.1'): {
                            (u'fluent-logger', u'0.4.7'): {
                                (u'msgpack', u'0.5.8'): {},
                                (u'yajl-ruby', u'1.2.0'): {}
                            }
                        }
                    },
                    (u'multi_json', u'1.9.2'): {}
                }
            },
            u'addressable': {
                (u'addressable', u'2.3.6'): {}
            },
            u'allowy': {
                (u'allowy', u'0.4.0'): {
                    (u'activesupport', u'3.2.17'): {
                        (u'i18n', u'0.6.9'): {
                            (u'clockwork', u'0.4.1'): {
                                (u'fluent-logger', u'0.4.7'): {
                                    (u'msgpack', u'0.5.8'): {},
                                    (u'yajl-ruby', u'1.2.0'): {}
                                }
                            }
                        },
                        (u'multi_json', u'1.9.2'): {}
                    },
                    (u'i18n', u'0.6.9'): {
                        (u'clockwork', u'0.4.1'): {
                            (u'fluent-logger', u'0.4.7'): {
                                (u'msgpack', u'0.5.8'): {},
                                (u'yajl-ruby', u'1.2.0'): {}
                            }
                        }
                    }
                }
            },
            u'clockwork': {
                (u'clockwork', u'0.4.1'): {
                    (u'fluent-logger', u'0.4.7'): {
                        (u'msgpack', u'0.5.8'): {},
                        (u'yajl-ruby', u'1.2.0'): {}
                    }
                }
            },
            u'delayed_job': {
                (u'delayed_job', u'4.0.0'): {
                    (u'activesupport', u'3.2.17'): {
                        (u'i18n', u'0.6.9'): {
                            (u'clockwork', u'0.4.1'): {
                                (u'fluent-logger', u'0.4.7'): {
                                    (u'msgpack', u'0.5.8'): {},
                                    (u'yajl-ruby', u'1.2.0'): {}
                                }
                            }
                        },
                        (u'multi_json', u'1.9.2'): {}
                    }
                }
            },
            u'fluent-logger': {
                (u'fluent-logger', u'0.4.7'): {
                    (u'msgpack', u'0.5.8'): {},
                    (u'yajl-ruby', u'1.2.0'): {}
                }
            },
            u'i18n': {
                (u'i18n', u'0.6.9'): {
                    (u'clockwork', u'0.4.1'): {
                        (u'fluent-logger', u'0.4.7'): {
                            (u'msgpack', u'0.5.8'): {},
                            (u'yajl-ruby', u'1.2.0'): {}
                        }
                    }
                }
            },
            u'msgpack': {
                (u'msgpack', u'0.5.8'): {}
            },
            u'multi_json': {
                (u'multi_json', u'1.9.2'): {}
            },
            u'yajl-ruby': {
                (u'yajl-ruby', u'1.2.0'): {}
            }
        }

        result = dict((
            n,
            g.as_nv_tree(),
        ) for n, g in gfl.all_gems.items())
        self.assertEqual(expected_tree, result)
示例#15
0
 def test_parse_gem(self):
     gemfilelock = self.get_test_loc('gemfile_lock/parse_gem/Gemfile.lock1')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     self.assertEqual('https://rubygems.org/',
                      gfl.current_options['remote'])
示例#16
0
 def test_parse_source_mixed_step2(self):
     gemfilelock = self.get_test_loc(
         'gemfile_lock/parse_source/Gemfile.lock_mixed2')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     self.assertEqual({u'remote': u'http://rubygems.org/'},
                      gfl.current_options)
示例#17
0
 def test_parse_gem_with_path_before(self):
     gemfilelock = self.get_test_loc('gemfile_lock/parse_gem/Gemfile.lock2')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     self.assertEqual({u'remote': u'http://rubygems.org/'},
                      gfl.current_options)
示例#18
0
 def test_parse_source_two_path(self):
     gemfilelock = self.get_test_loc(
         'gemfile_lock/parse_source/Gemfile.lock_path2')
     gfl = gemfile_lock.GemfileLockParser(gemfilelock)
     self.assertEqual({u'remote': u'/'}, gfl.current_options)
     self.assertEqual('PATH', gfl.current_type)