18c0d56d55abcc0559f1472979ed31a817e678731Wouter van Oortmerssen/*
2432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai * Copyright 2014 Google Inc. All rights reserved.
3432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai *
4432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai * Licensed under the Apache License, Version 2.0 (the "License");
5432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai * you may not use this file except in compliance with the License.
6432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai * You may obtain a copy of the License at
7432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai *
8432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai *     http://www.apache.org/licenses/LICENSE-2.0
9432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai *
10432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai * Unless required by applicable law or agreed to in writing, software
11432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai * distributed under the License is distributed on an "AS IS" BASIS,
12432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai * See the License for the specific language governing permissions and
14432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai * limitations under the License.
15432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai */
16432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokai
17432f3f26a40dbc51691c6d461d8a137c5e6c9f2eloverszhaokaiusing System;
189a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutionalusing System.Collections.Generic;
199a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutionalusing System.Linq;
209a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutionalusing System.Text;
219a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
229a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutionalnamespace FlatBuffers.Test
239a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional{
249a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
259a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional    public class AssertFailedException : Exception
269a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional    {
279a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        private readonly object _expected;
289a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        private readonly object _actual;
299a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
309a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        public AssertFailedException(object expected, object actual)
319a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        {
329a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            _expected = expected;
339a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            _actual = actual;
349a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        }
359a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
369a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        public override string Message
379a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        {
389a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            get { return string.Format("Expected {0} but saw {1}", _expected, _actual); }
399a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        }
409a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional    }
419a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
429d66af6efc0498e90e2757659761ae0c4f797eeeevolutional    public class AssertArrayFailedException : Exception
439d66af6efc0498e90e2757659761ae0c4f797eeeevolutional    {
449d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        private readonly int _index;
459d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        private readonly object _expected;
469d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        private readonly object _actual;
479d66af6efc0498e90e2757659761ae0c4f797eeeevolutional
489d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        public AssertArrayFailedException(int index, object expected, object actual)
499d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        {
509d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            _index = index;
519d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            _expected = expected;
529d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            _actual = actual;
539d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        }
549d66af6efc0498e90e2757659761ae0c4f797eeeevolutional
559d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        public override string Message
569d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        {
579d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            get { return string.Format("Expected {0} at index {1} but saw {2}", _expected, _index, _actual); }
589d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        }
599d66af6efc0498e90e2757659761ae0c4f797eeeevolutional    }
609d66af6efc0498e90e2757659761ae0c4f797eeeevolutional
619a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional    public class AssertUnexpectedThrowException : Exception
629a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional    {
639a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        private readonly object _expected;
649a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
659a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        public AssertUnexpectedThrowException(object expected)
669a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        {
679a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            _expected = expected;
689a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        }
699a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
709a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        public override string Message
719a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        {
729a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            get { return string.Format("Expected exception of type {0}", _expected); }
739a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        }
749a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional    }
759a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
769a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional    public static class Assert
779a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional    {
789a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        public static void AreEqual<T>(T expected, T actual)
799a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        {
809a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            if (!expected.Equals(actual))
819a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            {
829a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional                throw new AssertFailedException(expected, actual);
839a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            }
849a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        }
859a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
869d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        public static void ArrayEqual<T>(T[] expected, T[] actual)
879d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        {
889d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            if (expected.Length != actual.Length)
899d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            {
909d66af6efc0498e90e2757659761ae0c4f797eeeevolutional                throw new AssertFailedException(expected, actual);
919d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            }
929d66af6efc0498e90e2757659761ae0c4f797eeeevolutional
939d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            for(var i = 0; i < expected.Length; ++i)
949d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            {
959d66af6efc0498e90e2757659761ae0c4f797eeeevolutional                if (!expected[i].Equals(actual[i]))
969d66af6efc0498e90e2757659761ae0c4f797eeeevolutional                {
979d66af6efc0498e90e2757659761ae0c4f797eeeevolutional                    throw new AssertArrayFailedException(i, expected, actual);
989d66af6efc0498e90e2757659761ae0c4f797eeeevolutional                }
999d66af6efc0498e90e2757659761ae0c4f797eeeevolutional            }
1009d66af6efc0498e90e2757659761ae0c4f797eeeevolutional        }
1019d66af6efc0498e90e2757659761ae0c4f797eeeevolutional
1029a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        public static void IsTrue(bool value)
1039a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        {
1049a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            if (!value)
1059a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            {
1069a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional                throw new AssertFailedException(true, value);
1079a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            }
1089a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        }
1099a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
110e083e466b85c1ae512193cee74e0dbd60be5ab87Michael Collins        public static void IsFalse(bool value)
111e083e466b85c1ae512193cee74e0dbd60be5ab87Michael Collins        {
112e083e466b85c1ae512193cee74e0dbd60be5ab87Michael Collins            if (value)
113e083e466b85c1ae512193cee74e0dbd60be5ab87Michael Collins            {
114e083e466b85c1ae512193cee74e0dbd60be5ab87Michael Collins                throw new AssertFailedException(false, value);
115e083e466b85c1ae512193cee74e0dbd60be5ab87Michael Collins            }
116e083e466b85c1ae512193cee74e0dbd60be5ab87Michael Collins        }
117e083e466b85c1ae512193cee74e0dbd60be5ab87Michael Collins
1189a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        public static void Throws<T>(Action action) where T : Exception
1199a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        {
1209a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            var caught = false;
1219a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            try
1229a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            {
1239a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional                action();
1249a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            }
125557c88c0396220e79e9a43c07f8393a5c68b739dWouter van Oortmerssen            catch (T)
1269a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            {
1279a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional                caught = true;
1289a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            }
1299a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional
1309a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            if (!caught)
1319a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            {
1329a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional                throw new AssertUnexpectedThrowException(typeof (T));
1339a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional            }
1349a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional        }
1359a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional    }
1369a1f7be6fd318ddd9545926b5925cf0a10a083e4evolutional}
137