Project import generated by Copybara.
GitOrigin-RevId: d9e9e3fb4e31372ec1fb43b178994ca78fa8fe70
diff --git a/static_src/elements/issue-detail/mr-comment-list/mr-comment-list.test.js b/static_src/elements/issue-detail/mr-comment-list/mr-comment-list.test.js
new file mode 100644
index 0000000..548b7a7
--- /dev/null
+++ b/static_src/elements/issue-detail/mr-comment-list/mr-comment-list.test.js
@@ -0,0 +1,108 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {assert} from 'chai';
+import sinon from 'sinon';
+import {MrCommentList} from './mr-comment-list.js';
+
+
+let element;
+
+describe('mr-comment-list', () => {
+ beforeEach(() => {
+ element = document.createElement('mr-comment-list');
+ document.body.appendChild(element);
+ element.comments = [
+ {
+ canFlag: true,
+ localId: 898395,
+ canDelete: true,
+ projectName: 'chromium',
+ commenter: {
+ displayName: 'user@example.com',
+ userId: '12345',
+ },
+ content: 'foo',
+ sequenceNum: 1,
+ timestamp: 1549319989,
+ },
+ {
+ canFlag: true,
+ localId: 898395,
+ canDelete: true,
+ projectName: 'chromium',
+ commenter: {
+ displayName: 'user@example.com',
+ userId: '12345',
+ },
+ content: 'foo',
+ sequenceNum: 2,
+ timestamp: 1549320089,
+ },
+ {
+ canFlag: true,
+ localId: 898395,
+ canDelete: true,
+ projectName: 'chromium',
+ commenter: {
+ displayName: 'user@example.com',
+ userId: '12345',
+ },
+ content: 'foo',
+ sequenceNum: 3,
+ timestamp: 1549320189,
+ },
+ ];
+
+ // Stub RAF to execute immediately.
+ sinon.stub(window, 'requestAnimationFrame').callsFake((func) => func());
+ });
+
+ afterEach(() => {
+ document.body.removeChild(element);
+ window.requestAnimationFrame.restore();
+ });
+
+ it('initializes', () => {
+ assert.instanceOf(element, MrCommentList);
+ });
+
+ it('scrolls to comment', async () => {
+ await element.updateComplete;
+
+ const commentElements = element.shadowRoot.querySelectorAll('mr-comment');
+ const commentElement = commentElements[commentElements.length - 1];
+ sinon.stub(commentElement, 'scrollIntoView');
+
+ element.focusId = 'c3';
+
+ await element.updateComplete;
+
+ assert.isTrue(element._hideComments);
+ assert.isTrue(commentElement.scrollIntoView.calledOnce);
+
+ commentElement.scrollIntoView.restore();
+ });
+
+ it('scrolls to hidden comment', async () => {
+ await element.updateComplete;
+
+ element.focusId = 'c1';
+
+ await element.updateComplete;
+
+ assert.isFalse(element._hideComments);
+ // TODO: Check that the comment has been scrolled into view.
+ });
+
+ it('doesnt scroll to unknown comment', async () => {
+ await element.updateComplete;
+
+ element.focusId = 'c100';
+
+ await element.updateComplete;
+
+ assert.isTrue(element._hideComments);
+ });
+});