tests/auto/xmlpatternsxqts/TODO
changeset 0 1918ee327afb
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 Various issues/ideas
       
     2 --------------------
       
     3 
       
     4 Regressions due to erratas:
       
     5 
       
     6         K2-ComputeConAttr-42
       
     7         K2-ComputeConAttr-43
       
     8         K2-CopyNamespacesProlog-9
       
     9         combiningnodeseqexcepthc5
       
    10 
       
    11 Public API:
       
    12     - Have overloads for attribute() etc which take StringRefs?
       
    13     - Test reusing the context and change bindings each time. Rebind the predefined namespace bindings fn, xs, xml, and use them again in a subsequent query.
       
    14     - Check properties in the static & dynamic context, that they actually propagate through(and with changes). For instance, static base URI.
       
    15     - Change StandardPrefixes/etc to be namespaces instead of classes.
       
    16     - Test that prefixes doesn't affect name lookups.
       
    17     - You need to decide on how `patternist' should treat non-wellformedness.
       
    18     - Changefrom QList to QVector. Maybe add a toFooVector() to QAbstractForwardIterator, so we can use a custom vector class in the future.
       
    19 
       
    20 - Tons of tests are missing for serialization. Go through all the error codes, ERE0003 for instance.
       
    21 - Trigger toList in DeduplicateIterator.
       
    22 
       
    23 - Rewrite/test descendant-or-sel::node-type() (etc) from a node which isn't the node type. This can be rewritten to descendant::node-type()
       
    24 - Preceding/following axis selects always nothing from a root node.
       
    25 - No tests for ordering empty sequence when the decl. is not global. Also several sort keys.
       
    26 - Check PlainSharedPtr for thread safety. Switch to Qt's one.
       
    27 - Add weird scheme for doc-available/doc(). ftp, ssh, unknown scheme.
       
    28 - Forward/Reverse iterators on top level nodes with "siblings".
       
    29 - Let UserFunctionCallsite return DisableTypingDeduction instead of doing hackery in ExpressionSequence.
       
    30 - Add exceptions support explicitly to the pro files.
       
    31 - Maybe we can merge ArgumenentReference and ExpressionVariableReference?
       
    32 - ArgumenentReference does not implement evaluateToSequenceReceiver()
       
    33 - Let VariableReference store the whole VariableDeclaration instead
       
    34 - EvaluationCache.cpp:189:    return m_operand->properties() & (DisableElimination | IsEvaluated | DisableTypingDeduction); should probably use
       
    35   deepProperties(), no? Try to trigger it and fix it.
       
    36 - It turns out VariableDeclaration::ExternalVariable was actually needed. Currently we use an ExpressionReference to an External reference which is a double layer.
       
    37 - It seems that for each Literal, a new Literal is created in Expression::constantPropagate.
       
    38 - Trigger bug: newMe should be returned, not Expression::Ptr(this) in AndExpression.
       
    39 - Trigger all the paths in Expression::constantPropagate() for error reporting.
       
    40 - Type inference in K2-Axes-2 doesn't work very well. ItemVerifiers are inserted.
       
    41 - Write test of the public API that the static/dynamic context in one query compilation doesn't affect in another one.
       
    42 - Maybe "$foo, $foo" can be handled with a content receiver that doubles events, somehow?
       
    43 - If you use weird EOLs in namespace bindings in direct attrs, one get bugs, because attributeAsRaw() doesn't do EOL normalization.
       
    44 - Aren't we doing too aggressive caching in UserFunctionCallsite::setSource()?
       
    45 - 4763
       
    46 - We wrap the context item with an evaluation cache, because it's considered creative, probably. But is the cache really necessary? Huge slowdown..
       
    47 - If a type is declared as exactly one for an external variable, evaluateSequence() gets called anyway. A problem?
       
    48 - Search for use of QString::isSpace(), write tests, and check if it really is intentioonal to check for the separartor group, as opposed the dead old ASCII whitespace characters. fn:normalize-space() and fn:normalize-unicode() are characters.
       
    49 - Write test, xmlns.xml, for checking basic namespace handling. xmlns.xml contained:
       
    50     <?xml version="1.0" encoding="UTF-8"?>
       
    51     <anElement xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:space="preserve"/>
       
    52 - Pass SourceLocationReflection to Boolean::evaluateEBV()
       
    53 - Factor out the C++ code in createReportContext.xsl into a template
       
    54 - I'm afraid that setting/using the type of the context item is not thoroughly tested; LetClause.
       
    55 - Preallocate like a maniac in AccelTree
       
    56 - Write tests for 4621
       
    57 - In return tokenAndChangeState(t->token... is it really safe to deref t? Write tests..
       
    58 - Use all weird numeric literals chars in char refs and num literals to get rid of locale dependent parsing.
       
    59 - 1. Grep sources for trimmed(), simplified(), isSpace(), as well as home written versions(typeswitches over chars)
       
    60   2. Find out what the spec says regarding weird Unicode whitespace. For instance, hair space, U+200A (8202 decimal), THIN SPACE. Non breaking space is another case.
       
    61   3. Write tests triggering all current cases
       
    62   4. Make the tests pass
       
    63 - Write function decl that use all types(for parsing)
       
    64 - trigger  if(m_pos == m_length)
       
    65                     return END_OF_FILE; in ignoreComment()
       
    66 
       
    67 - Use actual qnames("p:a") in all branches of for/let
       
    68 - Make Token's ctors explcit
       
    69 - Trigger the bugs the tokenizer have by using QChar::cell().
       
    70 - Add http://forums.oracle.com/forums/thread.jspa?messageID=1570246& to test cases.
       
    71 - Look at the TreeModelCompleter, and steal code to Patternist View.
       
    72 - Consider/test extracting EBV from a sorted, possibly mixed sequence.
       
    73 - Move FunctionCall to expr/
       
    74 - Can RequiresFocus and RequiresContextItem be merged?
       
    75 - Move janitors/* to expr/
       
    76 - Check that ItemSequenceCache is tested with StackContextBase
       
    77 - It is imperative to optimize x[last()]
       
    78 - Apply fn:count() to CachingIterator.
       
    79 - Test cache for booleans.
       
    80 - Write test that use all XML 1.0 characters.
       
    81 - Fixed: 4462 4460
       
    82 - Add test where AxisStep::evaluateSingleton() gets called with no initialized focus.
       
    83 - Attribute normalization.. <e attr="   "/>
       
    84 - Node::namespaceBindings() doesn't discuss uniqueness.
       
    85 - Move common.pri to src/..
       
    86 - Write tests for node test source in attribute foo.
       
    87 - Isn't end-of-line handling applied to text nodes in direct ctors? Yupp, it does. The whole freakin' query: A.2.3 End-of-Line Handling.
       
    88 - Write tests for cardinalities in let & for.
       
    89 - Write test for invalud anyURI in xmlns attr that is extr. with namespace-uri().
       
    90 - is nameToElements in AccelTree used/needed?
       
    91 - Overflow is not captured when going from abs(unsignedLong(largeNNN)) and between all the other aggregate functions. avg() as well..
       
    92 - Turn NamespaceResolver::Bindings into NamespaceBinding::Vector ffs.
       
    93 - Property IsNodeConstructor isn't used, right?
       
    94 - Write tests for things like function-available that depend on tricky namespace contexts. Especially the default element in the typeCheck stage().
       
    95 - Gather all functions that stores the namespace context, and ensure they get it right with element constructors, of all its kinds.
       
    96 - Add tests for where the local name is xmlns, in attrs.
       
    97 - Implement AxisStep::evaluateEBV()
       
    98 - One can reduce the three type/*NameTest classes to one probably, by passing in two template parameters: a mask(prefix, ns, zero), and the type
       
    99   of the comparator(prefix, ns, ln) to store.
       
   100 - How are axis steps without tests handled?
       
   101 - Convert the NamespaceResolver to use the NamePool
       
   102 - Write tests for deep-equal() involving different trees. Spectacular things can happen there with the AccelTree...
       
   103 - Ask Andreas on file:/, file://, file:///
       
   104 - Secure up on brain damage in DelegateQDomNode.cpp#430.
       
   105 - Apply reverse() to all axes.
       
   106 - Dump all qHash(QUrl) functions when we have switched to Qt 4.3.
       
   107 - Rename retrieveFunctionSignature to retieveSignature() or just signature(). Same with functionSignatures().
       
   108 - Don't use toLexical() in Serializer. It triggers unnecessary heap allocations,
       
   109 - Replace SequenceReceiver::processingInstruction(QName) with QName::LocalNameCode.
       
   110 - Delete DoubledNodeTest
       
   111 - Replace allocateQName(QString() with StandardNamespaces::empty
       
   112 - TODO http://www.pms.ifi.lmu.de/forschung/xpath-eval.html
       
   113 - Write tests that test whitespace normalization in URI/namespace declarations.
       
   114 - Tests: use namespace-uri-for-prefix with prefix "xml" and supply a node( can const fold)
       
   115 - Add tests to resolve-uri() for invalid xs:anyURI values
       
   116 - Make sure that xml:base affects the static context. Or?
       
   117 - We need a systematic way to convert QUrl to xs:string instances. Same goes for static inline String::Ptr fromValue(const QUrl &value)
       
   118 - QUrl can't handle empty strings:
       
   119         K-CondExpr-9
       
   120         K-LogicExpr-10
       
   121         K-LogicExpr-11
       
   122         K-LogicExpr-35
       
   123         K-LogicExpr-36
       
   124         K-NodeNamespaceURIFunc-3
       
   125         K-NotFunc-8
       
   126         K-SeqBooleanFunc-8
       
   127         K-SeqExprCast-1373
       
   128         K-WhereExpr-11
       
   129 
       
   130 - It's very important that the auto tests for the public API tests different features:
       
   131     - fn:trace()
       
   132     - external variables
       
   133     - node constructors
       
   134     - that node building happens, as opposed to just node events
       
   135     - warnings/errors
       
   136     - file loading: fn:doc()
       
   137     - fn:collection()
       
   138     - serialization error
       
   139 
       
   140 - Should SeqReceiver::attribute() really be passed a QString? Shouldn't it be an Item::Ptr since
       
   141   it may be typed? Or should we use overloads somehow?
       
   142 - base-URI-8 has an interesting problem with evaluation mode..? No idea what it is.
       
   143 - base-URI-24: we should be normalizing, not trimming whitespace.
       
   144 - xs:anyURI("http://www.example.org/%20%20examples") should output the percentage signs. base-uri-25
       
   145 - base-URI-21, base-URI-15 because QUrl transform htpp://A to a.
       
   146 - fn-nilled-2 regressed for unknown reason, probably related to paths.
       
   147 - TODO How are we to handle empty string URIs?
       
   148 - Write one test for each time URILiteral is used in the grammar, and pass in an invalid URI. XQST0046.
       
   149 - Someone creates a StackContextBase at compile time, gr..
       
   150 - Follow up on the "Computed attributes: 'xmlns' with non-empty namespace" topic.
       
   151 - Write tests for root() while using the context item.
       
   152 - UserFunctionCallsite::staticType() is quite broken, and needs thinking, followed by writing test cases to triggers
       
   153   its faults.
       
   154 - Write tests for:
       
   155 "certain characters MUST be output as character references, to ensure that
       
   156 they survive the round trip through serialization and parsing. Specifically,
       
   157 CR, NEL and LINE SEPARATOR characters in text nodes MUST be output
       
   158 respectively as "&#xD;", "&#x85;", and "&#x2028;", or their equivalents;".
       
   159 - Write test for XQST0093
       
   160 - Write tests for where NameChar is used.
       
   161 - Optimize (a = b) where a and b are of type xs:string of any length, by putting the values into QMaps?
       
   162 - Perhaps add tests that ensure locale-specific integer parsing isn't used? Read QChar::isDigit() to find out.
       
   163 - Add assert in DerivedInteger
       
   164 - It looks like the type is incorrectly inferred for min/max(), see Aggregator.*.
       
   165     * Add tests that trigger this
       
   166     * http://sourceforge.net/tracker/index.php?func=detail&aid=1552670&group_id=29872&atid=397617
       
   167 - Regression in the function refactoring: The Function Signatures View only show
       
   168   the constructor functions, the F&O stuff doesn't show up. The reason for this is that with the
       
   169   recent refactoring the ability to retrieve all signatures was lost. A signature is first inserted
       
   170   into m_signatures when a matching function call has been asked for. The regression in Patternist View is not
       
   171   very important but if we want to do things like displaying signatures that "almost" match etc, we will need to
       
   172   get back the "give me all signatures in a list"-feature. We need to regression test this:
       
   173   Q_VERIFY(FunctionFactoryCollection::xpath20Factory().signatures().count(), N);
       
   174 - Would it be an optimization to apply the cardinality verifier before the untyped atomic converter?
       
   175 - Document in Mainpage.h to not use capturing paranteses, and review existing code.
       
   176 - Find invalid use of ElementName in .ypp and write tests
       
   177 - Rewrite SubsequenceFN::staticType/compress(). It's really weird. Take advantage
       
   178     of the new Cardinality class.
       
   179 - Get rid of AtomicValue::hasError() in favor of returning null..
       
   180 - ResourceLoader::announceDocument() should return an ItemType?
       
   181 - ResourceLoader::announceUnparsedText() should return false/true? E.g, always be a string? Nope, bad idea..
       
   182 - rename xdtTypeMatches to isOfType() -- much cleaner. Finally found a good name for that
       
   183     function. Stolen from XQJ. Or perhaps also isInstanceOf()..
       
   184 - Optimize Decimal/AbstractFloat::stringValue() by using QByteArray and QByteArray::fromRawData().
       
   185 - TODO ComparisonPlatform:
       
   186     * prepareComparison is pretty pointless. My idea is that it should do all the operator lookup.  For
       
   187       example, CastingPlatform::prepareCasting() actually do something and provide convenience.
       
   188 
       
   189 - Actually make ParentNodeAxis::create() do what it says(return singleton)
       
   190 - Think about base URI for Node
       
   191 - Fix doxygen @file warnings, pending: http://bugzilla.gnome.org/show_bug.cgi?id=345481
       
   192 - 'case 0:' in XQueryTokenizer.cpp will break
       
   193 - TruthPredicate::map() is never called because of regression in the Iterator refactoring.
       
   194   GenericPredicate's members are called instead. This is a performance regression.
       
   195 - Perhaps provide suitable default implementation of expectedOperandTypes in *Container classes?
       
   196 - Make And/OrExpression a template class.
       
   197 - Reduce UserFunctionCallsite object size by storing arity&name as a FunctionSignature that
       
   198     is replaced by the real one.
       
   199 - Perhaps one of the error codes in QNameConstructor::expandQName can be used(the same in each case.)
       
   200 - Move FunctionCall to expr/
       
   201 - The scanner has problem with Unicode characters. Have a look at the tests
       
   202     in functions-assemblestring.xml.
       
   203 - When converting to KDOM's WebCore names, also camel case the CommonSequenceTypes::* names.
       
   204 - For namespace nodes implementation, see: http://lists.w3.org/Archives/Public/www-ql/2003OctDec/0001.html
       
   205 - XPathExpression::evaluate() is supposed to return a
       
   206     DOMObject, but currently returns an XPathResult.
       
   207 - String/Float conversion:
       
   208     - For return "Decimal::fromValue(this->toDecimal())->stringValue();" for AF.cpp: perhaps a static toString should be added to Decimal that both AbstractFloat and Decimal calls. It would avoid allocating Decimal when calling stringValue().
       
   209 - data/AnyURI, the implementation of xs:anyURI, is halfy complete, and needs attention. Error
       
   210     handling with casting needs a look as well.
       
   211 - Investigate nilled PSVI
       
   212 
       
   213 
       
   214 KXQTS
       
   215 --------------------
       
   216 * Rename TestSuite::testResult(); it's not exactly a getter
       
   217 * Grr, rename identifiers and files from *BaseLine* into *Baseline*.
       
   218 * Speed up --run-outofprocess by keeping patternistrunsuite running as long as possible.
       
   219 * Make text fields in test case view, selectable. Same with AST view. 
       
   220 
       
   221 - Code cleaning commands:
       
   222     * Find cases where stuff looks like "const Foo& var" instead of "const Foo &var":
       
   223         `grep -nHR "\& .*,"` *
       
   224     * Convert modeline:
       
   225         sed -i -e 's+// vim:ts=4:noet+// vim: et:ts=4:sw=4:sts=4+g' `find -name "*.cpp" -or -name "*.h"`
       
   226     * Bump copyright year:
       
   227         sed -i -e 's/2005/2006/g' `find -name "*.h" -or -name "*.cpp"`
       
   228 
       
   229     grep "if ([[:space:]]*[[:alnum:]]*[[:space:]]*=[[:space:]]*[[:alnum:]]"
       
   230     * Find and remove whitespace after lines:
       
   231         sed -i -e 's/[ \t]\+$//' `find -name "*.cpp" -or -name "*.h" -or -name "*.ypp" -or -name "*.pri" -or -name "*.pro"`
       
   232 
       
   233 - The new suite runner should:
       
   234     - Be completely in process
       
   235     - QTestLib based
       
   236     - Baseline the final AST
       
   237     - Baseline messages
       
   238     - Be stream based
       
   239     - Consider to what degree it should replace all the old code in sdk/lib. There's so much old, obsolete code.
       
   240 
       
   241 // vim: et:ts=4:sw=4:sts=4