1 /* 2 * Copyright 2015-present Facebook, Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may 5 * not use this file except in compliance with the License. You may obtain 6 * 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, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations 14 * under the License. 15 */ 16 17 package com.facebook.watchman; 18 19 import java.io.ByteArrayOutputStream; 20 import java.io.IOException; 21 import java.util.Iterator; 22 import java.util.List; 23 import java.util.Map; 24 import java.util.concurrent.BlockingQueue; 25 import java.util.concurrent.Callable; 26 import java.util.concurrent.LinkedBlockingQueue; 27 28 import org.junit.Assert; 29 import org.junit.Before; 30 31 public class WatchmanTestBase { 32 33 protected ByteArrayOutputStream mOutgoingMessageStream; 34 protected BlockingQueue<Map<String, Object>> mObjectQueue; 35 protected Callable<Map<String, Object>> mIncomingMessageGetter; 36 37 @Before setUp()38 public void setUp() throws IOException { 39 mOutgoingMessageStream = new ByteArrayOutputStream(); 40 mObjectQueue = new LinkedBlockingQueue<>(); 41 mIncomingMessageGetter = new Callable<Map<String, Object>>() { 42 @Override 43 public Map<String, Object> call() throws Exception { 44 return mObjectQueue.take(); 45 } 46 }; 47 } 48 49 @SuppressWarnings("unchecked") deepObjectEquals(List<Object> expected, List<Object> object)50 protected static void deepObjectEquals(List<Object> expected, List<Object> object) { 51 Assert.assertNotNull(object); 52 Assert.assertEquals(expected.size(), object.size()); 53 Iterator<Object> iteratorExpected = expected.iterator(); 54 Iterator<Object> iteratorObject = object.iterator(); 55 while (iteratorExpected.hasNext()) { 56 Object elementExpected = iteratorExpected.next(); 57 Object elementObject = iteratorObject.next(); 58 if (elementExpected instanceof List) { 59 Assert.assertTrue(elementObject instanceof List); 60 deepObjectEquals((List<Object>) elementExpected, (List<Object>) elementObject); 61 } else if (elementExpected instanceof Map) { 62 Assert.assertTrue(elementObject instanceof Map); 63 deepObjectEquals((Map<String, Object>) elementExpected, (Map<String,Object>) elementObject); 64 } else { 65 Assert.assertEquals(elementExpected, elementObject); 66 } 67 } 68 } 69 70 @SuppressWarnings("unchecked") deepObjectEquals(Map<String, Object> expected, Map<String, Object> object)71 protected static void deepObjectEquals(Map<String, Object> expected, Map<String, Object> object) { 72 Assert.assertNotNull(object); 73 Assert.assertEquals(expected.size(), object.size()); 74 for (String key: expected.keySet()) { 75 Object elementExpected = expected.get(key); 76 Object elementObject = object.get(key); 77 if (elementExpected instanceof List) { 78 Assert.assertTrue(elementObject instanceof List); 79 deepObjectEquals((List<Object>) elementExpected, (List<Object>) elementObject); 80 } else if (elementExpected instanceof Map) { 81 Assert.assertTrue(elementObject instanceof Map); 82 deepObjectEquals((Map<String, Object>) elementExpected, (Map<String,Object>) elementObject); 83 } else { 84 Assert.assertEquals(elementExpected, elementObject); 85 } 86 } 87 } 88 89 } 90