diff --git a/quixote/quixote-tests.ts b/quixote/quixote-tests.ts
new file mode 100644
index 0000000000..0f2d051f24
--- /dev/null
+++ b/quixote/quixote-tests.ts
@@ -0,0 +1,36 @@
+///
+///
+
+function test_createFrame() {
+ var frame: QFrame;
+ before((done) => {
+ var options = { src: "" };
+ frame = quixote.createFrame(options, done());
+ });
+}
+
+function test_resetFrame() {
+ var frame: QFrame;
+ before((done) => {
+ var options = { src: "" };
+ frame = quixote.createFrame(options, done());
+ });
+
+ beforeEach(() => {
+ frame.reset();
+ });
+}
+
+function test_removeFrame() {
+ var frame: QFrame;
+ before((done) => {
+ var options = { src: "" };
+ frame = quixote.createFrame(options, done());
+ });
+
+ after(function() {
+ frame.remove();
+ });
+}
+
+
diff --git a/quixote/quixote.d.ts b/quixote/quixote.d.ts
new file mode 100644
index 0000000000..37bc1eb0ca
--- /dev/null
+++ b/quixote/quixote.d.ts
@@ -0,0 +1,233 @@
+// Type definitions for quixote v0.7.0
+// Project: http://quixote-css.com/
+// Definitions by: Aleksandr Filatov
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+interface Quixote {
+ // Create a test iframe. This is a slow operation, so once you have a frame, it's best to use QFrame.reset() on it rather than creating a new frame for each test
+ createFrame(options: QuixoteFrameOptions, callback: (err: Error, loadedFrame: QFrame) => void): QFrame;
+}
+
+interface QFrame {
+ // Reset the frame back to the state it was in immediately after you called quixote.createFrame()
+ reset(): void;
+
+ // Remove the test frame entirely.
+ remove(): void;
+
+ // Retrieve an element matching a selector. Throws an exception unless exactly one matching element is found
+ get(selector: string, nickname?: string): QElement;
+
+ // Retrieve a list of elements matching a selector. If you want to ensure that exactly one element is retrieved, use frame.get() instead.
+ getAll(selector: string, nickname?: string): QElementList;
+
+ // Create an element and append it to the frame's body. Throws an exception unless exactly one element is created. (But that one element may contain children.)
+ add(html: string, nickname?: string): QElement;
+
+ // Provides access to descriptors for the frame's viewport (the part of the page that you can see in the frame, not including scrollbars)
+ viewport(): QElement;
+
+ // Provides access to descriptors for the frame's page (everything you can see or scroll to, not including scrollbars)
+ page(): QElement;
+
+ // Retrieves the frame's body element.
+ body(): QElement;
+
+ // Changes the size of the frame.
+ resize(width: number, height: number): void;
+
+ // Scroll the page so that top-left corner of the frame is as close as possible to an (x, y) coordinate.
+ scroll(x: number, y: number): void;
+
+ // Determine the (x, y) coordinate of the top-left corner of the frame. This uses pageXOffset and pageYOffset under the covers. (On IE 8, it uses scrollLeft and scrollTop.)
+ getRawScrollPosition(x: number, y: number): Object;
+
+ // Retrieve the underlying HTMLIFrameElement DOM element for the frame.
+ toDomElement(): HTMLIFrameElement;
+}
+
+interface QElement {
+ // Compare the element's descriptors to a set of expected values and throw an exception if they don't match
+ assert(expected: ElementDescriptor, message?: string): void;
+
+ // Compare the element's descriptors to a set of expected values.
+ diff(expected: ElementDescriptor): string;
+
+ // Determine how the browser is actually rendering an element's style. This uses getComputedStyle() under the covers. (On IE 8, it uses currentStyle)
+ getRawStyle(property: string): string;
+
+ // Determine where an element is displayed within the frame viewport, as computed by the browser
+ getRawPosition(): RawPositionObject;
+
+ // Retrieve the underlying HTMLElement DOM element for the frame.
+ toDomElement(): HTMLElement;
+}
+
+interface QElementList {
+ // Determine the number of elements in the list.
+ length(): number;
+
+ // Retrieve an element from the list. Positive and negative indices are allowed. Throws an exception if the index is out of bounds.
+ at(index: number, nickname?: string): QElement;
+}
+
+// Element positions and sizes are available on all QElement instances.
+interface ElementDescriptor {
+ // The top edge of the element
+ top: PositionDescriptor;
+
+ // The right edge of the element
+ right: PositionDescriptor;
+
+ // The bottom edge of the element
+ bottom: PositionDescriptor;
+
+ // The left edge of the element
+ left: PositionDescriptor;
+
+ // Horizontal center: midway between the right and left edges.
+ center: PositionDescriptor;
+
+ // Vertical middle: midway between the top and bottom edges.
+ middle: PositionDescriptor;
+
+ // Width of the element.
+ width: SizeDescriptor;
+
+ // Height of the element.
+ height: SizeDescriptor;
+}
+
+// Viewport positions and sizes are available on QFrame.viewport()
+interface ViewportDescriptor {
+ // The highest visible part of the page.
+ top: PositionDescriptor;
+
+ // The rightmost visible part of the page.
+ right: PositionDescriptor;
+
+ // The lowest visible part of the page.
+ bottom: PositionDescriptor;
+
+ // The leftmost visible part of the page.
+ left: PositionDescriptor;
+
+ // Horizontal center: midway between right and left
+ center: PositionDescriptor;
+
+ // Vertical middle: midway between top and bottom.
+ middle: PositionDescriptor;
+
+ // Width of the viewport.
+ width: SizeDescriptor;
+
+ // Height of the viewport.
+ height: SizeDescriptor;
+}
+
+// Page positions and sizes are available on QFrame.page().
+interface PageDescriptor {
+ // The top of the page.
+ top: PositionDescriptor;
+
+ // The right side of the page.
+ right: PositionDescriptor;
+
+ // The bottom of the page.
+ bottom: PositionDescriptor;
+
+ // The left side of the page.
+ left: PositionDescriptor;
+
+ // Horizontal center: midway between right and left.
+ center: PositionDescriptor;
+
+ // Vertical middle: midway between top and bottom.
+ middle: PositionDescriptor;
+
+ // Width of the page.
+ width: SizeDescriptor;
+
+ // Height of the page.
+ height: SizeDescriptor;
+}
+
+// Position descriptors represent an X or Y coordinate. The top-left corner of the page is (0, 0) and the values increase downward and to the right.
+interface PositionDescriptor {
+ // Create a new descriptor that is further down the page or to the right.
+ plus(amount: SizeDescriptor): PositionDescriptor;
+
+ // Create a new descriptor that is further down the page or to the right.
+ plus(amount: number): PositionDescriptor;
+
+ // Create a new descriptor that is further down the page or to the right.
+ minus(amount: SizeDescriptor): PositionDescriptor;
+
+ // Create a new descriptor that is further down the page or to the right.
+ minus(amount: number): PositionDescriptor;
+}
+
+// Size descriptors represent width or height.
+interface SizeDescriptor {
+ // Create a descriptor that's bigger than this one.
+ plus(amount: SizeDescriptor): SizeDescriptor;
+
+ // Create a descriptor that's bigger than this one.
+ plus(amount: number): SizeDescriptor;
+
+ // Create a descriptor that's smaller than this one.
+ minus(amount: SizeDescriptor): SizeDescriptor;
+
+ // Create a descriptor that's smaller than this one.
+ minus(amount: number): SizeDescriptor;
+
+ // Create a new descriptor that's a multiple or fraction of the size of this one.
+ times(multiple: number): SizeDescriptor;
+}
+
+interface QuixoteFrameOptions {
+ // Width of the iframe. Defaults to a large value (see stability note below)
+ width?: number;
+
+ // Height of the iframe. Defaults to a large value (see stability note below)
+ height?: number;
+
+ // URL of an HTML document to load into the frame. Must be served from same domain as the enclosing test document, or you could get same-origin policy errors. Defaults to an empty document with (to enable standards-mode rendering)
+ src?: string;
+
+ // URL of a CSS stylesheet to load into the frame. Defaults to loading nothing
+ stylesheet?: string;
+}
+
+interface RawPositionObject {
+ // top edge
+ top: number;
+
+ // right edge
+ right: number;
+
+ // bottom edge
+ bottom: number;
+
+ // left edge
+ left: number;
+
+ // width (right edge minus left edge)
+ width: number;
+
+ // height (bottom edge minus top edge)
+ height: number;
+}
+
+declare var quixote: Quixote;
+
+declare module "quixote" {
+
+ class Quixote {
+ constructor();
+
+ createFrame(options: QuixoteFrameOptions, callback: (err: Error, loadedFrame: QFrame) => void): QFrame;
+ }
+
+ export = Quixote;
+}
\ No newline at end of file