Exemple #1
0
        public void TestPerformers()
        {
            Id3v1.Tag tag = new Id3v1.Tag();

            Assert.IsTrue(tag.IsEmpty, "Initially empty");
            Assert.AreEqual(0, tag.Performers.Length, "Initially empty");

            ByteVector rendered = tag.Render();

            tag = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.AreEqual(0, tag.Performers.Length, "Still empty");

            tag.Performers = new string [] { "A123456789", "B123456789", "C123456789", "D123456789", "E123456789" };
            Assert.IsFalse(tag.IsEmpty, "Not empty");
            Assert.AreEqual("A123456789; B123456789; C123456789; D123456789; E123456789", tag.JoinedPerformers);

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsFalse(tag.IsEmpty, "Still not empty");
            Assert.AreEqual("A123456789; B123456789; C1234567", tag.JoinedPerformers);

            tag.Performers = new string [0];
            Assert.IsTrue(tag.IsEmpty, "Again empty");
            Assert.AreEqual(0, tag.Performers.Length, "Again empty");

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.AreEqual(0, tag.Performers.Length, "Still empty");
        }
Exemple #2
0
        public void TestAlbum()
        {
            Id3v1.Tag tag = new Id3v1.Tag();

            Assert.IsTrue(tag.IsEmpty, "Initially empty");
            Assert.IsNull(tag.Album, "Initially null");

            ByteVector rendered = tag.Render();

            tag = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.IsNull(tag.Album, "Still null");

            tag.Album = "01234567890123456789012345678901234567890123456789";
            Assert.IsFalse(tag.IsEmpty, "Not empty");
            Assert.AreEqual("01234567890123456789012345678901234567890123456789", tag.Album);

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsFalse(tag.IsEmpty, "Still not empty");
            Assert.AreEqual("012345678901234567890123456789", tag.Album);

            tag.Album = string.Empty;
            Assert.IsTrue(tag.IsEmpty, "Again empty");
            Assert.IsNull(tag.Album, "Again null");

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.IsNull(tag.Album, "Still null");
        }
Exemple #3
0
        public void TestTrack()
        {
            Id3v1.Tag tag = new Id3v1.Tag();

            Assert.IsTrue(tag.IsEmpty, "Initially empty");
            Assert.AreEqual(0, tag.Track, "Initially zero");

            ByteVector rendered = tag.Render();

            tag = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.AreEqual(0, tag.Track, "Still zero");

            tag.Track = 123;
            Assert.IsFalse(tag.IsEmpty, "Not empty");
            Assert.AreEqual(123, tag.Track);

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsFalse(tag.IsEmpty, "Still not empty");
            Assert.AreEqual(123, tag.Track);

            tag.Track = 0;
            Assert.IsTrue(tag.IsEmpty, "Again empty");
            Assert.AreEqual(0, tag.Track, "Again zero");

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.AreEqual(0, tag.Track, "Still zero");
        }
Exemple #4
0
        public void TestRender()
        {
            ByteVector rendered = new Id3v1.Tag().Render();

            Assert.AreEqual(128, rendered.Count);
            Assert.IsTrue(rendered.StartsWith(Id3v1.Tag.FileIdentifier));
        }
Exemple #5
0
        public void TestYear()
        {
            Id3v1.Tag tag = new Id3v1.Tag();

            Assert.IsTrue(tag.IsEmpty, "Initially empty");
            Assert.AreEqual(0, tag.Year, "Initially zero");

            ByteVector rendered = tag.Render();

            tag = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.AreEqual(0, tag.Year, "Still zero");

            tag.Year = 1999;
            Assert.IsFalse(tag.IsEmpty, "Not empty");
            Assert.AreEqual(1999, tag.Year);

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsFalse(tag.IsEmpty, "Still not empty");
            Assert.AreEqual(1999, tag.Year);

            tag.Year = 20000;
            Assert.IsTrue(tag.IsEmpty, "Again empty");
            Assert.AreEqual(0, tag.Year, "Again zero");

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.AreEqual(0, tag.Year, "Still zero");
        }
Exemple #6
0
        /// <summary>
        ///    Reads a tag ending at a specified position and moves the
        ///    cursor to its start position.
        /// </summary>
        /// <param name="end">
        ///    A <see cref="long" /> value reference specifying at what
        ///    position the potential tag ends at. If a tag is found,
        ///    this value will be updated to the position at which the
        ///    found tag starts.
        /// </param>
        /// <returns>
        ///    A <see cref="TagLibSharp.Tag" /> object representing the tag
        ///    found at the specified position, or <see langword="null"
        ///    /> if no tag was found.
        /// </returns>
        private TagLibSharp.Tag ReadTag(ref long end)
        {
            long     start = end;
            TagTypes type  = ReadTagInfo(ref start);

            TagLibSharp.Tag tag = null;

            try {
                switch (type)
                {
                case TagTypes.Ape:
                    tag = new Ape.Tag(file, end - Footer.Size);
                    break;

                case TagTypes.Id3v2:
                    tag = new Id3v2.Tag(file, start);
                    break;

                case TagTypes.Id3v1:
                    tag = new Id3v1.Tag(file, start);
                    break;
                }

                end = start;
            } catch (CorruptFileException) {
            }

            return(tag);
        }
