Skip to content

Commit

Permalink
Merge 5a5856e into 1ccd3ee
Browse files Browse the repository at this point in the history
  • Loading branch information
benjyw committed Mar 21, 2015
2 parents 1ccd3ee + 5a5856e commit f1be035
Show file tree
Hide file tree
Showing 5 changed files with 337 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ def representative(self, src, classes):
for fqcn in classes:
if fqcn.rsplit('.', 1)[-1] == primary_class_name:
# For ease of debugging, pick the class with the same name as the source file, if it exists.
return primary_class_name
return fqcn
# Pick the class that sorts lowest in dictionary order.
return min(classes)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import contextlib
import os
import StringIO
import tarfile
import unittest

Expand All @@ -18,6 +19,7 @@

class ZincAnalysisTest(unittest.TestCase):
def setUp(self):
self.maxDiff = None
self.total_time = 0

def _time(self, work, msg):
Expand All @@ -28,6 +30,59 @@ def _time(self, work, msg):
self.total_time += elapsed
return ret

# Test a simple example that is non-trivial, but still small enough to verify manually.
def test_split_merge(self):
def get_test_analysis_path(name):
return os.path.join(os.path.dirname(__file__), 'testdata', name)

def get_analysis_text(name):
with open(get_test_analysis_path(name), 'r') as fp:
return fp.read()

def parse_analyis(name):
return ZincAnalysisParser().parse_from_path(get_test_analysis_path(name))

def analysis_to_string(analysis):
buf = StringIO.StringIO()
analysis.write(buf)
return buf.getvalue()

full_analysis = parse_analyis('simple_analysis')

analysis_splits = full_analysis.split([
['/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala'],
['/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala'],
])
self.assertEquals(len(analysis_splits), 2)

def compare_split(i):
expected_filename = 'simple_analysis_split{0}'.format(i)

# First compare as objects. This verifies that __eq__ works, but is weaker than the
# text comparison because in some cases there can be small text differences that don't
# affect logical equivalence.
expected_analyis = parse_analyis(expected_filename)
self.assertTrue(expected_analyis == analysis_splits[i])

# Then compare as text. In this simple case we expect them to be byte-for-byte equal.
expected = get_analysis_text(expected_filename)
actual = analysis_to_string(analysis_splits[i])
self.assertMultiLineEqual(expected, actual)

compare_split(0)
compare_split(1)

# Now merge and check that we get what we started with.
merged_analysis = ZincAnalysis.merge(analysis_splits)
# Check that they compare as objects.
self.assertTrue(full_analysis == merged_analysis)
# Check that they compare as text.
expected = get_analysis_text('simple_analysis')
actual = analysis_to_string(merged_analysis)
self.assertMultiLineEqual(expected, actual)


