/* * Copyright 2016 Red Hat, Inc. and/or its affiliates * and other contributors as indicated by the @author tags. * * 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 org.keycloak.client.admin.cli.util; import org.junit.Assert; import org.junit.Test; /** * @author <a href="mailto:marko.strukelj@gmail.com">Marko Strukelj</a> */ public class ReturnFieldsTest { @Test public void testBasic() { String spec = "field1,field2,field3"; ReturnFields fspec = new ReturnFields(spec); StringBuilder val = new StringBuilder(); for (String field : fspec) { if (val.length() > 0) val.append(','); val.append(field); } Assert.assertEquals(spec, val.toString()); // check catching errors String[] specs = { "", null, ",", "field1,", ",field2" }; for (String filter : specs) { try { fspec = new ReturnFields(filter); Assert.fail("Parsing of fields spec should have failed! : " + filter); } catch (Exception e) { //e.printStackTrace(); } } } @Test public void testExclude() { ReturnFields spec = new ReturnFields("*,-name,dog(*,-color)"); Assert.assertTrue(spec.included("foo")); Assert.assertTrue(spec.included("bar")); Assert.assertFalse(spec.included("name")); Assert.assertTrue(spec.included("dog")); Assert.assertTrue(spec.child("dog").included("breed")); Assert.assertFalse(spec.child("dog").included("color")); Assert.assertTrue(spec.excluded("name")); Assert.assertFalse(spec.excluded("foo")); Assert.assertFalse(spec.excluded("bar")); Assert.assertTrue(spec.child("dog").excluded("color")); Assert.assertFalse(spec.child("dog").excluded("breed")); } @Test public void testNestedWithGlob() { ReturnFields spec = new ReturnFields("name,dog(*)"); Assert.assertTrue(spec.included("name")); Assert.assertFalse(spec.included("tacos")); Assert.assertNotNull(spec.child("dog")); Assert.assertTrue(spec.child("dog").included("dogname")); Assert.assertNotNull(spec.child("cat")); Assert.assertFalse(spec.child("cat").included("name")); } @Test public void testNested() { String spec = "field1,field2(sub1,sub2(subsub1)),field3"; ReturnFields fspec = new ReturnFields(spec); String val = traverse(fspec); Assert.assertEquals(spec, val.toString()); // check catching errors String[] specs = { "(", ")", "field1,(", "field1,)", "field1,field2(", "field1,field2)", "field1,field2()", "field1,field2(sub1)(", "field1,field2(sub1))", "field1,field2(sub1)," }; for (String filter : specs) { try { fspec = new ReturnFields(filter); Assert.fail("Parsing of fields spec should have failed! : " + filter); } catch (Exception e) { //e.printStackTrace(); } } } private String traverse(ReturnFields fspec) { StringBuilder buf = new StringBuilder(); for (String field : fspec) { if (buf.length() > 0) buf.append(','); buf.append(field); ReturnFields cspec = fspec.child(field); if (cspec != null && cspec != ReturnFields.NONE) { buf.append('('); buf.append(traverse(cspec)); buf.append(')'); } } return buf.toString(); } }