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"); }
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"); }
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"); }
public void TestRender() { ByteVector rendered = new Id3v1.Tag().Render(); Assert.AreEqual(128, rendered.Count); Assert.IsTrue(rendered.StartsWith(Id3v1.Tag.FileIdentifier)); }
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"); }
/// <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); }
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"); }
/// <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); }
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."); }