# Test on large-scale analysis files.
def test_analysis_files(self):
parser = ZincAnalysisParser()

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
format version: 5
output mode:
1 items
0 -> single
output directories:
1 items
output dir -> /src/pants/.pants.d/compile/jvm/scala/classes
compile options:
5 items
0 -> -encoding
1 -> UTF-8
2 -> -g:vars
3 -> -deprecation
4 -> -unchecked
javac options:
0 items
compiler version:
1 items
0 -> 2.10.4
compile order:
1 items
0 -> Mixed
name hashing:
1 items
0 -> false
products:
6 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe$$anonfun$main$1.class
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe$.class
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe.class
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome$$anonfun$apply$1.class
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome$.class
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome.class
binary dependencies:
5 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/compile/jvm/java/classes/com/pants/examples/hello/greet/Greeting.class
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar
direct source dependencies:
1 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala
direct external dependencies:
0 items
public inherited source dependencies:
0 items
public inherited external dependencies:
0 items
member reference internal dependencies:
0 items
member reference external dependencies:
0 items
inheritance internal dependencies:
0 items
inheritance external dependencies:
0 items
class names:
6 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> com.pants.example.hello.exe.Exe
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> com.pants.example.hello.exe.Exe$
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> com.pants.example.hello.exe.Exe$$anonfun$main$1
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> com.pants.example.hello.welcome.Welcome
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> com.pants.example.hello.welcome.Welcome$
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> com.pants.example.hello.welcome.Welcome$$anonfun$apply$1
used names:
0 items
product stamps:
6 items
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe$$anonfun$main$1.class -> lastModified(1426908125000)
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe$.class -> lastModified(1426908125000)
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe.class -> lastModified(1426908124000)
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome$$anonfun$apply$1.class -> lastModified(1426908125000)
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome$.class -> lastModified(1426908125000)
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome.class -> lastModified(1426908125000)
source stamps:
2 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> hash(7c960d05aac5b607c6e0619bb6b81b6ca580550e)
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> hash(2245c9e68457b389bac32ccaa0dca5ddadd8f1da)
binary stamps:
3 items
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar -> lastModified(1422417173000)
/src/pants/.pants.d/compile/jvm/java/classes/com/pants/examples/hello/greet/Greeting.class -> lastModified(1426908117000)
/src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar -> lastModified(1395179187000)
class names:
3 items
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar -> java.lang.Object
/src/pants/.pants.d/compile/jvm/java/classes/com/pants/examples/hello/greet/Greeting.class -> com.pants.examples.hello.greet.Greeting
/src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar -> scala.collection.TraversableLike
internal apis:
2 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala ->
FakeApiForExe
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala ->
FakeApiForWelcome
external apis:
0 items
source infos:
2 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala ->
FakeSourceInfoForExe
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala ->
FakeSourceInfoForWelcome
compilations:
0 items
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
format version: 5
output mode:
1 items
0 -> single
output directories:
1 items
output dir -> /src/pants/.pants.d/compile/jvm/scala/classes
compile options:
5 items
0 -> -encoding
1 -> UTF-8
2 -> -g:vars
3 -> -deprecation
4 -> -unchecked
javac options:
0 items
compiler version:
1 items
0 -> 2.10.4
compile order:
1 items
0 -> Mixed
name hashing:
1 items
0 -> false
products:
3 items
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome$$anonfun$apply$1.class
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome$.class
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome.class
binary dependencies:
3 items
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/compile/jvm/java/classes/com/pants/examples/hello/greet/Greeting.class
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> /src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar
direct source dependencies:
0 items
direct external dependencies:
0 items
public inherited source dependencies:
0 items
public inherited external dependencies:
0 items
member reference internal dependencies:
0 items
member reference external dependencies:
0 items
inheritance internal dependencies:
0 items
inheritance external dependencies:
0 items
class names:
3 items
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> com.pants.example.hello.welcome.Welcome
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> com.pants.example.hello.welcome.Welcome$
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> com.pants.example.hello.welcome.Welcome$$anonfun$apply$1
used names:
0 items
product stamps:
3 items
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome$$anonfun$apply$1.class -> lastModified(1426908125000)
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome$.class -> lastModified(1426908125000)
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/welcome/Welcome.class -> lastModified(1426908125000)
source stamps:
1 items
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala -> hash(2245c9e68457b389bac32ccaa0dca5ddadd8f1da)
binary stamps:
3 items
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar -> lastModified(1422417173000)
/src/pants/.pants.d/compile/jvm/java/classes/com/pants/examples/hello/greet/Greeting.class -> lastModified(1426908117000)
/src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar -> lastModified(1395179187000)
class names:
3 items
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar -> java.lang.Object
/src/pants/.pants.d/compile/jvm/java/classes/com/pants/examples/hello/greet/Greeting.class -> com.pants.examples.hello.greet.Greeting
/src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar -> scala.collection.TraversableLike
internal apis:
1 items
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala ->
FakeApiForWelcome
external apis:
0 items
source infos:
1 items
/src/pants/examples/src/scala/com/pants/example/hello/welcome/Welcome.scala ->
FakeSourceInfoForWelcome
compilations:
0 items
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
format version: 5
output mode:
1 items
0 -> single
output directories:
1 items
output dir -> /src/pants/.pants.d/compile/jvm/scala/classes
compile options:
5 items
0 -> -encoding
1 -> UTF-8
2 -> -g:vars
3 -> -deprecation
4 -> -unchecked
javac options:
0 items
compiler version:
1 items
0 -> 2.10.4
compile order:
1 items
0 -> Mixed
name hashing:
1 items
0 -> false
products:
3 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe$$anonfun$main$1.class
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe$.class
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe.class
binary dependencies:
2 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> /src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar
direct source dependencies:
0 items
direct external dependencies:
1 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> com.pants.example.hello.welcome.Welcome
public inherited source dependencies:
0 items
public inherited external dependencies:
0 items
member reference internal dependencies:
0 items
member reference external dependencies:
0 items
inheritance internal dependencies:
0 items
inheritance external dependencies:
0 items
class names:
3 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> com.pants.example.hello.exe.Exe
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> com.pants.example.hello.exe.Exe$
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> com.pants.example.hello.exe.Exe$$anonfun$main$1
used names:
0 items
product stamps:
3 items
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe$$anonfun$main$1.class -> lastModified(1426908125000)
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe$.class -> lastModified(1426908125000)
/src/pants/.pants.d/compile/jvm/scala/classes/com/pants/example/hello/exe/Exe.class -> lastModified(1426908124000)
source stamps:
1 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala -> hash(7c960d05aac5b607c6e0619bb6b81b6ca580550e)
binary stamps:
2 items
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar -> lastModified(1422417173000)
/src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar -> lastModified(1395179187000)
class names:
2 items
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar -> java.lang.Object
/src/pants/.pants.d/ivy/jars/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar -> scala.collection.TraversableLike
internal apis:
1 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala ->
FakeApiForExe
external apis:
1 items
com.pants.example.hello.welcome.Welcome ->
FakeApiForWelcome
source infos:
1 items
/src/pants/examples/src/scala/com/pants/example/hello/exe/Exe.scala ->
FakeSourceInfoForExe
compilations:
0 items

0 comments on commit f1be035

Please sign in to comment.