<!--
Copyright (C) 2016 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.
-->
<!-- Polymer included for the html import polyfill. -->
<script src="../../bower_components/webcomponentsjs/webcomponents.min.js"></script>
<script src="../../bower_components/web-component-tester/browser.js"></script>
<link rel="import" href="../../test/common-test-setup.html"/>
<title>gr-path-list-behavior</title>

<link rel="import" href="gr-path-list-behavior.html">

<script>
  suite('gr-path-list-behavior tests', () => {
    test('special sort', () => {
      const sort = Gerrit.PathListBehavior.specialFilePathCompare;
      const testFiles = [
        '/a.h',
        '/MERGE_LIST',
        '/a.cpp',
        '/COMMIT_MSG',
        '/asdasd',
        '/mrPeanutbutter.py',
      ];
      assert.deepEqual(
          testFiles.sort(sort),
          [
            '/COMMIT_MSG',
            '/MERGE_LIST',
            '/a.h',
            '/a.cpp',
            '/asdasd',
            '/mrPeanutbutter.py',
          ]);
    });
  });
</script>
