--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsxqts/TODO Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,241 @@
+Various issues/ideas
+--------------------
+
+Regressions due to erratas:
+
+ K2-ComputeConAttr-42
+ K2-ComputeConAttr-43
+ K2-CopyNamespacesProlog-9
+ combiningnodeseqexcepthc5
+
+Public API:
+ - Have overloads for attribute() etc which take StringRefs?
+ - 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.
+ - Check properties in the static & dynamic context, that they actually propagate through(and with changes). For instance, static base URI.
+ - Change StandardPrefixes/etc to be namespaces instead of classes.
+ - Test that prefixes doesn't affect name lookups.
+ - You need to decide on how `patternist' should treat non-wellformedness.
+ - Changefrom QList to QVector. Maybe add a toFooVector() to QAbstractForwardIterator, so we can use a custom vector class in the future.
+
+- Tons of tests are missing for serialization. Go through all the error codes, ERE0003 for instance.
+- Trigger toList in DeduplicateIterator.
+
+- 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()
+- Preceding/following axis selects always nothing from a root node.
+- No tests for ordering empty sequence when the decl. is not global. Also several sort keys.
+- Check PlainSharedPtr for thread safety. Switch to Qt's one.
+- Add weird scheme for doc-available/doc(). ftp, ssh, unknown scheme.
+- Forward/Reverse iterators on top level nodes with "siblings".
+- Let UserFunctionCallsite return DisableTypingDeduction instead of doing hackery in ExpressionSequence.
+- Add exceptions support explicitly to the pro files.
+- Maybe we can merge ArgumenentReference and ExpressionVariableReference?
+- ArgumenentReference does not implement evaluateToSequenceReceiver()
+- Let VariableReference store the whole VariableDeclaration instead
+- EvaluationCache.cpp:189: return m_operand->properties() & (DisableElimination | IsEvaluated | DisableTypingDeduction); should probably use
+ deepProperties(), no? Try to trigger it and fix it.
+- It turns out VariableDeclaration::ExternalVariable was actually needed. Currently we use an ExpressionReference to an External reference which is a double layer.
+- It seems that for each Literal, a new Literal is created in Expression::constantPropagate.
+- Trigger bug: newMe should be returned, not Expression::Ptr(this) in AndExpression.
+- Trigger all the paths in Expression::constantPropagate() for error reporting.
+- Type inference in K2-Axes-2 doesn't work very well. ItemVerifiers are inserted.
+- Write test of the public API that the static/dynamic context in one query compilation doesn't affect in another one.
+- Maybe "$foo, $foo" can be handled with a content receiver that doubles events, somehow?
+- If you use weird EOLs in namespace bindings in direct attrs, one get bugs, because attributeAsRaw() doesn't do EOL normalization.
+- Aren't we doing too aggressive caching in UserFunctionCallsite::setSource()?
+- 4763
+- We wrap the context item with an evaluation cache, because it's considered creative, probably. But is the cache really necessary? Huge slowdown..
+- If a type is declared as exactly one for an external variable, evaluateSequence() gets called anyway. A problem?
+- 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.
+- Write test, xmlns.xml, for checking basic namespace handling. xmlns.xml contained:
+ <?xml version="1.0" encoding="UTF-8"?>
+ <anElement xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:space="preserve"/>
+- Pass SourceLocationReflection to Boolean::evaluateEBV()
+- Factor out the C++ code in createReportContext.xsl into a template
+- I'm afraid that setting/using the type of the context item is not thoroughly tested; LetClause.
+- Preallocate like a maniac in AccelTree
+- Write tests for 4621
+- In return tokenAndChangeState(t->token... is it really safe to deref t? Write tests..
+- Use all weird numeric literals chars in char refs and num literals to get rid of locale dependent parsing.
+- 1. Grep sources for trimmed(), simplified(), isSpace(), as well as home written versions(typeswitches over chars)
+ 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.
+ 3. Write tests triggering all current cases
+ 4. Make the tests pass
+- Write function decl that use all types(for parsing)
+- trigger if(m_pos == m_length)
+ return END_OF_FILE; in ignoreComment()
+
+- Use actual qnames("p:a") in all branches of for/let
+- Make Token's ctors explcit
+- Trigger the bugs the tokenizer have by using QChar::cell().
+- Add http://forums.oracle.com/forums/thread.jspa?messageID=1570246& to test cases.
+- Look at the TreeModelCompleter, and steal code to Patternist View.
+- Consider/test extracting EBV from a sorted, possibly mixed sequence.
+- Move FunctionCall to expr/
+- Can RequiresFocus and RequiresContextItem be merged?
+- Move janitors/* to expr/
+- Check that ItemSequenceCache is tested with StackContextBase
+- It is imperative to optimize x[last()]
+- Apply fn:count() to CachingIterator.
+- Test cache for booleans.
+- Write test that use all XML 1.0 characters.
+- Fixed: 4462 4460
+- Add test where AxisStep::evaluateSingleton() gets called with no initialized focus.
+- Attribute normalization.. <e attr=" "/>
+- Node::namespaceBindings() doesn't discuss uniqueness.
+- Move common.pri to src/..
+- Write tests for node test source in attribute foo.
+- 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.
+- Write tests for cardinalities in let & for.
+- Write test for invalud anyURI in xmlns attr that is extr. with namespace-uri().
+- is nameToElements in AccelTree used/needed?
+- Overflow is not captured when going from abs(unsignedLong(largeNNN)) and between all the other aggregate functions. avg() as well..
+- Turn NamespaceResolver::Bindings into NamespaceBinding::Vector ffs.
+- Property IsNodeConstructor isn't used, right?
+- Write tests for things like function-available that depend on tricky namespace contexts. Especially the default element in the typeCheck stage().
+- Gather all functions that stores the namespace context, and ensure they get it right with element constructors, of all its kinds.
+- Add tests for where the local name is xmlns, in attrs.
+- Implement AxisStep::evaluateEBV()
+- 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
+ of the comparator(prefix, ns, ln) to store.
+- How are axis steps without tests handled?
+- Convert the NamespaceResolver to use the NamePool
+- Write tests for deep-equal() involving different trees. Spectacular things can happen there with the AccelTree...
+- Ask Andreas on file:/, file://, file:///
+- Secure up on brain damage in DelegateQDomNode.cpp#430.
+- Apply reverse() to all axes.
+- Dump all qHash(QUrl) functions when we have switched to Qt 4.3.
+- Rename retrieveFunctionSignature to retieveSignature() or just signature(). Same with functionSignatures().
+- Don't use toLexical() in Serializer. It triggers unnecessary heap allocations,
+- Replace SequenceReceiver::processingInstruction(QName) with QName::LocalNameCode.
+- Delete DoubledNodeTest
+- Replace allocateQName(QString() with StandardNamespaces::empty
+- TODO http://www.pms.ifi.lmu.de/forschung/xpath-eval.html
+- Write tests that test whitespace normalization in URI/namespace declarations.
+- Tests: use namespace-uri-for-prefix with prefix "xml" and supply a node( can const fold)
+- Add tests to resolve-uri() for invalid xs:anyURI values
+- Make sure that xml:base affects the static context. Or?
+- We need a systematic way to convert QUrl to xs:string instances. Same goes for static inline String::Ptr fromValue(const QUrl &value)
+- QUrl can't handle empty strings:
+ K-CondExpr-9
+ K-LogicExpr-10
+ K-LogicExpr-11
+ K-LogicExpr-35
+ K-LogicExpr-36
+ K-NodeNamespaceURIFunc-3
+ K-NotFunc-8
+ K-SeqBooleanFunc-8
+ K-SeqExprCast-1373
+ K-WhereExpr-11
+
+- It's very important that the auto tests for the public API tests different features:
+ - fn:trace()
+ - external variables
+ - node constructors
+ - that node building happens, as opposed to just node events
+ - warnings/errors
+ - file loading: fn:doc()
+ - fn:collection()
+ - serialization error
+
+- Should SeqReceiver::attribute() really be passed a QString? Shouldn't it be an Item::Ptr since
+ it may be typed? Or should we use overloads somehow?
+- base-URI-8 has an interesting problem with evaluation mode..? No idea what it is.
+- base-URI-24: we should be normalizing, not trimming whitespace.
+- xs:anyURI("http://www.example.org/%20%20examples") should output the percentage signs. base-uri-25
+- base-URI-21, base-URI-15 because QUrl transform htpp://A to a.
+- fn-nilled-2 regressed for unknown reason, probably related to paths.
+- TODO How are we to handle empty string URIs?
+- Write one test for each time URILiteral is used in the grammar, and pass in an invalid URI. XQST0046.
+- Someone creates a StackContextBase at compile time, gr..
+- Follow up on the "Computed attributes: 'xmlns' with non-empty namespace" topic.
+- Write tests for root() while using the context item.
+- UserFunctionCallsite::staticType() is quite broken, and needs thinking, followed by writing test cases to triggers
+ its faults.
+- Write tests for:
+"certain characters MUST be output as character references, to ensure that
+they survive the round trip through serialization and parsing. Specifically,
+CR, NEL and LINE SEPARATOR characters in text nodes MUST be output
+respectively as "
", "…", and "
", or their equivalents;".
+- Write test for XQST0093
+- Write tests for where NameChar is used.
+- Optimize (a = b) where a and b are of type xs:string of any length, by putting the values into QMaps?
+- Perhaps add tests that ensure locale-specific integer parsing isn't used? Read QChar::isDigit() to find out.
+- Add assert in DerivedInteger
+- It looks like the type is incorrectly inferred for min/max(), see Aggregator.*.
+ * Add tests that trigger this
+ * http://sourceforge.net/tracker/index.php?func=detail&aid=1552670&group_id=29872&atid=397617
+- Regression in the function refactoring: The Function Signatures View only show
+ the constructor functions, the F&O stuff doesn't show up. The reason for this is that with the
+ recent refactoring the ability to retrieve all signatures was lost. A signature is first inserted
+ into m_signatures when a matching function call has been asked for. The regression in Patternist View is not
+ very important but if we want to do things like displaying signatures that "almost" match etc, we will need to
+ get back the "give me all signatures in a list"-feature. We need to regression test this:
+ Q_VERIFY(FunctionFactoryCollection::xpath20Factory().signatures().count(), N);
+- Would it be an optimization to apply the cardinality verifier before the untyped atomic converter?
+- Document in Mainpage.h to not use capturing paranteses, and review existing code.
+- Find invalid use of ElementName in .ypp and write tests
+- Rewrite SubsequenceFN::staticType/compress(). It's really weird. Take advantage
+ of the new Cardinality class.
+- Get rid of AtomicValue::hasError() in favor of returning null..
+- ResourceLoader::announceDocument() should return an ItemType?
+- ResourceLoader::announceUnparsedText() should return false/true? E.g, always be a string? Nope, bad idea..
+- rename xdtTypeMatches to isOfType() -- much cleaner. Finally found a good name for that
+ function. Stolen from XQJ. Or perhaps also isInstanceOf()..
+- Optimize Decimal/AbstractFloat::stringValue() by using QByteArray and QByteArray::fromRawData().
+- TODO ComparisonPlatform:
+ * prepareComparison is pretty pointless. My idea is that it should do all the operator lookup. For
+ example, CastingPlatform::prepareCasting() actually do something and provide convenience.
+
+- Actually make ParentNodeAxis::create() do what it says(return singleton)
+- Think about base URI for Node
+- Fix doxygen @file warnings, pending: http://bugzilla.gnome.org/show_bug.cgi?id=345481
+- 'case 0:' in XQueryTokenizer.cpp will break
+- TruthPredicate::map() is never called because of regression in the Iterator refactoring.
+ GenericPredicate's members are called instead. This is a performance regression.
+- Perhaps provide suitable default implementation of expectedOperandTypes in *Container classes?
+- Make And/OrExpression a template class.
+- Reduce UserFunctionCallsite object size by storing arity&name as a FunctionSignature that
+ is replaced by the real one.
+- Perhaps one of the error codes in QNameConstructor::expandQName can be used(the same in each case.)
+- Move FunctionCall to expr/
+- The scanner has problem with Unicode characters. Have a look at the tests
+ in functions-assemblestring.xml.
+- When converting to KDOM's WebCore names, also camel case the CommonSequenceTypes::* names.
+- For namespace nodes implementation, see: http://lists.w3.org/Archives/Public/www-ql/2003OctDec/0001.html
+- XPathExpression::evaluate() is supposed to return a
+ DOMObject, but currently returns an XPathResult.
+- String/Float conversion:
+ - 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().
+- data/AnyURI, the implementation of xs:anyURI, is halfy complete, and needs attention. Error
+ handling with casting needs a look as well.
+- Investigate nilled PSVI
+
+
+KXQTS
+--------------------
+* Rename TestSuite::testResult(); it's not exactly a getter
+* Grr, rename identifiers and files from *BaseLine* into *Baseline*.
+* Speed up --run-outofprocess by keeping patternistrunsuite running as long as possible.
+* Make text fields in test case view, selectable. Same with AST view.
+
+- Code cleaning commands:
+ * Find cases where stuff looks like "const Foo& var" instead of "const Foo &var":
+ `grep -nHR "\& .*,"` *
+ * Convert modeline:
+ sed -i -e 's+// vim:ts=4:noet+// vim: et:ts=4:sw=4:sts=4+g' `find -name "*.cpp" -or -name "*.h"`
+ * Bump copyright year:
+ sed -i -e 's/2005/2006/g' `find -name "*.h" -or -name "*.cpp"`
+
+ grep "if ([[:space:]]*[[:alnum:]]*[[:space:]]*=[[:space:]]*[[:alnum:]]"
+ * Find and remove whitespace after lines:
+ sed -i -e 's/[ \t]\+$//' `find -name "*.cpp" -or -name "*.h" -or -name "*.ypp" -or -name "*.pri" -or -name "*.pro"`
+
+- The new suite runner should:
+ - Be completely in process
+ - QTestLib based
+ - Baseline the final AST
+ - Baseline messages
+ - Be stream based
+ - Consider to what degree it should replace all the old code in sdk/lib. There's so much old, obsolete code.
+
+// vim: et:ts=4:sw=4:sts=4