001// ***************************************************************************************************************************
002// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
003// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
004// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
005// * with the License.  You may obtain a copy of the License at                                                              *
006// *                                                                                                                         *
007// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
008// *                                                                                                                         *
009// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
010// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
011// * specific language governing permissions and limitations under the License.                                              *
012// ***************************************************************************************************************************
013package org.apache.juneau.assertions;
014
015import java.io.*;
016import java.util.*;
017import java.util.function.*;
018import java.util.stream.*;
019
020import org.apache.juneau.internal.*;
021import org.apache.juneau.serializer.*;
022
023/**
024 * Used for assertion calls against lists.
025 *
026 * <h5 class='section'>Example:</h5>
027 * <p class='bjava'>
028 *    <jc>// Validates the specified POJO is the specified type.</jc>
029 *    <jsm>assertList</jsm>(<jv>myList</jv>).isNotEmpty();
030 * </p>
031 *
032 *
033 * <h5 class='section'>Test Methods:</h5>
034 * <p>
035 * <ul class='javatree'>
036 *    <li class='jc'>{@link FluentListAssertion}
037 *    <ul class='javatreec'>
038 *       <li class='jm'>{@link FluentListAssertion#isHas(Object...) isHas(Object...)}
039 *       <li class='jm'>{@link FluentListAssertion#isEach(Predicate...) isEach(Predicate...)}
040 *    </ul>
041 *    <li class='jc'>{@link FluentCollectionAssertion}
042 *    <ul class='javatreec'>
043 *       <li class='jm'>{@link FluentCollectionAssertion#isEmpty() isEmpty()}
044 *       <li class='jm'>{@link FluentCollectionAssertion#isNotEmpty() isNotEmpty()}
045 *       <li class='jm'>{@link FluentCollectionAssertion#isContains(Object) isContains(Object)}
046 *       <li class='jm'>{@link FluentCollectionAssertion#isNotContains(Object) isNotContains(Object)}
047 *       <li class='jm'>{@link FluentCollectionAssertion#isAny(Predicate) isAny(Predicate)}
048 *       <li class='jm'>{@link FluentCollectionAssertion#isAll(Predicate) isAll(Predicate)}
049 *       <li class='jm'>{@link FluentCollectionAssertion#isSize(int size) isSize(int size)}
050 *    </ul>
051 *    <li class='jc'>{@link FluentObjectAssertion}
052 *    <ul class='javatreec'>
053 *       <li class='jm'>{@link FluentObjectAssertion#isExists() isExists()}
054 *       <li class='jm'>{@link FluentObjectAssertion#is(Object) is(Object)}
055 *       <li class='jm'>{@link FluentObjectAssertion#is(Predicate) is(Predicate)}
056 *       <li class='jm'>{@link FluentObjectAssertion#isNot(Object) isNot(Object)}
057 *       <li class='jm'>{@link FluentObjectAssertion#isAny(Object...) isAny(Object...)}
058 *       <li class='jm'>{@link FluentObjectAssertion#isNotAny(Object...) isNotAny(Object...)}
059 *       <li class='jm'>{@link FluentObjectAssertion#isNull() isNull()}
060 *       <li class='jm'>{@link FluentObjectAssertion#isNotNull() isNotNull()}
061 *       <li class='jm'>{@link FluentObjectAssertion#isString(String) isString(String)}
062 *       <li class='jm'>{@link FluentObjectAssertion#isJson(String) isJson(String)}
063 *       <li class='jm'>{@link FluentObjectAssertion#isSame(Object) isSame(Object)}
064 *       <li class='jm'>{@link FluentObjectAssertion#isSameJsonAs(Object) isSameJsonAs(Object)}
065 *       <li class='jm'>{@link FluentObjectAssertion#isSameSortedJsonAs(Object) isSameSortedJsonAs(Object)}
066 *       <li class='jm'>{@link FluentObjectAssertion#isSameSerializedAs(Object, WriterSerializer) isSameSerializedAs(Object, WriterSerializer)}
067 *       <li class='jm'>{@link FluentObjectAssertion#isType(Class) isType(Class)}
068 *       <li class='jm'>{@link FluentObjectAssertion#isExactType(Class) isExactType(Class)}
069 *    </ul>
070 * </ul>
071 *
072 * <h5 class='section'>Transform Methods:</h5>
073 * <p>
074 * <ul class='javatree'>
075 *    <li class='jc'>{@link FluentListAssertion}
076 *    <ul class='javatreec'>
077 *       <li class='jm'>{@link FluentListAssertion#asStrings() asStrings()}
078 *       <li class='jm'>{@link FluentListAssertion#asStrings(Function) asStrings(Function)}
079 *       <li class='jm'>{@link FluentListAssertion#asCdl() asCdl()}
080 *       <li class='jm'>{@link FluentListAssertion#asCdl(Function) asCdl(Function)}
081 *       <li class='jm'>{@link FluentListAssertion#asItem(int) asItem(int)}
082 *       <li class='jm'>{@link FluentListAssertion#asSorted() asSorted()}
083 *       <li class='jm'>{@link FluentListAssertion#asSorted(Comparator) asSorted(Comparator)}
084 *    </ul>
085 *    <li class='jc'>{@link FluentCollectionAssertion}
086 *    <ul class='javatreec'>
087 *       <li class='jm'>{@link FluentCollectionAssertion#asStrings() asStrings()}
088 *       <li class='jm'>{@link FluentCollectionAssertion#asSize() asSize()}
089 *    </ul>
090 *    <li class='jc'>{@link FluentObjectAssertion}
091 *    <ul class='javatreec'>
092 *       <li class='jm'>{@link FluentObjectAssertion#asString() asString()}
093 *       <li class='jm'>{@link FluentObjectAssertion#asString(WriterSerializer) asString(WriterSerializer)}
094 *       <li class='jm'>{@link FluentObjectAssertion#asString(Function) asString(Function)}
095 *       <li class='jm'>{@link FluentObjectAssertion#asJson() asJson()}
096 *       <li class='jm'>{@link FluentObjectAssertion#asJsonSorted() asJsonSorted()}
097 *       <li class='jm'>{@link FluentObjectAssertion#asTransformed(Function) asApplied(Function)}
098 *       <li class='jm'>{@link FluentObjectAssertion#asAny() asAny()}
099 * </ul>
100 * </ul>
101 *
102 * <h5 class='section'>Configuration Methods:</h5>
103 * <p>
104 * <ul class='javatree'>
105 *    <li class='jc'>{@link Assertion}
106 *    <ul class='javatreec'>
107 *       <li class='jm'>{@link Assertion#setMsg(String, Object...) setMsg(String, Object...)}
108 *       <li class='jm'>{@link Assertion#setOut(PrintStream) setOut(PrintStream)}
109 *       <li class='jm'>{@link Assertion#setSilent() setSilent()}
110 *       <li class='jm'>{@link Assertion#setStdOut() setStdOut()}
111 *       <li class='jm'>{@link Assertion#setThrowable(Class) setThrowable(Class)}
112 *    </ul>
113 * </ul>
114 *
115 * <h5 class='section'>See Also:</h5><ul>
116 *    <li class='link'><a class="doclink" href="../../../../index.html#ja.Overview">Overview &gt; juneau-assertions &gt; Overview</a>
117 * </ul>
118 *
119 * @param <E> The element type.
120 */
121@FluentSetters(returns="ListAssertion<E>")
122public class ListAssertion<E> extends FluentListAssertion<E,ListAssertion<E>> {
123
124   //-----------------------------------------------------------------------------------------------------------------
125   // Static
126   //-----------------------------------------------------------------------------------------------------------------
127
128   /**
129    * Static creator.
130    *
131    * @param <E> The element type.
132    * @param value
133    *    The object being tested.
134    *    <br>Can be <jk>null</jk>.
135    * @return A new assertion object.
136    */
137   public static <E> ListAssertion<E> create(List<E> value) {
138      return new ListAssertion<>(value);
139   }
140
141   /**
142    * Static creator.
143    *
144    * @param <E> The element type.
145    * @param value
146    *    The object being tested.
147    *    <br>Can be <jk>null</jk>.
148    * @return A new assertion object.
149    */
150   public static <E> ListAssertion<E> create(Stream<E> value) {
151      return new ListAssertion<>(value == null ? null : value.collect(Collectors.toList()));
152   }
153
154   //-----------------------------------------------------------------------------------------------------------------
155   // Instance
156   //-----------------------------------------------------------------------------------------------------------------
157
158   /**
159    * Constructor.
160    *
161    * @param value
162    *    The object being tested.
163    *    <br>Can be <jk>null</jk>.
164    */
165   public ListAssertion(List<E> value) {
166      super(value, null);
167   }
168
169   //-----------------------------------------------------------------------------------------------------------------
170   // Fluent setters
171   //-----------------------------------------------------------------------------------------------------------------
172
173   // <FluentSetters>
174
175   @Override /* GENERATED - org.apache.juneau.assertions.Assertion */
176   public ListAssertion<E> setMsg(String msg, Object...args) {
177      super.setMsg(msg, args);
178      return this;
179   }
180
181   @Override /* GENERATED - org.apache.juneau.assertions.Assertion */
182   public ListAssertion<E> setOut(PrintStream value) {
183      super.setOut(value);
184      return this;
185   }
186
187   @Override /* GENERATED - org.apache.juneau.assertions.Assertion */
188   public ListAssertion<E> setSilent() {
189      super.setSilent();
190      return this;
191   }
192
193   @Override /* GENERATED - org.apache.juneau.assertions.Assertion */
194   public ListAssertion<E> setStdOut() {
195      super.setStdOut();
196      return this;
197   }
198
199   @Override /* GENERATED - org.apache.juneau.assertions.Assertion */
200   public ListAssertion<E> setThrowable(Class<? extends java.lang.RuntimeException> value) {
201      super.setThrowable(value);
202      return this;
203   }
204
205   // </FluentSetters>
206}