blob: b3a56d8e37fd818ba3f4e0a0641e9ac741895aaf [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (C) 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
<title>gr-diff</title>
<script src="../../bower_components/webcomponentsjs/webcomponents.min.js"></script>
<script src="../../bower_components/web-component-tester/browser.js"></script>
<script src="../scripts/changes.js"></script>
<script src="../scripts/fake-app.js"></script>
<script src="../scripts/util.js"></script>
<link rel="import" href="../../bower_components/iron-test-helpers/iron-test-helpers.html">
<link rel="import" href="../elements/gr-diff.html">
<test-fixture id="basic">
<template>
<gr-diff auto></gr-diff>
</template>
</test-fixture>
<script>
suite('gr-diff tests', function() {
var element;
var server;
setup(function() {
element = fixture('basic');
element.changeNum = 42;
element.path = 'sieve.go';
server = sinon.fakeServer.create();
server.respondWith(
'GET',
/\/changes\/42\/revisions\/(1|2)\/files\/sieve\.go\/diff(.*)/,
[
200,
{ 'Content-Type': 'application/json' },
')]}\'\n' +
JSON.stringify({
change_type: 'MODIFIED',
content: [
{ab: ['doin some codez and stuffs']},
]
}),
]
);
server.respondWith(
'GET',
'/changes/42/revisions/1/comments',
[
200,
{ 'Content-Type': 'application/json' },
')]}\'\n' +
JSON.stringify({
'/COMMIT_MSG': [],
'sieve.go': [
{
author: {
_account_id: 1000000,
name: 'Andrew Bonventre',
email: 'andybons@gmail.com',
},
id: '9af53d3f_5f2b8b82',
line: 1,
message: 'this isn’t quite right',
updated: '2015-12-10 02:50:21.627000000',
},
{
author: {
_account_id: 1000000,
name: 'Andrew Bonventre',
email: 'andybons@gmail.com',
},
id: '9af53d3f_bf1cd76b',
line: 1,
side: 'PARENT',
message: 'how did this work in the first place?',
updated: '2015-12-10 00:08:42.255000000',
},
],
}),
]
);
server.respondWith(
'GET',
'/changes/42/revisions/2/comments',
[
200,
{ 'Content-Type': 'application/json' },
')]}\'\n' +
JSON.stringify({
'/COMMIT_MSG': [],
'sieve.go': [
{
author: {
_account_id: 1010008,
name: 'Dave Borowitz',
email: 'dborowitz@google.com',
},
id: '001a2067_f30f3048',
line: 17,
message: 'What on earth are you thinking, here?',
updated: '2015-12-12 02:51:37.973000000',
},
{
author: {
_account_id: 1010008,
name: 'Dave Borowitz',
email: 'dborowitz@google.com',
},
id: '001a2067_f6b1b1c8',
in_reply_to: '9af53d3f_bf1cd76b',
line: 1,
side: 'PARENT',
message: 'Yeah not sure how this worked either?',
updated: '2015-12-12 02:51:37.973000000',
},
{
author: {
_account_id: 1000000,
name: 'Andrew Bonventre',
email: 'andybons@gmail.com',
},
id: 'a0407443_30dfe8fb',
in_reply_to: '001a2067_f30f3048',
line: 17,
message: '¯\\_(ツ)_/¯',
updated: '2015-12-12 18:50:21.627000000',
},
],
}),
]
);
});
teardown(function() {
server.restore();
});
test('comments with parent', function(done) {
element.patchRange = {
basePatchNum: 'PARENT',
patchNum: 1,
};
server.respond();
element._diffRequestsPromise.then(function() {
assert.equal(element._baseComments.length, 1);
assert.equal(element._comments.length, 1);
assert.equal(element._baseDrafts.length, 0);
assert.equal(element._drafts.length, 0);
done();
});
});
test('comments between two patches', function(done) {
element.patchRange = {
basePatchNum: 1,
patchNum: 2,
};
server.respond();
element._diffRequestsPromise.then(function() {
assert.equal(element._baseComments.length, 1);
assert.equal(element._comments.length, 2);
assert.equal(element._baseDrafts.length, 0);
assert.equal(element._drafts.length, 0);
done();
});
});
test('intraline normalization', function() {
// The content and highlights are in the format returned by the Gerrit
// REST API.
var content = [
' <section class="summary">',
' <gr-linked-text content="' +
'[[_computeCurrentRevisionMessage(change)]]"></gr-linked-text>',
' </section>',
];
var highlights = [
[31, 34], [42, 26]
];
var results = element._normalizeIntralineHighlights(content, highlights);
assert.deepEqual(results, [
{
contentIndex: 0,
startIndex: 31,
},
{
contentIndex: 1,
startIndex: 0,
endIndex: 33,
},
{
contentIndex: 1,
startIndex: 75,
},
{
contentIndex: 2,
startIndex: 0,
endIndex: 6,
}
]);
content = [
' this._path = value.path;',
'',
' // When navigating away from the page, there is a possibility that the',
' // patch number is no longer a part of the URL (say when navigating to',
' // the top-level change info view) and therefore undefined in `params`.',
' if (!this._patchRange.patchNum) {',
];
highlights = [
[14, 17],
[11, 70],
[12, 67],
[12, 67],
[14, 29],
];
results = element._normalizeIntralineHighlights(content, highlights);
assert.deepEqual(results, [
{
contentIndex: 0,
startIndex: 14,
endIndex: 31,
},
{
contentIndex: 2,
startIndex: 8,
endIndex: 78,
},
{
contentIndex: 3,
startIndex: 11,
endIndex: 78,
},
{
contentIndex: 4,
startIndex: 11,
endIndex: 78,
},
{
contentIndex: 5,
startIndex: 12,
endIndex: 41,
}
]);
});
});
</script>