aboutsummaryrefslogtreecommitdiffstats
path: root/tests/ui-regression/out/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui-regression/out/index.html')
-rw-r--r--tests/ui-regression/out/index.html219
1 files changed, 219 insertions, 0 deletions
diff --git a/tests/ui-regression/out/index.html b/tests/ui-regression/out/index.html
new file mode 100644
index 00000000000..a94dae13445
--- /dev/null
+++ b/tests/ui-regression/out/index.html
@@ -0,0 +1,219 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous" />
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
+ <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
+ <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
+ <title>Nextcloud UI regression tests</title>
+ <style>
+
+ h2 {
+ margin-top: 40px;
+ margin-bottom: 20px;
+ }
+ .error {
+ color: #aa0000;
+ }
+ .success {
+ color: #00aa00;
+ }
+ .success img {
+ display: none;
+ width: 100px;
+ }
+ .success pre {
+ display: none;
+ }
+ .test-result h3 span {
+ width: 40px;
+ }
+ .test-result {
+ padding: 20px;
+ }
+ img {
+ max-width: 33%;
+ padding: 10px;
+ background-color: #eee;
+ margin: 0;
+ }
+ .overview ul {
+ position: fixed;
+ max-width: inherit;
+ margin: 0;
+ padding: 0;
+ }
+ ul li {
+ list-style-type: none;
+ padding: 3px;
+ }
+ ul a:first-child {
+ width: 100%;
+ display: inline-block;
+ }
+ ul span {
+ width: 16px;
+ height: 16px;
+ margin: 1px;
+ display: inline-block;
+ }
+ span.fa-check {
+ color: green;
+ }
+ span.fa-times {
+ color: red;
+ }
+ .navbar a {
+ color: #fff;
+ }
+
+ .fade-enter-active, .fade-leave-active {
+ transition: opacity .5s;
+ }
+ .fade-enter, .fade-leave-to {
+ opacity: 0;
+ }
+ </style>
+</head>
+
+<body>
+<div id="app">
+<nav class="navbar navbar-expand-md navbar-dark bg-dark sticky-top">
+ <div class="container">
+ <a class="navbar-brand" href="#">Nextcloud UI regression test</a>
+ <a class="nav-link" :href="config.repoUrl">{{config.repoUrl}}</a>
+ <a class="nav-link" :href="config.repoUrl + '/pull/' + config.pr">#{{ config.pr }}</span></a>
+ </div>
+</nav>
+
+<main role="main" class="container-fluid">
+ <div class="row">
+ <div class="col-md-2 overview">
+ <ul>
+ <li v-for="suite in config.tests" v-if="result[suite]">
+ <a :href="'#' + suite">{{ suite }}</a>
+ <a v-for="test in result[suite].tests" :href="test.fullTitle | convertToAnchor" :title="test.fullTitle">
+ <span class="fa fa-times" v-if="Object.keys(test.err).length > 0"></span>
+ <span class="fa fa-check" v-else></span>
+ </a>
+ </li>
+ </ul>
+ </div>
+ <div class="col-md-10" id="container">
+ <div v-for="suite in config.tests" v-if="result[suite]">
+ <h2 :id="suite | convertToId">{{ suite }} <span>{{ result[suite].passes.length }}/{{ result[suite].tests.length }}</span></h2>
+ <test-result v-for="test in result[suite].tests" :key="test.fullTitle" :suite="suite" :test="test"></test-result>
+ </div>
+ </div>
+ </div>
+</main>
+</div>
+
+<script type="text/x-template" id="test-result-template">
+ <div class="test-result" :id="test.fullTitle | convertToId">
+ <h3 :class="{ error: Object.keys(test.err).length > 0, success: Object.keys(test.err).length == 0}"
+ v-on:click="hidden === undefined ? hidden = false : hidden = !hidden">
+ <span class="fa fa-times" v-if="Object.keys(test.err).length > 0"></span>
+ <span class="fa fa-check" v-else></span>
+ {{ test.title }}
+ <i v-if="test.duration">{{ test.duration }}ms</i>
+ </h3>
+ <transition name="fade">
+ <div v-if="(hidden === undefined && Object.keys(test.err).length > 0) || hidden === false">
+ <div v-if="Object.keys(test.err).length > 0 && !test.err.failedAction">
+ <a :href="getImagePath('.base')"><img :src="getImagePath('.base')" /></a>
+ <a :href="getImagePath('.diff')"><img :src="getImagePath('.diff')" /></a>
+ <a :href="getImagePath('.change')"><img :src="getImagePath('.change')" /></a>
+ </div>
+ <div v-else>
+ <a :href="getImagePath('')"><img :src="getImagePath('')" /></a>
+ </div>
+ <pre>{{ jsonData }}</pre>
+ </div>
+ </transition>
+ </div>
+</script>
+
+<script>
+
+ Vue.filter('convertToId', function (id) {
+ return id.replace(/\W/g,'_');
+ });
+
+ Vue.filter('convertToAnchor', function (id) {
+ return '#' + id.replace(/\W/g,'_');
+ });
+
+ Vue.component('test-result', {
+ template: '#test-result-template',
+ props: ['test', 'suite'],
+ data: function () {
+ return {
+ hidden: undefined
+ }
+ },
+ computed: {
+ jsonData: function() {
+ return JSON.stringify(this.test, null, 2)
+ }
+ },
+ methods: {
+ getImagePath: function(type) {
+ return this.suite + '/' + this.test.title + type + '.png';
+ }
+ }
+ });
+
+ var app = new Vue({
+ el: '#app',
+ data: {
+ message: 'Hello Vue!',
+ config: {},
+ result: {
+ login: {}
+ },
+ },
+ created: function() {
+ this.fetchConfig();
+ },
+ methods: {
+ fetchConfig: function() {
+ var request = new XMLHttpRequest();
+ request.open('GET', 'config.json', true);
+
+ request.onload = function() {
+ if (request.status >= 200 && request.status < 400) {
+ app.config = JSON.parse(request.responseText);
+ app.config.tests.forEach(function(item, i){
+ app.fetchResults(item);
+ });
+ }
+ };
+
+ request.onerror = function() {
+ };
+
+ request.send();
+ },
+ fetchResults: function(suite) {
+ var request = new XMLHttpRequest();
+ request.open('GET', suite + '.json', true);
+
+ request.onload = function() {
+ if (request.status >= 200 && request.status < 400) {
+ Vue.set(app.result, suite, JSON.parse(request.responseText));
+ }
+ };
+
+ request.onerror = function() {
+ };
+
+ request.send();
+ }
+ }
+ });
+
+</script>
+</body>
+</html>