faviKonSnoop/src/test/kotlin/snoopers/AppManifestSnooperTest.kt
author Da Risk <da_risk@geekorum.com>
Wed, 03 Jan 2024 15:26:40 -0400
changeset 1174 731f6ee517b6
parent 1164 c4a64501229b
child 1370 13e39ef920a8
permissions -rw-r--r--
update license headers
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
 *
1174
731f6ee517b6 update license headers
Da Risk <da_risk@geekorum.com>
parents: 1164
diff changeset
     4
 * Copyright (C) 2017-2024 by Frederic-Charles Barthelery.
452
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
1053
ec1f5c54ff92 faviKonSnoop: use a suspend await() on okHttp Call
Da Risk <da_risk@geekorum.com>
parents: 1052
diff changeset
    24
import com.geekorum.favikonsnoop.await
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
    25
import com.geekorum.favikonsnoop.source
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    26
import com.google.common.truth.Truth.assertThat
1053
ec1f5c54ff92 faviKonSnoop: use a suspend await() on okHttp Call
Da Risk <da_risk@geekorum.com>
parents: 1052
diff changeset
    27
import io.mockk.*
1052
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    28
import kotlinx.coroutines.test.StandardTestDispatcher
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    29
import kotlinx.coroutines.test.TestScope
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    30
import kotlinx.coroutines.test.runTest
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    31
import okhttp3.HttpUrl.Companion.toHttpUrl
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    32
import okhttp3.Protocol.HTTP_1_1
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    33
import okhttp3.Request
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    34
import okhttp3.Response
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    35
import okhttp3.ResponseBody.Companion.toResponseBody
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    36
import org.junit.Test
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    37
import kotlin.test.BeforeTest
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
private val SIMPLE_MANIFEST = """
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    40
{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    41
  "name": "Donate App",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    42
  "description": "This app helps you donate to worthy causes.",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    43
  "icons": [{
454
6398d0a6def5 faviKonSnoop: fix issue when icons don't define sizes attribute
Da Risk <da_risk@geekorum.com>
parents: 453
diff changeset
    44
    "src": "images/icon.png"
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    45
  }]
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
""".trimIndent()
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
private val TYPICAL_MANIFEST = """
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    50
{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    51
  "lang": "en",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    52
  "dir": "ltr",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    53
  "name": "Super Racer 3000",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    54
  "description": "The ultimate futuristic racing game from the future!",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    55
  "short_name": "Racer3K",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    56
  "icons": [{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    57
    "src": "icon/lowres.webp",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    58
    "sizes": "64x64",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    59
    "type": "image/webp"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    60
  },{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    61
    "src": "icon/lowres.png",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    62
    "sizes": "64x64"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    63
  }, {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    64
    "src": "icon/hd_hi",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    65
    "sizes": "128x128"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    66
  }],
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    67
  "scope": "/racer/",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    68
  "start_url": "/racer/start.html",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    69
  "display": "fullscreen",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    70
  "orientation": "landscape",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    71
  "theme_color": "aliceblue",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    72
  "background_color": "red",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    73
  "serviceworker": {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    74
    "src": "sw.js",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    75
    "scope": "/racer/",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    76
    "update_via_cache": "none"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    77
  },
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    78
  "screenshots": [{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    79
    "src": "screenshots/in-game-1x.jpg",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    80
    "sizes": "640x480",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    81
    "type": "image/jpeg"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    82
  },{
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    83
    "src": "screenshots/in-game-2x.jpg",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    84
    "sizes": "1280x920",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    85
    "type": "image/jpeg"
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    86
  }]
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    87
}    
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    88
""".trimIndent()
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    89
454
6398d0a6def5 faviKonSnoop: fix issue when icons don't define sizes attribute
Da Risk <da_risk@geekorum.com>
parents: 453
diff changeset
    90
