Skip to content
This repository has been archived by the owner on Jan 31, 2024. It is now read-only.

Kamila/solo game basic #104

Merged
merged 98 commits into from
Mar 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
362b7c4
GameManager: basic Game Manager to set songs and score
kamilababayeva Mar 21, 2022
0581774
GenreTemporary: testing
kamilababayeva Mar 21, 2022
21ee32c
TypingGame: modify for GameManager needs
kamilababayeva Mar 21, 2022
d50e2aa
Solve merge issues
kamilababayeva Mar 21, 2022
6e6c1c6
LastfmApi.kt: add extra fields for uri
kamilababayeva Mar 22, 2022
cb5a0d3
acctivity_end_basic_game.xml: add basic end screen with game score
kamilababayeva Mar 22, 2022
0b0900d
AndroidManifest.xml: adding basic end screen for game
kamilababayeva Mar 22, 2022
ec495d3
EndBasicGameActivity.kt: activity to show end of the game
kamilababayeva Mar 22, 2022
e29a32a
LastfmUri.kt: adding extra filed for artisit, set some defaults
kamilababayeva Mar 22, 2022
b5db280
Lastfmhelper.kt: remove helper to combine lists for current version
kamilababayeva Mar 22, 2022
59b50f2
SongList.kt: add function to shuffle the list of songList
kamilababayeva Mar 22, 2022
ccf8851
SongList.kt: separate json field for methods, small fixes
kamilababayeva Mar 22, 2022
e747c03
SongList.kt: small fixes and todo
kamilababayeva Mar 22, 2022
4530520
activity_genre_temporary.xml: add buttons for genre
kamilababayeva Mar 23, 2022
673dd88
SongList.kt: fix the comments
kamilababayeva Mar 23, 2022
90b6f57
GenreTemporary.kt: add onclick for buttons
kamilababayeva Mar 23, 2022
030eb82
EndBasicGameActivity.kt: add text to display in the end
kamilababayeva Mar 23, 2022
bacbf25
TypingGameActivity.kt: add function to play one Game
kamilababayeva Mar 23, 2022
ed63959
TypingGameActivity.kt: modify barTime for new gameManager
kamilababayeva Mar 23, 2022
f478984
TypingGameActivity.kt: modify typing game for gameManager
kamilababayeva Mar 23, 2022
201fc5c
TypingGameActivity.kt: small fixes
kamilababayeva Mar 23, 2022
39c70e2
TypingGameActivity.kt: make handler global
kamilababayeva Mar 23, 2022
804c55d
fixes in the imports
kamilababayeva Mar 23, 2022
bc60ec3
GameManager.kt: functions to opreate mediaplayer
kamilababayeva Mar 23, 2022
91b1f59
TypingGameActivity.kt: function to operate songs
kamilababayeva Mar 23, 2022
bbb2b58
GenreTemporaryTest.kt: remove wrong tests
kamilababayeva Mar 23, 2022
514c759
fixes to adapt to the new code
kamilababayeva Mar 24, 2022
98cc130
TypingGameActivity.kt: organize a file
kamilababayeva Mar 24, 2022
df3ae9c
TypingGameActivityTest.kt: fix the typing game activity
kamilababayeva Mar 24, 2022
3c33ff3
GameManager: change setNextSong to correct functionality
kamilababayeva Mar 24, 2022
d97adcd
GenreTemporaryTest.kt: update the tests
kamilababayeva Mar 24, 2022
eb9c3cf
GameManager.kt: move to another folder
kamilababayeva Mar 24, 2022
b38cca3
Merge branch 'main' into kamila/SoloGame_basic
kamilababayeva Mar 24, 2022
b015fed
remove the test
kamilababayeva Mar 24, 2022
9c74957
fix the tests
kamilababayeva Mar 24, 2022
2a692ba
Merge branch 'main' into kamila/SoloGame_basic
kamilababayeva Mar 24, 2022
503b9f5
new tests, add odcumentation
kamilababayeva Mar 25, 2022
c1f1e6a
Merge branch 'main' into kamila/SoloGame_basic
kamilababayeva Mar 25, 2022
e3b5a61
more documentation and tests
kamilababayeva Mar 25, 2022
9cc8deb
fix the comment
kamilababayeva Mar 25, 2022
c8e08bd
change Genre temporary that causes error
kamilababayeva Mar 26, 2022
1c9b695
changing genre temporary mistake
kamilababayeva Mar 26, 2022
f2a701e
change the file name
kamilababayeva Mar 27, 2022
3903180
change the filename
kamilababayeva Mar 27, 2022
214c1f7
GameManagerTest.kt: add test to test functionalities
kamilababayeva Mar 27, 2022
2359c6c
GenreTemporary: add tests and fix the functionality
kamilababayeva Mar 27, 2022
e88d4dc
EndBasicGameTemporary: add test for the activity
kamilababayeva Mar 27, 2022
d413493
TypingGameActivityTest: add tests
kamilababayeva Mar 27, 2022
8afbe29
fix the test
kamilababayeva Mar 27, 2022
9fab9e0
Revert "GameManagerTest.kt: add test to test functionalities"
kamilababayeva Mar 27, 2022
3b8923d
Update TypingGameActivityTest.kt
kamilababayeva Mar 27, 2022
d636fe8
Update TypingGameActivityTest.kt
kamilababayeva Mar 27, 2022
ca40a3c
Revert "EndBasicGameTemporary: add test for the activity"
kamilababayeva Mar 27, 2022
5d7a338
Revert "GenreTemporary: add tests and fix the functionality"
kamilababayeva Mar 27, 2022
f50d6bf
try branch that worked
kamilababayeva Mar 27, 2022
5392177
remove the code
kamilababayeva Mar 27, 2022
c8e0705
remove lyrics test
kamilababayeva Mar 27, 2022
8356c8f
TypingGame: fix the tests
kamilababayeva Mar 27, 2022
83ba07c
GenreTemporary: put the code backf
kamilababayeva Mar 27, 2022
65eb7e3
remove tests
kamilababayeva Mar 27, 2022
b498552
TypingGame: remove tests
kamilababayeva Mar 27, 2022
63da503
GenreTemporary: add abck the lines
kamilababayeva Mar 27, 2022
ccd37d9
Revert "GenreTemporary: add abck the lines"
kamilababayeva Mar 27, 2022
57e60fc
add retrofit to retrieve songs
kamilababayeva Mar 27, 2022
cad93dc
GenreTe porary:: remove tests
kamilababayeva Mar 27, 2022
3c8b6e1
GenreTemporary: put back the test
kamilababayeva Mar 28, 2022
10ff89a
TypingGame: add onDestroy
kamilababayeva Mar 28, 2022
d732852
merge two branches
kamilababayeva Mar 28, 2022
09964c5
GenreTemporaryTest: fix the tests
kamilababayeva Mar 28, 2022
6a2a6d4
make a global gameManager
kamilababayeva Mar 28, 2022
018d72c
EndBasicGameTemporary: add the test for the interface
kamilababayeva Mar 28, 2022
c26456a
LastfmAPIInterface: remove uncnecesary code
kamilababayeva Mar 28, 2022
e11f9fa
TypingGameActivity: make function private
kamilababayeva Mar 28, 2022
677a12c
TypingGameActivityTest.kt: add extra tests
kamilababayeva Mar 28, 2022
47e6c23
LastfmAPIInterface: chanvge the comment
kamilababayeva Mar 28, 2022
b9b1dfe
LastfmHelper: add the comment
kamilababayeva Mar 28, 2022
205f770
Move checkEndScreen to TypinGameActivityTest
kamilababayeva Mar 28, 2022
02f1485
add test for end activity
kamilababayeva Mar 28, 2022
7e00446
Move endBasicGameScreenTest
kamilababayeva Mar 28, 2022
7f73ec8
LastfmHelper: remove unnecessary code
kamilababayeva Mar 28, 2022
7262a15
LastfmHelperTest: remove unnecessary test
kamilababayeva Mar 28, 2022
d29fe88
LastfmUri: conver data class to hashmap
kamilababayeva Mar 28, 2022
e1d7762
genreTemporary: simplify the code
kamilababayeva Mar 28, 2022
715b7cf
change lastfmapi to retrofit
kamilababayeva Mar 28, 2022
dbf718d
remove tests for lastfmAPI
kamilababayeva Mar 28, 2022
72c8653
Update app/src/main/java/ch/sdp/vibester/activity/TypingGameActivity.kt
kamilababayeva Mar 28, 2022
0001d6b
Update app/src/main/java/ch/sdp/vibester/GenreTemporary.kt
kamilababayeva Mar 28, 2022
ac8b749
Update app/src/main/java/ch/sdp/vibester/helper/GameManager.kt
kamilababayeva Mar 28, 2022
ec51fc5
EndBasicGameTemporary: add small comment
kamilababayeva Mar 28, 2022
9c85e08
remove create for retrofit interface
kamilababayeva Mar 28, 2022
5c62ec4
ServiceBuilder: create common builder for retrofit
kamilababayeva Mar 28, 2022
9d4fb1b
GameManager: change gamesize name
kamilababayeva Mar 28, 2022
eccdfe8
Update code to new retrofit builder
kamilababayeva Mar 28, 2022
eebfbd4
add cinstants to sleeptime
kamilababayeva Mar 28, 2022
2c64d1a
remove commented code
kamilababayeva Mar 28, 2022
b601db4
merge main branch
kamilababayeva Mar 28, 2022
5cd39c7
fix songlist type
kamilababayeva Mar 28, 2022
91c5998
fix the test
kamilababayeva Mar 28, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package ch.sdp.vibester

