Skip to content

Commit

Permalink
Fix for issue #8 (nth-child equations starting with + or -) and issue #…
Browse files Browse the repository at this point in the history
…10 (parser auto-close tags)
  • Loading branch information
jamietre committed Jun 20, 2012
1 parent 84791fd commit ff62941
Show file tree
Hide file tree
Showing 13 changed files with 315 additions and 217 deletions.
31 changes: 12 additions & 19 deletions CsQuery.vsmdi
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,25 @@
<TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6" />
<TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d">
<TestLinks>
<TestLink id="25d8d407-cfc3-db6e-bacf-bb8d6b92fe42" name="SubSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ef5f951a-56b9-36a2-8aaa-e8aa18457987" name="InputSelectMultiple" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="fd97169d-403e-ed63-5550-4044f4ddc721" name="LoadingDom" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c0c1d357-a904-0cac-5d9f-884409b0b192" name="SubSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4b2abfd0-73cb-654c-5a04-96adda7aaa00" name="NthChild" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ef7496b2-a3da-80ae-559e-30575712badf" name="Miscellanous" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="cd16daa2-7237-2823-328f-2d68ecad48d2" name="InputCheckboxMultiple" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="c0c1d357-a904-0cac-5d9f-884409b0b192" name="SubSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="3443c0de-1605-d015-e681-25ac9d7b31c4" name="Miscellanous" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b777ad92-0edb-4215-8647-6cfa7dafa10e" name="IDSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ef7496b2-a3da-80ae-559e-30575712badf" name="Miscellanous" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="784df7c5-08a9-60e8-3cb7-ab2fe398b4ee" name="IDSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="4b2abfd0-73cb-654c-5a04-96adda7aaa00" name="NthChild" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f2f60cdc-e404-8cb0-ee59-b3a31437949c" name="AttributeSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ad9cfd74-ede9-030e-a082-3bb0688bdb02" name="LoadingDom" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="41e7b02e-38e2-5413-f08a-3ce1a70f1b74" name="GetHtmlAsyncPromises" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6c0cb0ee-c126-f5c7-48a4-1e4e5ad74c05" name="AttributeSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="5f9af6a1-b5c9-0d3a-7a56-cff949494dc6" name="GetHtmlAsyncPromisesFailed" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="f74d8224-735e-6384-d88a-81fc7df256b7" name="Miscellanous" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="b777ad92-0edb-4215-8647-6cfa7dafa10e" name="IDSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="73c473e5-5e1f-6e48-0c5e-24a2fb02fd4f" name="NthChild" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="25d8d407-cfc3-db6e-bacf-bb8d6b92fe42" name="SubSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="41e7b02e-38e2-5413-f08a-3ce1a70f1b74" name="GetHtmlAsyncPromises" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="dcd1be61-0777-5ed7-31d7-bdce22da30c8" name="IDSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="19ba694e-edde-7f95-383f-108174e4a5c0" name="InputRadio" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="12784092-a4b8-634d-7ec4-aa6e94fd6f08" name="GetHtmlAsync" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6c0cb0ee-c126-f5c7-48a4-1e4e5ad74c05" name="AttributeSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ca0d6bb5-c785-c5d8-d8e3-7c7ca0e166cf" name="NthChildWithLeadingOperator" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="1fab5f3a-d004-f26e-9220-af88b4d18c2a" name="AttributeSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="35b5f10a-b56f-52e0-9a4f-4ed187564490" name="LoadingDom" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="97fdf1ec-0124-7d1e-be14-b9985a9447e8" name="SubSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ad9cfd74-ede9-030e-a082-3bb0688bdb02" name="LoadingDom" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="ef5f951a-56b9-36a2-8aaa-e8aa18457987" name="InputSelectMultiple" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="439dc65f-a730-371c-a9d3-e149a98d5769" name="InputSelect" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="73c473e5-5e1f-6e48-0c5e-24a2fb02fd4f" name="NthChild" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="19ba694e-edde-7f95-383f-108174e4a5c0" name="InputRadio" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="6e4aa95e-b8ac-3860-77dc-18abde8f197c" name="NthChild" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestLink id="dcd1be61-0777-5ed7-31d7-bdce22da30c8" name="IDSelectors" storage="csquery.tests\bin\debug\csquerytests.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestLinks>
</TestList>
</TestLists>
21 changes: 19 additions & 2 deletions CsQuery/Engine/NthChild.cs
Original file line number Diff line number Diff line change
Expand Up @@ -475,11 +475,28 @@ protected void UpdateCacheInfo(int lastIndex)

int iterator = cacheInfo.NextIterator;
int val = -1;
while (val < lastIndex && iterator <= lastIndex)

// because of negative-valued n's, we may need to calculate the entire equation set down to zero
// so we need to watch if the numbers are descending.

int lastVal = 999999;

// the 2nd part of the while expression ensures that we count down to zero for negative values

while ((val < lastIndex && iterator <= lastIndex+1) ||
(lastVal > val && val>0 ))
{
Equation.SetVariable("n", iterator);
if (val > 0)
{
lastVal = val;
}
val = Equation.Value;
cacheInfo.MatchingIndices.Add(val);
// negative results are just ignored.
if (val > 0)
{
cacheInfo.MatchingIndices.Add(val);
}
iterator++;
}
cacheInfo.MaxIndex = lastIndex;
Expand Down
Loading

0 comments on commit ff62941

Please sign in to comment.