]> granicus.if.org Git - clang/commitdiff
Add handy script for updating plist FileCheck expected output for
authorTed Kremenek <kremenek@apple.com>
Mon, 10 Sep 2012 06:19:34 +0000 (06:19 +0000)
committerTed Kremenek <kremenek@apple.com>
Mon, 10 Sep 2012 06:19:34 +0000 (06:19 +0000)
analyzer tests.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163486 91177308-0d34-0410-b5e6-96231b3b80d8

utils/analyzer/update_plist_test.pl [new file with mode: 0755]

diff --git a/utils/analyzer/update_plist_test.pl b/utils/analyzer/update_plist_test.pl
new file mode 100755 (executable)
index 0000000..abb74a5
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/perl -w
+use strict;
+require File::Temp;
+use File::Temp ();
+
+die "update_plist_test <test file> <plist file>\n" if ($#ARGV < 1);
+my $testFile = shift @ARGV;
+die "error: cannot read file $testFile\n" if (! -r $testFile);
+my $plistFile = shift @ARGV;
+die "error: cannot read file $plistFile\n" if (! -r $plistFile);
+
+# Create a temp file for the new test.
+my $fh = File::Temp->new();
+my $filename = $fh->filename;
+$fh->unlink_on_destroy(1);
+
+# Copy the existing temp file, skipping the FileCheck comments.
+open (IN, $testFile) or die "cannot open $testFile\n";
+while (<IN>) {
+  next if (/^\/\/ CHECK/);
+  print $fh $_;
+}
+close(IN);
+
+# Copy the plist data, and specially format it.
+open (IN, $plistFile) or die "cannot open $plistFile\n";
+my $firstArray = 1;
+my $first = 1;
+while (<IN>) {
+  # Skip everything not indented.
+  next if (/^[^\s]/);
+  # Skip the first array entry, which is for files.
+  if ($firstArray) {
+    if (/<\/array>/) { $firstArray = 0; }
+       next;
+  }
+  # Format the CHECK lines.
+  if ($first) {
+       print $fh "// CHECK: ";
+       $first = 0;
+  }
+  else {
+       print $fh "// CHECK-NEXT: ";
+  }
+  print $fh $_;
+}
+close (IN);
+close ($fh);
+
+`cp $filename $testFile`;
+print "updated $testFile\n";