import android.content.Context
import android.content.Intent
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import ch.sdp.vibester.activity.TypingGameActivity
import ch.sdp.vibester.helper.GameManager
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class EndBasicGameTemporaryTest {

@get:Rule
val testRule = ActivityScenarioRule(EndBasicGameTemporary::class.java)

@Before
fun setUp() {
Intents.init()
}

@After
fun clean() {
Intents.release()
}

@Test
fun checkTextView(){
val gameManager = GameManager()
val intent = Intent(ApplicationProvider.getApplicationContext(), TypingGameActivity::class.java)
val scn: ActivityScenario<TypingGameActivity> = ActivityScenario.launch(intent)
val ctx = ApplicationProvider.getApplicationContext() as Context
scn.onActivity {
activity -> var temp = activity.playRound(ctx, gameManager)
}
Espresso.onView(ViewMatchers.withId(R.id.score))
.check(ViewAssertions.matches(ViewMatchers.withText("Your score is " + gameManager.getScore().toString())))
}
}
59 changes: 36 additions & 23 deletions app/src/androidTest/java/ch/sdp/vibester/GenreTemporaryTest.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
package ch.sdp.vibester

import androidx.test.espresso.Espresso.onData
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.PerformException
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.*
import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.Intents.intended
import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import ch.sdp.vibester.activity.TypingGameActivity
import org.hamcrest.Matchers.*
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.ExpectedException
import org.junit.runner.RunWith


