diff --git a/cheerio/cheerio-tests.ts b/cheerio/cheerio-tests.ts
index c02b1ed26..6cc9e6485 100644
--- a/cheerio/cheerio-tests.ts
+++ b/cheerio/cheerio-tests.ts
@@ -1,67 +1,294 @@
///
-import cheerio = require("cheerio");
+import cheerio = require('cheerio');
-cheerio('');
+/*
+ * LOADING
+ */
+let html =
+`
`;
-var $ = cheerio.load("");
-var $el = $('selector');
-var $multiEl = $('seletor', 'selector', 'selector');
+// Preferred Method
+var $ = cheerio.load(html);
+// Directly load element
+cheerio(html);
+cheerio('ul', html);
+cheerio('li', 'ul', html);
-$el.addClass("class").addClass("test");
-$el.hasClass("test");
-$el.removeClass("class").removeClass("test");
-
-$el.attr('class');
-$el.attr('class', 'test');
-$el.removeAttr("class").removeAttr("test");
-
-$el.find("ul").find("> li");
-
-$el.parent().parent();
-$el.next().next();
-$el.prev().prev();
-$el.siblings().siblings();
-
-$el.children().children();
-$el.children("li").children("a");
-
-$el.children().each((index, element) => {
- return $(element).find('t');
+$ = cheerio.load(html, {
+ normalizeWhitespace: true,
+ xmlMode: true
});
-$el.children().map((index, element) => {
- return $(element).find('t');
+$ = cheerio.load(html, {
+ normalizeWhitespace: true,
+ xmlMode: true,
+ decodeEntities: true,
+ lowercaseTags: true,
+ lowerCaseAttributeNames: true,
+ recognizeCDATA: true,
+ recognizeSelfClosing: true
});
-$el.children().filter((index) => {
- return $el.children().eq(index).find('t').length >= 0;
-});
+/**
+ * Selectors
+ */
+var $el = $('.class');
+var $multiEl = $('selector', 'selector', 'selector');
-$el.filter('span').filter('li');
+/**
+ * Attributes
+ */
-$el.first().last().find('t');
-
-$('div').eq(0).find('b');
-
-$('#id').append("test html", "other html").find('a');
-$('#id').prepend("test html", "other html").find('a');
-$('#id').after("test html", "other html").find('a');
-$('#id').before("test html", "other html").find('a');
-
-$el.remove('div').remove('a');
-
-$('#id').replaceWith('some html').parent();
-$('#id').empty().parent();
-
-$el.html();
-$el.html("").find('div');
-
-$el.text();
-$el.text('some text');
-
-$el.toArray();
-$el.clone().find('a').parent();
-$.root().find('a');
+// attr
+$el.attr('id');
+$el.attr('id', 'favorite').html();
+// data
$el.data();
+$el.data('apple-color');
+$el.data('kind', 'mac');
+
+// val
+$('input[type="text"]').val();
+$('input[type="text"]').val('test').html();
+
+// removeAttr
+$el.removeAttr('class').html();
+
+// hasClass, addClass, removeClass, toggleClass
+$el.addClass('class').addClass('test');
+$el.hasClass('test');
+$el.removeClass('class').removeClass('test');
+$el.addClass('red').removeClass().html();
+$el.toggleClass('fruit green red').html();
+
+// is
+$el.is('#id');
+$el.is($el);
+$el.is(() => {
+ return true;
+});
+
+/**
+ * Forms
+ */
+// serializeArray
+$('').serializeArray();
+
+/**
+ * Traversing
+ */
+ // find
+$el.find('li').length;
+$el.find($('.apple')).length;
+
+// .parent([selector])
+$el.parent().attr('id');
+$el.parent('.class').attr('id');
+
+// .parents([selector])
+$el.parents().length;
+$el.parents('.class').length;
+
+// .parentsUntil([selector][,filter])
+$el.parentsUntil().length;
+$el.parentsUntil('.class').length;
+
+// .closest(selector)
+$el.closest();
+$el.closest('.class');
+
+// .next([selector])
+$el.next().hasClass('class');
+$el.next('.class').hasClass('class');
+
+// .nextAll([selector])
+$el.nextAll().length;
+$el.nextAll('.class').length;
+
+// .nextUntil([selector], [filter])
+$el.nextUntil();
+$el.nextUntil('.class');
+
+// .prev([selector])
+$el.prev().hasClass('class');
+$el.prev('.class').hasClass('class');
+
+// .prevAll([selector])
+$el.prevAll().length;
+$el.prevAll('.class').length;
+
+// .prevUntil([selector], [filter])
+$el.prevUntil();
+$el.prevUntil('.class');
+
+// .slice( start, [end] )
+$el.slice(1).eq(0).text();
+$el.slice(1, 2).length;
+
+// .siblings([selector])
+$el.siblings().length;
+$el.siblings('.class').length;
+
+// .children([selector])
+$el.children().length;
+$el.children('.class').text();
+
+// .contents()
+$el.contents().length;
+
+// .each( function(index, element) )
+$el.each((i, el) => {
+ $(el).html();
+});
+
+// .map( function(index, element) )
+$el.map((i, el) => {
+ return $(el).text();
+}).get().join(' ');
+
+// .filter
+$ = cheerio.load(html);
+$el.filter('.class').attr('class');
+$el.filter($('.class')).attr('class');
+$el.filter($('.class')[0]).attr('class');
+
+$el.filter((i, el) => {
+ return $(el).attr('class') === 'class';
+}).attr('class');
+
+// .not
+$el.not('.class').length;
+$el.not($('.class')).length;
+$el.not($('.class')[0]).length;
+
+$el.not((i, el) => {
+ return $(el).attr('class') === 'class';
+}).length;
+
+// .has
+$el.has('.class').attr('id');
+$el.has($el[0]).attr('id');
+
+// .first()
+$el.children().first().text();
+
+// .last()
+$el.children().last().text();
+
+// .eq( i )
+$el.eq(0).text();
+$el.eq(-1).text();
+
+// .get( [i] )
+$el.get(0).tagName;
+$el.get().length;
+
+// .index()
+// .index( selector )
+// .index( nodeOrSelection )
+$el.index();
+$el.index('li');
+$el.index($('#fruit, li'));
+
+// .end()
+$el.eq(0).end().length;
+
+// .add
+$el.add('.class').length
+
+// .addBack( [filter] )
+$el.eq(0).addBack().length
+$el.eq(0).addBack('.class').length
+
+/**
+ * Manipulation
+ */
+
+// .append( content, [content, ...] )
+$el.append('Plum').html();
+$el.append('Plum', 'Plum').html();
+
+// .prepend( content, [content, ...] )
+$el.prepend('Plum').html();
+$el.prepend('Plum', 'Plum').html();
+
+// .after( content, [content, ...] )
+$el.after('Plum').html();
+$el.after('Plum', 'Plum').html();
+
+// .insertAfter( content )
+$('Plum').insertAfter('.class').html();
+
+// .before( content, [content, ...] )
+$el.before('Plum').html();
+$el.before('Plum', 'Plum').html();
+
+// .insertBefore( content )
+$('Plum').insertBefore('.class').html();
+
+// .remove( [selector] )
+$el.remove().html();
+$el.remove('.class').html();
+
+// .replaceWith( content )
+$el.replaceWith($('Plum')).html();
+
+// .empty()
+$el.empty().html();
+
+// .html( [htmlString] )
+$el.html();
+$el.html('Mango').html();
+
+// .text( [textString] )
+$el.text();
+$el.text('text');
+
+// .wrap( content )
+// See https://github.com/cheeriojs/cheerio/issues/731
+// $el.wrap($('')).html();
+
+// .css
+$el.css('width');
+$el.css(['width', 'height']);
+$el.css('width', '50px');
+
+/**
+ * Rendering
+ */
+$.html();
+$.html('.class');
+$.xml();
+
+/**
+ * Miscellaneous
+ */
+
+// .clone() ####
+$el.clone().html();
+
+/**
+ * Utilities
+ */
+
+// $.root
+$.root().append('').html();
+
+// $.contains( container, contained )
+$.contains($el[0], $el[0]);
+
+// $.parseHTML( data [, context ] [, keepScripts ] )
+$.parseHTML(html);
+$.parseHTML(html, null, true);
+
+/**
+ * Not in doc
+ */
+$el.toArray();
diff --git a/cheerio/cheerio.d.ts b/cheerio/cheerio.d.ts
index bbd47810f..840cceef5 100644
--- a/cheerio/cheerio.d.ts
+++ b/cheerio/cheerio.d.ts
@@ -17,12 +17,17 @@ interface Cheerio {
attr(name: string, value: any): Cheerio;
data(): any;
+ data(name: string): any;
+ data(name: string, value: any): any;
val(): string;
val(value: string): Cheerio;
removeAttr(name: string): Cheerio;
+ has(selector: string): Cheerio;
+ has(element: CheerioElement): Cheerio;
+
hasClass(className: string): boolean;
addClass(classNames: string): Cheerio;
@@ -41,6 +46,9 @@ interface Cheerio {
is(selection: Cheerio): boolean;
is(func: (index: number, element: CheerioElement) => boolean): boolean;
+ // Form
+ serializeArray(): {name: string, value: string}[];
+
// Traversing
find(selector: string): Cheerio;
@@ -52,10 +60,12 @@ interface Cheerio {
parentsUntil(element: CheerioElement, filter?: string): Cheerio;
parentsUntil(element: Cheerio, filter?: string): Cheerio;
+ closest(): Cheerio;
closest(selector: string): Cheerio;
next(selector?: string): Cheerio;
nextAll(): Cheerio;
+ nextAll(selector: string): Cheerio;
nextUntil(selector?: string, filter?: string): Cheerio;
nextUntil(element: CheerioElement, filter?: string): Cheerio;
@@ -63,6 +73,7 @@ interface Cheerio {
prev(selector?: string): Cheerio;
prevAll(): Cheerio;
+ prevAll(selector: string): Cheerio;
prevUntil(selector?: string, filter?: string): Cheerio;
prevUntil(element: CheerioElement, filter?: string): Cheerio;
@@ -83,15 +94,24 @@ interface Cheerio {
filter(selection: Cheerio): Cheerio;
filter(element: CheerioElement): Cheerio;
filter(elements: CheerioElement[]): Cheerio;
- filter(func: (index: number) => boolean): Cheerio;
+ filter(func: (index: number, element: CheerioElement) => boolean): Cheerio;
+
+ not(selector: string): Cheerio;
+ not(selection: Cheerio): Cheerio;
+ not(element: CheerioElement): Cheerio;
+ not(func: (index: number, element: CheerioElement) => boolean): Cheerio;
first(): Cheerio;
last(): Cheerio;
eq(index: number): Cheerio;
- get(): Document[];
- get(index: number): Document;
+ get(): CheerioElement[];
+ get(index: number): CheerioElement;
+
+ index(): number;
+ index(selector: string): number;
+ index(selection: Cheerio): number;
end(): Cheerio;
@@ -101,6 +121,9 @@ interface Cheerio {
add(elements: CheerioElement[]): Cheerio;
add(selection: Cheerio): Cheerio;
+ addBack():Cheerio;
+ addBack(filter: string):Cheerio;
+
// Manipulation
append(content: string, ...contents: any[]): Cheerio;
@@ -118,11 +141,19 @@ interface Cheerio {
after(content: Document[], ...contents: any[]): Cheerio;
after(content: Cheerio, ...contents: any[]): Cheerio;
+ insertAfter(content: string): Cheerio;
+ insertAfter(content: Document): Cheerio;
+ insertAfter(content: Cheerio): Cheerio;
+
before(content: string, ...contents: any[]): Cheerio;
before(content: Document, ...contents: any[]): Cheerio;
before(content: Document[], ...contents: any[]): Cheerio;
before(content: Cheerio, ...contents: any[]): Cheerio;
+ insertBefore(content: string): Cheerio;
+ insertBefore(content: Document): Cheerio;
+ insertBefore(content: Cheerio): Cheerio;
+
remove(selector?: string): Cheerio;
replaceWith(content: string): Cheerio;
@@ -138,6 +169,11 @@ interface Cheerio {
text(): string;
text(text: string): Cheerio;
+ // See https://github.com/cheeriojs/cheerio/issues/731
+ /*wrap(content: string): Cheerio;
+ wrap(content: Document): Cheerio;
+ wrap(content: Cheerio): Cheerio;*/
+
css(propertyName: string): string;
css(propertyNames: string[]): string[];
css(propertyName: string, value: string): Cheerio;
@@ -203,7 +239,7 @@ interface CheerioStatic extends CheerioSelector {
interface CheerioElement {
// Document References
// Node Console
-
+ tagName: string;
type: string;
name: string;
attribs: Object;
@@ -221,5 +257,5 @@ interface CheerioAPI extends CheerioSelector {
declare var cheerio:CheerioAPI;
declare module "cheerio" {
- export = CheerioAPI;
+ export = cheerio;
}