blob: 61e0e26e262cc132f63db988a48dee2006cdab96 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jmeter.testelement
import io.mockk.mockk
import io.mockk.spyk
import org.apache.jmeter.testelement.property.CollectionProperty
import org.apache.jmeter.testelement.property.TestElementProperty
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
class AbstractTestElementTest {
@Test
fun `clone can remove properties`() {
class ElementWithDefaultComment : AbstractTestElement() {
init {
set(TestElementSchema.comments, "initialized in constructor")
}
}
val source = ElementWithDefaultComment().apply {
removeProperty(TestElementSchema.comments.name)
}
val cloned = source.clone() as ElementWithDefaultComment
cloned.propertyIterator().asSequence().toList()
assertEquals(
source.propertyIterator().asSequence().toList().joinToString("\n") { it.name + " = " + it.stringValue },
cloned.propertyIterator().asSequence().toList().joinToString("\n") { it.name + " = " + it.stringValue },
) {
"The properties after cloning the element should match the original properites. " +
"Note that comments is added in constructor, however, we remove <<comments>> property before cloning"
}
assertEquals(source, cloned) {
"The cloned element should be be equal the original element. " +
"Note that comments is added in constructor, however, we remove <<comments>> property before cloning"
}
}
@Test
fun `set outer properties as temporary when using a TestElementProperty`() {
val sut = spyk<AbstractTestElement>()
val outerElement = mockk<TestElement>(relaxed = true)
val innerElement = mockk<TestElement>(relaxed = true)
val outerProp = TestElementProperty("outerProp", outerElement)
val innerProp = TestElementProperty("innerProp", innerElement)
outerProp.addProperty(innerProp)
sut.setTemporary(outerProp)
assertTrue(sut.isTemporary(outerProp)) {
"isTemporary($outerProp)"
}
assertFalse(sut.isTemporary(innerProp)) {
"isTemporary($innerProp)"
}
}
@Test
fun `set all properties as temporary when using a MultiProperty`() {
val sut = spyk<AbstractTestElement>()
val outerProp = CollectionProperty()
val innerProp = CollectionProperty()
outerProp.addProperty(innerProp)
sut.setTemporary(outerProp)
assertTrue(sut.isTemporary(outerProp)) {
"isTemporary($outerProp)"
}
assertTrue(sut.isTemporary(innerProp)) {
"isTemporary($innerProp)"
}
}
}