Пример #1
0
        public void TestPrimaryOutput() {

            var input = new RowsBuilder()
                .Row("id", 1).Field("name", "one")
                .Row("id", 2).Field("name", "two")
                .Row("id", 3).Field("name", "three")
                .ToOperation();

            var xml = @"<tfl><processes>
<add name='process'>
    <connections>
        <add name='input' provider='internal' />
        <add name='output' provider='internal' />
    </connections>
    <entities>
        <add name='entity'>
            <fields>
                <add name='id' type='int' primary-key='true' />
                <add name='name' />
            </fields>
        </add>
    </entities>
</add>
</processes></tfl>".Replace('\'', '"');

            var process = ProcessFactory.Create(xml, new TestLogger())[0];
            process.Entities[0].InputOperation = input;
            var output = process.Execute();

            Assert.IsInstanceOf<IEnumerable<Row>>(output);
            Assert.AreEqual(3, output.Count());
        }
Пример #2
0
        public void Sample() {
            var input = new RowsBuilder()
                .Row().Field("f1", 1)
                .Row().Field("f1", 2)
                .Row().Field("f1", 3)
                .Row().Field("f1", 4)
                .Row().Field("f1", 5)
                .Row().Field("f1", 6)
                .Row().Field("f1", 7)
                .Row().Field("f1", 8)
                .Row().Field("f1", 9)
                .Row().Field("f1", 10)
                .Row().Field("f1", 11)
                .Row().Field("f1", 12)
                .ToOperation();

            var sampler = new SampleOperation(50);

            var rows = TestOperation(input, sampler);

            Console.WriteLine(rows.Count);
            Assert.Greater(12, rows.Count);
            Assert.Less(1, rows.Count);

        }
Пример #3
0
        public void ConcatStrings() {
            var input = new RowsBuilder().Row().Field("f1", "v1").Field("f2", "v2").ToOperation();
            var parameters = new ParametersBuilder().Parameters("f1", "f2").ToParameters();
            var concat = new ConcatOperation("o1", parameters);

            var rows = TestOperation(input, concat);

            Assert.AreEqual("v1v2", rows[0]["o1"]);
        }
Пример #4
0
        public void ConcatNumbers() {
            var input = new RowsBuilder().Row().Field("f1", 1).Field("f2", 2).ToOperation();
            var parameters = new ParametersBuilder().Parameter("f1").Type("int32").Parameter("f2").Type("int32").ToParameters();
            var concat = new ConcatOperation("o1", parameters);

            var rows = TestOperation(input, concat);

            Assert.AreEqual("12", rows[0]["o1"]);
        }
Пример #5
0
        public void StartsWith() {
            var input = new RowsBuilder().Row("f1", "test").Row("f1", "abcd").ToOperation();
            var startsWith = new StartsWithValidatorOperation("f1", "abc", "out", false);

            var output = TestOperation(input, startsWith);

            Assert.IsFalse((bool) output[0]["out"]);
            Assert.IsTrue((bool)output[1]["out"]);
        }
Пример #6
0
        public void ParseJson() {
            var input = new RowsBuilder()
                .Row().Field("f1", "{\"i\":\"am\", \"valid\":true}").Field("out", null)
                .Row().Field("f1", "{\"i\":\"have\", \"a\":\"Prob\"lem\"}").Field("out", null).ToOperation();
            var isJson = new JsonValidatorOperation("f1", "out", false);

            var rows = TestOperation(input, isJson);

            Assert.AreEqual(true, rows[0]["out"]);
            Assert.AreEqual(false, rows[1]["out"]);
        }
Пример #7
0
        public void ContainsCharacters() {
            var input = new RowsBuilder()
                .Row("f1", "test")
                .Row("f1", "abcd").ToOperation();

            var containsCharacters = new ContainsCharactersValidatorOperation("f1", "o1", "abc", Libs.EnterpriseLibrary.Validation.Validators.ContainsCharacters.All, false);

            var output = TestOperation(input, containsCharacters);

            Assert.AreEqual(false, output[0]["o1"]);
            Assert.AreEqual(true, output[1]["o1"]);
        }
