def test_extend(self): extends = Struct(age=32, label='green', items=[], extends=Struct(age=42, other=True, items=[1, 2])) # Extension is lazy, so we don't pick up the other field yet. self.assertNotEqual(Struct(age=32, label='green', items=[], other=True), extends) # But we do pick it up now. self.assertEqual(Struct(age=32, label='green', items=[], other=True), extends.create())
def test_extend_and_merge(self): extends_and_merges = Struct(age=32, label='green', items=[5], extends=Struct(age=42, other=True, knobs={'a': True}, items=[1, 2]), merges=[Struct(age=52, other=False, items=[1, 3, 4], knobs={'a': False, 'b': True}), Struct(items=[2])]) self.assertEqual(Struct(age=32, label='green', other=True, items=[5, 1, 3, 4, 2], knobs={'a': False, 'b': True}), extends_and_merges.create())
def test_merge(self): merges = Struct(age=32, items=[3], knobs={'b': False}, merges=[Struct(age=42, other=True, items=[1, 2], knobs={'a': True, 'b': True})]) # Merging is lazy, so we don't pick up the other field yet. self.assertNotEqual(Struct(age=32, items=[3, 1, 2], knobs={'a': True, 'b': True}, other=True), merges) # But we do pick it up now. self.assertEqual(Struct(age=32, items=[3, 1, 2], knobs={'a': True, 'b': True}, other=True), merges.create())
def test_walk_addressables_rel_path(self): self.assertEqual({self.addr('a/d:d'): Target(name='d', type_alias='target'), self.addr('a/d/e:e'): Target(name='e', type_alias='target'), self.addr('a/d/e:e-prime'): Struct(name='e-prime', type_alias='struct')}, self.resolve_multi(DescendantAddresses('a/d')))
def test_walk_descendants_path_excludes(self): self.assertEqual( { self.addr('//:root'): Struct(name='root'), self.addr('a/d:d'): Target(name='d') }, self.resolve_multi(DescendantAddresses('')))
def do_test_codegen_simple(self, scheduler): def address(name): return Address(spec_path='graph_test', target_name=name) java1_address = address('java1') resolved_java1 = self.resolve(scheduler, java1_address) nonstrict_address = address('nonstrict') expected_nonstrict = ApacheThriftConfiguration( address=nonstrict_address, version='0.9.2', strict=False, lang='java') public_address = address('public') expected_public = Struct( address=public_address, url='https://oss.sonatype.org/#stagingRepositories') thrift2_address = address('thrift2') expected_java1 = Target( address=java1_address, sources={}, configurations=[ PublishConfiguration( default_repo=expected_public, repos={ 'jake': Struct(url='https://dl.bintray.com/pantsbuild/maven'), 'jane': expected_public }), expected_nonstrict, ApacheThriftConfiguration( version='0.9.2', strict=True, lang='java', dependencies=[address(thrift2_address)]), ]) self.assertEqual(expected_java1, resolved_java1) resolved_nonstrict = self.resolve(scheduler, nonstrict_address) self.assertEqual(expected_nonstrict, resolved_nonstrict) self.assertEqual(expected_nonstrict, expected_java1.configurations[1]) self.assertEquals(resolved_java1.configurations[1], resolved_nonstrict) resolved_public = self.resolve(scheduler, public_address) self.assertEqual(expected_public, resolved_public) self.assertEqual(expected_public, expected_java1.configurations[0].default_repo) self.assertEqual(expected_public, expected_java1.configurations[0].repos['jane']) self.assertEquals(resolved_java1.configurations[0].default_repo, resolved_public) self.assertEquals(resolved_java1.configurations[0].repos['jane'], resolved_public) # NB: `dependencies` lists must be explicitly requested by tasks, so we expect an Address. thrift1_address = address('thrift1') expected_thrift2 = Target(address=thrift2_address, dependencies=[thrift1_address]) resolved_thrift2 = self.resolve(scheduler, thrift2_address) self.assertEqual(expected_thrift2, resolved_thrift2) expected_thrift1 = Target(address=thrift1_address) resolved_thrift1 = self.resolve(scheduler, thrift1_address) self.assertEqual(expected_thrift1, resolved_thrift1)
def test_address_name_conflict(self): with self.assertRaises(ValidationError): Struct(name='a', address=Address.parse('a:b'))
def test_address_no_name(self): config = Struct(address=Address.parse('a:b')) self.assertEqual('b', config.name)