def tests_flatten_egginfo_json_missing_deps(self): """ Missing dependencies should not cause a hard failure. """ make_dummy_dist(self, (('requires.txt', '\n'.join([ 'uilib>=1.0', ])), ), 'app', '2.0') working_set = pkg_resources.WorkingSet([self._calmjs_testing_tmpdir]) # Python dependency acquisition failures should fail hard. with self.assertRaises(pkg_resources.DistributionNotFound): calmjs_dist.flatten_egginfo_json(['app'], working_set=working_set)
def tests_flatten_egginfo_json_missing_deps(self): """ Missing dependencies should not cause a hard failure. """ make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'uilib>=1.0', ])), ), 'app', '2.0') working_set = pkg_resources.WorkingSet([self._calmjs_testing_tmpdir]) # Python dependency acquisition failures should fail hard. with self.assertRaises(pkg_resources.DistributionNotFound): calmjs_dist.flatten_egginfo_json(['app'], working_set=working_set)
def test_read_dist_egginfo_json_alternative_name_args(self): package_json = {"dependencies": {"left-pad": "~1.1.1"}} # We will mock up a Distribution object with some fake metadata. mock_provider = MockProvider({ 'bower.json': json.dumps(package_json), }) mock_dist = pkg_resources.Distribution( metadata=mock_provider, project_name='dummydist', version='0.0.0') results = calmjs_dist.read_dist_egginfo_json( mock_dist, filename='bower.json') self.assertEqual(results, package_json) working_set = pkg_resources.WorkingSet() working_set.add(mock_dist) self.assertEqual(package_json, calmjs_dist.read_egginfo_json( 'dummydist', filename='bower.json', working_set=working_set)) # Finally do the flattening flattened_json = { "dependencies": {"left-pad": "~1.1.1"}, "devDependencies": {}} self.assertEqual(flattened_json, calmjs_dist.flatten_dist_egginfo_json( [mock_dist], filename='bower.json', working_set=working_set)) self.assertEqual(flattened_json, calmjs_dist.flatten_egginfo_json( ['dummydist'], filename='bower.json', working_set=working_set))
def tests_flatten_egginfo_json_missing_complete(self): """ A completely missing egg should not just blow up. """ working_set = pkg_resources.WorkingSet() self.assertEqual( {'dependencies': {}, 'devDependencies': {}}, calmjs_dist.flatten_egginfo_json( 'nosuchpkg', working_set=working_set))
def tests_flatten_egginfo_json_missing_complete(self): """ A completely missing egg should not just blow up. """ working_set = pkg_resources.WorkingSet() self.assertEqual({ 'dependencies': {}, 'devDependencies': {} }, calmjs_dist.flatten_egginfo_json( 'nosuchpkg', working_set=working_set))
def tests_flatten_egginfo_json_nulled(self): """ Need to ensure the *correct* version is picked. """ lib = make_dummy_dist( self, ( # noqa: F841 ('requires.txt', '\n'.join([])), (self.pkgname, json.dumps({ 'dependencies': { 'jquery': '~3.0.0', 'left-pad': '1.1.1', }, })), ), 'lib', '1.0.0') app = make_dummy_dist( self, ( # noqa: F841 ('requires.txt', '\n'.join([ 'lib>=1.0.0', ])), (self.pkgname, json.dumps({ 'dependencies': { 'jquery': '~3.0.0', 'left-pad': None, }, })), ), 'app', '2.0') working_set = pkg_resources.WorkingSet([self._calmjs_testing_tmpdir]) answer = { 'dependencies': { 'jquery': '~3.0.0', # left-pad will be absent as app removed via None. }, 'devDependencies': {}, } result = calmjs_dist.flatten_egginfo_json(['app'], working_set=working_set) self.assertEqual(result, answer)
def test_read_dist_egginfo_json_alternative_name_args(self): package_json = {"dependencies": {"left-pad": "~1.1.1"}} # We will mock up a Distribution object with some fake metadata. mock_provider = MockProvider({ 'bower.json': json.dumps(package_json), }) mock_dist = pkg_resources.Distribution(metadata=mock_provider, project_name='dummydist', version='0.0.0') results = calmjs_dist.read_dist_egginfo_json(mock_dist, filename='bower.json') self.assertEqual(results, package_json) working_set = pkg_resources.WorkingSet() working_set.add(mock_dist) self.assertEqual( package_json, calmjs_dist.read_egginfo_json('dummydist', filename='bower.json', working_set=working_set)) # Finally do the flattening flattened_json = { "dependencies": { "left-pad": "~1.1.1" }, "devDependencies": {} } self.assertEqual( flattened_json, calmjs_dist.flatten_dist_egginfo_json([mock_dist], filename='bower.json', working_set=working_set)) self.assertEqual( flattened_json, calmjs_dist.flatten_egginfo_json(['dummydist'], filename='bower.json', working_set=working_set))
def tests_flatten_egginfo_json_nulled(self): """ Need to ensure the *correct* version is picked. """ lib = make_dummy_dist(self, ( # noqa: F841 ('requires.txt', '\n'.join([])), (self.pkgname, json.dumps({ 'dependencies': { 'jquery': '~3.0.0', 'left-pad': '1.1.1', }, })), ), 'lib', '1.0.0') app = make_dummy_dist(self, ( # noqa: F841 ('requires.txt', '\n'.join([ 'lib>=1.0.0', ])), (self.pkgname, json.dumps({ 'dependencies': { 'jquery': '~3.0.0', 'left-pad': None, }, })), ), 'app', '2.0') working_set = pkg_resources.WorkingSet([self._calmjs_testing_tmpdir]) answer = { 'dependencies': { 'jquery': '~3.0.0', # left-pad will be absent as app removed via None. }, 'devDependencies': {}, } result = calmjs_dist.flatten_egginfo_json( ['app'], working_set=working_set) self.assertEqual(result, answer)
def tests_flatten_egginfo_json_multi_version(self): """ Need to ensure the *correct* version is picked. """ uilib_1_1 = make_dummy_dist(self, ( ('requires.txt', '\n'.join([])), (self.pkgname, json.dumps({ 'dependencies': { 'jquery': '~1.0.0' }, })), ), 'uilib', '1.1.0') uilib_1_4 = make_dummy_dist(self, ( ('requires.txt', '\n'.join([])), (self.pkgname, json.dumps({ 'dependencies': { 'jquery': '~1.4.0' }, })), ), 'uilib', '1.4.0') uilib_1_9 = make_dummy_dist(self, ( ('requires.txt', '\n'.join([])), (self.pkgname, json.dumps({ 'dependencies': { 'jquery': '~1.9.0' }, })), ), 'uilib', '1.9.0') app = make_dummy_dist(self, (('requires.txt', '\n'.join([ 'uilib>=1.0', ])), ), 'app', '2.0') # Instead of passing in the tmpdir like the previous test, this # working set will be manually created as the situation here # should not happen normally - a raw (dist|site)-packages dir # with multiple versions of egg-info available for a single # importable path - a situation that results in the uilib's # actual version being ambiguous. Anyway, each of these # "versions" should be in their own .egg directory with an # "EGG-INFO" subdir underneath, with the top level egg path # being added to sys.path either through a site.py or some kind # of generated program entry point that does that. For all # intents and purposes if the manual Requirements are added to # the WorkingSet like so, the expected values presented in the # system can be created to behave as if they really exist. working_set = pkg_resources.WorkingSet() working_set.add(uilib_1_9, self._calmjs_testing_tmpdir) working_set.add(app, self._calmjs_testing_tmpdir) answer = { 'dependencies': { 'jquery': '~1.9.0', }, 'devDependencies': {}, } result = calmjs_dist.flatten_egginfo_json(['app'], working_set=working_set) self.assertEqual(result, answer) # Now emulate an older version, with a different working set. working_set = pkg_resources.WorkingSet() working_set.add(uilib_1_4, self._calmjs_testing_tmpdir) # this shouldn't override the previous. working_set.add(uilib_1_1, self._calmjs_testing_tmpdir) working_set.add(app, self._calmjs_testing_tmpdir) answer = { 'dependencies': { 'jquery': '~1.4.0', }, 'devDependencies': {}, } result = calmjs_dist.flatten_egginfo_json(['app'], working_set=working_set) self.assertEqual(result, answer)
def tests_flatten_egginfo_json_deps(self): # Quiet stdout from distutils logs stub_stdouts(self) make_dummy_dist(self, ( ('requires.txt', '\n'.join([])), (self.pkgname, 'This is very NOT a package.json.'), ), 'security', '9999') framework = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'security', ])), (self.pkgname, json.dumps({ 'name': 'framework', 'description': 'some framework', 'dependencies': { 'left-pad': '~1.1.1', }, 'devDependencies': { 'sinon': '~1.15.0', }, })), ), 'framework', '2.4') widget = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'framework>=2.1', ])), (self.pkgname, json.dumps({ 'dependencies': { 'jquery': '~2.0.0', 'underscore': '~1.7.0', }, })), ), 'widget', '1.1') forms = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'framework>=2.2', 'widget>=1.0', ])), (self.pkgname, json.dumps({ 'dependencies': { 'backbone': '~1.3.0', 'jquery-ui': '~1.12.0', }, })), ), 'forms', '1.6') service = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'framework>=2.1', ])), (self.pkgname, json.dumps({ 'dependencies': { 'underscore': '~1.8.0', }, 'devDependencies': { 'sinon': '~1.17.0', }, })), ), 'service', '1.1') site = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'framework>=2.1', 'widget>=1.1', 'forms>=1.6', 'service>=1.1', ])), (self.pkgname, json.dumps({ 'name': 'site', 'dependencies': { 'underscore': '~1.8.0', 'jquery': '~1.9.0', }, })), ), 'site', '2.0') answer = { 'name': 'site', 'dependencies': { 'left-pad': '~1.1.1', 'jquery': '~1.9.0', 'backbone': '~1.3.0', 'jquery-ui': '~1.12.0', 'underscore': '~1.8.0', }, 'devDependencies': { 'sinon': '~1.17.0', }, } # WorkingSet is a frozen representation of the versions and # locations of all available package presented through sys.path # by default. Here we just emulate it using our temporary path # created by our mock package definitions above. working_set = pkg_resources.WorkingSet([self._calmjs_testing_tmpdir]) # Ensure that this works with a raw requirements object, that # should normally be automatically resolved from a name. result = calmjs_dist.flatten_dist_egginfo_json( [framework, widget, forms, service, site], working_set=working_set) self.assertEqual(result, answer) # Also a raw requirement (package) string on the other function. result = calmjs_dist.flatten_egginfo_json(['site'], working_set=working_set) self.assertEqual(result, answer)
def tests_flatten_egginfo_json_multi_version(self): """ Need to ensure the *correct* version is picked. """ uilib_1_1 = make_dummy_dist(self, ( ('requires.txt', '\n'.join([])), (self.pkgname, json.dumps({ 'dependencies': {'jquery': '~1.0.0'}, })), ), 'uilib', '1.1.0') uilib_1_4 = make_dummy_dist(self, ( ('requires.txt', '\n'.join([])), (self.pkgname, json.dumps({ 'dependencies': {'jquery': '~1.4.0'}, })), ), 'uilib', '1.4.0') uilib_1_9 = make_dummy_dist(self, ( ('requires.txt', '\n'.join([])), (self.pkgname, json.dumps({ 'dependencies': {'jquery': '~1.9.0'}, })), ), 'uilib', '1.9.0') app = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'uilib>=1.0', ])), ), 'app', '2.0') # Instead of passing in the tmpdir like the previous test, this # working set will be manually created as the situation here # should not happen normally - a raw (dist|site)-packages dir # with multiple versions of egg-info available for a single # importable path - a situation that results in the uilib's # actual version being ambiguous. Anyway, each of these # "versions" should be in their own .egg directory with an # "EGG-INFO" subdir underneath, with the top level egg path # being added to sys.path either through a site.py or some kind # of generated program entry point that does that. For all # intents and purposes if the manual Requirements are added to # the WorkingSet like so, the expected values presented in the # system can be created to behave as if they really exist. working_set = pkg_resources.WorkingSet() working_set.add(uilib_1_9, self._calmjs_testing_tmpdir) working_set.add(app, self._calmjs_testing_tmpdir) answer = { 'dependencies': { 'jquery': '~1.9.0', }, 'devDependencies': {}, } result = calmjs_dist.flatten_egginfo_json( ['app'], working_set=working_set) self.assertEqual(result, answer) # Now emulate an older version, with a different working set. working_set = pkg_resources.WorkingSet() working_set.add(uilib_1_4, self._calmjs_testing_tmpdir) # this shouldn't override the previous. working_set.add(uilib_1_1, self._calmjs_testing_tmpdir) working_set.add(app, self._calmjs_testing_tmpdir) answer = { 'dependencies': { 'jquery': '~1.4.0', }, 'devDependencies': {}, } result = calmjs_dist.flatten_egginfo_json( ['app'], working_set=working_set) self.assertEqual(result, answer)
def tests_flatten_egginfo_json_deps(self): # Quiet stdout from distutils logs stub_stdouts(self) make_dummy_dist(self, ( ('requires.txt', '\n'.join([ ])), (self.pkgname, 'This is very NOT a package.json.'), ), 'security', '9999') framework = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'security', ])), (self.pkgname, json.dumps({ 'name': 'framework', 'description': 'some framework', 'dependencies': { 'left-pad': '~1.1.1', }, 'devDependencies': { 'sinon': '~1.15.0', }, })), ), 'framework', '2.4') widget = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'framework>=2.1', ])), (self.pkgname, json.dumps({ 'dependencies': { 'jquery': '~2.0.0', 'underscore': '~1.7.0', }, })), ), 'widget', '1.1') forms = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'framework>=2.2', 'widget>=1.0', ])), (self.pkgname, json.dumps({ 'dependencies': { 'backbone': '~1.3.0', 'jquery-ui': '~1.12.0', }, })), ), 'forms', '1.6') service = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'framework>=2.1', ])), (self.pkgname, json.dumps({ 'dependencies': { 'underscore': '~1.8.0', }, 'devDependencies': { 'sinon': '~1.17.0', }, })), ), 'service', '1.1') site = make_dummy_dist(self, ( ('requires.txt', '\n'.join([ 'framework>=2.1', 'widget>=1.1', 'forms>=1.6', 'service>=1.1', ])), (self.pkgname, json.dumps({ 'name': 'site', 'dependencies': { 'underscore': '~1.8.0', 'jquery': '~1.9.0', }, })), ), 'site', '2.0') answer = { 'name': 'site', 'dependencies': { 'left-pad': '~1.1.1', 'jquery': '~1.9.0', 'backbone': '~1.3.0', 'jquery-ui': '~1.12.0', 'underscore': '~1.8.0', }, 'devDependencies': { 'sinon': '~1.17.0', }, } # WorkingSet is a frozen representation of the versions and # locations of all available package presented through sys.path # by default. Here we just emulate it using our temporary path # created by our mock package definitions above. working_set = pkg_resources.WorkingSet([self._calmjs_testing_tmpdir]) # Ensure that this works with a raw requirements object, that # should normally be automatically resolved from a name. result = calmjs_dist.flatten_dist_egginfo_json( [framework, widget, forms, service, site], working_set=working_set) self.assertEqual(result, answer) # Also a raw requirement (package) string on the other function. result = calmjs_dist.flatten_egginfo_json( ['site'], working_set=working_set) self.assertEqual(result, answer)