/*
* Copyright (c) 2011 Google, Inc.
*
* 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 com.google.common.truth;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.collect.Maps;
import com.google.common.util.concurrent.AtomicLongMap;
import javax.annotation.Nullable;
/**
* Propositions for {@link AtomicLongMap} subjects.
*
* @author Kurt Alfred Kluever
*/
public final class AtomicLongMapSubject extends Subject<AtomicLongMapSubject, AtomicLongMap<?>> {
AtomicLongMapSubject(FailureStrategy failureStrategy, @Nullable AtomicLongMap<?> map) {
super(failureStrategy, map);
}
/**
* @deprecated {@link AtomicLongMap} does not define equality (i.e., it does not implement
* equals()), so you probably don't want to call this method. Instead, perform your assertion
* on the map view (e.g., assertThat(atomicLongMap.asMap()).isEqualTo(EXPECTED_MAP)).
*/
@Deprecated
@Override
public void isEqualTo(@Nullable Object other) {
super.isEqualTo(other);
}
/**
* @deprecated {@link AtomicLongMap} does not define equality (i.e., it does not implement
* equals()), so you probably don't want to call this method. Instead, perform your assertion
* on the map view (e.g., assertThat(atomicLongMap.asMap()).isNotEqualTo(UNEXPECTED_MAP)).
*/
@Deprecated
@Override
public void isNotEqualTo(@Nullable Object other) {
super.isNotEqualTo(other);
}
/** Fails if the {@link AtomicLongMap} is not empty. */
public void isEmpty() {
if (!actual().isEmpty()) {
fail("is empty");
}
}
/** Fails if the {@link AtomicLongMap} is empty. */
public void isNotEmpty() {
if (actual().isEmpty()) {
fail("is not empty");
}
}
/** Fails if the {@link AtomicLongMap} does not have the given size. */
public void hasSize(int expectedSize) {
checkArgument(expectedSize >= 0, "expectedSize (%s) must be >= 0", expectedSize);
int actualSize = actual().size();
if (actualSize != expectedSize) {
failWithBadResults("has a size of", expectedSize, "is", actualSize);
}
}
/** Fails if the {@link AtomicLongMap} does not have the given sum. */
public void hasSum(long expectedSum) {
long actualSum = actual().sum();
if (actualSum != expectedSum) {
failWithBadResults("has a sum of", expectedSum, "is", actualSum);
}
}
/** Fails if the {@link AtomicLongMap} does not contain the given key. */
public void containsKey(Object key) {
checkNotNull(key, "AtomicLongMap does not support null keys");
if (!actual().containsKey(key)) {
fail("contains key", key);
}
}
/** Fails if the {@link AtomicLongMap} contains the given key. */
public void doesNotContainKey(Object key) {
checkNotNull(key, "AtomicLongMap does not support null keys");
if (actual().containsKey(key)) {
fail("does not contain key", key);
}
}
/** Fails if the {@link AtomicLongMap} does not contain the given entry. */
public void containsEntry(Object key, long value) {
checkNotNull(key, "AtomicLongMap does not support null keys");
long actualValue = ((AtomicLongMap<Object>) actual()).get(key);
if (actualValue != value) {
fail("contains entry", Maps.immutableEntry(key, value));
}
}
/** Fails if the {@link AtomicLongMap} contains the given entry. */
public void doesNotContainEntry(@Nullable Object key, long value) {
if (key != null) {
long actualValue = ((AtomicLongMap<Object>) actual()).get(key);
if (actualValue == value) {
fail("does not contain entry", Maps.immutableEntry(key, value));
}
}
}
// TODO(kak): Consider adding containsExactly() / containsExactlyEntriesIn() like MapSubject?
}