Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 346be8db

Přidáno uživatelem Alex Konig před téměř 4 roky(ů)

re #8934 Testing JsonParser

Zobrazit rozdíly:

Server/ServerApp/WeatherPredictionParser/IJsonParser.cs
3 3
//
4 4

  
5 5
using ServerApp.Parser.OutputInfo;
6
using System;
6 7
using System.Collections.Generic;
7 8

  
8 9
namespace ServerApp.WeatherPredictionParser
......
15 16

  
16 17
        /// <summary> Current weather </summary>
17 18
        WeatherInfo current;
18
        public WeatherInfo Current { get => current; set => predictions = value; }
19
        public WeatherInfo Current { get => current; set => current = value; }
19 20

  
20 21
        /// <summary> Prediction for today, tommorrow and day after tommorrow </summary>
21 22
        List<WeatherInfo> predictions;
......
27 28
        /// </summary>
28 29
        abstract public void ParsePrediction();
29 30

  
31
        /// <summary>
32
        /// Get predictions from Predictions that are within specified time span
33
        /// </summary>
34
        /// <param name="from">DateTime from</param>
35
        /// <param name="to">DateTime to</param>
36
        /// <returns>List of predictions that fit specified criteria</returns>
37
        abstract public List<WeatherInfo> GetPredictionForTime(DateTime from, DateTime to);
38

  
39

  
40

  
30 41
    }
31 42

  
32 43
}
Server/ServerApp/WeatherPredictionParser/JsonParser.cs
29 29
        /// <summary> Sunset time of currently parsed day </summary>
30 30
        DateTime sunsetTime;
31 31

  
32

  
33 32
        /// <summary>
34 33
        /// Constructor
35 34
        /// </summary>
......
39 38
            this.loader = loader;
40 39
        }
41 40

  
41
        /// <summary>
42
        /// Get predictions from Predictions that are within specified time span
43
        /// From-to including
44
        /// If from == DateTime.Min then all until to
45
        /// If to  == DateTime.Max then all starting from from
46
        /// </summary>
47
        /// <param name="from">DateTime from</param>
48
        /// <param name="to">DateTime to</param>
49
        /// <returns>List of predictions that fit specified criteria or null if incorrect input</returns>
50
        public override List<WeatherInfo> GetPredictionForTime(DateTime from, DateTime to)
51
        {
52
            if (Predictions == null)
53
                return null;
54

  
55
            List<WeatherInfo> res = new List<WeatherInfo>();
56

  
57
            if (from == DateTime.MinValue)
58
                from = Predictions[0].startTime;
59

  
60
            if (to == DateTime.MaxValue) {
61
                DateTime dt = Predictions[Predictions.Count - 1].startTime;
62
                int hour = dt.Hour + Predictions[Predictions.Count - 1].intervalLength;
63
                bool addDay = false;
64
                if (hour >= 24)
65
                {
66
                    hour -= 24;
67
                    addDay = true;
68
                }
69
                to = new DateTime(dt.Year, dt.Month, dt.Day, hour, dt.Minute, dt.Second);
70
                if (addDay)
71
                    to = to.AddDays(1);
72
            }
73

  
74
            if (from > to)
75
                return null;
76

  
77
            // for all parsed weather info
78
            foreach (WeatherInfo pred in Predictions)
79
            {
80
                int hour = pred.startTime.Hour + pred.intervalLength;
81
                bool addDay = false;
82
                if (hour >= 24)
83
                {
84
                    hour -= 24;
85
                    addDay = true;
86
                }
87
                DateTime endTime = new DateTime(pred.startTime.Year, pred.startTime.Month, pred.startTime.Day, hour, pred.startTime.Minute, pred.startTime.Second);
88
                if (addDay)
89
                    endTime = endTime.AddDays(1);
90

  
91
                // if both end and start not outside of interval
92
                if (!((pred.startTime < from && endTime <= from) || (pred.startTime > to && endTime > to)))
93
                    res.Add(pred);
94
            }
95

  
96
            return res;
97
        }
98

  
99

  
42 100
        /// <summary>
43 101
        /// Parse weather prediction
44 102
        /// Results is in attributes current for current weather and pred for weather prediction for today, tommorrow and day after tommorrow
Server/TestProject/ParserTests/TestingParser.cs
1015 1015
        [TestMethod]
1016 1016
        public void JsonParser()
1017 1017
        {
1018
            // TODO needs rewrite after DataDownloader has correct download method
1018
            /*
1019 1019
            TagInfo.CreateDictionaries();
1020 1020

  
1021
            // TODO make an input file
1021 1022
            string data = "";
1022 1023

  
1023 1024
            Mock<DataDownloader> dl = new Mock<DataDownloader>();
......
1038 1039
            Assert.AreEqual(new ActivityInfo("FDU", 7, new DateTime(2000, 1, 1, 17, 0, 0), 2), retVal[5]);
1039 1040
            Assert.AreEqual(new ActivityInfo("FDU", 7, new DateTime(2000, 1, 1, 17, 0, 0), 2), retVal[6]);
1040 1041
            Assert.AreEqual(new ActivityInfo("FDU", 7, new DateTime(2000, 1, 1, 17, 0, 0), 2), retVal[7]);
1042
            */
1043
        }
