1
+ /*
2
+ * Catroid: An on-device visual programming system for Android devices
3
+ * Copyright (C) 2010-2023 The Catrobat Team
4
+ * (<http://developer.catrobat.org/credits>)
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License as
8
+ * published by the Free Software Foundation, either version 3 of the
9
+ * License, or (at your option) any later version.
10
+ *
11
+ * An additional term exception under section 7 of the GNU Affero
12
+ * General Public License, version 3, is available at
13
+ * http://developer.catrobat.org/license_additional_term
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU Affero General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU Affero General Public License
21
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
22
+ */
23
+ package org.catrobat.catroid.uiespresso.content.brick.app
24
+
25
+ import android.util.Log
26
+ import androidx.test.core.app.ApplicationProvider
27
+ import androidx.test.ext.junit.runners.AndroidJUnit4
28
+ import org.catrobat.catroid.ProjectManager
29
+ import org.catrobat.catroid.R
30
+ import org.catrobat.catroid.content.BroadcastScript
31
+ import org.catrobat.catroid.content.Project
32
+ import org.catrobat.catroid.content.Scene
33
+ import org.catrobat.catroid.content.Script
34
+ import org.catrobat.catroid.content.Sprite
35
+ import org.catrobat.catroid.content.bricks.BroadcastBrick
36
+ import org.catrobat.catroid.content.bricks.BroadcastReceiverBrick
37
+ import org.catrobat.catroid.content.bricks.BroadcastWaitBrick
38
+ import org.catrobat.catroid.test.utils.TestUtils
39
+ import org.catrobat.catroid.ui.SpriteActivity
40
+ import org.catrobat.catroid.uiespresso.content.brick.utils.BrickDataInteractionWrapper.onBrickAtPosition
41
+ import org.catrobat.catroid.uiespresso.content.messagecontainer.BroadcastMessageBrickTestUtils
42
+ import org.catrobat.catroid.uiespresso.util.UiTestUtils.Companion.getResourcesString
43
+ import org.catrobat.catroid.uiespresso.util.rules.FragmentActivityTestRule
44
+ import org.junit.After
45
+ import org.junit.Before
46
+ import org.junit.Rule
47
+ import org.junit.Test
48
+ import org.junit.runner.RunWith
49
+ import org.koin.java.KoinJavaComponent.inject
50
+
51
+ @RunWith(AndroidJUnit4 ::class )
52
+ class BroadcastBrickMessageUpdateTest {
53
+ private val defaultMessage = " defaultMessage"
54
+ private val editedMessage = " editedMessage"
55
+ private val message = " newAddedMessage"
56
+ private var secondScene: Scene ? = null
57
+ private var secondSprite: Sprite ? = null
58
+ private var firstBroadcastBrick: BroadcastReceiverBrick ? = null
59
+ private val projectManager by inject (ProjectManager ::class .java)
60
+
61
+ @JvmField
62
+ @Rule
63
+ var baseActivityTestRule = FragmentActivityTestRule (
64
+ SpriteActivity ::class .java,
65
+ SpriteActivity .EXTRA_FRAGMENT_POSITION ,
66
+ SpriteActivity .FRAGMENT_SCRIPTS
67
+ )
68
+
69
+ @After
70
+ fun tearDown () {
71
+ TestUtils .deleteProjects(BroadcastBrickMessageUpdateTest ::class .java.simpleName)
72
+ }
73
+
74
+ @Before
75
+ fun setUp () {
76
+ createTestProjectWithBricks(BroadcastBrickMessageUpdateTest ::class .java.simpleName)
77
+ baseActivityTestRule.launchActivity()
78
+ }
79
+
80
+ @Test
81
+ fun testAllBroadcastBrickSpinnersContainTheNewAddedMessage () {
82
+ BroadcastMessageBrickTestUtils .createNewBroadcastMessageOnBrick(
83
+ message, firstBroadcastBrick,
84
+ baseActivityTestRule.activity
85
+ )
86
+ val spinnerValues = listOf (
87
+ getResourcesString(R .string.new_option),
88
+ getResourcesString(R .string.edit_option),
89
+ defaultMessage,
90
+ message
91
+ )
92
+ checkAllBrickSpinnerValues(spinnerValues)
93
+ }
94
+
95
+ @Test
96
+ fun testAllBroadcastBrickSpinnersContainTheEditedMessage () {
97
+ BroadcastMessageBrickTestUtils .editBroadcastMessageOnBrick(
98
+ defaultMessage, editedMessage, firstBroadcastBrick,
99
+ baseActivityTestRule.activity
100
+ )
101
+ val spinnerValues = listOf (
102
+ getResourcesString(R .string.new_option),
103
+ getResourcesString(R .string.edit_option),
104
+ editedMessage
105
+ )
106
+ checkAllBrickSpinnerValues(spinnerValues)
107
+ }
108
+
109
+ @Test
110
+ fun testAllBroadcastBrickSpinnersShowTheEditedMessage () {
111
+ BroadcastMessageBrickTestUtils .editBroadcastMessageOnBrick(
112
+ defaultMessage, editedMessage, firstBroadcastBrick,
113
+ baseActivityTestRule.activity
114
+ )
115
+ checkShowsCorrectSpinnerMessage(editedMessage)
116
+ }
117
+
118
+ @Test
119
+ fun testEditingOccursOnlyInCurrentScene () {
120
+ BroadcastMessageBrickTestUtils .editBroadcastMessageOnBrick(
121
+ defaultMessage, editedMessage, firstBroadcastBrick,
122
+ baseActivityTestRule.activity
123
+ )
124
+ switchScene()
125
+ checkShowsCorrectSpinnerMessage(defaultMessage)
126
+ }
127
+
128
+ private fun checkAllBrickSpinnerValues (spinnerValues : List <String >) {
129
+ onBrickAtPosition(1 )
130
+ .onSpinner(R .id.brick_broadcast_spinner)
131
+ .checkNameableValuesAvailable(spinnerValues)
132
+ onBrickAtPosition(2 )
133
+ .onSpinner(R .id.brick_broadcast_spinner)
134
+ .checkNameableValuesAvailable(spinnerValues)
135
+ onBrickAtPosition(3 )
136
+ .onSpinner(R .id.brick_broadcast_spinner)
137
+ .checkNameableValuesAvailable(spinnerValues)
138
+ onBrickAtPosition(4 )
139
+ .onSpinner(R .id.brick_broadcast_spinner)
140
+ .checkNameableValuesAvailable(spinnerValues)
141
+ onBrickAtPosition(5 )
142
+ .onSpinner(R .id.brick_broadcast_spinner)
143
+ .checkNameableValuesAvailable(spinnerValues)
144
+ }
145
+
146
+ private fun checkShowsCorrectSpinnerMessage (message : String ) {
147
+ onBrickAtPosition(1 ).onSpinner(R .id.brick_broadcast_spinner).checkShowsText(message)
148
+ onBrickAtPosition(2 ).onSpinner(R .id.brick_broadcast_spinner).checkShowsText(message)
149
+ onBrickAtPosition(3 ).onSpinner(R .id.brick_broadcast_spinner).checkShowsText(message)
150
+ onBrickAtPosition(4 ).onSpinner(R .id.brick_broadcast_spinner).checkShowsText(message)
151
+ onBrickAtPosition(5 ).onSpinner(R .id.brick_broadcast_spinner).checkShowsText(message)
152
+ }
153
+
154
+ private fun switchScene () {
155
+ baseActivityTestRule.finishActivity()
156
+ projectManager.currentSprite = secondSprite
157
+ projectManager.currentlyEditedScene = secondScene
158
+ baseActivityTestRule.launchActivity()
159
+ }
160
+
161
+ private fun createTestProjectWithBricks (projectName : String ) {
162
+ val project = Project (ApplicationProvider .getApplicationContext(), projectName)
163
+ val firstSprite = Sprite (" spriteScene1" )
164
+ secondSprite = Sprite (" spriteScene2" )
165
+ val script: Script = BroadcastScript (defaultMessage)
166
+ firstBroadcastBrick = script.scriptBrick as BroadcastReceiverBrick
167
+ script.addBrick(BroadcastBrick (defaultMessage))
168
+ script.addBrick(BroadcastWaitBrick (defaultMessage))
169
+ firstSprite.addScript(script)
170
+ try {
171
+ firstSprite.addScript(script.clone())
172
+ secondSprite!! .addScript(script.clone())
173
+ secondSprite!! .addScript(script.clone())
174
+ } catch (e: CloneNotSupportedException ) {
175
+ Log .e(BroadcastBrickMessageUpdateTest ::class .java.simpleName, e.message!! )
176
+ }
177
+ val firstScene = Scene (" Scene1" , project)
178
+ secondScene = Scene (" Scene2" , project)
179
+ firstScene.addSprite(firstSprite)
180
+ secondScene!! .addSprite(secondSprite)
181
+ project.addScene(firstScene)
182
+ project.addScene(secondScene)
183
+ projectManager.currentProject = project
184
+ projectManager.currentSprite = firstSprite
185
+ projectManager.currentlyEditedScene = firstScene
186
+ }
187
+ }
0 commit comments