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));
            }
        }
示例#3
0
        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));
        }
示例#5
0
        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));
        }