1044

  
1045

  
1046
        [TestMethod]
1047
        public void GetPredictionForTimeFilter()
1048
        {
1049
            string data = "";
1050
            Mock<DataDownloader> dl = new Mock<DataDownloader>("", "", "");
1051
            dl.Setup(m => m.DownloadWeatherPrediction()).Returns(data);
1052

  
1053
            JsonParser target = new JsonParser(dl.Object);
1054

  
1055
            List<WeatherInfo> pred = new List<WeatherInfo>();
1056
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 0, 0, 0), 8, 1, 2, 60_000, 3));
1057

  
1058
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 3, 0, 0), 8, 1, 2, 60_000, 6));
1059
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 12, 0, 0), 8, 1, 2, 60_000, 6));
1060
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 18, 0, 0), 8, 1, 2, 60_000, 12));
1061
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 2, 6, 0, 0), 8, 1, 2, 60_000, 3));
1062
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 2, 9, 0, 0), 8, 1, 2, 60_000, 15));
1063
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 3, 0, 0, 0), 8, 1, 2, 60_000, 3));
1064

  
1065
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 3, 3, 0, 0), 8, 1, 2, 60_000, 3));
1066

  
1067
            target.Predictions = pred;
1068

  
1069
            List<WeatherInfo> retVal = target.GetPredictionForTime(new DateTime(2000, 1, 1, 6, 0, 0), new DateTime(2000, 1, 3, 0, 0, 0));
1070

  
1071
            Assert.AreEqual(6, retVal.Count);
1072
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 3, 0, 0), 8, 1, 2, 60_000, 6), retVal[0]);
1073
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 12, 0, 0), 8, 1, 2, 60_000, 6), retVal[1]);
1074
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 18, 0, 0), 8, 1, 2, 60_000, 12), retVal[2]);
1075
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 2, 6, 0, 0), 8, 1, 2, 60_000, 3), retVal[3]);
1076
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 2, 9, 0, 0), 8, 1, 2, 60_000, 15), retVal[4]);
1077
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 3, 0, 0, 0), 8, 1, 2, 60_000, 3), retVal[5]);
1041 1078
        }
1042 1079

  
1080
        [TestMethod]
1081
        public void GetPredictionForTimeInvalidInput()
1082
        {
1083
            string data = "";
1084
            Mock<DataDownloader> dl = new Mock<DataDownloader>("", "", "");
1085
            dl.Setup(m => m.DownloadWeatherPrediction()).Returns(data);
1086

  
1087
            JsonParser target = new JsonParser(dl.Object);
1088

  
1089
            List<WeatherInfo> pred = new List<WeatherInfo>();
1090
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 0, 0, 0), 8, 1, 2, 60_000, 3));
1091

  
1092
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 3, 0, 0), 8, 1, 2, 60_000, 6));
1093
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 12, 0, 0), 8, 1, 2, 60_000, 6));
1094
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 18, 0, 0), 8, 1, 2, 60_000, 12));
1095
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 2, 6, 0, 0), 8, 1, 2, 60_000, 3));
1096
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 2, 9, 0, 0), 8, 1, 2, 60_000, 15));
1097
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 3, 0, 0, 0), 8, 1, 2, 60_000, 3));
1098

  
1099
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 3, 3, 0, 0), 8, 1, 2, 60_000, 3));
1100

  
1101
            target.Predictions = pred;
1102

  
1103
            List<WeatherInfo> retVal = target.GetPredictionForTime(new DateTime(2000, 1, 3, 0, 0, 0), new DateTime(2000, 1, 1, 6, 0, 0));
1104
            Assert.AreEqual(null, retVal);
1105
        }
1106

  
1107
        [TestMethod]
1108
        public void GetPredictionForTimeAllTo()
1109
        {
1110
            string data = "";
1111
            Mock<DataDownloader> dl = new Mock<DataDownloader>("", "", "");
1112
            dl.Setup(m => m.DownloadWeatherPrediction()).Returns(data);
1113

  
1114
            JsonParser target = new JsonParser(dl.Object);
1115

  
1116
            List<WeatherInfo> pred = new List<WeatherInfo>();
1117
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 0, 0, 0), 8, 1, 2, 60_000, 3));
1118
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 3, 0, 0), 8, 1, 2, 60_000, 6));
1119
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 12, 0, 0), 8, 1, 2, 60_000, 6));
1120
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 18, 0, 0), 8, 1, 2, 60_000, 12));
1121
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 2, 6, 0, 0), 8, 1, 2, 60_000, 3));
1122
            
