faviKonSnoop/src/test/kotlin/snoopers/AppManifestSnooperTest.kt
author Da Risk <da_risk@geekorum.com>
Wed, 11 Sep 2019 14:50:08 -0700
changeset 455 c743a2f2ca8a
parent 454 6398d0a6def5
child 611 91b8d76c03cd
permissions -rw-r--r--
faviKonSnoop: switch input to okio source
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     1
/*
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     2
 * Geekttrss is a RSS feed reader application on the Android Platform.
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     3
 *
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     4
 * Copyright (C) 2017-2019 by Frederic-Charles Barthelery.
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     5
 *
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     6
 * This file is part of Geekttrss.
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     7
 *
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     8
 * Geekttrss is free software: you can redistribute it and/or modify
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     9
 * it under the terms of the GNU General Public License as published by
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    10
 * the Free Software Foundation, either version 3 of the License, or
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    11
 * (at your option) any later version.
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    12
 *
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    13
 * Geekttrss is distributed in the hope that it will be useful,
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    16
 * GNU General Public License for more details.
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    17
 *
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    18
 * You should have received a copy of the GNU General Public License
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    19
 * along with Geekttrss.  If not, see <http://www.gnu.org/licenses/>.
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    20
 */
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    21
package com.geekorum.favikonsnoop.snoopers
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    22
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    23
import com.geekorum.favikonsnoop.FaviconInfo
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
    24
import com.geekorum.favikonsnoop.source
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    25
import com.google.common.truth.Truth.assertThat
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    26
import io.mockk.every
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    27
import io.mockk.mockk
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    28
import io.mockk.slot
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    29
import okhttp3.HttpUrl.Companion.toHttpUrl
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    30
import okhttp3.Protocol.HTTP_1_1
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    31
import okhttp3.Request
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    32
import okhttp3.Response
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    33
import okhttp3.ResponseBody.Companion.toResponseBody
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    34
import org.junit.Test
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    35
import kotlin.test.BeforeTest
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    36
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    37
private val SIMPLE_MANIFEST = """
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    38
{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    39
  "name": "Donate App",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    40
  "description": "This app helps you donate to worthy causes.",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    41
  "icons": [{
454
6398d0a6def5 faviKonSnoop: fix issue when icons don't define sizes attribute
Da Risk <da_risk@geekorum.com>
parents: 453
diff changeset
    42
    "src": "images/icon.png"
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    43
  }]
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    44
}
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    45
""".trimIndent()
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    46
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    47
private val TYPICAL_MANIFEST = """
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    48
{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    49
  "lang": "en",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    50
  "dir": "ltr",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    51
  "name": "Super Racer 3000",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    52
  "description": "The ultimate futuristic racing game from the future!",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    53
  "short_name": "Racer3K",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    54
  "icons": [{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    55
    "src": "icon/lowres.webp",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    56
    "sizes": "64x64",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    57
    "type": "image/webp"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    58
  },{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    59
    "src": "icon/lowres.png",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    60
    "sizes": "64x64"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    61
  }, {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    62
    "src": "icon/hd_hi",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    63
    "sizes": "128x128"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    64
  }],
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    65
  "scope": "/racer/",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    66
  "start_url": "/racer/start.html",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    67
  "display": "fullscreen",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    68
  "orientation": "landscape",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    69
  "theme_color": "aliceblue",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    70
  "background_color": "red",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    71
  "serviceworker": {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    72
    "src": "sw.js",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    73
    "scope": "/racer/",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    74
    "update_via_cache": "none"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    75
  },
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    76
  "screenshots": [{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    77
    "src": "screenshots/in-game-1x.jpg",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    78
    "sizes": "640x480",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    79
    "type": "image/jpeg"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    80
  },{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    81
    "src": "screenshots/in-game-2x.jpg",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    82
    "sizes": "1280x920",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    83
    "type": "image/jpeg"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    84
  }]
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    85
}    
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    86
""".trimIndent()
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    87
454
6398d0a6def5 faviKonSnoop: fix issue when icons don't define sizes attribute
Da Risk <da_risk@geekorum.com>
parents: 453
diff changeset
    88
