public void TestReadAndWrite()
{
TagBase tag=new TagBase();
//Add text frames common to all versions
tag.Frames.Add(new AlbumTextFrame("Album"));
tag.Frames.Add(new ArtistTextFrame("Artist"));
tag.Frames.Add(new ComposerTextFrame("Composer"));
tag.Frames.Add(new CopyrightTextFrame("Copyright"));
tag.Frames.Add(new CustomUserTextFrame("CustomUser"));
tag.Frames.Add(new DateTextFrame("Date"));
tag.Frames.Add(new EncodedByTextFrame("EncodedBy"));
tag.Frames.Add(new FileTypeTextFrame("FileType"));
tag.Frames.Add(new GenreTextFrame("Genre"));
tag.Frames.Add(new GroupingTextFrame("Grouping"));
tag.Frames.Add(new InitialKeyTextFrame("InitialKey"));
tag.Frames.Add(new LanguageTextFrame("Language"));
tag.Frames.Add(new LengthTextFrame("Length"));
tag.Frames.Add(new MediaTypeTextFrame("MediaType"));
tag.Frames.Add(new OrchestraTextFrame("Orchestra"));
tag.Frames.Add(new OriginalAlbumTextFrame("OriginalAlbum"));
tag.Frames.Add(new OriginalArtistTextFrame("OriginalArtist"));
tag.Frames.Add(new OriginalReleaseYearTextFrame("OriginalReleaseYear"));
tag.Frames.Add(new PublisherTextFrame("Publisher"));
tag.Frames.Add(new SoftwareSettingsTextFrame("SoftwareSettings"));
tag.Frames.Add(new TitleTextFrame("Title"));
tag.Frames.Add(new EncodingTimeTextFrame("EncodingTime"));
tag.Frames.Add(new RecordingTimeTextFrame("RecordingTime"));
tag.Frames.Add(new ReleaseTimeTextFrame("ReleaseTime"));
tag.Frames.Add(new TaggingTimeTextFrame("TaggingTime"));
tag.Frames.Add(new OriginalReleaseTimeTextFrame("OriginalReleaseTime"));
// Picture frames
System.Drawing.Image img = System.Drawing.Image.FromFile ("Resources/photo.jpg");
tag.Frames.Add(new PictureFrame(img, "Description!", PictureType.CoverBack));
tag.Frames.Add(new PictureFrame(img, "Yet another attached picture!", PictureType.CoverFront));
// General encapsulated object frame
tag.Frames.Add(new GeneralEncapsulatedObjectFrame("filename.dat", "some descriptoin!", "image/jpeg", GetRandomByteArray(1000, 1000)));
// Music CD Identifier frame
tag.Frames.Add(new MusicCDIdentifierFrame(GetRandomByteArray(10, 10)));
// Play Counter Frame
tag.Frames.Add(new PlayCounterFrame(11245));
// Private Frame
tag.Frames.Add(new PrivateFrame("owner", GetRandomByteArray(100,100)));
// Unique File ID Frame
tag.Frames.Add(new UniqueFileIdentifierFrame(GetRandomByteArray(100, 100), "owner"));
// URL frames
tag.Frames.Add(new CommercialUrlFrame("http://www.google.com/"));
tag.Frames.Add(new CustomUserUrlFrame("http://www.google.com/"));
tag.Frames.Add(new OfficialArtistUrlFrame("http://www.google.com/"));
tag.Frames.Add(new OfficialAudioFileUrlFrame("http://www.google.com/"));
tag.Frames.Add(new OfficialAudioSourceUrlFrame("http://www.google.com/"));
// Part and Track frames
tag.Frames.Add(new PartOfSetTextFrame(4));
tag.Frames.Add(new PartOfSetTextFrame(45, 123));
tag.Frames.Add(new TrackTextFrame(415));
tag.Frames.Add(new TrackTextFrame(15, 1234));
// Year frame
tag.Frames.Add(new YearTextFrame(""));
tag.Frames.Add(new YearTextFrame("14"));
tag.Frames.Add(new YearTextFrame("144"));
tag.Frames.Add(new YearTextFrame("1234"));
//Time text frame
tag.Frames.Add(new TimeTextFrame("134"));
//Beats per minute frame
tag.Frames.Add(new BeatsPerMinuteTextFrame(134));
RunTest(tag, ID3v2MajorVersion.Version4, EncodingScheme.Ascii);
RunTest(tag, ID3v2MajorVersion.Version4, EncodingScheme.BigEndianUnicode);
RunTest(tag, ID3v2MajorVersion.Version4, EncodingScheme.UnicodeWithBOM);
RunTest(tag, ID3v2MajorVersion.Version4, EncodingScheme.UTF8);
RunTest(tag, ID3v2MajorVersion.Version2, EncodingScheme.Ascii);
RunTest(tag, ID3v2MajorVersion.Version2, EncodingScheme.BigEndianUnicode);
RunTest(tag, ID3v2MajorVersion.Version2, EncodingScheme.UnicodeWithBOM);
RunTest(tag, ID3v2MajorVersion.Version2, EncodingScheme.UTF8);
RunTest(tag, ID3v2MajorVersion.Version3, EncodingScheme.Ascii);
RunTest(tag, ID3v2MajorVersion.Version3, EncodingScheme.BigEndianUnicode);
RunTest(tag, ID3v2MajorVersion.Version3, EncodingScheme.UnicodeWithBOM);
RunTest(tag, ID3v2MajorVersion.Version3, EncodingScheme.UTF8);
}