public void AudioFileExport() { var index = Convert.ToInt32(TestContext.DataRow["Index"]); var fileName = Path.Combine(TestContext.DeploymentDirectory, "TestFiles", Convert.ToString(TestContext.DataRow["FileName"])); var encoder = Convert.ToString(TestContext.DataRow["Encoder"]); var settings = ConvertToDictionary(Convert.ToString(TestContext.DataRow["Settings"])); var metadata = ConvertToDictionary(Convert.ToString(TestContext.DataRow["Metadata"])); var coverArt = Convert.ToString(TestContext.DataRow["CoverArt"]); var expectedHash = Convert.ToString(TestContext.DataRow[Environment.Is64BitProcess ? "ExpectedHashX64" : "ExpectedHashX86"]); if (!string.IsNullOrEmpty(expectedHash)) { var input = new ExportableAudioFile(new FileInfo(fileName)); metadata.CopyTo(input.Metadata); if (!string.IsNullOrEmpty(coverArt)) { input.Metadata.CoverArt = new CoverArt(new FileInfo(Path.Combine(TestContext.DeploymentDirectory, "TestFiles", coverArt))); } var result = input.Export(encoder, settings, new DirectoryInfo(TestContext.DeploymentDirectory), "Export Row " + index); Assert.AreEqual <string>(expectedHash, CalculateHash(result)); } }
protected override void EndProcessing() { if (_audioFiles.Count > 0) { var completed = 0; using (var outputQueue = new BlockingCollection <object>()) { outputQueue.Add(new ProgressRecord(0, string.Format(CultureInfo.CurrentCulture, Resources.ExportAudioFileCommandActivityMessage, Encoder), string.Format(CultureInfo.CurrentCulture, Resources.ExportAudioFileCommandStatusMessage, 0, _audioFiles.Count)) { PercentComplete = 0 }); Task.Run(() => Parallel.ForEach(_audioFiles, new ParallelOptions { CancellationToken = _cancelSource.Token }, audioFile => { try { var substituter = new MetadataSubstituter(audioFile.Metadata); DirectoryInfo outputDirectory; try { outputDirectory = new DirectoryInfo(this.GetFileSystemPaths(substituter.Substitute(Path), substituter.Substitute(LiteralPath)).First()); } catch (ItemNotFoundException e) { outputDirectory = new DirectoryInfo(e.ItemName); } ExportableAudioFile result = audioFile.Export(Encoder, _cancelSource.Token, new HashTableToSettingsDictionaryAdapter(Setting), outputDirectory, string.IsNullOrEmpty(Name) ? null : substituter.Substitute(Name), Replace); Interlocked.Increment(ref completed); outputQueue.Add(result); outputQueue.Add(new ProgressRecord(0, string.Format(CultureInfo.CurrentCulture, Resources.ExportAudioFileCommandActivityMessage, Encoder), string.Format(CultureInfo.CurrentCulture, Resources.ExportAudioFileCommandStatusMessage, completed, _audioFiles.Count)) { PercentComplete = completed.GetPercent(_audioFiles.Count) }); } catch (Exception e) { Interlocked.Increment(ref completed); outputQueue.Add(new ErrorRecord(e, e.HResult.ToString(CultureInfo.CurrentCulture), ErrorCategory.WriteError, audioFile)); } })).ContinueWith(task => outputQueue.CompleteAdding()); // Process output on the main thread: this.ProcessOutput(outputQueue, _cancelSource.Token); } } }