1123
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 2, 9, 0, 0), 8, 1, 2, 60_000, 15));
1124
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 3, 0, 0, 0), 8, 1, 2, 60_000, 3));
1125
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 3, 3, 0, 0), 8, 1, 2, 60_000, 3));
1126

  
1127
            target.Predictions = pred;
1128

  
1129
            List<WeatherInfo> retVal = target.GetPredictionForTime(DateTime.MinValue, new DateTime(2000, 1, 2, 6, 0, 0));
1130

  
1131
            Assert.AreEqual(5, retVal.Count);
1132
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 0, 0, 0), 8, 1, 2, 60_000, 3), retVal[0]);
1133
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 3, 0, 0), 8, 1, 2, 60_000, 6), retVal[1]);
1134
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 12, 0, 0), 8, 1, 2, 60_000, 6), retVal[2]);
1135
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 18, 0, 0), 8, 1, 2, 60_000, 12), retVal[3]);
1136
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 2, 6, 0, 0), 8, 1, 2, 60_000, 3), retVal[4]);
1137
        }
1138

  
1139
        [TestMethod]
1140
        public void GetPredictionForTimeAllFrom()
1141
        {
1142
            string data = "";
1143
            Mock<DataDownloader> dl = new Mock<DataDownloader>("", "", "");
1144
            dl.Setup(m => m.DownloadWeatherPrediction()).Returns(data);
1145

  
1146
            JsonParser target = new JsonParser(dl.Object);
1147

  
1148
            List<WeatherInfo> pred = new List<WeatherInfo>();
1149
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 0, 0, 0), 8, 1, 2, 60_000, 3));
1150
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 3, 0, 0), 8, 1, 2, 60_000, 3));
1151
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 6, 0, 0), 8, 1, 2, 60_000, 3));
1152
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 9, 0, 0), 8, 1, 2, 60_000, 3));
1153
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 12, 0, 0), 8, 1, 2, 60_000, 6));
1154
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 18, 0, 0), 8, 1, 2, 60_000, 12));
1155
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 2, 6, 0, 0), 8, 1, 2, 60_000, 3));
1156

  
1157
            target.Predictions = pred;
1158

  
1159
            List<WeatherInfo> retVal = target.GetPredictionForTime(new DateTime(2000, 1, 1, 12, 0, 0), DateTime.MaxValue);
1160

  
1161
            Assert.AreEqual(3, retVal.Count);
1162
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 12, 0, 0), 8, 1, 2, 60_000, 6), retVal[0]);
1163
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 18, 0, 0), 8, 1, 2, 60_000, 12), retVal[1]);
1164
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 2, 6, 0, 0), 8, 1, 2, 60_000, 3), retVal[2]);
1165
        }
1166

  
1167
        public void GetPredictionForTimeAll()
1168
        {
1169

  
1170
            // TODO make an input file
1171
            string data = "";
1172
            Mock<DataDownloader> dl = new Mock<DataDownloader>("", "", "");
1173
            dl.Setup(m => m.DownloadWeatherPrediction()).Returns(data);
1174

  
1175
            JsonParser target = new JsonParser(dl.Object);
1176

  
1177
            List<WeatherInfo> pred = new List<WeatherInfo>();
1178
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 0, 0, 0), 8, 1, 2, 60_000, 3));
1179
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 3, 0, 0), 8, 1, 2, 60_000, 6));
1180
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 12, 0, 0), 8, 1, 2, 60_000, 6));
1181
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 1, 18, 0, 0), 8, 1, 2, 60_000, 12));
1182
            pred.Add(new WeatherInfo(new DateTime(2000, 1, 2, 6, 0, 0), 8, 1, 2, 60_000, 3));
1183

  
1184
            target.Predictions = pred;
1185

  
1186
            List<WeatherInfo> retVal = target.GetPredictionForTime(DateTime.MinValue, DateTime.MaxValue);
1187

  
1188
            Assert.AreEqual(5, retVal.Count);
1189
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 0, 0, 0), 8, 1, 2, 60_000, 3), retVal[0]);
1190
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 3, 0, 0), 8, 1, 2, 60_000, 6), retVal[1]);
1191
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 12, 0, 0), 8, 1, 2, 60_000, 6), retVal[2]);
1192
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 1, 18, 0, 0), 8, 1, 2, 60_000, 12), retVal[3]);
1193
            Assert.AreEqual(new WeatherInfo(new DateTime(2000, 1, 2, 6, 0, 0), 8, 1, 2, 60_000, 3), retVal[4]);
1194
        }
1043 1195
        #endregion
1044 1196
    }
1045 1197
}

Také k dispozici: Unified diff