/*
 * Copyright 2009 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
 
/* Tests swapping background positions */
.selector1 {
  background-position-x: 60%;
}

.selector2 {
  background-position-x: right;
}

.selector3 {
  background-position-x: left;
}

.selector4 {
  background-position: 60% 40%;
}

.selector5 {
  background-position: right top;
}

.selector6 {
  background-position: top left;
}

.selector7 {
  background: url("chess.png") gray 60% repeat fixed;
}

/* Reported NPE bug */
.selector8 {
    background-position: 0 0;
}

/* Tests below here should be unchanged */

.selector10 {
  background-position-x: auto;
}

.selector11 {
  background-position-x: center;
}

.selector12 {
  background-position-y: 0;
}

.selector13 {
  background-position: 10px 40%;
}

.selector14 {
  background: url("chess.png") gray left 40% repeat fixed;
}

/* This probably isn't valid, but try it anyway */
.selector15 {
  background: url("chess.png") gray center 40% left repeat fixed;
}