@RunWith(AndroidJUnit4::class)
class GenreTemporaryTest {
private val SLEEP_TIME:Long = 2500

@get:Rule
val testRule = ActivityScenarioRule(
Expand All @@ -38,39 +42,48 @@ class GenreTemporaryTest {
onView(withId(R.id.rockButton)).check(matches(isDisplayed()))
onView(withId(R.id.kpopButton)).check(matches(isDisplayed()))
onView(withId(R.id.topTracksButton)).check(matches(isDisplayed()))
onView(withId(R.id.songsListView)).check(matches(isDisplayed()))
}

@get:Rule
var exception = ExpectedException.none()

@Test
fun songListIsEmpty(){
exception.expect(PerformException::class.java)
onView(withId(R.id.songsListView)).check(matches(isDisplayed()))
onData(allOf(`is`(instanceOf(Pair::class.java)))).atPosition(2).perform(click())
onView(withId(R.id.btsButton)).check(matches(isDisplayed()))
onView(withId(R.id.imagDragonsButton)).check(matches(isDisplayed()))
onView(withId(R.id.billieEilishButton)).check(matches(isDisplayed()))
}

@Test
fun rockButtonClick() {
onView(withId(R.id.rockButton)).perform(click())
onView(withId(R.id.songsListView)).check(matches(isDisplayed()))
Thread.sleep(1000) // wait for data to fetch
onData(allOf(`is`(instanceOf(Pair::class.java)))).atPosition(2).perform(click())
Thread.sleep(SLEEP_TIME)
intended(hasComponent(TypingGameActivity::class.java.getName()))
}
@Test
fun topButtonClick() {
onView(withId(R.id.topTracksButton)).perform(click())
onView(withId(R.id.songsListView)).check(matches(isDisplayed()))
Thread.sleep(1000) // wait for data to fetch
onData(allOf(`is`(instanceOf(Pair::class.java)))).atPosition(2).perform(click())
Thread.sleep(SLEEP_TIME)
intended(hasComponent(TypingGameActivity::class.java.getName()))
}

@Test
fun kpopButtonClick() {
onView(withId(R.id.kpopButton)).perform(click())
onView(withId(R.id.songsListView)).check(matches(isDisplayed()))
Thread.sleep(1000) // wait for data to fetch
onData(allOf(`is`(instanceOf(Pair::class.java)))).atPosition(2).perform(click())
Thread.sleep(SLEEP_TIME)
intended(hasComponent(TypingGameActivity::class.java.getName()))
}

@Test
fun billieEilishButtonClick() {
onView(withId(R.id.billieEilishButton)).perform(click())
Thread.sleep(SLEEP_TIME)
intended(hasComponent(TypingGameActivity::class.java.getName()))
}
@Test
fun imagineDragonsButtonClick() {
onView(withId(R.id.imagDragonsButton)).perform(click())
Thread.sleep(SLEEP_TIME)
intended(hasComponent(TypingGameActivity::class.java.getName()))
}

@Test
fun btsButtonClick() {
onView(withId(R.id.btsButton)).perform(click())
Thread.sleep(SLEEP_TIME)
intended(hasComponent(TypingGameActivity::class.java.getName()))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import ch.sdp.vibester.api.LyricsOVHApiInterface
import ch.sdp.vibester.api.ServiceBuilder
import org.hamcrest.CoreMatchers.containsString
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
Expand All @@ -17,7 +18,7 @@ import org.junit.Test
class LyricTemporaryTest {
@Test
fun canGetLyricsFromAPI() {
val service = LyricsOVHApiInterface.create("https://api.lyrics.ovh/")
val service = ServiceBuilder.buildService("https://api.lyrics.ovh/", LyricsOVHApiInterface::class.java)
val lyric = service.getLyrics("Imagine Dragons", "Believer").execute()
//Adding a replace because sometimes the api put some additional text
assertThat(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import kotlin.random.Random
*/
@RunWith(AndroidJUnit4::class)
class AuthenticationActivityTest {
private val SLEEP_TIME:Long = 5000

@Test
fun useAppContext() {
Expand All @@ -46,7 +47,7 @@ class AuthenticationActivityTest {
onView(withId(R.id.username)).perform(ViewActions.typeText(username), closeSoftKeyboard())
onView(withId(R.id.password)).perform(ViewActions.typeText(password), closeSoftKeyboard())
onView(withId(R.id.logIn)).perform(click())
Thread.sleep(3_000)
Thread.sleep(SLEEP_TIME)
onView(withId(R.id.email)).check(matches(withText("Authentication error")))
}

Expand All @@ -57,7 +58,7 @@ class AuthenticationActivityTest {
onView(withId(R.id.username)).perform(ViewActions.typeText(username), closeSoftKeyboard())
onView(withId(R.id.password)).perform(ViewActions.typeText(password), closeSoftKeyboard())
onView(withId(R.id.createAcc)).perform(click())
Thread.sleep(3_000)
Thread.sleep(SLEEP_TIME)
onView(withId(R.id.email)).check(matches(withText("Authentication error")))
}

Expand Down Expand Up @@ -114,7 +115,7 @@ class AuthenticationActivityTest {
onView(withId(R.id.username)).perform(ViewActions.typeText(username), closeSoftKeyboard())
onView(withId(R.id.password)).perform(ViewActions.typeText(password), closeSoftKeyboard())
onView(withId(R.id.logIn)).perform(click())
Thread.sleep(3_000)
Thread.sleep(SLEEP_TIME)
onView(withId(R.id.email)).check(matches(withText("[email protected]")))
}

Expand All @@ -126,7 +127,7 @@ class AuthenticationActivityTest {
onView(withId(R.id.username)).perform(ViewActions.typeText(username), closeSoftKeyboard())
onView(withId(R.id.password)).perform(ViewActions.typeText(password), closeSoftKeyboard())
onView(withId(R.id.createAcc)).perform(click())
Thread.sleep(3_000)
Thread.sleep(SLEEP_TIME)
onView(withId(R.id.email)).check(matches(withText(randomInt.toString().plus("@gg.com"))))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,76 +40,76 @@ class LyricsBelongGameActivityTest {
fun clean() {
Intents.release()
}

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My bad. This function can be deleted

@Test
fun getLyricsFromAPICorrectly() {
val service = LyricsOVHApiInterface.create()
val lyric = service.getLyrics("Imagine Dragons", "Thunder").execute()

assertThat(
lyric.body().lyrics?.replace("\n", "")?.replace("\r", ""),
equalTo(("Just a young gun with a quick fuse\n" +
"I was uptight, wanna let loose\n" +
"I was dreaming of bigger things in\n" +
"And wanna leave my own life behind\n" +
"Not a yes sir, not a follower\n" +
"Fit the box, fit the mold\n" +
"Have a seat in the foyer, take a number\n" +
"I was lightning before the thunder\n" +
"Thunder, thunder\n" +
"Thunder, thun-, thunder\n" +
"Thun-thun-thunder, thunder, thunder\n" +
"Thunder, thun-, thunder\n" +
"Thun-thun-thunder, thunder\n" +
"Thunder, feel the thunder\n" +
"Lightning and the thunder\n" +
"Thunder, feel the thunder\n" +
"Lightning and the thunder\n" +
"Thunder, thunder\n" +
"Thunder\n" +

"Kids were laughing in my classes\n" +
"While I was scheming for the masses\n" +
"Who do you think you are?\n" +
"Dreaming 'bout being a big star\n" +
"You say you're basic, you say you're easy\n" +
"You're always riding in the back seat\n" +
"Now I'm smiling from the stage while\n" +
"You were clapping in the nose bleeds\n" +

"Thunder, thunder\n" +
"Thunder, thun-, thunder\n" +
"Thun-thun-thunder, thunder, thunder\n" +
"Thunder, thun-, thunder\n" +
"Thun-thun-thunder, thunder\n" +

"Thunder, feel the thunder\n" +
"Lightning and the thunder\n" +
"Thunder, feel the thunder\n" +
"Lightning and the thunder\n" +
"Thunder\n" +
"Thunder, feel the thunder\n" +
"Lightning and the thunder, thunder\n" +

"Thunder, feel the thunder\n" +
"Lightning and the thunder, thunder\n" +
"Thunder, feel the thunder\n" +
"Lightning and the thunder, thunder\n" +
"Thunder, feel the thunder\n" +
"Lightning and the thunder, thunder\n" +
"Thunder, feel the thunder (feel the)\n" +
"Lightning and the thunder, thunder\n" +

"Thunder, thun-, thunder\n" +
"Thun-thun-thunder, thunder\n" +
"Thunder, thun-, thunder\n" +
"Thun-thun-thunder, thunder\n" +
"Thunder, thun-, thunder\n" +
"Thun-thun-thunder, thunder\n" +
"Thunder, thun-, thunder\n" +
"Thun-thun-thunder, thunder").replace("\r", "").replace("\n", ""))
)
}
//
// @Test
// fun getLyricsFromAPICorrectly() {
// val service = LyricsOVHApiInterface.create()
// val lyric = service.getLyrics("Imagine Dragons", "Thunder").execute()
//
// assertThat(
// lyric.body().lyrics?.replace("\n", "")?.replace("\r", ""),
// equalTo(("Just a young gun with a quick fuse\n" +
// "I was uptight, wanna let loose\n" +
// "I was dreaming of bigger things in\n" +
// "And wanna leave my own life behind\n" +
// "Not a yes sir, not a follower\n" +
// "Fit the box, fit the mold\n" +
// "Have a seat in the foyer, take a number\n" +
// "I was lightning before the thunder\n" +
// "Thunder, thunder\n" +
// "Thunder, thun-, thunder\n" +
// "Thun-thun-thunder, thunder, thunder\n" +
// "Thunder, thun-, thunder\n" +
// "Thun-thun-thunder, thunder\n" +
// "Thunder, feel the thunder\n" +
// "Lightning and the thunder\n" +
// "Thunder, feel the thunder\n" +
// "Lightning and the thunder\n" +
// "Thunder, thunder\n" +
// "Thunder\n" +
//
// "Kids were laughing in my classes\n" +
// "While I was scheming for the masses\n" +
// "Who do you think you are?\n" +
// "Dreaming 'bout being a big star\n" +
// "You say you're basic, you say you're easy\n" +
// "You're always riding in the back seat\n" +
// "Now I'm smiling from the stage while\n" +
// "You were clapping in the nose bleeds\n" +
//
// "Thunder, thunder\n" +
// "Thunder, thun-, thunder\n" +
// "Thun-thun-thunder, thunder, thunder\n" +
// "Thunder, thun-, thunder\n" +
// "Thun-thun-thunder, thunder\n" +
//
// "Thunder, feel the thunder\n" +
// "Lightning and the thunder\n" +
// "Thunder, feel the thunder\n" +
// "Lightning and the thunder\n" +
// "Thunder\n" +
// "Thunder, feel the thunder\n" +
// "Lightning and the thunder, thunder\n" +
//
// "Thunder, feel the thunder\n" +
// "Lightning and the thunder, thunder\n" +
// "Thunder, feel the thunder\n" +
// "Lightning and the thunder, thunder\n" +
// "Thunder, feel the thunder\n" +
// "Lightning and the thunder, thunder\n" +
// "Thunder, feel the thunder (feel the)\n" +
// "Lightning and the thunder, thunder\n" +
//
// "Thunder, thun-, thunder\n" +
// "Thun-thun-thunder, thunder\n" +
// "Thunder, thun-, thunder\n" +
// "Thun-thun-thunder, thunder\n" +
// "Thunder, thun-, thunder\n" +
// "Thun-thun-thunder, thunder\n" +
// "Thunder, thun-, thunder\n" +
// "Thun-thun-thunder, thunder").replace("\r", "").replace("\n", ""))
// )
// }

@Test
fun btnCheckVisibleAfterSpeak() {
Expand Down
Loading