Skip to content

Commit

Permalink
add hosts file and {{ each }} support
Browse files Browse the repository at this point in the history
  • Loading branch information
undergroundwires committed Jan 16, 2021
1 parent cf907d0 commit b4c2c55
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 14 deletions.
34 changes: 29 additions & 5 deletions src/application/Parser/Script/Compiler/ILCode.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
export interface IILCode {
compile(): string;
getUniqueParameterNames(): string[];
substituteParameter(parameterName: string, parameterValue: string): IILCode;
substituteParameterValue(parameterName: string, parameterValue: string): IILCode;
substituteParameterValues(parameterName: string, parameterValues: readonly string[]): IILCode;
}

export function generateIlCode(rawText: string): IILCode {
Expand All @@ -16,8 +17,13 @@ class ILCode implements IILCode {
this.ilCode = ilCode;
}

public substituteParameter(parameterName: string, parameterValue: string): IILCode {
const newCode = substituteParameter(this.ilCode, parameterName, parameterValue);
public substituteParameterValues(parameterName: string, parameterValues: readonly string[]): IILCode {
const newCode = substituteParameterValues(this.ilCode, parameterName, parameterValues);
return new ILCode(newCode);
}

public substituteParameterValue(parameterName: string, parameterValue: string): IILCode {
const newCode = substituteParameterValue(this.ilCode, parameterName, parameterValue);
return new ILCode(newCode);
}

Expand Down Expand Up @@ -57,9 +63,27 @@ function getUniqueParameterNames(ilCode: string) {
}

// substitutes {{exp|$parameterName}} to value of the parameter
function substituteParameter(ilCode: string, parameterName: string, parameterValue: string) {
function substituteParameterValue(ilCode: string, parameterName: string, parameterValue: string): string {
const pattern = `{{exp|$${parameterName}}}`;
return ilCode.split(pattern).join(parameterValue); // as .replaceAll() is not yet supported by TS
return ilCode.replaceAll(pattern, parameterValue);
}

// substitutes {{exp|each $definedName in $parameterName}} to value of the parameter
function substituteParameterValues(ilCode: string, parameterName: string, parameterValues: readonly string[]): string {
let newCode = '';
const regex = new RegExp(`{{\s?each\s?\$(\w+)\s}}([\s\S]+){{\s?end\s?}}`);
const allUsages = Array.from(ilCode.matchAll(regex));
for (const usage of allUsages) {
const ilScope = usage.groups[0];
let substitutedCode = '';
for (const value of parameterValues) {
substitutedCode += substituteParameterValue(ilScope, '.', value);
}
const matchStart = usage.index;
const matchEnd = usage.index + usage.length;
newCode = ilCode.substring(matchStart, matchEnd) + substitutedCode + ilCode.substring(matchEnd);
}
return newCode;
}

function getDistinctValues(values: readonly string[]): string[] {
Expand Down
6 changes: 3 additions & 3 deletions src/application/Parser/Script/Compiler/ScriptCompiler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,11 +135,11 @@ function compileCode(func: FunctionData, parameters: FunctionCallParametersData)

function compileExpressions(code: string, parameters: FunctionCallParametersData): string {
let intermediateCode = generateIlCode(code);
intermediateCode = substituteParameters(intermediateCode, parameters);
intermediateCode = substituteParameterValues(intermediateCode, parameters);
return intermediateCode.compile();
}

function substituteParameters(intermediateCode: IILCode, parameters: FunctionCallParametersData): IILCode {
function substituteParameterValues(intermediateCode: IILCode, parameters: FunctionCallParametersData): IILCode {
const parameterNames = intermediateCode.getUniqueParameterNames();
if (parameterNames.length && !parameters) {
throw new Error(`no parameters defined, expected: ${printList(parameterNames)}`);
Expand All @@ -149,7 +149,7 @@ function substituteParameters(intermediateCode: IILCode, parameters: FunctionCal
if (!parameterValue) {
throw Error(`parameter value is not provided for "${parameterName}" in function call`);
}
intermediateCode = intermediateCode.substituteParameter(parameterName, parameterValue);
intermediateCode = intermediateCode.substituteParameterValue(parameterName, parameterValue);
}
return intermediateCode;
}
Expand Down
6 changes: 3 additions & 3 deletions src/application/Parser/ScriptingDefinitionParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ export function parseScriptingDefinition(

function applySubstitutions(code: string, info: IProjectInformation, date: Date): string {
let ilCode = generateIlCode(code);
ilCode = ilCode.substituteParameter('homepage', info.homepage);
ilCode = ilCode.substituteParameter('version', info.version);
ilCode = ilCode.substituteParameter('date', date.toUTCString());
ilCode = ilCode.substituteParameterValue('homepage', info.homepage);
ilCode = ilCode.substituteParameterValue('version', info.version);
ilCode = ilCode.substituteParameterValue('date', date.toUTCString());
return ilCode.compile();
}
41 changes: 41 additions & 0 deletions src/application/collections/windows.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,26 @@ actions:
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\TabletPC" /v "PreventHandwritingDataSharing" /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Policies\Microsoft\InputPersonalization" /v "AllowInputPersonalization" /t REG_DWORD /d 0 /f
reg add "HKCU\SOFTWARE\Microsoft\InputPersonalization\TrainedDataStore" /v "HarvestContacts" /t REG_DWORD /d 0 /f
-
category: Disable network access
children:
-
name: Block telemetry URLs in hosts file
recommend: standard
docs: https://github.com/crazy-max/WindowsSpyBlocker/blob/master/data/hosts/spy.txt
call:
function: BlockHostInHostsFile
parameters:
# domains: [ 'aka-cdn-ns.adtech.de', 'alpha.telemetry.microsoft.com', 'apac1.notify.windows.com.akadns.net', 'api.cortana.ai', 'asimov-win.settings.data.microsoft.com.akadns.net', 'b.ads1.msn.com', 'b.ads2.msads.net', 'b.rad.msn.com', 'bingads.microsoft.com', 'bl3301-a.1drv.com', 'bl3301-c.1drv.com', 'bl3301-g.1drv.com', 'bn2-ris-ap-prod-atm.trafficmanager.net', 'bn2-ris-prod-atm.trafficmanager.net', 'bn2b-cor001.api.p001.1drv.com', 'bn2b-cor002.api.p001.1drv.com', 'bn2b-cor003.api.p001.1drv.com', 'bn2b-cor004.api.p001.1drv.com', 'bn2wns1.wns.windows.com', 'bn3p-cor001.api.p001.1drv.com', 'bn3sch020010558.wns.windows.com', 'bn3sch020010560.wns.windows.com', 'bn3sch020010618.wns.windows.com', 'bn3sch020010629.wns.windows.com', 'bn3sch020010631.wns.windows.com', 'bn3sch020010635.wns.windows.com', 'bn3sch020010636.wns.windows.com', 'bn3sch020010650.wns.windows.com', 'bn3sch020011727.wns.windows.com', 'bn3sch020012850.wns.windows.com', 'bn3sch020020322.wns.windows.com', 'bn3sch020020749.wns.windows.com', 'bn3sch020022328.wns.windows.com', 'bn3sch020022335.wns.windows.com', 'bn3sch020022361.wns.windows.com', 'bn4sch101120814.wns.windows.com', 'bn4sch101120818.wns.windows.com', 'bn4sch101120911.wns.windows.com', 'bn4sch101120913.wns.windows.com', 'bn4sch101121019.wns.windows.com', 'bn4sch101121109.wns.windows.com', 'bn4sch101121118.wns.windows.com', 'bn4sch101121223.wns.windows.com', 'bn4sch101121407.wns.windows.com', 'bn4sch101121618.wns.windows.com', 'bn4sch101121704.wns.windows.com', 'bn4sch101121709.wns.windows.com', 'bn4sch101121714.wns.windows.com', 'bn4sch101121908.wns.windows.com', 'bn4sch101122117.wns.windows.com', 'bn4sch101122310.wns.windows.com', 'bn4sch101122312.wns.windows.com', 'bn4sch101122421.wns.windows.com', 'bn4sch101123108.wns.windows.com', 'bn4sch101123110.wns.windows.com', 'bn4sch101123202.wns.windows.com', 'bn4sch102110124.wns.windows.com', 'browser.pipe.aria.microsoft.com', 'bs.serving-sys.com', 'by3301-a.1drv.com', 'by3301-c.1drv.com', 'by3301-e.1drv.com', 'c.atdmt.com', 'c.msn.com', 'ca.telemetry.microsoft.com', 'cache.datamart.windows.com', 'cdn.atdmt.com', 'cds10.stn.llnw.net', 'cds1203.lon.llnw.net', 'cds1204.lon.llnw.net', 'cds1209.lon.llnw.net', 'cds1219.lon.llnw.net', 'cds1228.lon.llnw.net', 'cds1244.lon.llnw.net', 'cds1257.lon.llnw.net', 'cds1265.lon.llnw.net', 'cds1269.lon.llnw.net', 'cds1273.lon.llnw.net', 'cds1285.lon.llnw.net', 'cds1287.lon.llnw.net', 'cds1289.lon.llnw.net', 'cds1293.lon.llnw.net', 'cds1307.lon.llnw.net', 'cds1310.lon.llnw.net', 'cds1325.lon.llnw.net', 'cds1327.lon.llnw.net', 'cds177.dus.llnw.net', 'cds20005.stn.llnw.net', 'cds20404.lcy.llnw.net', 'cds20411.lcy.llnw.net', 'cds20415.lcy.llnw.net' 'cds20416.lcy.llnw.net', 'cds20417.lcy.llnw.net', 'cds20424.lcy.llnw.net', 'cds20425.lcy.llnw.net', 'cds20431.lcy.llnw.net', 'cds20435.lcy.llnw.net', 'cds20440.lcy.llnw.net', 'cds20443.lcy.llnw.net', 'cds20445.lcy.llnw.net', 'cds20450.lcy.llnw.net', 'cds20452.lcy.llnw.net', 'cds20457.lcy.llnw.net', 'cds20461.lcy.llnw.net', 'cds20469.lcy.llnw.net', 'cds20475.lcy.llnw.net', 'cds20482.lcy.llnw.net', 'cds20485.lcy.llnw.net', 'cds20495.lcy.llnw.net', 'cds21205.lon.llnw.net', 'cds21207.lon.llnw.net', 'cds21225.lon.llnw.net', 'cds21229.lon.llnw.net', 'cds21233.lon.llnw.net', 'cds21238.lon.llnw.net', 'cds21244.lon.llnw.net', 'cds21249.lon.llnw.net', 'cds21256.lon.llnw.net', 'cds21257.lon.llnw.net', 'cds21258.lon.llnw.net', 'cds21261.lon.llnw.net', 'cds21267.lon.llnw.net', 'cds21278.lon.llnw.net', 'cds21281.lon.llnw.net', 'cds21293.lon.llnw.net', 'cds21309.lon.llnw.net', 'cds21313.lon.llnw.net', 'cds21321.lon.llnw.net', 'cds299.lcy.llnw.net', 'cds308.lcy.llnw.net', 'cds30027.stn.llnw.net', 'cds310.lcy.llnw.net' 'cds38.ory.llnw.net', 'cds54.ory.llnw.net', 'cds405.lcy.llnw.net', 'cds406.lcy.llnw.net', 'cds407.fra.llnw.net', 'cds416.lcy.llnw.net', 'cds421.lcy.llnw.net', 'cds422.lcy.llnw.net', 'cds425.lcy.llnw.net', 'cds426.lcy.llnw.net', 'cds447.lcy.llnw.net', 'cds458.lcy.llnw.net', 'cds459.lcy.llnw.net', 'cds461.lcy.llnw.net', 'cds468.lcy.llnw.net', 'cds469.lcy.llnw.net', 'cds471.lcy.llnw.net', 'cds483.lcy.llnw.net', 'cds484.lcy.llnw.net', 'cds489.lcy.llnw.net', 'cds493.lcy.llnw.net', 'cds494.lcy.llnw.net', 'cds812.lon.llnw.net', 'cds815.lon.llnw.net', 'cds818.lon.llnw.net', 'cds832.lon.llnw.net', 'cds836.lon.llnw.net', 'cds840.lon.llnw.net', 'cds843.lon.llnw.net', 'cds857.lon.llnw.net', 'cds868.lon.llnw.net', 'cds869.lon.llnw.net', 'ceuswatcab01.blob.core.windows.net', 'ceuswatcab02.blob.core.windows.net', 'ch1-cor001.api.p001.1drv.com', 'ch1-cor002.api.p001.1drv.com', 'ch3301-c.1drv.com', 'ch3301-e.1drv.com', 'ch3301-g.1drv.com', 'ch3302-c.1drv.com', 'ch3302-e.1drv.com', 'compatexchange1.trafficmanager.net', 'continuum.dds.microsoft.com', 'corp.sts.microsoft.com', 'corpext.msitadfs.glbdns2.microsoft.com', 'cs.dds.microsoft.com', 'cs1.wpc.v0cdn.net', 'cy2.vortex.data.microsoft.com.akadns.net', 'db3aqu.atdmt.com', 'db5.settings.data.microsoft.com.akadns.net', 'db5.settings-win.data.microsoft.com.akadns.net', 'db5.vortex.data.microsoft.com.akadns.net', 'db5-eap.settings-win.data.microsoft.com.akadns.net', 'df.telemetry.microsoft.com', 'diagnostics.support.microsoft.com', 'eaus2watcab01.blob.core.windows.net', 'eaus2watcab02.blob.core.windows.net', 'ec.atdmt.com', 'flex.msn.com', 'g.msn.com', 'geo.settings.data.microsoft.com.akadns.net', 'geo.settings-win.data.microsoft.com.akadns.net', 'geo.vortex.data.microsoft.com.akadns.net', 'h1.msn.com', 'h2.msn.com', 'hk2.settings.data.microsoft.com.akadns.net', 'hk2.wns.windows.com', 'hk2sch130020721.wns.windows.com', 'hk2sch130020723.wns.windows.com', 'hk2sch130020726.wns.windows.com', 'hk2sch130020729.wns.windows.com', 'hk2sch130020732.wns.windows.com', 'hk2sch130020824.wns.windows.com', 'hk2sch130020843.wns.windows.com', 'hk2sch130020851.wns.windows.com', 'hk2sch130020854.wns.windows.com', 'hk2sch130020855.wns.windows.com', 'hk2sch130020924.wns.windows.com', 'hk2sch130020936.wns.windows.com', 'hk2sch130020940.wns.windows.com', 'hk2sch130020956.wns.windows.com', 'hk2sch130020958.wns.windows.com', 'hk2sch130020961.wns.windows.com', 'hk2sch130021017.wns.windows.com', 'hk2sch130021029.wns.windows.com', 'hk2sch130021035.wns.windows.com', 'hk2sch130021137.wns.windows.com', 'hk2sch130021142.wns.windows.com', 'hk2sch130021153.wns.windows.com', 'hk2sch130021217.wns.windows.com', 'hk2sch130021246.wns.windows.com', 'hk2sch130021249.wns.windows.com', 'hk2sch130021260.wns.windows.com', 'hk2sch130021264.wns.windows.com', 'hk2sch130021322.wns.windows.com', 'hk2sch130021323.wns.windows.com', 'hk2sch130021329.wns.windows.com', 'hk2sch130021334.wns.windows.com', 'hk2sch130021360.wns.windows.com', 'hk2sch130021432.wns.windows.com', 'hk2sch130021433.wns.windows.com', 'hk2sch130021435.wns.windows.com', 'hk2sch130021437.wns.windows.com', 'hk2sch130021440.wns.windows.com', 'hk2sch130021450.wns.windows.com', 'hk2sch130021518.wns.windows.com', 'hk2sch130021523.wns.windows.com', 'hk2sch130021526.wns.windows.com', 'hk2sch130021527.wns.windows.com', 'hk2sch130021544.wns.windows.com', 'hk2sch130021554.wns.windows.com', 'hk2sch130021618.wns.windows.com', 'hk2sch130021634.wns.windows.com', 'hk2sch130021638.wns.windows.com', 'hk2sch130021646.wns.windows.com', 'hk2sch130021652.wns.windows.com', 'hk2sch130021654.wns.windows.com', 'hk2sch130021657.wns.windows.com', 'hk2sch130021723.wns.windows.com', 'hk2sch130021726.wns.windows.com', 'hk2sch130021727.wns.windows.com', 'hk2sch130021730.wns.windows.com', 'hk2sch130021731.wns.windows.com', 'hk2sch130021754.wns.windows.com', 'hk2sch130021829.wns.windows.com', 'hk2sch130021830.wns.windows.com', 'hk2sch130021833.wns.windows.com', 'hk2sch130021840.wns.windows.com', 'hk2sch130021842.wns.windows.com', 'hk2sch130021851.wns.windows.com', 'hk2sch130021852.wns.windows.com', 'hk2sch130021927.wns.windows.com', 'hk2sch130021928.wns.windows.com', 'hk2sch130021929.wns.windows.com', 'hk2sch130021958.wns.windows.com', 'hk2sch130022035.wns.windows.com', 'hk2sch130022041.wns.windows.com', 'hk2sch130022049.wns.windows.com', 'hk2sch130022135.wns.windows.com', 'hk2wns1.wns.windows.com', 'hk2wns1b.wns.windows.com', 'i-am3p-cor001.api.p001.1drv.com', 'i-am3p-cor002.api.p001.1drv.com', 'i-am3p-cor003.api.p001.1drv.com', 'i-am3p-cor004.api.p001.1drv.com', 'i-am3p-cor005.api.p001.1drv.com', 'i-bl6p-cor001.api.p001.1drv.com', 'i-bl6p-cor002.api.p001.1drv.com', 'i-bn3p-cor001.api.p001.1drv.com', 'i-bn3p-cor090.api.p001.1drv.com', 'i-by3p-cor001.api.p001.1drv.com', 'i-by3p-cor002.api.p001.1drv.com', 'i-ch1-cor001.api.p001.1drv.com', 'i-ch1-cor002.api.p001.1drv.com', 'i-db3p-cor001.api.p001.1drv.com', 'i-db3p-cor002.api.p001.1drv.com', 'i-db3p-cor003.api.p001.1drv.com', 'i-db3p-cor004.api.p001.1drv.com', 'i-db3p-cor005.api.p001.1drv.com', 'i-sn2-cor001.api.p001.1drv.com', 'i-sn2-cor002.api.p001.1drv.com', 'i-sn3p-cor001.api.p001.1drv.com', 'i-sn3p-cor002.api.p001.1drv.com', 'ieonlinews.microsoft.com', 'ieonlinews.trafficmanager.net', 'insideruser.trafficmanager.net', 'lb1.www.ms.akadns.net', 'live.rads.msn.com', 'm.adnxs.com', 'mobile.pipe.aria.microsoft.com', 'modern.watson.data.microsoft.com.akadns.net', 'msedge.net', 'msntest.serving-sys.com', 'nexus.officeapps.live.com', 'nexusrules.officeapps.live.com', 'nw-umwatson.events.data.microsoft.com', 'oca.telemetry.microsoft.com', 'onecollector.cloudapp.aria.akadns.net', 'par02p.wns.windows.com', 'pre.footprintpredict.com', 'preview.msn.com', 'rad.live.com', 'rad.msn.com', 'redir.metaservices.microsoft.com', 'reports.wes.df.telemetry.microsoft.com', 'schemas.microsoft.akadns.net', 'secure.adnxs.com', 'secure.flashtalking.com', 'services.wes.df.telemetry.microsoft.com', 'settings-sandbox.data.microsoft.com', 'settings-win-ppe.data.microsoft.com', 'settings.data.glbdns2.microsoft.com', 'settingsfd-geo.trafficmanager.net', 'sg2p.wns.windows.com', 'sn3301-c.1drv.com', 'sn3301-e.1drv.com', 'sn3301-g.1drv.com', 'spynet2.microsoft.com', 'spynetalt.microsoft.com', 'spyneteurope.microsoft.akadns.net', 'sqm.df.telemetry.microsoft.com', 'sqm.telemetry.microsoft.com', 'sqm.telemetry.microsoft.com.nsatc.net', 'ssw.live.com', 'survey.watson.microsoft.com', 'tele.trafficmanager.net', 'telecommand.telemetry.microsoft.com', 'telemetry.appex.bing.net', 'telemetry.microsoft.com', 'telemetry.remoteapp.windowsazure.com', 'telemetry.urs.microsoft.com', 'teredo.ipv6.microsoft.com', 'test.activity.windows.com', 'umwatsonc.events.data.microsoft.com', 'v10.vortex-win.data.microsoft.com', 'v10-win.vortex.data.microsoft.com.akadns.net', 'v20.vortex-win.data.microsoft.com', 'view.atdmt.com', 'vortex-sandbox.data.microsoft.com', 'vortex.data.glbdns2.microsoft.com', 'vortex.data.microsoft.com', 'watson.live.com', 'watson.microsoft.com', 'watson.ppe.telemetry.microsoft.com', 'watson.telemetry.microsoft.com', 'web.vortex.data.microsoft.com', 'wes.df.telemetry.microsoft.com', 'weus2watcab01.blob.core.windows.net', 'weus2watcab02.blob.core.windows.net', 'win10.ipv6.microsoft.com', 'win1710.ipv6.microsoft.com', 'win8.ipv6.microsoft.com', 'www.msedge.net', 'ztd.dds.microsoft.com' ]
domains: [ 'aka-cdn-ns.adtech.de' ]
-
name: Block Windows Update
docs: https://github.com/crazy-max/WindowsSpyBlocker/blob/master/data/hosts/update.txt
-
name: Block third party applications from Microsoft like Skype, OneDrive, Live, etc...
recommend: strict
docs: https://github.com/crazy-max/WindowsSpyBlocker/blob/master/data/hosts/extra.txt

-
category: Deny app access to personal information
children:
Expand Down Expand Up @@ -4220,3 +4240,24 @@ functions:
) else (
echo Could not find backup file "{{ $filePath }}.OLD" 1>&2
)
-
name: BlockHostInHostsFile
parameters: [ domains ] # TODO: Also IPV6
code:
{{ each $domains }}
# PowerShell -Command "
# $domain='{{ $domain }}';
# $file=\"$env:windir\System32\drivers\etc\hosts\";
# @(\"0.0.0.0`t$domain\",\"::`t$domain\") | ForEach {
# If (!(Select-String -Path $file -pattern $_)) {$_ | Out-File $file -Append -Encoding UTF8}
# }
# "
echo "Add hosts entry for {{ . }}"
{{ end }}
revertCode:
Yaraklar
# PowerShell -Command "$domain='a.ads1.msn.com';
# $file=\"$env:windir\System32\drivers\etc\hosts\";
# @(\"0.0.0.0`t$domain\",\"::`t$domain\") | ForEach {
# (Get-Content $file) -NotMatch $_ | Set-Content $file
# }"
9 changes: 9 additions & 0 deletions test.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@echo off

:: Add
PowerShell -Command "$domain='localhost'; $file=\"$env:windir\System32\drivers\etc\hosts\"; @(\"0.0.0.0`t$domain\",\"::`t$domain\") | ForEach { If (!(Select-String -Path $file -pattern $_)){$_ | Out-File $file -Append -Encoding UTF8}}"

:: Revert
PowerShell -Command "$domain='localhost'; $file=\"$env:windir\System32\drivers\etc\hosts\"; @(\"0.0.0.0`t$domain\",\"::`t$domain\") | ForEach { (Get-Content $file) -NotMatch $_ | Set-Content $file }"

pause
6 changes: 3 additions & 3 deletions tests/unit/application/Parser/Script/Compiler/ILCode.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ describe('ILCode', () => {
});
}
});
describe('substituteParameter', () => {
describe('substituteParameterValue', () => {
describe('substitutes by ignoring white spaces inside mustaches', () => {
// arrange
const mustacheVariations = [
Expand All @@ -57,7 +57,7 @@ describe('ILCode', () => {
const expected = 'Hello world!';
// act
const actual = ilCode
.substituteParameter('test', 'world')
.substituteParameterValue('test', 'world')
.compile();
// assert
expect(actual).to.deep.equal(expected);
Expand Down Expand Up @@ -108,7 +108,7 @@ describe('ILCode', () => {
let ilCode = generateIlCode(testCase.code);
for (const parameterName of Object.keys(testCase.parameters)) {
const value = testCase.parameters[parameterName];
ilCode = ilCode.substituteParameter(parameterName, value);
ilCode = ilCode.substituteParameterValue(parameterName, value);
}
const actual = ilCode.compile();
// assert
Expand Down

0 comments on commit b4c2c55

Please sign in to comment.