blob: b9bf7e30fefc3a5f7409eb55eba2fd64b266ac42 [file] [log] [blame]
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed 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 androidx.wear.protolayout.expression;
import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_AND;
import static androidx.wear.protolayout.expression.proto.DynamicProto.LogicalOpType.LOGICAL_OP_TYPE_OR;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public final class DynamicBoolTest {
private static final String STATE_KEY = "state-key";
@Test
public void constantBool() {
DynamicBool falseBool = DynamicBool.constant(false);
DynamicBool trueBool = DynamicBool.constant(true);
assertThat(falseBool.toDynamicBoolProto().getFixed().getValue()).isFalse();
assertThat(trueBool.toDynamicBoolProto().getFixed().getValue()).isTrue();
}
@Test
public void constantToString() {
assertThat(DynamicBool.constant(true).toString()).isEqualTo("FixedBool{value=true}");
}
@Test
public void stateEntryValueBool() {
DynamicBool stateBool = DynamicBool.fromState(STATE_KEY);
assertThat(stateBool.toDynamicBoolProto().getStateSource().getSourceKey()).isEqualTo(STATE_KEY);
}
@Test
public void stateToString() {
assertThat(DynamicBool.fromState("key").toString()).isEqualTo("StateBoolSource{sourceKey=key}");
}
@Test
public void andOpBool() {
DynamicBool firstBool = DynamicBool.constant(false);
DynamicBool secondBool = DynamicBool.constant(true);
DynamicBool result = firstBool.and(secondBool);
assertThat(result.toDynamicBoolProto().getLogicalOp().getOperationType())
.isEqualTo(LOGICAL_OP_TYPE_AND);
assertThat(result.toDynamicBoolProto().getLogicalOp().getInputLhs())
.isEqualTo(firstBool.toDynamicBoolProto());
assertThat(result.toDynamicBoolProto().getLogicalOp().getInputRhs())
.isEqualTo(secondBool.toDynamicBoolProto());
}
@Test
public void orOpBool() {
DynamicBool firstBool = DynamicBool.constant(false);
DynamicBool secondBool = DynamicBool.constant(true);
DynamicBool result = firstBool.or(secondBool);
assertThat(result.toDynamicBoolProto().getLogicalOp().getOperationType())
.isEqualTo(LOGICAL_OP_TYPE_OR);
assertThat(result.toDynamicBoolProto().getLogicalOp().getInputLhs())
.isEqualTo(firstBool.toDynamicBoolProto());
assertThat(result.toDynamicBoolProto().getLogicalOp().getInputRhs())
.isEqualTo(secondBool.toDynamicBoolProto());
}
@Test
public void logicalOpToString() {
assertThat(DynamicBool.constant(true).and(DynamicBool.constant(false)).toString())
.isEqualTo(
"LogicalBoolOp{"
+ "inputLhs=FixedBool{value=true}, "
+ "inputRhs=FixedBool{value=false}, "
+ "operationType=1}");
}
@Test
public void negateOpBool() {
DynamicBool firstBool = DynamicBool.constant(true);
assertThat(firstBool.negate().toDynamicBoolProto().getNotOp().getInput())
.isEqualTo(firstBool.toDynamicBoolProto());
}
@Test
public void logicalToString() {
assertThat(DynamicBool.constant(true).negate().toString())
.isEqualTo("NotBoolOp{input=FixedBool{value=true}}");
}
@Test
public void validProto() {
DynamicBool from = DynamicBool.constant(true);
DynamicBool to = DynamicBool.fromByteArray(from.toDynamicBoolByteArray());
assertThat(to.toDynamicBoolProto().getFixed().getValue()).isTrue();
}
@Test
public void invalidProto() {
assertThrows(IllegalArgumentException.class, () -> DynamicBool.fromByteArray(new byte[] {1}));
}
}