Пример #8
0
        public void ParseJson2() {
            const string goodJson = "{\"updated\": \"Thu, 10 Sep 2009 08:45:12 +0000\", \"links\": [{\"href\": \"http://www.designvitality.com/blog/2007/09/photoshop-text-effect-tutorial/\", \"type\": \"text/html\", \"rel\": \"alternate\"}], \"title\": \"Photoshop Text Effects\", \"author\": \"hotpants1\", \"comments\": \"http://delicious.com/url/90c1b26e451a090452df8b947d6298cb\", \"guidislink\": false, \"title_detail\": {\"base\": \"http://feeds.delicious.com/v2/rss/recent?min=1&count=100\", \"type\": \"text/plain\", \"language\": null, \"value\": \"Photoshop Text Effects\"}, \"link\": \"http://www.designvitality.com/blog/2007/09/photoshop-text-effect-tutorial/\", \"source\": {}, \"wfw_commentrss\": \"http://feeds.delicious.com/v2/rss/url/90c1b26e451a090452df8b947d6298cb\", \"id\": \"http://delicious.com/url/90c1b26e451a090452df8b947d6298cb#hotpants1\", \"tags\": [{\"term\": \"photoshop\", \"scheme\": \"http://delicious.com/hotpants1/\", \"label\": null}]}";
            const string badJson = "{\"updated\": \"Thu, 10 Sep 2009 08:45:12 +0000\", \"links\": [{\"href\": \"http://www.designvitality.com/blog/2007/09/photoshop-text-effect-tutorial/\", \"type\": \"text/html\", \"rel\": \"alternate\"}], \"title\": \"Photoshop Text Effects\", \"author\": \"hotpants1\", \"comments\": \"http://delicious.com/url/90c1b26e451a090452df8b947d6298cb\", \"guidislink\": false, \"title_detail\": {\"base\": \"http://feeds.delicious.com/v2/rss/recent?min=1&count=100\", \"type\": \"text/plain\", \"language\": null, \"value\": \"Photoshop Text Effects\"}, \"link\": \"http://www.designvitality.com/blog/2007/09/photoshop-text-effect-tutorial/\", \"source\": {}, \"wfw_commentrss\": \"http://feeds.delicious.com/v2/rss/url/90c1b26e451a090452df8b947d6298cb\", \"id\": \"http://delicious.com/url/90c1b26e451a090452df8b947d6298cb#hotpants1\", \"tags\": [{\"term\": \"photoshop\", scheme\": \"http://delicious.com/hotpants1/\", \"label\": null}]}";

            var input = new RowsBuilder().Row().Field("f1", goodJson).Field("o1", "").Row().Field("f1", badJson).Field("o1", "").ToOperation();
            var isJson = new JsonValidatorOperation("f1", "out", false);

            var rows = TestOperation(input, isJson);

            Assert.AreEqual(true, rows[0]["out"]);
            Assert.AreEqual(false, rows[1]["out"]);
        }