Exemple #7
0
        public void TestGenres()
        {
            Id3v1.Tag tag = new Id3v1.Tag();

            Assert.IsTrue(tag.IsEmpty, "Initially empty");
            Assert.AreEqual(0, tag.Genres.Length, "Initially empty");

            ByteVector rendered = tag.Render();

            tag = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.AreEqual(0, tag.Genres.Length, "Still empty");

            tag.Genres = new string [] { "Rap", "Jazz", "Non-Genre", "Blues" };
            Assert.IsFalse(tag.IsEmpty, "Not empty");
            Assert.AreEqual("Rap", tag.JoinedGenres);

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsFalse(tag.IsEmpty, "Still not empty");
            Assert.AreEqual("Rap", tag.JoinedGenres);

            tag.Genres = new string [] { "Non-Genre" };
            Assert.IsTrue(tag.IsEmpty, "Surprisingly empty");
            Assert.AreEqual(0, tag.Genres.Length, "Surprisingly empty");

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.AreEqual(0, tag.Genres.Length, "Still empty");

            tag.Genres = new string [0];
            Assert.IsTrue(tag.IsEmpty, "Again empty");
            Assert.AreEqual(0, tag.Genres.Length, "Again empty");

            rendered = tag.Render();
            tag      = new Id3v1.Tag(rendered);
            Assert.IsTrue(tag.IsEmpty, "Still empty");
            Assert.AreEqual(0, tag.Genres.Length, "Still empty");
        }
Exemple #8
0
        /// <summary>
        ///    Adds a tag of a specified type to the current instance,
        ///    optionally copying values from an existing type.
        /// </summary>
        /// <param name="type">
        ///    A <see cref="TagTypes" /> value specifying the type of
        ///    tag to add to the current instance. At the time of this
        ///    writing, this is limited to <see cref="TagTypes.Ape" />,
        ///    <see cref="TagTypes.Id3v1" />, and <see
        ///    cref="TagTypes.Id3v2" />.
        /// </param>
        /// <param name="copy">
        ///    A <see cref="TagLibSharp.Tag" /> to copy values from using
        ///    <see cref="TagLibSharp.Tag.CopyTo" />, or <see
        ///    langword="null" /> if no tag is to be copied.
        /// </param>
        /// <returns>
        ///    The <see cref="TagLibSharp.Tag" /> object added to the current
        ///    instance, or <see langword="null" /> if it couldn't be
        ///    created.
        /// </returns>
        /// <remarks>
        ///    ID3v2 tags are added at the end of the current instance,
        ///    while other tags are added to the beginning.
        /// </remarks>
        public TagLibSharp.Tag AddTag(TagTypes type, TagLibSharp.Tag copy)
        {
            TagLibSharp.Tag tag = null;

            if (type == TagTypes.Id3v1)
            {
                tag = new Id3v1.Tag();
            }
            else if (type == TagTypes.Id3v2)
            {
                Id3v2.Tag tag32 = new Id3v2.Tag();
                tag32.Version = 4;
                tag32.Flags  |= Id3v2.HeaderFlags.FooterPresent;
                tag           = tag32;
            }
            else if (type == TagTypes.Ape)
            {
                tag = new Ape.Tag();
            }

            if (tag != null)
            {
                if (copy != null)
                {
                    copy.CopyTo(tag, true);
                }

                if (type == TagTypes.Id3v1)
                {
                    AddTag(tag);
                }
                else
                {
                    InsertTag(0, tag);
                }
            }

            return(tag);
        }
Exemple #9
0
        public void TestClear()
        {
            Id3v1.Tag tag = new Id3v1.Tag();

            tag.Title      = "A";
            tag.Performers = new string [] { "B" };
            tag.Album      = "C";
            tag.Year       = 123;
            tag.Comment    = "D";
            tag.Track      = 234;
            tag.Genres     = new string [] { "Blues" };

            Assert.IsFalse(tag.IsEmpty, "Should be full.");
            tag.Clear();
            Assert.IsNull(tag.Title, "Title");
            Assert.AreEqual(0, tag.Performers.Length, "Performers");
            Assert.IsNull(tag.Album, "Album");
            Assert.AreEqual(0, tag.Year, "Year");
            Assert.IsNull(tag.Comment, "Comment");
            Assert.AreEqual(0, tag.Track, "Track");
            Assert.AreEqual(0, tag.Genres.Length, "Genres");
            Assert.IsTrue(tag.IsEmpty, "Should be empty.");
        }