1 //
2 // Copyright (c) 2010-2018 Antmicro
3 // Copyright (c) 2011-2015 Realtime Embedded
4 //
5 // This file is licensed under the MIT License.
6 // Full license text is available in 'licenses/MIT.txt'.
7 //
8 using System;
9 using Antmicro.Renode.Peripherals;
10 using Antmicro.Renode.Peripherals.Bus;
11 using NUnit.Framework;
12 using System.Collections.Generic;
13 using System.Linq;
14 using Antmicro.Migrant;
15 using Antmicro.Renode.Core;
16 
17 namespace Antmicro.Renode.UnitTests
18 {
19     [TestFixture]
20     public class SerializableMappedSegmentTests
21     {
22         [Test]
ShouldSerializeWhenNotTouched()23         public void ShouldSerializeWhenNotTouched()
24         {
25             var testedPeripheral = new PeripheralWithMappedSegment();
26             var copy = Serializer.DeepClone(testedPeripheral);
27             var segments = copy.MappedSegments.ToArray();
28             foreach(var segment in segments)
29             {
30                 Assert.AreEqual(IntPtr.Zero, segment.Pointer);
31             }
32         }
33 
34         [Test]
ShouldSerializeWhenTouched()35         public void ShouldSerializeWhenTouched()
36         {
37             var testedPeripheral = new PeripheralWithMappedSegment();
38             testedPeripheral.Touch();
39             var copy = Serializer.DeepClone(testedPeripheral);
40             var segments = copy.MappedSegments.ToArray();
41             foreach(var segment in segments)
42             {
43                 Assert.AreNotEqual(IntPtr.Zero, segment.Pointer);
44             }
45         }
46     }
47 
48     public sealed class PeripheralWithMappedSegment : IBytePeripheral, IMapped
49     {
PeripheralWithMappedSegment()50         public PeripheralWithMappedSegment()
51         {
52             segments = new[] { new SerializableMappedSegment(4096, 0), new SerializableMappedSegment(4096, 8192) };
53         }
54 
55         public IEnumerable<IMappedSegment> MappedSegments
56         {
57             get
58             {
59                 return segments;
60             }
61         }
62 
Touch()63         public void Touch()
64         {
65             foreach(var s in segments)
66             {
67                 s.Touch();
68             }
69         }
70 
Reset()71         public void Reset()
72         {
73 
74         }
75 
ReadByte(long offset)76         public byte ReadByte(long offset)
77         {
78             return 0;
79         }
80 
WriteByte(long offset, byte value)81         public void WriteByte(long offset, byte value)
82         {
83 
84         }
85 
86         private readonly SerializableMappedSegment[] segments;
87 
88     }
89 }
90 
91