private const val INVALID_MANIFEST = "{}"
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    89
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    90
private val INVALID_HTML =
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    91
    """fw""".trimIndent()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    92
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    93
private val NO_MANIFEST_HTML = """
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    94
    <html lang="en">
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    95
     <head>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    96
      <title>lsForums — Inbox</title>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    97
      <link rel=icon href=favicon.png sizes="16x16" type="image/png">
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    98
      <script src=lsforums.js></script>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    99
      <meta name=application-name content="lsForums">
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   100
     </head>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   101
    </html>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   102
""".trimIndent()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   103
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   104
private val WITH_MANIFEST_HTML = """
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   105
    <html lang="en">
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   106
     <head>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   107
      <title>lsForums — Inbox</title>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   108
      <link rel="manifest" href=/static/manifest.json >
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   109
      <link rel=icon href=favicon.png sizes="16x16" type="image/png">
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   110
     </head>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   111
    </html>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   112
""".trimIndent()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   113
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   114
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   115
class AppManifestSnooperTest {
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   116
    lateinit var subject: AppManifestSnooper
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   117
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   118
    @BeforeTest
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   119
    fun setUp() {
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   120
        subject = AppManifestSnooper()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   121
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   122
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   123
    @Test
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   124
    fun testInvalidHtmlReturnsEmpty() {
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
   125
        val result = INVALID_HTML.source().use {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   126
            subject.snoop("http://exemple.com", it)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   127
        }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   128
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   129
        assertThat(result).isEmpty()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   130
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   131
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   132
    @Test
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   133
    fun testHtmlWithoutManifestReturnsEmpty() {
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
   134
        val result = NO_MANIFEST_HTML.source().use {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   135
            subject.snoop("http://exemple.com", it)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   136
        }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   137
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   138
        assertThat(result).isEmpty()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   139
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   140
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   141
    @Test
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   142
    fun testHtmlWithInvalidManifestReturnsEmpty() {
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   143
        subject.okHttpClient = mockk()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   144
        val requestSlot = slot<Request>()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   145
        every { subject.okHttpClient.newCall(capture(requestSlot)).execute() } answers {
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   146
            Response.Builder()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   147
                .code(200)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   148
                .request(requestSlot.captured)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   149
                .protocol(HTTP_1_1)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   150
                .message("ok")
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   151
                .body(INVALID_MANIFEST.toResponseBody())
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   152
                .build()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   153
        }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   154
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
   155
        val result = WITH_MANIFEST_HTML.source().use {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   156
            subject.snoop("http://exemple.com", it)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   157
        }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   158
        assertThat(requestSlot.captured.url).isEqualTo("http://exemple.com/static/manifest.json".toHttpUrl())
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   159
        assertThat(result).isEmpty()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   160
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   161
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   162
    @Test
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   163
    fun testHtmlWithSimpleManifestReturnsSimpleResult() {
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   164
        subject.okHttpClient = mockk()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   165
        val requestSlot = slot<Request>()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   166
        every { subject.okHttpClient.newCall(capture(requestSlot)).execute() } answers {
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   167
            Response.Builder()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   168
                .code(200)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   169
                .request(requestSlot.captured)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   170
                .protocol(HTTP_1_1)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   171
                .message("ok")
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   172
                .body(SIMPLE_MANIFEST.toResponseBody())
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   173
                .build()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   174
        }
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
   175
        val result = WITH_MANIFEST_HTML.source().use {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   176
            subject.snoop("http://exemple.com", it)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   177
        }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   178
        assertThat(requestSlot.captured.url).isEqualTo("http://exemple.com/static/manifest.json".toHttpUrl())
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   179
        assertThat(result).containsExactly(
454
6398d0a6def5 faviKonSnoop: fix issue when icons don't define sizes attribute
Da Risk <da_risk@geekorum.com>
parents: 453
diff changeset
   180
            FaviconInfo("http://exemple.com/static/images/icon.png")
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   181
        )
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   182
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   183
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   184
}
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   185
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   186
class WebAppManifestParserTest {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   187
    private lateinit var subject: WebAppManifestParser
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   188
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   189
    @BeforeTest
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   190
    fun setUp() {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   191
        subject = WebAppManifestParser()
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   192
    }
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   193
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   194
    @Test
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   195
    fun parseSimpleWebAppManifest() {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   196
        val result = subject.parseManifest(SIMPLE_MANIFEST)
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   197
        assertThat(result!!.icons).containsExactly(
454
6398d0a6def5 faviKonSnoop: fix issue when icons don't define sizes attribute
Da Risk <da_risk@geekorum.com>
parents: 453
diff changeset
   198
            ImageResource("images/icon.png")
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   199
        )
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   200
    }
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   201
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   202
    @Test
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   203
    fun parseTypicalWebAppManifest() {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   204
        val result = subject.parseManifest(TYPICAL_MANIFEST)
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   205
        assertThat(result!!.icons).containsExactly(
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   206
            ImageResource("icon/lowres.webp",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   207
                sizes = "64x64",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   208
                type = "image/webp"),
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   209
            ImageResource("icon/lowres.png",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   210
                sizes = "64x64"),
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   211
            ImageResource("icon/hd_hi",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   212
                sizes = "128x128")
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   213
        )
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   214
    }
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   215
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   216
    @Test
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   217
    fun parseInvalidManifest() {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   218
        val result = subject.parseManifest(INVALID_MANIFEST)
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   219
        assertThat(result).isNull()
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   220
    }
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   221
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   222
}