from jw.pkg.lib.Package import Package, meta_tags # -- parse_spec_str -- p = Package.parse_spec_str( 'jw-core|jw|Jan|https://example.com/jw-core|Jan ' ) assert p.name == 'jw-core' assert p.vendor == 'jw' assert p.packager == 'Jan' assert p.url == 'https://example.com/jw-core' assert p.maintainer == 'Jan ' # An empty field is preserved as an empty string p = Package.parse_spec_str('name||||') assert p.name == 'name' assert p.vendor == '' assert p.packager == '' assert p.url == '' assert p.maintainer == '' # A custom delimiter works p = Package.parse_spec_str('a,b,c,d,e', delimiter = ',') assert p.name == 'a' assert p.maintainer == 'e' # Wrong field counts raise for spec in ('a', 'a|b', 'a|b|c|d', 'a|b|c|d|e|f'): try: Package.parse_spec_str(spec) assert False, f'Should have raised for "{spec}"' except ValueError: pass # -- parse_specs_str -- specs = ( 'jw-core|jw|Jan|https://example.com/jw-core|Jan\n' 'jw-base|jw|Jan|https://example.com/jw-base|Jan' ) packages = Package.parse_specs_str(specs) assert [p.name for p in packages] == ['jw-core', 'jw-base'] # A trailing newline does not create a phantom package assert len(packages) == 2 # A trailing newline is not needed packages = Package.parse_specs_str(specs + '\n') assert [p.name for p in packages] == ['jw-core', 'jw-base'] # An empty string parses to no packages assert Package.parse_specs_str('') == [] # -- order_tags -- mapping = { 'maintainer': 'Jan', 'name': 'jw-core', 'url': 'https://example.com/jw-core', } ordered = Package.order_tags(mapping) assert list(ordered) == meta_tags assert ordered == { 'name': 'jw-core', 'vendor': '', 'packager': '', 'url': 'https://example.com/jw-core', 'maintainer': 'Jan', } # -- __repr__ -- p = Package.parse_spec_str('jw-core|jw|Jan|url|Jan') assert repr(p) == ( 'name : jw-core\n' 'vendor : jw\n' 'packager : Jan\n' 'url : url\n' 'maintainer : Jan' ) print('All Package tests passed')