/** * 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.cxf.jaxrs.impl; import java.util.List; import java.util.Locale; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Variant; import org.junit.Assert; import org.junit.Test; public class VariantListBuilderImplTest extends Assert { @Test public void testBuildAll() { VariantListBuilderImpl vb = new VariantListBuilderImpl(); MediaType mt1 = new MediaType("*", "*"); MediaType mt2 = new MediaType("text", "xml"); List<Variant> variants = vb.mediaTypes(mt1, mt2) .languages(new Locale("en"), new Locale("fr")).encodings("zip", "identity").add().build(); assertEquals("8 variants need to be created", 8, variants.size()); assertTrue(verifyVariant(variants, new Variant(mt1, new Locale("en"), "zip"))); assertTrue(verifyVariant(variants, new Variant(mt1, new Locale("en"), "identity"))); assertTrue(verifyVariant(variants, new Variant(mt1, new Locale("fr"), "zip"))); assertTrue(verifyVariant(variants, new Variant(mt1, new Locale("fr"), "identity"))); assertTrue(verifyVariant(variants, new Variant(mt2, new Locale("en"), "zip"))); assertTrue(verifyVariant(variants, new Variant(mt2, new Locale("en"), "identity"))); assertTrue(verifyVariant(variants, new Variant(mt2, new Locale("fr"), "zip"))); assertTrue(verifyVariant(variants, new Variant(mt2, new Locale("fr"), "identity"))); } @Test public void testBuildTypeAndEnc() { VariantListBuilderImpl vb = new VariantListBuilderImpl(); MediaType mt1 = new MediaType("*", "*"); MediaType mt2 = new MediaType("text", "xml"); List<Variant> variants = vb.mediaTypes(mt1, mt2).encodings("zip", "identity").add().build(); assertEquals("4 variants need to be created", 4, variants.size()); assertTrue(verifyVariant(variants, new Variant(mt1, (Locale)null, "zip"))); assertTrue(verifyVariant(variants, new Variant(mt1, (Locale)null, "identity"))); assertTrue(verifyVariant(variants, new Variant(mt2, (Locale)null, "zip"))); assertTrue(verifyVariant(variants, new Variant(mt2, (Locale)null, "identity"))); } @Test public void testBuildTypeAndLang() { VariantListBuilderImpl vb = new VariantListBuilderImpl(); MediaType mt1 = new MediaType("*", "*"); MediaType mt2 = new MediaType("text", "xml"); List<Variant> variants = vb.mediaTypes(mt1, mt2).languages(new Locale("en"), new Locale("fr")).add().build(); assertEquals("8 variants need to be created", 4, variants.size()); assertTrue(verifyVariant(variants, new Variant(mt1, new Locale("en"), null))); assertTrue(verifyVariant(variants, new Variant(mt1, new Locale("fr"), null))); assertTrue(verifyVariant(variants, new Variant(mt2, new Locale("en"), null))); assertTrue(verifyVariant(variants, new Variant(mt2, new Locale("fr"), null))); } @Test public void testBuildLangAndEnc() { VariantListBuilderImpl vb = new VariantListBuilderImpl(); List<Variant> variants = vb.languages(new Locale("en"), new Locale("fr")).encodings("zip", "identity").add().build(); assertEquals("4 variants need to be created", 4, variants.size()); assertTrue(verifyVariant(variants, new Variant(null, new Locale("en"), "zip"))); assertTrue(verifyVariant(variants, new Variant(null, new Locale("en"), "identity"))); assertTrue(verifyVariant(variants, new Variant(null, new Locale("fr"), "zip"))); assertTrue(verifyVariant(variants, new Variant(null, new Locale("fr"), "identity"))); } @Test public void testBuildLang() { VariantListBuilderImpl vb = new VariantListBuilderImpl(); List<Variant> variants = vb.languages(new Locale("en"), new Locale("fr")).add().build(); assertEquals("2 variants need to be created", 2, variants.size()); assertTrue(verifyVariant(variants, new Variant(null, new Locale("en"), null))); assertTrue(verifyVariant(variants, new Variant(null, new Locale("en"), null))); } @Test public void testBuildEnc() { VariantListBuilderImpl vb = new VariantListBuilderImpl(); List<Variant> variants = vb.encodings("zip", "identity").add().build(); assertEquals("2 variants need to be created", 2, variants.size()); assertTrue(verifyVariant(variants, new Variant(null, (Locale)null, "zip"))); assertTrue(verifyVariant(variants, new Variant(null, (Locale)null, "identity"))); } @Test public void testBuildType() { VariantListBuilderImpl vb = new VariantListBuilderImpl(); List<Variant> variants = vb.mediaTypes(new MediaType("*", "*"), new MediaType("text", "xml")).add().build(); assertEquals("2 variants need to be created", 2, variants.size()); assertTrue(verifyVariant(variants, new Variant(new MediaType("*", "*"), (Locale)null, null))); assertTrue(verifyVariant(variants, new Variant(new MediaType("text", "xml"), (Locale)null, null))); } private boolean verifyVariant(List<Variant> vs, Variant var) { for (Variant v : vs) { if (v.getLanguage() == null && v.getEncoding() == null && v.getMediaType() == null) { return false; } boolean encodCheck = v.getEncoding() == null && var.getEncoding() == null || v.getEncoding().equals(var.getEncoding()); boolean langCheck = v.getLanguage() == null && var.getLanguage() == null || v.getLanguage().equals(var.getLanguage()); boolean typeCheck = v.getMediaType() == null && var.getMediaType() == null || v.getMediaType().equals(var.getMediaType()); if (encodCheck && langCheck && typeCheck) { return true; } } return false; } }