2012-10-10 2 views
5

क्या मैं पीडीएफ के साथ स्वीकृति परीक्षण का उपयोग कर सकता हूं? मैंने FileLauncher का उपयोग करने का प्रयास किया लेकिन ऐसा लगता है कि समान पीडीएफ फ़ाइल (बिट) स्तर पर थोड़ा अलग है। या मैंने गलत तरीके से इसका इस्तेमाल किया?स्वीकृतियां और पीडीएफ

[TestMethod] 
[UseReporter(typeof(FileLauncherReporter))] 
public void TestPdf() 
{ 
    var createSomePdf = PdfCreate(); 

    ApprovalTests.Approvals.Verify(new FileInfo(createSomePdf.FileName)); 

} 

उत्तर

6

पीडीएफ सबसे अधिक संभावना टाइमस्टैम्प के साथ बनाया जा रहा है। पीडीएफ बनाने के लिए प्रयुक्त विधि के आधार पर, आप बनाए गए समय को नकल करने में सक्षम हो सकते हैं। लेकिन मुझे इसे साफ़ करना पड़ा।

यहां कोड है जो मैं करता था।

public static void VerifyPdf(string coverFile) 
    { 
     ScrubPdf(coverFile); 
     Approvals.Verify(new ExistingFileWriter(coverFile)); 
    } 

    private static void ScrubPdf(string coverFile) 
    { 
     long location; 
     using (var pdf = File.OpenRead(coverFile)) 
     { 
      location = Find("/CreationDate (", pdf); 

     } 
     using (var pdf = File.OpenWrite(coverFile)) 
     { 
      pdf.Seek(location, SeekOrigin.Begin); 

      var original = "/CreationDate (D:20110426104115-07'00')"; 
      var desired = new System.Text.ASCIIEncoding().GetBytes(original); 

      pdf.Write(desired, 0, desired.Length); 
      pdf.Flush(); 
     } 
    } 
+0

शानदार, धन्यवाद लेवेलिन, वहाँ भी था मेरी पीडीएफ-जनरेटर (iTextSharp), के द्वारा बनाई गई एक संशोधित तिथि और दस्तावेज़ आईडी उन्हें जोड़ने के लिए किया था भी। – joeriks

5

मुझे एक कमांड लाइन उपकरण, diff-pdf मिला। 2 पीडीएफ की तुलना करता है और अगर वे वही हैं, तो 1 से बाहर निकलने के लिए बाहर निकलें कोड 0 लौटाता है। डाउनलोड + निकालें + इसे अपने पथ में जोड़ें।

डाउनसाइड - इसे diff करने के लिए दोनों पीडीएफ प्रस्तुत करना होगा। अगर वे बड़े हैं, तो perf हिट।

स्वीकृति प्रदान करने वाले (ApprovalTests.Approvers.FileApprover पर भारी आधारित):

public class DiffPdfApprover : IApprovalApprover 
{ 
    public static void Verify(byte[] bytes) 
    { 
     var writer = new ApprovalTests.Writers.BinaryWriter(bytes, "pdf"); 
     var namer = ApprovalTests.Approvals.GetDefaultNamer(); 
     var reporter = ApprovalTests.Approvals.GetReporter(); 

     ApprovalTests.Core.Approvals.Verify(new DiffPdfApprover(writer, namer), reporter); 
    } 

    private DiffPdfApprover(IApprovalWriter writer, IApprovalNamer namer) 
    { 
     this.writer = writer; 
     this.namer = namer; 
    } 

    private readonly IApprovalNamer namer; 
    private readonly IApprovalWriter writer; 
    private string approved; 
    private ApprovalException failure; 
    private string received; 

    public virtual bool Approve() 
    { 
     string basename = string.Format(@"{0}\{1}", namer.SourcePath, namer.Name); 
     approved = Path.GetFullPath(writer.GetApprovalFilename(basename)); 
     received = Path.GetFullPath(writer.GetReceivedFilename(basename)); 
     received = writer.WriteReceivedFile(received); 

     failure = Approve(approved, received); 
     return failure == null; 
    } 

