public void BlobEncoder_CustomAttributeSignature() { var b = new BlobBuilder(); var e = new BlobEncoder(b); Assert.Same(b, e.Builder); FixedArgumentsEncoder fixedArgs; CustomAttributeNamedArgumentsEncoder namedArgs; e.CustomAttributeSignature(out fixedArgs, out namedArgs); AssertEx.Equal(new byte[] { 0x01, 0x00 }, b.ToArray()); Assert.Same(b, fixedArgs.Builder); Assert.Same(b, namedArgs.Builder); b.Clear(); e.CustomAttributeSignature( f => Assert.Same(b, f.Builder), n => Assert.Same(b, namedArgs.Builder)); AssertEx.Equal(new byte[] { 0x01, 0x00 }, b.ToArray()); b.Clear(); Assert.Throws <ArgumentNullException>(() => e.CustomAttributeSignature(null, n => { })); Assert.Throws <ArgumentNullException>(() => e.CustomAttributeSignature(f => { }, null)); }
public void CreateCustomAttributes(EntityHandle parent, IEnumerable <CustomAttributeData> attributes) { foreach (var attr in attributes) { // Get the attribute type and make sure handle created var attrType = attr.AttributeType; // Check if the supplied attribute should be emitted or is encoded // directly in metadata. if (s_PseudoAttributes.Contains(attrType)) { continue; } var attrTypeHandle = _metadata.GetTypeHandle(attrType); // create type // Get handle to the constructor var ctorHandle = _metadata.GetConstructorHandle(attr.Constructor); System.Diagnostics.Debug.Assert(!ctorHandle.IsNil); // Encode the attribute values var enc = new BlobEncoder(new BlobBuilder()); enc.CustomAttributeSignature( (fa) => EncodeFixedAttributes(fa, attr), (na) => EncodeNamedAttributes(na, attr) ); // Add attribute to the entity _metadata.Builder.AddCustomAttribute(parent, ctorHandle, _metadata.Builder.GetOrAddBlob(enc.Builder)); } }
public void BlobEncoder_CustomAttributeSignature() { var b = new BlobBuilder(); var e = new BlobEncoder(b); Assert.Same(b, e.Builder); var parts = e.CustomAttributeSignature(); AssertEx.Equal(new byte[] { 0x01, 0x00 }, b.ToArray()); Assert.Same(b, parts.Item1.Builder); Assert.Same(b, parts.Item2.Builder); b.Clear(); e.CustomAttributeSignature( part => Assert.Same(b, part.Builder), part => Assert.Same(b, part.Builder)); AssertEx.Equal(new byte[] { 0x01, 0x00 }, b.ToArray()); b.Clear(); Assert.Throws <ArgumentNullException>(() => e.CustomAttributeSignature(null, _ => { })); Assert.Throws <ArgumentNullException>(() => e.CustomAttributeSignature(_ => { }, null)); }
public void BlobEncoder_CustomAttributeSignature() { var b = new BlobBuilder(); var e = new BlobEncoder(b); FixedArgumentsEncoder fixedArgs; CustomAttributeNamedArgumentsEncoder namedArgs; e.CustomAttributeSignature(out fixedArgs, out namedArgs); AssertEx.Equal(new byte[] { 0x01, 0x00 }, b.ToArray()); Assert.Same(b, fixedArgs.Builder); Assert.Same(b, namedArgs.Builder); b.Clear(); e.CustomAttributeSignature( f => Assert.Same(b, f.Builder), n => Assert.Same(b, namedArgs.Builder)); AssertEx.Equal(new byte[] { 0x01, 0x00 }, b.ToArray()); b.Clear(); Assert.Throws<ArgumentNullException>(() => e.CustomAttributeSignature(null, n => { })); Assert.Throws<ArgumentNullException>(() => e.CustomAttributeSignature(f => { }, null)); }
public void BlobEncoder_CustomAttributeSignature() { var b = new BlobBuilder(); var e = new BlobEncoder(b); Assert.Same(b, e.Builder); var parts = e.CustomAttributeSignature(); AssertEx.Equal(new byte[] { 0x01, 0x00 }, b.ToArray()); Assert.Same(b, parts.Item1.Builder); Assert.Same(b, parts.Item2.Builder); b.Clear(); e.CustomAttributeSignature( part => Assert.Same(b, part.Builder), part => Assert.Same(b, part.Builder)); AssertEx.Equal(new byte[] { 0x01, 0x00 }, b.ToArray()); b.Clear(); Assert.Throws<ArgumentNullException>(() => e.CustomAttributeSignature(null, _ => { })); Assert.Throws<ArgumentNullException>(() => e.CustomAttributeSignature(_ => { }, null)); }