1#!/usr/bin/perl -w
2#
3# Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org)
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8# 1.  Redistributions of source code must retain the above copyright
9#     notice, this list of conditions and the following disclaimer.
10# 2.  Redistributions in binary form must reproduce the above copyright
11#     notice, this list of conditions and the following disclaimer in the
12#     documentation and/or other materials provided with the distribution.
13#
14# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
15# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
25# Unit tests of prepareParsedPatch().
26
27use strict;
28use warnings;
29
30use Test::More;
31use VCSUtils;
32
33my $diffHashRef1 = { # not a copy, no source revision
34    copiedFromPath => undef,
35    indexPath => "indexPath1",
36    sourceRevision => undef,
37    svnConvertedText => "diff1",
38};
39my $diffHashRef2 = { # not a copy, has source revision
40    copiedFromPath => undef,
41    indexPath => "indexPath2",
42    sourceRevision => 20,
43    svnConvertedText => "diff2",
44};
45my $diffHashRef3 = { # a copy (copies always have source revision)
46    copiedFromPath => "sourcePath3",
47    indexPath => "indexPath2", # Deliberately choosing same as $diffHashRef2
48    sourceRevision => 3,
49    svnConvertedText => "diff3",
50};
51
52my @testCases = (
53{
54    # New test
55    testName => "zero diffs: empty array",
56    diffHashRefsInput => [],
57    expected => {
58        copyDiffHashRefs => [],
59        nonCopyDiffHashRefs => [],
60        sourceRevisionHash => {},
61    },
62},
63{
64    # New test
65    testName => "one diff: non-copy, no revision",
66    diffHashRefsInput => [$diffHashRef1],
67    expected => {
68        copyDiffHashRefs => [],
69        nonCopyDiffHashRefs => [$diffHashRef1],
70        sourceRevisionHash => {},
71    },
72},
73{
74    # New test
75    testName => "one diff: non-copy, has revision",
76    diffHashRefsInput => [$diffHashRef2],
77    expected => {
78        copyDiffHashRefs => [],
79        nonCopyDiffHashRefs => [$diffHashRef2],
80        sourceRevisionHash => {
81            "indexPath2" => 20,
82        }
83    },
84},
85{
86    # New test
87    testName => "one diff: copy (has revision)",
88    diffHashRefsInput => [$diffHashRef3],
89    expected => {
90        copyDiffHashRefs => [$diffHashRef3],
91        nonCopyDiffHashRefs => [],
92        sourceRevisionHash => {
93            "sourcePath3" => 3,
94        }
95    },
96},
97{
98    # New test
99    testName => "two diffs: two non-copies",
100    diffHashRefsInput => [$diffHashRef1, $diffHashRef2],
101    expected => {
102        copyDiffHashRefs => [],
103        nonCopyDiffHashRefs => [$diffHashRef1, $diffHashRef2],
104        sourceRevisionHash => {
105            "indexPath2" => 20,
106        }
107    },
108},
109{
110    # New test
111    testName => "two diffs: non-copy and copy",
112    diffHashRefsInput => [$diffHashRef2, $diffHashRef3],
113    expected => {
114        copyDiffHashRefs => [$diffHashRef3],
115        nonCopyDiffHashRefs => [$diffHashRef2],
116        sourceRevisionHash => {
117            "sourcePath3" => 3,
118            "indexPath2" => 20,
119        }
120    },
121},
122);
123
124my $testCasesCount = @testCases;
125plan(tests => $testCasesCount);
126
127foreach my $testCase (@testCases) {
128    my $testName = $testCase->{testName};
129    my @diffHashRefs = @{$testCase->{diffHashRefsInput}};
130    my $expected = $testCase->{expected};
131
132    my $got = prepareParsedPatch(0, @diffHashRefs);
133
134    is_deeply($got, $expected, $testName);
135}
136
137