    public static ApprovalException Approve(string approved, string received) 
    { 
     if (!File.Exists(approved)) 
     { 
      return new ApprovalMissingException(received, approved); 
     } 

     var process = new Process(); 
     //settings up parameters for the install process 
     process.StartInfo.FileName = "diff-pdf"; 
     process.StartInfo.Arguments = String.Format("\"{0}\" \"{1}\"", received, approved); 

     process.Start(); 

     process.WaitForExit(); 

     if (process.ExitCode != 0) 
     { 
      return new ApprovalMismatchException(received, approved); 
     } 

     return null; 
    } 

    public void Fail() 
    { 
     throw failure; 
    } 

    public void ReportFailure(IApprovalFailureReporter reporter) 
    { 
     reporter.Report(approved, received); 
    } 

    public void CleanUpAfterSucess(IApprovalFailureReporter reporter) 
    { 
     File.Delete(received); 
     if (reporter is IApprovalReporterWithCleanUp) 
     { 
      ((IApprovalReporterWithCleanUp)reporter).CleanUp(approved, received); 
     } 
    } 
} 

सत्यापित करें करने के लिए:

DiffPdfApprover.Verify(pdfBytes);

diff-पीडीएफ नेत्रहीन के साथ-साथ शो डिफ कर सकते हैं। मैंने इसके लिए एक रिपोर्टर लुढ़का, लेकिन इसका अधिक उपयोग नहीं किया। मुझे लगता है कि अगर शुरुआती रिपोर्ट देव (जहां मैं अभी हूं) के बाद रिग्रेशन हैं तो यह आसान होगा।

public class DiffPdfReporter : GenericDiffReporter 
{ 
    private static readonly string Path = FindFullPath("diff-pdf.exe"); 
    public DiffPdfReporter() : base(Path, 
     GetArgs(), 
     "Please put diff-pdf.exe in your %PATH%. https://github.com/vslavik/diff-pdf. And restart whatever's running the tests. Everything seems to cache the %PATH%.") { } 

    private static string GetArgs() 
    { 
     return "--view \"{0}\" \"{1}\""; 
    } 

    private static string FindFullPath(string programInPath) 
    { 
     foreach (var path in from path in Environment.GetEnvironmentVariable("path").Split(';') 
          select path) 
     { 
      var fullPath = System.IO.Path.Combine(path, programInPath); 
      if (File.Exists(fullPath)) 
       return fullPath; 
     } 
     return null; 
    } 
} 
1

ऐसा लगता है कि यह अब स्वीकृति परीक्षण में बनाया गया है।

उपयोग:

Approvals.VerifyPdfFile(pdfFileLocation); 

देखें the source:

public static void VerifyPdfFile(string pdfFilePath) 
{ 
    PdfScrubber.ScrubPdf(pdfFilePath); 
    Verify(new ExistingFileWriter(pdfFilePath)); 
} 
+0

मैं स्वीकृति परीक्षणों में नया हूं और मैंने जो दस्तावेज देखा है, उससे काफी स्पैस है (विशेष रूप से पीडीएफ के लिए)। क्या आप समझा सकते हैं कि आप एक यूनिट टेस्ट कैसे लिखेंगे जो पीडीएफ को सत्यापित करता है? गीथब पर उदाहरण यह एक फ़ाइल नाम की तरह दिखता है .recieved.pdf बनाया जाना चाहिए था, लेकिन मुझे एक नहीं मिल रहा है। – Ben

+1

@ बेन ने परियोजना में [यूनिट टेस्ट उदाहरण] (https://github.com/approvals/ApprovalTests.Net/blob/master/AprprovalTests.Tests/Pdf/PdfTest.cs) पर एक नज़र डाली है। लेकिन आप सही हैं, ऐसा लगता है कि यह पीडीएफ के लिए एक .received फ़ाइल बनाने के लिए प्रतीत नहीं होता है। मैं खुद को अपने परीक्षणों में बना देता हूं। – Mathew

+0

धन्यवाद @Mathew। यह कम से कम तुलना अब चलाता है, लेकिन यह अभी भी विफल रहता है। यदि मैं अपने दो दस्तावेज़ों की तुलना करता हूं तो मेरा निर्माण सृजन की तारीख अलग है (मुझे लगता है कि पीडीएफएसक्रूबर.क्रूबपीडीएफ (...) विधि द्वारा इसका ख्याल रखा जाता है), और फाइल के निचले भाग के पास कुछ गइड्स भी हैं जो भिन्न हैं – Ben