You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openaz.apache.org by pd...@apache.org on 2015/05/13 18:02:44 UTC
[22/56] [abbrv] [partial] incubator-openaz git commit: Merging
re-factoring with PMD work
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/cfbe399c/openaz-xacml-test/src/test/java/org/apache/openaz/xacml/pdp/std/functions/FunctionDefinitionDateTimeArithmeticTest.java
----------------------------------------------------------------------
diff --cc openaz-xacml-test/src/test/java/org/apache/openaz/xacml/pdp/std/functions/FunctionDefinitionDateTimeArithmeticTest.java
index 2b88ced,0000000..e8340d8
mode 100644,000000..100644
--- a/openaz-xacml-test/src/test/java/org/apache/openaz/xacml/pdp/std/functions/FunctionDefinitionDateTimeArithmeticTest.java
+++ b/openaz-xacml-test/src/test/java/org/apache/openaz/xacml/pdp/std/functions/FunctionDefinitionDateTimeArithmeticTest.java
@@@ -1,1601 -1,0 +1,1722 @@@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.openaz.xacml.pdp.std.functions;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openaz.xacml.api.XACML3;
+import org.apache.openaz.xacml.pdp.policy.ExpressionResult;
+import org.apache.openaz.xacml.pdp.policy.FunctionArgument;
+import org.apache.openaz.xacml.pdp.policy.FunctionArgumentAttributeValue;
+import org.apache.openaz.xacml.pdp.std.StdFunctions;
+import org.apache.openaz.xacml.pdp.std.functions.FunctionDefinitionDateTimeArithmetic;
+import org.apache.openaz.xacml.std.datatypes.DataTypes;
+import org.apache.openaz.xacml.std.datatypes.ISO8601Date;
+import org.apache.openaz.xacml.std.datatypes.ISO8601DateTime;
+import org.apache.openaz.xacml.std.datatypes.ISO8601Time;
+import org.apache.openaz.xacml.std.datatypes.ISO8601TimeZone;
+import org.apache.openaz.xacml.std.datatypes.XPathDayTimeDuration;
+import org.apache.openaz.xacml.std.datatypes.XPathYearMonthDuration;
+import org.junit.Test;
+
+/**
- * Test of PDP Functions (See XACML core spec section A.3)
- *
- * TO RUN - use jUnit
- * In Eclipse select this file or the enclosing directory, right-click and select Run As/JUnit Test
- *
- *
++ * Test of PDP Functions (See XACML core spec section A.3) TO RUN - use jUnit In Eclipse select this file or
++ * the enclosing directory, right-click and select Run As/JUnit Test
+ */
+public class FunctionDefinitionDateTimeArithmeticTest {
+
-
+ /*
+ * variables useful in the following tests
+ */
+ List<FunctionArgument> arguments = new ArrayList<FunctionArgument>();
+
+ ExpressionResult res;
+
-
+ @Test
+ public void testDateTime_add_dayTimeDuration() {
+ // Date objects to be adjusted
- ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 777));
- ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null,
- new ISO8601Date(2000, 12, 31),
- new ISO8601Time(23, 59, 30, 1));
- ISO8601DateTime dateTimeBC = new ISO8601DateTime(null,
- new ISO8601Date(-2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
++ ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 0));
++ ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 777));
++ ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null, new ISO8601Date(2000, 12, 31),
++ new ISO8601Time(23, 59, 30, 1));
++ ISO8601DateTime dateTimeBC = new ISO8601DateTime(null, new ISO8601Date(-2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 0));
+ ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
+ ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0));
- ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0));
++ ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0, new ISO8601Date(timeZone0, 2000,
++ 1, 12),
++ new ISO8601Time(timeZone0, 12, 13, 14, 0));
++ ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5, new ISO8601Date(timeZone5, 2000,
++ 1, 12),
++ new ISO8601Time(timeZone5, 12, 13, 14, 0));
+ ISO8601DateTime dateTimeIIC102Result = null;
+
+ // Durations
+ XPathDayTimeDuration duration0 = new XPathDayTimeDuration(1, 0, 0, 0, 0);
+ XPathDayTimeDuration durationStdExample1 = new XPathDayTimeDuration(1, 5, 7, 10, 3.3);
+ XPathDayTimeDuration durationNStdExample1 = new XPathDayTimeDuration(-1, 5, 7, 10, 3.3);
+ XPathDayTimeDuration durationMsecs = new XPathDayTimeDuration(1, 5, 7, 10, 3.223);
+ XPathDayTimeDuration durationCrossover = new XPathDayTimeDuration(1, 0, 0, 0, 29.999);
+
+ // ARGS declarations
+ // Dates
+ FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
+ FunctionArgumentAttributeValue attrDateTimeMsecs = null;
+ FunctionArgumentAttributeValue attrDateTimeCrossover = null;
+ FunctionArgumentAttributeValue attrDateTimeBC = null;
+ FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
+ FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
+ FunctionArgumentAttributeValue attrDateTimeIIC102 = null;
+
+ // Durations
+ FunctionArgumentAttributeValue attrDuration0 = null;
+ FunctionArgumentAttributeValue attrDurationStdExample1 = null;
+ FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
+ FunctionArgumentAttributeValue attrDurationMsecs = null;
+ FunctionArgumentAttributeValue attrDurationCrossover = null;
+ FunctionArgumentAttributeValue attrDurationIIC102 = null;
+
+ // misc bad
+ FunctionArgumentAttributeValue attrNull = null;
+ FunctionArgumentAttributeValue attrBlank = null;
+ FunctionArgumentAttributeValue attrInteger = null;
+ // set values
+ try {
+ // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone5));
- attrDateTimeIIC102 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(DataTypes.DT_DATETIME.convert("2002-03-22T08:23:47-05:00")));
++ attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeStdExample1));
++ attrDateTimeMsecs = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeMsecs));
++ attrDateTimeCrossover = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeCrossover));
++ attrDateTimeBC = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeBC));
++ attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeTimeZone0));
++ attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeTimeZone5));
++ attrDateTimeIIC102 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(DataTypes.DT_DATETIME
++ .convert("2002-03-22T08:23:47-05:00")));
+
+ dateTimeIIC102Result = DataTypes.DT_DATETIME.convert("2002-03-27T10:23:47-05:00");
+
+ // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationCrossover));
- attrDurationIIC102 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue("P5DT2H0M0S"));
++ attrDuration0 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(duration0));
++ attrDurationStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(durationStdExample1));
++ attrDurationNStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(durationNStdExample1));
++ attrDurationMsecs = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(durationMsecs));
++ attrDurationCrossover = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(durationCrossover));
++ attrDurationIIC102 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue("P5DT2H0M0S"));
+
+ // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(null));
++ attrBlank = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(""));
++ attrNull = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(null));
+ attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
+ } catch (Exception e) {
- fail("creating attributes e="+ e);
++ fail("creating attributes e=" + e);
+ }
+
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATETIME_ADD_DAYTIMEDURATION;
++ FunctionDefinitionDateTimeArithmetic<?, ?> fd = (FunctionDefinitionDateTimeArithmetic<?, ?>)StdFunctions.FD_DATETIME_ADD_DAYTIMEDURATION;
+
+ // check identity and type of the thing created
+ assertEquals(XACML3.ID_FUNCTION_DATETIME_ADD_DAYTIMEDURATION, fd.getId());
+ assertEquals(DataTypes.DT_DATETIME.getId(), fd.getDataTypeId());
+
- // just to be safe... If tests take too long these can probably be eliminated
++ // just to be safe... If tests take too long these can probably be eliminated
+ assertFalse(fd.returnsBag());
+
+ // Duration = 0 => same as original
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDuration0);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ ISO8601DateTime resValue = (ISO8601DateTime)res.getValue().getValue();
+ assertEquals(dateTimeStdExample1, resValue);
+
-
+ // simple positive operation
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- ISO8601DateTime testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 17),
- new ISO8601Time(19, 23, 17, 300) );
++ ISO8601DateTime testResponse = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 17),
++ new ISO8601Time(19, 23, 17, 300));
+ assertEquals(testResponse, resValue);
+
+ // negative operation
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDurationNStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 7),
- new ISO8601Time(5, 3, 10, 700) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 7), new ISO8601Time(5, 3, 10, 700));
+ assertEquals(testResponse, resValue);
+
+ // millisecs work correctly
+ arguments.clear();
+ arguments.add(attrDateTimeMsecs);
+ arguments.add(attrDurationMsecs);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 17),
- new ISO8601Time(19, 23, 18, 0) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 17), new ISO8601Time(19, 23, 18, 0));
+ assertEquals(testResponse, resValue);
+
+ // cross minute => cross day => cross month => cross year
+ arguments.clear();
+ arguments.add(attrDateTimeCrossover);
+ arguments.add(attrDurationCrossover);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2001, 1, 1),
- new ISO8601Time(0, 0, 0, 0) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(2001, 1, 1), new ISO8601Time(0, 0, 0, 0));
+ assertEquals(testResponse, resValue);
+
+ // negative (BC) original date add goes the right direction
+ arguments.clear();
+ arguments.add(attrDateTimeBC);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(-2000, 1, 17),
- new ISO8601Time(19, 23, 17, 300) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(-2000, 1, 17), new ISO8601Time(19, 23, 17,
++ 300));
+ assertEquals(testResponse, resValue);
+
+ // non-null timezone not changed
+ // original has timezone offset = 0
+ arguments.clear();
+ arguments.add(attrDateTimeTimeZone0);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 17),
- new ISO8601Time(timeZone0, 19, 23, 17, 300) );
++ testResponse = new ISO8601DateTime(timeZone0, new ISO8601Date(timeZone0, 2000, 1, 17),
++ new ISO8601Time(timeZone0, 19, 23, 17, 300));
+ assertEquals(testResponse, resValue);
+
+ // original has timezone offset not 0
+ arguments.clear();
+ arguments.add(attrDateTimeTimeZone5);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 17),
- new ISO8601Time(timeZone5, 19, 23, 17, 300) );
++ testResponse = new ISO8601DateTime(timeZone5, new ISO8601Date(timeZone5, 2000, 1, 17),
++ new ISO8601Time(timeZone5, 19, 23, 17, 300));
+ assertEquals(testResponse, resValue);
+
+ // conformance test IIC102
+ arguments.clear();
+ arguments.add(attrDateTimeIIC102);
+ arguments.add(attrDurationIIC102);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
+ assertEquals(dateTimeIIC102Result, resValue);
+
+ // empty non-null first arg
+ arguments.clear();
+ arguments.add(attrBlank);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // empty non-null second arg
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrBlank);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // two blanks
+ arguments.clear();
+ arguments.add(attrBlank);
+ arguments.add(attrBlank);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // null firat arg
+ arguments.clear();
+ arguments.add(attrNull);
+ arguments.add(attrBlank);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // null second arg
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrNull);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // bad arg type
+ arguments.clear();
+ arguments.add(attrInteger);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Expected data type 'dateTime' saw 'integer'", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-dayTimeDuration Expected data type 'dateTime' saw 'integer'", res
++ .getStatus().getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // null second arg
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrNull);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+ }
+
-
-
+ @Test
+ public void testDateTime_subtract_dayTimeDuration() {
+ // Date objects to be adjusted
- ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 777));
- ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null,
- new ISO8601Date(2001, 1, 1),
- new ISO8601Time(0, 0, 0, 0) );
- ISO8601DateTime dateTimeBC = new ISO8601DateTime(null,
- new ISO8601Date(-2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
++ ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 0));
++ ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 777));
++ ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null, new ISO8601Date(2001, 1, 1),
++ new ISO8601Time(0, 0, 0, 0));
++ ISO8601DateTime dateTimeBC = new ISO8601DateTime(null, new ISO8601Date(-2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 0));
+ ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
+ ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0));
- ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0));
++ ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0, new ISO8601Date(timeZone0, 2000,
++ 1, 12),
++ new ISO8601Time(timeZone0, 12, 13, 14, 0));
++ ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5, new ISO8601Date(timeZone5, 2000,
++ 1, 12),
++ new ISO8601Time(timeZone5, 12, 13, 14, 0));
+
+ // Durations
+ XPathDayTimeDuration duration0 = new XPathDayTimeDuration(1, 0, 0, 0, 0);
+ XPathDayTimeDuration durationStdExample1 = new XPathDayTimeDuration(1, 5, 7, 10, 3.3);
+ XPathDayTimeDuration durationNStdExample1 = new XPathDayTimeDuration(-1, 5, 7, 10, 3.3);
+ XPathDayTimeDuration durationMsecs = new XPathDayTimeDuration(1, 5, 7, 10, 14.778);
+ XPathDayTimeDuration durationCrossover = new XPathDayTimeDuration(1, 0, 0, 0, 29.999);
+
+ // ARGS declarations
+ // Dates
+ FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
+ FunctionArgumentAttributeValue attrDateTimeMsecs = null;
+ FunctionArgumentAttributeValue attrDateTimeCrossover = null;
+ FunctionArgumentAttributeValue attrDateTimeBC = null;
+ FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
+ FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
+
+ // Durations
+ FunctionArgumentAttributeValue attrDuration0 = null;
+ FunctionArgumentAttributeValue attrDurationStdExample1 = null;
+ FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
+ FunctionArgumentAttributeValue attrDurationMsecs = null;
+ FunctionArgumentAttributeValue attrDurationCrossover = null;
+
+ // misc bad
+ FunctionArgumentAttributeValue attrNull = null;
+ FunctionArgumentAttributeValue attrBlank = null;
+ FunctionArgumentAttributeValue attrInteger = null;
+ // set values
+ try {
+ // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone5));
++ attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeStdExample1));
++ attrDateTimeMsecs = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeMsecs));
++ attrDateTimeCrossover = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeCrossover));
++ attrDateTimeBC = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeBC));
++ attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeTimeZone0));
++ attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeTimeZone5));
+
+ // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(durationCrossover));
++ attrDuration0 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(duration0));
++ attrDurationStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(durationStdExample1));
++ attrDurationNStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(durationNStdExample1));
++ attrDurationMsecs = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(durationMsecs));
++ attrDurationCrossover = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(durationCrossover));
+
+ // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_DAYTIMEDURATION.createAttributeValue(null));
++ attrBlank = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(""));
++ attrNull = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DAYTIMEDURATION
++ .createAttributeValue(null));
+ attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
+ } catch (Exception e) {
- fail("creating attributes e="+ e);
++ fail("creating attributes e=" + e);
+ }
+
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATETIME_SUBTRACT_DAYTIMEDURATION;
++ FunctionDefinitionDateTimeArithmetic<?, ?> fd = (FunctionDefinitionDateTimeArithmetic<?, ?>)StdFunctions.FD_DATETIME_SUBTRACT_DAYTIMEDURATION;
+
+ // check identity and type of the thing created
+ assertEquals(XACML3.ID_FUNCTION_DATETIME_SUBTRACT_DAYTIMEDURATION, fd.getId());
+ assertEquals(DataTypes.DT_DATETIME.getId(), fd.getDataTypeId());
+
- // just to be safe... If tests take too long these can probably be eliminated
++ // just to be safe... If tests take too long these can probably be eliminated
+ assertFalse(fd.returnsBag());
+
+ // Duration = 0 => same as original
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDuration0);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ ISO8601DateTime resValue = (ISO8601DateTime)res.getValue().getValue();
+ assertEquals(dateTimeStdExample1, resValue);
+
-
+ // simple positive operation
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- ISO8601DateTime testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 7),
- new ISO8601Time(5, 3, 10, 700) );
++ ISO8601DateTime testResponse = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 7),
++ new ISO8601Time(5, 3, 10, 700));
+ assertEquals(testResponse, resValue);
+
-
+ // negative operation
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDurationNStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 17),
- new ISO8601Time(19, 23, 17, 300) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 17), new ISO8601Time(19, 23, 17,
++ 300));
+ assertEquals(testResponse, resValue);
+
+ // millisecs work correctly
+ arguments.clear();
+ arguments.add(attrDateTimeMsecs);
+ arguments.add(attrDurationMsecs);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 1, 7),
- new ISO8601Time(5, 2, 59, 999) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 7), new ISO8601Time(5, 2, 59, 999));
+ assertEquals(testResponse, resValue);
+
+ // cross minute => cross day => cross month => cross year
+ arguments.clear();
+ arguments.add(attrDateTimeCrossover);
+ arguments.add(attrDurationCrossover);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2000, 12, 31),
- new ISO8601Time(23, 59, 30, 1));
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(2000, 12, 31),
++ new ISO8601Time(23, 59, 30, 1));
+ assertEquals(testResponse, resValue);
+
+ // negative (BC) original date add goes the right direction
+ arguments.clear();
+ arguments.add(attrDateTimeBC);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(-2000, 1, 7),
- new ISO8601Time(5, 3, 10, 700) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(-2000, 1, 7), new ISO8601Time(5, 3, 10, 700));
+ assertEquals(testResponse, resValue);
+
+ // non-null timezone not changed
+ // original has timezone offset = 0
+ arguments.clear();
+ arguments.add(attrDateTimeTimeZone0);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 7),
- new ISO8601Time(timeZone0, 5, 3, 10, 700) );
++ testResponse = new ISO8601DateTime(timeZone0, new ISO8601Date(timeZone0, 2000, 1, 7),
++ new ISO8601Time(timeZone0, 5, 3, 10, 700));
+ assertEquals(testResponse, resValue);
+
+ // original has timezone offset not 0
+ arguments.clear();
+ arguments.add(attrDateTimeTimeZone5);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 7),
- new ISO8601Time(timeZone5, 5, 3, 10, 700) );
++ testResponse = new ISO8601DateTime(timeZone5, new ISO8601Date(timeZone5, 2000, 1, 7),
++ new ISO8601Time(timeZone5, 5, 3, 10, 700));
+ assertEquals(testResponse, resValue);
+
+ // empty non-null first arg
+ arguments.clear();
+ arguments.add(attrBlank);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // empty non-null second arg
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrBlank);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // two blanks
+ arguments.clear();
+ arguments.add(attrBlank);
+ arguments.add(attrBlank);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // null firat arg
+ arguments.clear();
+ arguments.add(attrNull);
+ arguments.add(attrBlank);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // null second arg
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrNull);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // bad arg type
+ arguments.clear();
+ arguments.add(attrInteger);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Expected data type 'dateTime' saw 'integer'", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-subtract-dayTimeDuration Expected data type 'dateTime' saw 'integer'",
++ res.getStatus().getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // null second arg
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrNull);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-subtract-dayTimeDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+ }
+
-
-
-
-
-
-
-
-
+ @Test
+ public void testDateTime_add_yearMonthDuration() {
+ // Date objects to be adjusted
- ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 777));
- ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null,
- new ISO8601Date(2000, 12, 31),
- new ISO8601Time(23, 59, 30, 1));
- ISO8601DateTime dateTimeBC = new ISO8601DateTime(null,
- new ISO8601Date(-2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
++ ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 0));
++ ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 777));
++ ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null, new ISO8601Date(2000, 12, 31),
++ new ISO8601Time(23, 59, 30, 1));
++ ISO8601DateTime dateTimeBC = new ISO8601DateTime(null, new ISO8601Date(-2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 0));
+ ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
+ ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0));
- ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0));
++ ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0, new ISO8601Date(timeZone0, 2000,
++ 1, 12),
++ new ISO8601Time(timeZone0, 12, 13, 14, 0));
++ ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5, new ISO8601Date(timeZone5, 2000,
++ 1, 12),
++ new ISO8601Time(timeZone5, 12, 13, 14, 0));
+
+ // Durations
+ XPathYearMonthDuration duration0 = new XPathYearMonthDuration(1, 0, 0);
+ XPathYearMonthDuration durationStdExample1 = new XPathYearMonthDuration(1, 5, 7);
+ XPathYearMonthDuration durationNStdExample1 = new XPathYearMonthDuration(-1, 5, 7);
+ XPathYearMonthDuration durationMsecs = new XPathYearMonthDuration(1, 5, 7);
+ XPathYearMonthDuration durationCrossover = new XPathYearMonthDuration(1, 0, 1);
+
+ // ARGS declarations
+ // Dates
+ FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
+ FunctionArgumentAttributeValue attrDateTimeMsecs = null;
+ FunctionArgumentAttributeValue attrDateTimeCrossover = null;
+ FunctionArgumentAttributeValue attrDateTimeBC = null;
+ FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
+ FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
+
+ // Durations
+ FunctionArgumentAttributeValue attrDuration0 = null;
+ FunctionArgumentAttributeValue attrDurationStdExample1 = null;
+ FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
+ FunctionArgumentAttributeValue attrDurationMsecs = null;
+ FunctionArgumentAttributeValue attrDurationCrossover = null;
+
+ // misc bad
+ FunctionArgumentAttributeValue attrNull = null;
+ FunctionArgumentAttributeValue attrBlank = null;
+ FunctionArgumentAttributeValue attrInteger = null;
+ // set values
+ try {
+ // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone5));
++ attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeStdExample1));
++ attrDateTimeMsecs = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeMsecs));
++ attrDateTimeCrossover = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeCrossover));
++ attrDateTimeBC = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeBC));
++ attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeTimeZone0));
++ attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeTimeZone5));
+
+ // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationCrossover));
++ attrDuration0 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(duration0));
++ attrDurationStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(durationStdExample1));
++ attrDurationNStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(durationNStdExample1));
++ attrDurationMsecs = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(durationMsecs));
++ attrDurationCrossover = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(durationCrossover));
+
+ // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(null));
++ attrBlank = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(""));
++ attrNull = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(null));
+ attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
+ } catch (Exception e) {
- fail("creating attributes e="+ e);
++ fail("creating attributes e=" + e);
+ }
+
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATETIME_ADD_YEARMONTHDURATION;
++ FunctionDefinitionDateTimeArithmetic<?, ?> fd = (FunctionDefinitionDateTimeArithmetic<?, ?>)StdFunctions.FD_DATETIME_ADD_YEARMONTHDURATION;
+
+ // check identity and type of the thing created
+ assertEquals(XACML3.ID_FUNCTION_DATETIME_ADD_YEARMONTHDURATION, fd.getId());
+ assertEquals(DataTypes.DT_DATETIME.getId(), fd.getDataTypeId());
+
- // just to be safe... If tests take too long these can probably be eliminated
++ // just to be safe... If tests take too long these can probably be eliminated
+ assertFalse(fd.returnsBag());
+
+ // Duration = 0 => same as original
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDuration0);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ ISO8601DateTime resValue = (ISO8601DateTime)res.getValue().getValue();
+ assertEquals(dateTimeStdExample1, resValue);
+
-
+ // simple positive operation
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- ISO8601DateTime testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2005, 8, 12),
- new ISO8601Time(12, 13, 14, 0) );
++ ISO8601DateTime testResponse = new ISO8601DateTime(null, new ISO8601Date(2005, 8, 12),
++ new ISO8601Time(12, 13, 14, 0));
+ assertEquals(testResponse, resValue);
+
+ // negative operation
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDurationNStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(1994, 6, 12),
- new ISO8601Time(12, 13, 14, 0) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(1994, 6, 12), new ISO8601Time(12, 13, 14, 0));
+ assertEquals(testResponse, resValue);
+
+ // millisecs work correctly (not relevant to YearMonth, but should not break
+ arguments.clear();
+ arguments.add(attrDateTimeMsecs);
+ arguments.add(attrDurationMsecs);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2005, 8, 12),
- new ISO8601Time(12, 13, 14, 777) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(2005, 8, 12), new ISO8601Time(12, 13, 14,
++ 777));
+ assertEquals(testResponse, resValue);
+
+ // cross minute => cross day => cross month => cross year
+ arguments.clear();
+ arguments.add(attrDateTimeCrossover);
+ arguments.add(attrDurationCrossover);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2001, 1, 31),
- new ISO8601Time(23, 59, 30, 1) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(2001, 1, 31), new ISO8601Time(23, 59, 30, 1));
+ assertEquals(testResponse, resValue);
+
+ // negative (BC) original date add goes the right direction
+ arguments.clear();
+ arguments.add(attrDateTimeBC);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(-1995, 8, 12),
- new ISO8601Time(12, 13, 14, 0) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(-1995, 8, 12),
++ new ISO8601Time(12, 13, 14, 0));
+ assertEquals(testResponse, resValue);
+
+ // non-null timezone not changed
+ // original has timezone offset = 0
+ arguments.clear();
+ arguments.add(attrDateTimeTimeZone0);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone0,
- new ISO8601Date(timeZone0, 2005, 8, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0) );
++ testResponse = new ISO8601DateTime(timeZone0, new ISO8601Date(timeZone0, 2005, 8, 12),
++ new ISO8601Time(timeZone0, 12, 13, 14, 0));
+ assertEquals(testResponse, resValue);
+
+ // original has timezone offset not 0
+ arguments.clear();
+ arguments.add(attrDateTimeTimeZone5);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- timeZone5,
- new ISO8601Date(timeZone5, 2005, 8, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0) );
++ testResponse = new ISO8601DateTime(timeZone5, new ISO8601Date(timeZone5, 2005, 8, 12),
++ new ISO8601Time(timeZone5, 12, 13, 14, 0));
+ assertEquals(testResponse, resValue);
+
+ // empty non-null first arg
+ arguments.clear();
+ arguments.add(attrBlank);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // empty non-null second arg
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrBlank);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // two blanks
+ arguments.clear();
+ arguments.add(attrBlank);
+ arguments.add(attrBlank);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // null firat arg
+ arguments.clear();
+ arguments.add(attrNull);
+ arguments.add(attrBlank);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // null second arg
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrNull);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // bad arg type
+ arguments.clear();
+ arguments.add(attrInteger);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Expected data type 'dateTime' saw 'integer'", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-yearMonthDuration Expected data type 'dateTime' saw 'integer'",
++ res.getStatus().getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+
+ // null second arg
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrNull);
+ res = fd.evaluate(null, arguments);
+ assertFalse(res.isOk());
- assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus().getStatusMessage());
- assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode().getStatusCodeValue().stringValue());
++ assertEquals("function:dateTime-add-yearMonthDuration Got null attribute", res.getStatus()
++ .getStatusMessage());
++ assertEquals("urn:oasis:names:tc:xacml:1.0:status:processing-error", res.getStatus().getStatusCode()
++ .getStatusCodeValue().stringValue());
+ }
+
-
-
-
+ @Test
+ public void testDateTime_subtract_yearMonthDuration() {
+ // Date objects to be adjusted
- ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
- ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 12),
- new ISO8601Time(12, 13, 14, 777));
- ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null,
- new ISO8601Date(2000, 1, 1),
- new ISO8601Time(23, 59, 30, 1));
- ISO8601DateTime dateTimeBC = new ISO8601DateTime(null,
- new ISO8601Date(-2000, 1, 12),
- new ISO8601Time(12, 13, 14, 0));
++ ISO8601DateTime dateTimeStdExample1 = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 0));
++ ISO8601DateTime dateTimeMsecs = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 777));
++ ISO8601DateTime dateTimeCrossover = new ISO8601DateTime(null, new ISO8601Date(2000, 1, 1),
++ new ISO8601Time(23, 59, 30, 1));
++ ISO8601DateTime dateTimeBC = new ISO8601DateTime(null, new ISO8601Date(-2000, 1, 12),
++ new ISO8601Time(12, 13, 14, 0));
+ ISO8601TimeZone timeZone0 = new ISO8601TimeZone(0);
+ ISO8601TimeZone timeZone5 = new ISO8601TimeZone(5 * 60);
- ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0,
- new ISO8601Date(timeZone0, 2000, 1, 12),
- new ISO8601Time(timeZone0, 12, 13, 14, 0));
- ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5,
- new ISO8601Date(timeZone5, 2000, 1, 12),
- new ISO8601Time(timeZone5, 12, 13, 14, 0));
++ ISO8601DateTime dateTimeTimeZone0 = new ISO8601DateTime(timeZone0, new ISO8601Date(timeZone0, 2000,
++ 1, 12),
++ new ISO8601Time(timeZone0, 12, 13, 14, 0));
++ ISO8601DateTime dateTimeTimeZone5 = new ISO8601DateTime(timeZone5, new ISO8601Date(timeZone5, 2000,
++ 1, 12),
++ new ISO8601Time(timeZone5, 12, 13, 14, 0));
+
+ // Durations
+ XPathYearMonthDuration duration0 = new XPathYearMonthDuration(1, 0, 0);
+ XPathYearMonthDuration durationStdExample1 = new XPathYearMonthDuration(1, 5, 7);
+ XPathYearMonthDuration durationNStdExample1 = new XPathYearMonthDuration(-1, 5, 7);
+ XPathYearMonthDuration durationMsecs = new XPathYearMonthDuration(1, 5, 7);
+ XPathYearMonthDuration durationCrossover = new XPathYearMonthDuration(1, 0, 1);
+
+ // ARGS declarations
+ // Dates
+ FunctionArgumentAttributeValue attrDateTimeStdExample1 = null;
+ FunctionArgumentAttributeValue attrDateTimeMsecs = null;
+ FunctionArgumentAttributeValue attrDateTimeCrossover = null;
+ FunctionArgumentAttributeValue attrDateTimeBC = null;
+ FunctionArgumentAttributeValue attrDateTimeTimeZone0 = null;
+ FunctionArgumentAttributeValue attrDateTimeTimeZone5 = null;
+
+ // Durations
+ FunctionArgumentAttributeValue attrDuration0 = null;
+ FunctionArgumentAttributeValue attrDurationStdExample1 = null;
+ FunctionArgumentAttributeValue attrDurationNStdExample1 = null;
+ FunctionArgumentAttributeValue attrDurationMsecs = null;
+ FunctionArgumentAttributeValue attrDurationCrossover = null;
+
+ // misc bad
+ FunctionArgumentAttributeValue attrNull = null;
+ FunctionArgumentAttributeValue attrBlank = null;
+ FunctionArgumentAttributeValue attrInteger = null;
+ // set values
+ try {
+ // Date attrs
- attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeStdExample1));
- attrDateTimeMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeMsecs));
- attrDateTimeCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeCrossover));
- attrDateTimeBC = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeBC));
- attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone0));
- attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(DataTypes.DT_DATETIME.createAttributeValue(dateTimeTimeZone5));
++ attrDateTimeStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeStdExample1));
++ attrDateTimeMsecs = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeMsecs));
++ attrDateTimeCrossover = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeCrossover));
++ attrDateTimeBC = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeBC));
++ attrDateTimeTimeZone0 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeTimeZone0));
++ attrDateTimeTimeZone5 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_DATETIME
++ .createAttributeValue(dateTimeTimeZone5));
+
+ // Duration attrs
- attrDuration0 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(duration0));
- attrDurationStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationStdExample1));
- attrDurationNStdExample1 = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationNStdExample1));
- attrDurationMsecs = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationMsecs));
- attrDurationCrossover = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(durationCrossover));
++ attrDuration0 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(duration0));
++ attrDurationStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(durationStdExample1));
++ attrDurationNStdExample1 = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(durationNStdExample1));
++ attrDurationMsecs = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(durationMsecs));
++ attrDurationCrossover = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(durationCrossover));
+
+ // misc bad
- attrBlank = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(""));
- attrNull = new FunctionArgumentAttributeValue(DataTypes.DT_YEARMONTHDURATION.createAttributeValue(null));
++ attrBlank = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(""));
++ attrNull = new FunctionArgumentAttributeValue(
++ DataTypes.DT_YEARMONTHDURATION
++ .createAttributeValue(null));
+ attrInteger = new FunctionArgumentAttributeValue(DataTypes.DT_INTEGER.createAttributeValue(1234));
+ } catch (Exception e) {
- fail("creating attributes e="+ e);
++ fail("creating attributes e=" + e);
+ }
+
- FunctionDefinitionDateTimeArithmetic<?,?> fd = (FunctionDefinitionDateTimeArithmetic<?,?>) StdFunctions.FD_DATETIME_SUBTRACT_YEARMONTHDURATION;
++ FunctionDefinitionDateTimeArithmetic<?, ?> fd = (FunctionDefinitionDateTimeArithmetic<?, ?>)StdFunctions.FD_DATETIME_SUBTRACT_YEARMONTHDURATION;
+
+ // check identity and type of the thing created
+ assertEquals(XACML3.ID_FUNCTION_DATETIME_SUBTRACT_YEARMONTHDURATION, fd.getId());
+ assertEquals(DataTypes.DT_DATETIME.getId(), fd.getDataTypeId());
+
- // just to be safe... If tests take too long these can probably be eliminated
++ // just to be safe... If tests take too long these can probably be eliminated
+ assertFalse(fd.returnsBag());
+
+ // Duration = 0 => same as original
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDuration0);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ ISO8601DateTime resValue = (ISO8601DateTime)res.getValue().getValue();
+ assertEquals(dateTimeStdExample1, resValue);
+
-
+ // simple positive operation
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- ISO8601DateTime testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(1994, 6, 12),
- new ISO8601Time(12, 13, 14, 0) );
++ ISO8601DateTime testResponse = new ISO8601DateTime(null, new ISO8601Date(1994, 6, 12),
++ new ISO8601Time(12, 13, 14, 0));
+ assertEquals(testResponse, resValue);
+
+ // negative operation
+ arguments.clear();
+ arguments.add(attrDateTimeStdExample1);
+ arguments.add(attrDurationNStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(2005, 8, 12),
- new ISO8601Time(12, 13, 14, 0) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(2005, 8, 12), new ISO8601Time(12, 13, 14, 0));
+ assertEquals(testResponse, resValue);
+
+ // millisecs work correctly (not relevant to YearMonth, but should not break
+ arguments.clear();
+ arguments.add(attrDateTimeMsecs);
+ arguments.add(attrDurationMsecs);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(1994, 6, 12),
- new ISO8601Time(12, 13, 14, 777) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(1994, 6, 12), new ISO8601Time(12, 13, 14,
++ 777));
+ assertEquals(testResponse, resValue);
+
+ // cross minute => cross day => cross month => cross year
+ arguments.clear();
+ arguments.add(attrDateTimeCrossover);
+ arguments.add(attrDurationCrossover);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(1999, 12, 1),
- new ISO8601Time(23, 59, 30, 1) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(1999, 12, 1), new ISO8601Time(23, 59, 30, 1));
+ assertEquals(testResponse, resValue);
+
+ // negative (BC) original date add goes the right direction
+ arguments.clear();
+ arguments.add(attrDateTimeBC);
+ arguments.add(attrDurationStdExample1);
+ res = fd.evaluate(null, arguments);
+ assertTrue(res.isOk());
+ assertEquals(ISO8601DateTime.class, res.getValue().getValue().getClass());
+ resValue = (ISO8601DateTime)res.getValue().getValue();
- testResponse = new ISO8601DateTime(
- null,
- new ISO8601Date(-2006, 6, 12),
- new ISO8601Time(12, 13, 14, 0) );
++ testResponse = new ISO8601DateTime(null, new ISO8601Date(-2006, 6, 12),
++ new ISO8601Time(12, 13, 14, 0));
+ assertEquals(testResponse, resValue);
+
+ // non-null timezone not changed
+ // original has timezone offset = 0
+ arguments.clear();
+ arguments.add(attrDateTimeTimeZone0);
+ arguments.add(attrDurationStdExample1);
+ res = fd.eval
<TRUNCATED>