private const val INVALID_MANIFEST = "{}"
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    91
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    92
private val INVALID_HTML =
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    93
    """fw""".trimIndent()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    94
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    95
private val NO_MANIFEST_HTML = """
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    96
    <html lang="en">
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    97
     <head>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    98
      <title>lsForums — Inbox</title>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
    99
      <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
   100
      <script src=lsforums.js></script>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   101
      <meta name=application-name content="lsForums">
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   102
     </head>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   103
    </html>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   104
""".trimIndent()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   105
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   106
private val WITH_MANIFEST_HTML = """
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   107
    <html lang="en">
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   108
     <head>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   109
      <title>lsForums — Inbox</title>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   110
      <link rel="manifest" href=/static/manifest.json >
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   111
      <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
   112
     </head>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   113
    </html>
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   114
""".trimIndent()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   115
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   116
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   117
class AppManifestSnooperTest {
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   118
    lateinit var subject: AppManifestSnooper
1052
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   119
    private val testDispatcher = StandardTestDispatcher()
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   120
    private val testScope = TestScope(testDispatcher)
453
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
    @BeforeTest
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   123
    fun setUp() {
1052
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   124
        subject = AppManifestSnooper(testDispatcher)
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   125
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   126
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   127
    @Test
1052
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   128
    fun testInvalidHtmlReturnsEmpty() = testScope.runTest {
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
   129
        val result = INVALID_HTML.source().use {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   130
            subject.snoop("http://exemple.com", it)
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
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   133
        assertThat(result).isEmpty()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   134
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   135
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   136
    @Test
1052
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   137
    fun testHtmlWithoutManifestReturnsEmpty() = testScope.runTest {
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
   138
        val result = NO_MANIFEST_HTML.source().use {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   139
            subject.snoop("http://exemple.com", it)
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
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   142
        assertThat(result).isEmpty()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   143
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   144
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   145
    @Test
1052
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   146
    fun testHtmlWithInvalidManifestReturnsEmpty() = testScope.runTest {
1053
ec1f5c54ff92 faviKonSnoop: use a suspend await() on okHttp Call
Da Risk <da_risk@geekorum.com>
parents: 1052
diff changeset
   147
        mockkStatic("com.geekorum.favikonsnoop.FaviKonSnoopKt")
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   148
        subject.okHttpClient = mockk()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   149
        val requestSlot = slot<Request>()
1053
ec1f5c54ff92 faviKonSnoop: use a suspend await() on okHttp Call
Da Risk <da_risk@geekorum.com>
parents: 1052
diff changeset
   150
ec1f5c54ff92 faviKonSnoop: use a suspend await() on okHttp Call
Da Risk <da_risk@geekorum.com>
parents: 1052
diff changeset
   151
        coEvery { subject.okHttpClient.newCall(capture(requestSlot)).await() } answers {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   152
            Response.Builder()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   153
                .code(200)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   154
                .request(requestSlot.captured)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   155
                .protocol(HTTP_1_1)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   156
                .message("ok")
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   157
                .body(INVALID_MANIFEST.toResponseBody())
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   158
                .build()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   159
        }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   160
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
   161
        val result = WITH_MANIFEST_HTML.source().use {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   162
            subject.snoop("http://exemple.com", it)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   163
        }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   164
        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
   165
        assertThat(result).isEmpty()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   166
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   167
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   168
    @Test
1052
43bf3f913017 faviKonSnoop: use suspend functions and coroutine dispatchers
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   169
    fun testHtmlWithSimpleManifestReturnsSimpleResult() = testScope.runTest {
1053
ec1f5c54ff92 faviKonSnoop: use a suspend await() on okHttp Call
Da Risk <da_risk@geekorum.com>
parents: 1052
diff changeset
   170
        mockkStatic("com.geekorum.favikonsnoop.FaviKonSnoopKt")
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   171
        subject.okHttpClient = mockk()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   172
        val requestSlot = slot<Request>()
1053
ec1f5c54ff92 faviKonSnoop: use a suspend await() on okHttp Call
Da Risk <da_risk@geekorum.com>
parents: 1052
diff changeset
   173
        coEvery { subject.okHttpClient.newCall(capture(requestSlot)).await() } answers {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   174
            Response.Builder()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   175
                .code(200)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   176
                .request(requestSlot.captured)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   177
                .protocol(HTTP_1_1)
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   178
                .message("ok")
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   179
                .body(SIMPLE_MANIFEST.toResponseBody())
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   180
                .build()
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   181
        }
455
c743a2f2ca8a faviKonSnoop: switch input to okio source
Da Risk <da_risk@geekorum.com>
parents: 454
diff changeset
   182
        val result = WITH_MANIFEST_HTML.source().use {
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   183
            subject.snoop("http://exemple.com", it)
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
        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
   186
        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
   187
            FaviconInfo("http://exemple.com/static/images/icon.png")
453
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   188
        )
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   189
    }
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   190
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   191
}
ecbc5d274f63 faviKonSnoop: add AppManifestSnooper
Da Risk <da_risk@geekorum.com>
parents: 452
diff changeset
   192
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   193
class WebAppManifestParserTest {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   194
    private lateinit var subject: WebAppManifestParser
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   195
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   196
    @BeforeTest
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   197
    fun setUp() {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   198
        subject = WebAppManifestParser()
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
    @Test
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   202
    fun parseSimpleWebAppManifest() {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   203
        val result = subject.parseManifest(SIMPLE_MANIFEST)
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   204
        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
   205
            ImageResource("images/icon.png")
452
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   206
        )
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   207
    }
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   208
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   209
    @Test
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   210
    fun parseTypicalWebAppManifest() {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   211
        val result = subject.parseManifest(TYPICAL_MANIFEST)
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   212
        assertThat(result!!.icons).containsExactly(
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   213
            ImageResource("icon/lowres.webp",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   214
                sizes = "64x64",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   215
                type = "image/webp"),
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   216
            ImageResource("icon/lowres.png",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   217
                sizes = "64x64"),
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   218
            ImageResource("icon/hd_hi",
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   219
                sizes = "128x128")
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
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   223
    @Test
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   224
    fun parseInvalidManifest() {
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   225
        val result = subject.parseManifest(INVALID_MANIFEST)
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   226
        assertThat(result).isNull()
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   227
    }
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   228
3d0a13d61020 faviKonSnoop: add WebAppManifestParser
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   229
}