Skip to content

Commit 782eb18

Browse files
author
damanjits
committed
Added test creator program
1 parent 96432b1 commit 782eb18

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed

GeneralPackages/TestCreator.m

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
(* Wolfram Language Package *)
2+
3+
BeginPackage["TestCreater`"]
4+
(* Exported symbols added here with SymbolName::usage *)
5+
generateServiceRequests ::usage = "generateServiceRequests[] generate set of requests for given service"
6+
customExport ::usage = "customExport[file_,expr_,JSON] exports service requests data to json file"
7+
customImport ::usage = "customExport[file_,JSON] imports service requests data from json file"
8+
9+
Begin["`Private`"] (* Begin Private Context *)
10+
11+
flickrdata = {
12+
"ServiceName" -> "Flickr",
13+
"Requests" -> {
14+
{"Name" -> "ImageSearch", "RequiredParameters" -> {},
15+
"OptionalParameters" -> {"User" -> {"testwolfram13",
16+
"testwolfram1"},
17+
"Keywords" -> {"sunset", "casino", "waterfall"},
18+
"DateTaken" -> {{DateObject[{2015, 1, 1}],
19+
Today}, {DateObject[{2015, 4, 4}], Today}},
20+
"MaxItems" -> {2, 10, 15, 20},
21+
"Description" -> {"canyon", "water", "nature"},
22+
"DateUploaded" -> {{DateObject[{2015, 1, 1}],
23+
Today}, {DateObject[{2015, 4, 4}], Today}},
24+
"Location" -> {Entity[
25+
"City", {"Miami", "Florida", "UnitedStates"}],
26+
Entity["City", {"LasVegas", "Nevada", "UnitedStates"}]},
27+
"Elements" -> {"Data", "LinkedThumbnails", "Images"},
28+
"ImageSize" -> {"Small", "Medium", "Large"},
29+
"Format" -> {"Dataset"}}
30+
},
31+
{"Name" -> "AlbumImages",
32+
"RequiredParameters" -> {"AlbumID" -> {"72157644874295829",
33+
"72157626881403859", "72157621364913858"}},
34+
"OptionalParameters" ->{"MaxItems" -> {2, 10, 15, 20},
35+
"Elements" -> {"Data", "Images", "LinkedThumbnails"},
36+
"Format" -> {"Dataset"}, "ImageSize" -> {"Small", "Medium", "Large"}}
37+
}
38+
}
39+
};
40+
41+
$EXPRWRAPPER = stringifiedExpression;
42+
43+
(*helper functions*)
44+
validExpressionAsJSONDataQ[expr_?AtomQ] :=
45+
MatchQ[expr, Null | _String | _Integer | _Real];
46+
47+
validExpressionAsJSONDataQ[expr_] :=
48+
MatchQ[expr, {___?validExpressionAsJSONDataQ}];
49+
50+
expressionToString[a : Null | _String | _Integer | _Real] := a;
51+
52+
expressionToString[exprList_List] := expressionToString /@ exprList;
53+
54+
expressionToString[expr_Rule] := ruleParse[expr];
55+
56+
expressionToString[expr : Except[_List]] :=
57+
ToString[$EXPRWRAPPER[expr], InputForm,
58+
CharacterEncoding -> "ASCII"];
59+
60+
stringToExpression[str_String] :=
61+
With[{regex =
62+
RegularExpression[ToString[$EXPRWRAPPER] <> "\\[.*\\]"]},
63+
Replace[str,
64+
s_?(StringMatchQ[#, regex] &) :> (ToExpression[
65+
s] /. $EXPRWRAPPER -> Identity)]]
66+
67+
68+
ruleParse[expr_Rule] :=
69+
(
70+
expr[[1]] ->
71+
Replace[expr[[2]],
72+
rhs : Except[_?validExpressionAsJSONDataQ] :>
73+
expressionToString[rhs]]
74+
);
75+
76+
(*Define function generating parameters randomly*)
77+
randomParamGen[rparams_,oparams_, count_Integer] := Module[{orandomkeys,orandomvalues,reqrandomkeys,reqrandomvalues},
78+
orandomkeys = RandomSample[Keys[oparams], count];
79+
orandomvalues = Map[RandomChoice[oparams[#]]&, orandomkeys];
80+
If[Length[rparams]=!=0,
81+
reqrandomkeys = Keys[rparams];
82+
reqrandomvalues = Map[RandomChoice[rparams[#]]&, reqrandomkeys];
83+
(*finally join the required and optional params*)
84+
Normal@AssociationThread[Join[reqrandomkeys,orandomkeys], Join[reqrandomvalues,orandomvalues]]
85+
,
86+
Normal@AssociationThread[orandomkeys, orandomvalues]
87+
]
88+
];
89+
90+
randomParamGen[sname_String,request_] := Module[{rname,rparams,oparams,len,arg},
91+
rname = "Name"/.request;
92+
rparams = Association@"RequiredParameters"/.request;
93+
oparams = Association@"OptionalParameters"/.request;
94+
len = Length[oparams];
95+
{sname,rname,arg = randomParamGen[rparams,oparams,#]}&/@Range@len
96+
];
97+
98+
generateServiceRequests[servicedata_List] := Module[{sname,requests,requestset={}},
99+
sname = "ServiceName"/.servicedata;
100+
requests = "Requests"/.servicedata;
101+
(*generating dynamic requests for a given service*)
102+
AppendTo[requestset,randomParamGen[sname,#]]&/@requests;
103+
Flatten[requestset,1]
104+
];
105+
106+
(*Need to see if today symbol can be holded at all!*)
107+
generateServiceRequests[file_String] := Module[{servicedata,sname,requests,requestset={}},
108+
(*first import the data*)
109+
servicedata = customImport[file,"JSON"];
110+
sname = "ServiceName"/.servicedata;
111+
requests = "Requests"/.servicedata;
112+
(*generating dynamic requests for a given service*)
113+
AppendTo[requestset,randomParamGen[sname,#]]&/@requests;
114+
Flatten[requestset,1]
115+
];
116+
117+
(*Custom export function exports stringified mathematica expressions*)
118+
customExport[file_, expr_, "JSON"] :=
119+
Composition[Export[file, #, "JSON"] &, Map[ruleParse[#] &, #] &][expr];
120+
121+
customImport[file_, "JSON"] :=
122+
Composition[Sort,
123+
With[{regex =
124+
RegularExpression[ToString[$EXPRWRAPPER] <> "\\[.*\\]"]},
125+
Map[#[[1]] ->
126+
ReplaceAll[#[[2]],
127+
rhs_String?(StringMatchQ[#, regex] &) :>
128+
stringToExpression[rhs]] &, #]] &, Import[#, "JSON"] &][file];
129+
130+
131+
End[] (* End Private Context *)
132+
133+
EndPackage[]

0 commit comments

Comments
 (0)