Пример #9
0
        public void TestSecondaryOutputs()
        {

            var file1 = Path.GetTempFileName();
            var file2 = Path.GetTempFileName();

            var input = new RowsBuilder()
                .Row("id", 1).Field("name", "one")
                .Row("id", 2).Field("name", "two")
                .Row("id", 3).Field("name", "three")
                .ToOperation();

            var xml = string.Format(@"<tfl><processes>
<add name='process'>
    <connections>
        <add name='input' provider='internal' />
        <add name='output' provider='internal' />
        <add name='c1' provider='file' file='{0}' />
        <add name='c2' provider='file' file='{1}' />
    </connections>
    <entities>
        <add name='name'>
            <output>
                <add name='o1' connection='c1' run-field='name' run-value='two' />
                <add name='o2' connection='c2' run-field='id' run-operator='GreaterThan' run-type='int' run-value='1' />
            </output>
            <fields>
                <add name='id' type='int' primary-key='true' />
                <add name='name' />
            </fields>
        </add>
    </entities>
</add>
</processes></tfl>", file1,file2).Replace('\'', '"');

            var process = ProcessFactory.Create(xml, new TestLogger())[0];
            process.Entities[0].InputOperation = input;
            var rows = process.Execute();

            Assert.IsNotNull(rows);

            Assert.AreEqual(3, rows.Count());
            const int header = 1;
            Assert.AreEqual(1, File.ReadAllLines(file1).Length-header);
            Assert.AreEqual(2, File.ReadAllLines(file2).Length-header);

        }
Пример #10
0
 public void Left() {
     var input = new RowsBuilder().Row("left", "left").ToOperation();
     var left = new LeftOperation("left", "o1", 3);
     var output = TestOperation(input, left);
     Assert.AreEqual("lef", output[0]["o1"]);
 }
Пример #11
0
        public void FormatPhone() {
            var input = new RowsBuilder().Row().Field("phone", "1112223333").ToOperation();
            var formatPhone = new FormatPhoneOperation("phone", "phone");

            var rows = TestOperation(input, formatPhone);

            Assert.AreEqual("(111) 222-3333", rows[0]["phone"]);
        }
Пример #12
0
 public void Join() {
     var input = new RowsBuilder().Row("x", "X").Field("y", "Y").ToOperation();
     var parameters = new ParametersBuilder().Parameters("x", "y").ToParameters();
     var join = new JoinTransformOperation("o1", "|", parameters);
     var output = TestOperation(input, join);
     Assert.AreEqual("X|Y", output[0]["o1"]);
 }
Пример #13
0
        public void Insert() {
            var input = new RowsBuilder().Row("f1", "Insertere").ToOperation();
            var insert = new InsertOperation("f1", "o1", 6, " H", null);
            var output = TestOperation(input, insert);

            Assert.AreEqual("Insert Here", output[0]["o1"]);
        }
Пример #14
0
        public void CSharpInProcess() {
            var script = Path.GetTempFileName();
            File.WriteAllText(script, @"
                public static class F {
                    public static int MinuteDiff(string orderStatus, DateTime start, DateTime end) {
                        if (orderStatus != ""Completed"" && orderStatus != ""Problematic"")
                            return 0;
                        var answer = Convert.ToInt32(Math.Round(end.Subtract(start).TotalMinutes, 0));
                        return answer > 60 ? 60 : answer;
                    }
                }
            ");

            var input = new RowsBuilder()
                .Row("OrderStatus", "Completed")
                    .Field("StartDate", DateTime.Now.AddMinutes(-30.0))
                    .Field("EndDate", DateTime.Now)
                .Row("OrderStatus", "Problematic")
                    .Field("StartDate", DateTime.Now.AddMinutes(-29.0))
                    .Field("EndDate", DateTime.Now)
                .Row("OrderStatus", "Problematic")
                    .Field("StartDate", DateTime.Now.AddMinutes(-78.0))
                    .Field("EndDate", DateTime.Now)
                .Row("OrderStatus", "x")
                    .Field("StartDate", DateTime.Now.AddMinutes(-20.0))
                    .Field("EndDate", DateTime.Now)
                .ToOperation();

            var config = new ProcessBuilder("test")
                .Connection("input").Provider("internal")
                .Connection("output").Provider("internal")
                .Script("script", script)
                .Entity("test")
                    .Field("OrderStatus")
                    .Field("StartDate").DateTime()
                    .Field("EndDate").DateTime()
                    .CalculatedField("MinuteDiff").Int()
                        .Transform("csharp")
                            .ExternalScript("script")
                            .Script("return F.MinuteDiff(OrderStatus,StartDate,EndDate);")
                                .Parameter("OrderStatus")
                                .Parameter("StartDate")
                                .Parameter("EndDate")
            .Process();

            config.Entities[0].InputOperation = input;

            var process = ProcessFactory.CreateSingle(config, new TestLogger());
            process.PipelineThreading = PipelineThreading.SingleThreaded;
            var output = process.Execute().ToArray();

            Assert.AreEqual(30, output[0]["MinuteDiff"]);
            Assert.AreEqual(29, output[1]["MinuteDiff"]);
            Assert.AreEqual(60, output[2]["MinuteDiff"]);
            Assert.AreEqual(0, output[3]["MinuteDiff"]);
        }
Пример #15
0
 public RowBuilder(ref RowsBuilder rowsBuilder, ref Row row)
 {
     _rowsBuilder = rowsBuilder;
     _row         = row;
 }
Пример #16
0
        public void If() {

            var input = new RowsBuilder()
                .Row("x", 5).Field("y", 7).Field("z", 10).Field("out", 0)
                .Row("x", 5).Field("y", 5).Field("z", 11).Field("out", 0).ToOperation();

            var parameters = new ParametersBuilder()
                .Parameter("x").Type("int32")
                .Parameter("y").Type("int32")
                .Parameter("z").Type("int32")
                .Parameter("v", "1").Name("v").Type("int32")
                .ToParameters();

            var ifTransform = new IfOperation(parameters["x"], ComparisonOperator.Equal, parameters["y"], parameters["z"], parameters["v"], "out", "int32");

            var output = TestOperation(input, ifTransform);

            Assert.AreEqual(1, output[0]["out"]);
            Assert.AreEqual(11, output[1]["out"]);
        }
Пример #17
0
        public void JavascriptWithDates() {
            const string minuteDiff = @"
                function minuteDiff(orderStatus, start, end) {
                    if (orderStatus == 'Completed' || orderStatus == 'Problematic') {

                        var answer = 0;
                        if (start.getFullYear() != 9999 && end.getFullYear() != 9999) {
                            var ms = Math.abs(start - end);
                            answer = Math.round((ms / 1000) / 60);
                        }

                        return answer > 60 ? 60 : answer;

                    } else {
                        return 0;
                    }
                }";

            var input = new RowsBuilder()
                .Row("OrderStatus", "Completed")
                    .Field("StartDate", DateTime.Now.AddMinutes(-30.0))
                    .Field("EndDate", DateTime.Now)
                .Row("OrderStatus", "Problematic")
                    .Field("StartDate", DateTime.Now.AddMinutes(-29.0))
                    .Field("EndDate", DateTime.Now)
                .Row("OrderStatus", "Problematic")
                    .Field("StartDate", DateTime.Now.AddMinutes(-78.0))
                    .Field("EndDate", DateTime.Now)
                .Row("OrderStatus", "x")
                    .Field("StartDate", DateTime.Now.AddMinutes(-20.0))
                    .Field("EndDate", DateTime.Now)
                .ToOperation();

            var scripts = new Dictionary<string, Script>() { { "script", new Script("script", minuteDiff, "") } };
            var parameters = new ParametersBuilder().Parameters("OrderStatus", "StartDate", "EndDate").ToParameters();
            var javascript = new JavascriptOperation("o1", "minuteDiff(OrderStatus,StartDate,EndDate);", scripts, parameters, new TestLogger());
            var output = TestOperation(input, javascript);

            Assert.AreEqual(30, output[0]["o1"]);
            Assert.AreEqual(29, output[1]["o1"]);
            Assert.AreEqual(60, output[2]["o1"]);
            Assert.AreEqual(0, output[3]["o1"]);
        }
Пример #18
0
        public void IfProblem() {
            const string xml = @"
<transformalize>
    <processes>
        <add name='test'>
            <connections>
                <add name='input' provider='internal' />
                <add name='output' provider='internal' />
            </connections>
            <entities>
                <add name='test' detect-changes='false'>
                    <fields>
                        <add name='email' primary-key='true' default='none' default-blank='true' />
                    </fields>
                    <calculated-fields>
                        <add name='has_email' type='bool' t='if(email,none,false,true)' />
                        <add name='another' type='bool'>
                            <transforms>
                                <add method='if' left='email' right='none' then='false' else='true' />
                            </transforms>
                        </add>
                    </calculated-fields>
                </add>
            </entities>
        </add>
    </processes>
</transformalize>
";
            var process = ProcessFactory.Create(xml.Replace('\'', '"'), new TestLogger());

            var input = new RowsBuilder()
                .Row("email", "").Field("has_email", null, "bool")
                .Row("email", "*****@*****.**").Field("has_email", null, "bool")
                .ToOperation();

            process[0].Entities[0].InputOperation = input;

            var output = process[0].Execute().ToArray();

            Assert.AreEqual(false, output[0]["has_email"]);
            Assert.AreEqual(false, output[0]["another"]);
            Assert.AreEqual(true, output[1]["has_email"]);
            Assert.AreEqual(true, output[1]["another"]);
        }
Пример #19
0
        public void Javascript() {
            const int expected = 12;

            var input = new RowsBuilder().Row("x", 3).Field("y", 4).ToOperation();
            var scripts = new Dictionary<string, Script>() { { "script", new Script("script", "function multiply(x,y) { return x*y; }", "") } };
            var parameters = new ParametersBuilder().Parameters("x", "y").ToParameters();
            var javascript = new JavascriptOperation("o1", "multiply(x,y)", scripts, parameters, new TestLogger());
            var output = TestOperation(input, javascript);

            Assert.AreEqual(expected, output[0]["o1"]);
        }
Пример #20
0
        public void AnyValueDifferentTypes() {
            var input = new RowsBuilder()
                .Row("x", "1").Field("y", "3").Field("any_1", null).Field("any_2", null)
                .Row("x", "2").Field("y", "4").Field("any_1", null).Field("any_2", null)
                .ToOperation();

            var parameters = new ParametersBuilder()
                .Parameter("x")
                .Parameter("y")
                .ToParameters();

            var any1 = new AnyOperation(new Parameter("1", 1), "any_1", ComparisonOperator.Equal, parameters, false);
            var any2 = new AnyOperation(new Parameter("2", 2), "any_2", ComparisonOperator.Equal, parameters, false);

            var output = TestOperation(input, any1, any2);

            Assert.AreEqual(false, output[0]["any_1"]);
            Assert.AreEqual(false, output[0]["any_2"]);

            Assert.AreEqual(false, output[1]["any_1"]);
            Assert.AreEqual(false, output[1]["any_2"]);

        }
Пример #21
0
        public void JsonWithJavascript() {
            var input = new RowsBuilder()
                .Row("x", "[{\"value\":false},{\"value\":true}]")
                .ToOperation();
            var parameters = new ParametersBuilder()
                .Parameter("x")
                .ToParameters();
            var js = new JavascriptOperation("out", @"
                JSON.parse(x)[1].value",
                new Dictionary<string, Script>(),
                parameters,
                new TestLogger()
            );
            var output = TestOperation(input, js);

            Assert.AreEqual(true, output[0]["out"]);
        }
Пример #22
0
        public void InsertInterval() {
            var input = new RowsBuilder().Row("date", "140607").ToOperation();
            var insertInterval = new InsertIntervalOperation("date", "date", 2, "-");
            var insert = new InsertOperation("date", "date", 0, "20", null);
            var output = TestOperation(input, insertInterval, insert);

            Assert.AreEqual("2014-06-07", output[0]["date"]);
        }
Пример #23
0
        public void InsertAnotherField() {
            var input = new RowsBuilder()
                .Row("f1", "Insertere").Field("f2", " H")
                .ToOperation();
            var insert = new InsertOperation("f1", "o1", 6, string.Empty, new Parameter("f2", null));
            var output = TestOperation(input, insert);

            Assert.AreEqual("Insert Here", output[0]["o1"]);
        }
Пример #24
0
 public void XPathByAttributeValue() {
     var input = new RowsBuilder().Row("xml", "<items><item id=\"1\">one</item><item id=\"2\">two</item><item id=\"3\">three</item></items>").ToOperation();
     var transform = new XPathOperation("xml", "value", "string", "items/item[@id = \"2\"]");
     var output = TestOperation(input, transform);
     Assert.AreEqual("two", output[0]["value"]);
 }
Пример #25
0
        public void JavascriptInProcess() {
            var script = Path.GetTempFileName();
            File.WriteAllText(script, @"
                function minuteDiff(orderStatus, start, end) {
                    if (orderStatus == 'Completed' || orderStatus == 'Problematic') {

                        var answer = 0;

                        if (start.getFullYear() != 9999 && end.getFullYear() != 9999) {
                            var ms = Math.abs(start - end);
                            answer = Math.round((ms / 1000) / 60);
                        }

                        return answer > 60 ? 60 : answer;

                    } else {
                        return 0;
                    }
                }");

            var input = new RowsBuilder()
                .Row("OrderStatus", "Completed")
                    .Field("StartDate", DateTime.Now.AddMinutes(-30.0))
                    .Field("EndDate", DateTime.Now)
                .Row("OrderStatus", "Problematic")
                    .Field("StartDate", DateTime.Now.AddMinutes(-29.0))
                    .Field("EndDate", DateTime.Now)
                .Row("OrderStatus", "Problematic")
                    .Field("StartDate", DateTime.Now.AddMinutes(-78.0))
                    .Field("EndDate", DateTime.Now)
                .Row("OrderStatus", "x")
                    .Field("StartDate", DateTime.Now.AddMinutes(-20.0))
                    .Field("EndDate", DateTime.Now)
                .ToOperation();

            var config = new ProcessBuilder("test")
                .Connection("input").Provider("internal")
                .Connection("output").Provider("internal")
                .Script("script", script)
                .Entity("test")
                    .Field("OrderStatus")
                    .Field("StartDate").DateTime()
                    .Field("EndDate").DateTime()
                    .CalculatedField("MinuteDiff").Int()
                        .Transform("javascript")
                            .ExternalScript("script")
                            .Script("minuteDiff(OrderStatus,StartDate,EndDate)")
                                .Parameter("OrderStatus")
                                .Parameter("StartDate")
                                .Parameter("EndDate")
            .Process();

            config.Entities[0].InputOperation = input;

            var process = ProcessFactory.CreateSingle(config, new TestLogger());

            var output = process.Execute().ToArray();

            Assert.AreEqual(30, output[0]["MinuteDiff"]);
            Assert.AreEqual(29, output[1]["MinuteDiff"]);
            Assert.AreEqual(60, output[2]["MinuteDiff"]);
            Assert.AreEqual(0, output[3]["MinuteDiff"]);
        }
Пример #26
0
 public void XPathByElementValue() {
     var input = new RowsBuilder().Row("xml", "<items><item id=\"1\">one</item><item id=\"2\">two</item><item id=\"3\">three</item></items>").ToOperation();
     var transform = new XPathOperation("xml", "value", "int", "items/item[. = \"one\"]/@id");
     var output = TestOperation(input, transform);
     Assert.AreEqual(1, output[0]["value"]);
 }
Пример #27
0
        public void CSharpScript() {
            var input = new RowsBuilder()
                .Row("first", "dale").Field("last", "newman").Field("full", "")
                .Row("first", "adam").Field("last", "newman").Field("full", "")
                .ToOperation();

            var parameters = new ParametersBuilder().Parameters("first", "last").ToParameters();
            var scripts = new Dictionary<string, Script>();

            const string code = @"
                return first + "" "" + last;
            ";

            var cSharp = new CSharpOperation("full", "string", code, scripts, parameters);
            var output = TestOperation(input, cSharp);
            Assert.AreEqual("dale newman", output[0]["full"].ToString());
            Assert.AreEqual("adam newman", output[1]["full"].ToString());

        }
Пример #28
0
 public RowBuilder(ref RowsBuilder rowsBuilder, ref Row row) {
     _rowsBuilder = rowsBuilder;
     _row = row;
 }
Пример #29
0
        public void IfEmpty() {
            var input = new RowsBuilder()
                .Row("x", "x").Field("y", "").Field("out", "")
                .Row("x", "").Field("y", "y").Field("out", "").ToOperation();

            var parameters = new ParametersBuilder()
                .Parameter("x")
                .Parameter("y")
                .Parameter("empty", string.Empty).Name("empty")
                .ToParameters();

            var ifTransform = new IfOperation(parameters["x"], ComparisonOperator.Equal, parameters["empty"], parameters["y"], parameters["x"], "out", "string");

            var output = TestOperation(input, ifTransform);

            Assert.AreEqual("x", output[0]["out"]);
            Assert.AreEqual("y", output[1]["out"]);
        }
Пример #30
0
        public void Filter() {
            const int expected = 1;

            var input = new RowsBuilder()
                .Row("x", 3).Field("y", 4)
                .Row("x", 3).Field("y", 5).ToOperation();
            var filter = new FilterOperation("y", "filter", "string", 5, ComparisonOperator.Equal);
            var output = TestOperation(input, filter);

            Assert.AreEqual(expected, output.Count);
        }
Пример #31
0
        public void AnyParameterDifferentTypes() {
            var input = new RowsBuilder()
                .Row("x", "1").Field("y", "3").Field("test", "1").Field("any", null)
                .Row("x", "2").Field("y", "4").Field("test", 5.0).Field("any", null)
                .ToOperation();

            var parameters = new ParametersBuilder()
                .Parameter("x")
                .Parameter("y")
                .ToParameters();

            var pIn = new ParametersBuilder()
                .Parameter("test")
                .ToParameters();

            var any = new AnyOperation(pIn["test"], "any", ComparisonOperator.Equal, parameters, false);

            var output = TestOperation(input, any);

            Assert.AreEqual(true, output[0]["any"]);
            Assert.AreEqual(false, output[1]["any"]);
        }