1/** 2 * Copyright (c) 2008, http://www.snakeyaml.org 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package org.yaml.snakeyaml.representer; 17 18import junit.framework.TestCase; 19 20import org.yaml.snakeyaml.DumperOptions; 21import org.yaml.snakeyaml.Yaml; 22import org.yaml.snakeyaml.nodes.Tag; 23 24public class RepresenterTest extends TestCase { 25 26 public void testRepresenter() { 27 MyBean bean = new MyBean(); 28 bean.setName("Gnome"); 29 bean.setValid(true); 30 bean.setPrimitive(true); 31 Yaml yaml = new Yaml(); 32 assertEquals( 33 "!!org.yaml.snakeyaml.representer.RepresenterTest$MyBean {name: Gnome, primitive: true}\n", 34 yaml.dump(bean)); 35 } 36 37 public static class MyBean { 38 private String name; 39 private Boolean valid; 40 private boolean primitive; 41 42 public String getName() { 43 return name; 44 } 45 46 public void setName(String name) { 47 this.name = name; 48 } 49 50 public Boolean isValid() { 51 return valid; 52 } 53 54 public void setValid(Boolean valid) { 55 this.valid = valid; 56 } 57 58 public boolean isPrimitive() { 59 return primitive; 60 } 61 62 public void setPrimitive(boolean primitive) { 63 this.primitive = primitive; 64 } 65 } 66 67 public void testRepresenterNoConstructorAvailable() { 68 MyBean2 bean = new MyBean2("Gnome", true); 69 DumperOptions options = new DumperOptions(); 70 options.setAllowReadOnlyProperties(true); 71 Yaml yaml = new Yaml(options); 72 assertEquals("!!org.yaml.snakeyaml.representer.RepresenterTest$MyBean2 {valid: true}\n", 73 yaml.dump(bean)); 74 } 75 76 public static class MyBean2 { 77 private String name; 78 private Boolean valid; 79 80 public MyBean2(String name, Boolean valid) { 81 this(); 82 this.name = name; 83 this.valid = valid; 84 } 85 86 private MyBean2() { 87 super(); 88 } 89 90 private String getName() { 91 return name; 92 } 93 94 public Boolean getValid() { 95 return valid; 96 } 97 98 @Override 99 public String toString() { 100 return getName() + " " + getValid(); 101 } 102 } 103 104 public void testRepresenterGetterWithException() { 105 MyBean3 bean = new MyBean3("Gnome", false); 106 DumperOptions options = new DumperOptions(); 107 options.setAllowReadOnlyProperties(true); 108 Yaml yaml = new Yaml(options); 109 try { 110 String str = yaml.dump(bean); 111 fail("Exception must be reported: " + str); 112 } catch (Exception e) { 113 assertTrue(true); 114 } 115 // no exception 116 MyBean3 bean2 = new MyBean3("Gnome", true); 117 String str = yaml.dump(bean2); 118 // isValid is no JavaBean property (it must be a primitive then) 119 assertEquals( 120 "isValid property must not be dumped.", 121 "!!org.yaml.snakeyaml.representer.RepresenterTest$MyBean3 {boolProperty: true, name: Gnome}\n", 122 str); 123 } 124 125 public static class MyBean3 { 126 private String name; 127 private Boolean valid; 128 private boolean boolProperty; 129 130 public MyBean3(String name, Boolean valid) { 131 this.name = name; 132 this.valid = valid; 133 boolProperty = true; 134 } 135 136 public String getName() { 137 if (valid) { 138 return name; 139 } else { 140 throw new UnsupportedOperationException("Test."); 141 } 142 } 143 144 public Boolean isValid() { 145 return valid; 146 } 147 148 public boolean isBoolProperty() { 149 return boolProperty; 150 } 151 152 @Override 153 public String toString() { 154 return "MyBean3<" + name + ", " + isValid() + ">"; 155 } 156 } 157 158 public void testRepresenterAddNull() { 159 Representer representer = new Representer(); 160 try { 161 representer.addClassTag(EmptyBean.class, (Tag) null); 162 fail("Tag must be provided."); 163 } catch (Exception e) { 164 assertEquals("Tag must be provided.", e.getMessage()); 165 } 166 } 167 168 public void testRepresenterEmptyBean() { 169 EmptyBean bean = new EmptyBean(); 170 Yaml yaml = new Yaml(); 171 try { 172 yaml.dump(bean); 173 fail("EmptyBean has empty representation."); 174 } catch (Exception e) { 175 assertEquals( 176 "No JavaBean properties found in org.yaml.snakeyaml.representer.RepresenterTest$EmptyBean", 177 e.getMessage()); 178 } 179 } 180 181 public static class EmptyBean { 182 private int number; 183 184 public void process() { 185 number += 1; 186 } 187 188 public int obtain() { 189 return number; 190 } 191 } 192} 193